1C Работа с COM-объектами

Mar 27, 2012 22:30

Как из одной базы 1С:Предприятие 8.0 перенести остатки товаров в другую базу, используя COM-соединение.

Запрос = Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | ОстаткиТоваровОрганизацийОстатки.Организация КАК Организация, | ОстаткиТоваровОрганизацийОстатки.Номенклатура, | ОстаткиТоваровОрганизацийОстатки.ГТДОрганизации, | ОстаткиТоваровОрганизацийОстатки.СтранаПроисхождения, | ОстаткиТоваровОрганизацийОстатки.Комиссионер, | ОстаткиТоваровОрганизацийОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ОстаткиТоваровОрганизаций.Остатки(&ДатаПереноса, ) | КАК ОстаткиТоваровОрганизацийОстатки |ИТОГИ ПО | Организация"; Запрос.УстановитьПараметр("ДатаПереноса", ДатаПереноса); V8 = Новый COMОбъект("V8.ComConnector"); Попытка Открытие = V8.Connect("File=""" + Путь + """;Usr=""Usr1"";"); Исключение Предупреждение("База данных не открыта!!!"); Возврат; КонецПопытки; Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); МенеджерДокумента = Открытие.Документы.ОприходованиеТоваров; МенеджерНоменклатуры = Открытие.Справочники.Номенклатура; МенеджерОрганизаций = Открытие.Справочники.Организации; // Менеджеры остальных справочников: Пока Выборка.Следующий() Цикл Документ = МенеджерДокумента.СоздатьДокумент(); Код = Выборка.Организация.Код; Организация = МенеджерОрганизаций.НайтиПоКоду(Код); Если Организация.Пустая() Тогда Организация = МенеджерОрганизаций.СоздатьЭлемент(); Организация.Код = Код; // Остальные реквизиты: Организация.Записать(); КонецЕсли; // Обработка остальных реквизитов, справочников: ВыборкаПодчиненная = Выборка.Выбрать(); Пока ВыборкаПодчиненная.Следующий() Цикл // Поиск/перенос данных справочников // заполнение табличной части документа КонецЦикла; Документ.Записать(РежимЗаписиДокумента.Проведение); КонецЦикла; Пример обращения к программе 1С:Предприятие 8.0 из модуля MS Excel через COM-соединение

Sub load() Dim cntr As Object Dim trade As Object Dim Элемент As Object Dim СправочникКонтрагентов As Object Dim ГруппаКонтрагентов As Object Set cntr = CreateObject("V8.COMConnector") Set trade = cntr.Connect("File=""C:\DemoTrd4"";Usr=""Федоров (администратор)"";") Set СправочникКонтрагентов = trade.Справочники.Контрагенты Set ГруппаКонтрагентов = СправочникКонтрагентов.СоздатьГруппу() ГруппаКонтрагентов.Наименование = "***** Экспорт из Excel ******" ГруппаКонтрагентов.Записать N = 11 'Количество строк в списке поставщиков For Count = 3 To N Set Элемент = СправочникКонтрагентов.СоздатьЭлемент() Элемент.Код = Application.Cells(Count, 1).Value Элемент.Наименование = Application.Cells(Count, 2).Value Элемент.ИНН = Application.Cells(Count, 3).Value Элемент.НаименованиеПолное = Application.Cells(Count, 4).Value Элемент.Родитель = ГруппаКонтрагентов.Ссылка Элемент.Записать Next Count End Sub Как организовать считывание данных из файлов *.xls?

Док = ПолучитьCOMОбъект(Путь + "ценыконкурентов.xls"); КоличествоСтраниц = 2; Для ТекНомер = 1 По КоличествоСтраниц Цикл Контрагент = Док.Sheets(ТекНомер).Cells(1,1).Value; Товар = Док.Sheets(ТекНомер).Cells(2,2).Value; Цена = Док.Sheets(ТекНомер).Cells(2,3).Value; счСтроки = 3; Сообщить(Строка(Товар) + "-" + Строка(Цена)); // можно использовать другой признак окончания данных на листе Пока СокрЛП(Товар) <> "" Цикл Товар = Док.Sheets(ТекНомер).Cells(СчСтроки,2).Value; Цена = Док.Sheets(ТекНомер).Cells(СчСтроки,3).Value; Сообщить(Строка(Товар) + "-" + Строка(Цена)); счСтроки = счСтроки + 1; КонецЦикла; КонецЦикла; Док.Application.Quit(); Как запустить макрос, записанный в книге Microsoft Excel?

Попытка // Создать объект. Excel = Новый COMОбъект("Excel.Application"); Исключение Сообщить("Не удалось инициализировать Excel"); Возврат; КонецПопытки; Попытка // В реальном примере путь может быть совершенно другим. Excel.Workbooks.Open("c:\doc.xls"); // Запустить макрос с именем "Оформление". Excel.Run("Оформление"); Excel.Visible = Истина; Исключение // Если произойдет ошибка выводятся данные об ошибке и объект закрывается. Сообщить(ОписаниеОшибки()); Excel.Quit(); КонецПопытки; Как создать документ программы Microsoft Excel по оформлению, приведенному в другом документе?

Попытка // Создать объект. Excel = Новый COMОбъект("Excel.Application"); Исключение Сообщить("Не удалось инициализировать Excel"); Возврат; КонецПопытки; Попытка // Если при отработке следующего фрагмента кода произойдет ошибка // объект "Excel.Application" будет закрыт. // Открыть книгу, содержащую шаблон оформления. Excel.Workbooks.Open("c:\doc.xls"); НомерКниги = Excel.Workbooks.Count; Книга = Excel.Workbooks.Item(НомерКниги); Лист = Excel.ActiveSheet; // Создать новую книгу (в нее будем записывать данные). Excel.Application.Workbooks.Add(1); НомерКниги = Excel.Workbooks.Count; КнигаНовая = Excel.Workbooks.Item(НомерКниги); ЛистНовый = Excel.ActiveSheet; // Установить ширину колонки в новой книге. ЛистНовый.Columns("B").ColumnWidth = 40; // Копировать область из книги-шаблона в новую книгу. Лист.Range("Шапка").Copy(ЛистНовый.Range("A1:E3")); ЛистНовый.Cells(1, 1).Value = "Наименование контрагента"; // Считаем, что в нашем случае необходимо сформировать только // две строки табличной части Для НомерСтроки = 1 По 2 Цикл Лист.Range("Строка").Copy(ЛистНовый.Range(ЛистНовый.Cells(3 + НомерСтроки,1), ЛистНовый.Cells(3 + НомерСтроки, 5))); // Записать значение в ячейку листа новой таблицы // в реальном примере данные будут браться из информационной базы ЛистНовый.Cells(3 + НомерСтроки, 1).Value = НомерСтроки; ЛистНовый.Cells(3 + НомерСтроки, 2).Value = "Наименование номенклатурной позиции " + Строка(НомерСтроки); ЛистНовый.Cells(3 + НомерСтроки, 3).Value = НомерСтроки; ЛистНовый.Cells(3 + НомерСтроки, 4).Value = НомерСтроки; ЛистНовый.Cells(3 + НомерСтроки, 5).Value = НомерСтроки; КонецЦикла; Excel.Visible = Истина; Исключение Сообщить(ОписаниеОшибки()); Excel.Quit(); КонецПопытки; Как выгрузить прайс-лист в документ программы Microsoft Word?

Попытка MSWord = Новый COMОбъект("Word.Application"); Исключение Сообщить("Не удалось инициализировать Microsoft Word"); Возврат; КонецПопытки; Запрос = Новый Запрос; // Получить данные для формируемого прайс-листа. Запрос.Текст = "ВЫБРАТЬ | ЦеныКомпанииСрезПоследних.ЕдиницаИзмерения.Наименование КАК ЕдиницаИзмерения, | ЦеныКомпанииСрезПоследних.Цена, | ЦеныКомпанииСрезПоследних.Номенклатура.Наименование КАК Номенклатура, | 1 КАК Количество |ИЗ | РегистрСведений.ЦеныКомпании.СрезПоследних(&Дата, ТипЦен = &ТипЦен) | КАК ЦеныКомпанииСрезПоследних |УПОРЯДОЧИТЬ ПО | Номенклатура |ИТОГИ Количество(Количество) ПО | ОБЩИЕ"; Запрос.УстановитьПараметр("Дата", ТекущаяДата()); Запрос.УстановитьПараметр("ТипЦен", ТипЦен); Результат = Запрос.Выполнить(); Попытка // Создать новый документ MSWord.Documents.Add(); Документ = MSWord.ActiveDocument(); // Добавить новый параграф в созданный документ. Документ.Paragraphs.Add(); НомерПараграфа = Документ.Paragraphs.Count(); Параграф = Документ.Paragraphs.Item(НомерПараграфа); // В созданный параграф вставить новый "диапазон" // и разместить в нем текст "Прайс-Лист". Параграф.Range.InsertAfter("Прайс-Лист"); // Установить стиль параграфа "Заголовок 1" (он должен быть определен). Параграф.Range.Style="Заголовок 1"; Документ.Paragraphs.Add(); НомерПараграфа = Документ.Paragraphs.Count(); Параграф = Документ.Paragraphs.Item(НомерПараграфа); Параграф.Range.InsertAfter("Сформирован на дату: " + Строка(ТекущаяДата())); Параграф.Range.Style = "Обычный"; ВыборкаКоличества = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ВыборкаКоличества.Следующий(); КоличествоСтрок = ВыборкаКоличества.Количество; Документ.Paragraphs.Add(); НомерПараграфа = Документ.Paragraphs.Count(); Параграф=Документ.Paragraphs.Item(НомерПараграфа); // Вставить таблицу с количеством строк равным количеству записей // в выборке результата запроса и с тремя колонками Документ.Tables.Add(Параграф.Range, КоличествоСтрок, 3); // Получить таблицу как объект в отдельную переменную // учитывая тот факт, что таблица у нас единственная Таблица = Документ.Tables.Item(1); // Записать данные в ячейку таблицы строка №1, колонка №1 Таблица.Cell(1,1).Range().InsertAfter("Номенклатура"); // Установить цвет фона в ячейке Таблица.Cell(1,1).Shading.BackgroundPatternColor = 16776960; Таблица.Cell(1,2).Range().InsertAfter("Цена"); Таблица.Cell(1,2).Shading.BackgroundPatternColor = 16776960; Таблица.Cell(1,3).Range().InsertAfter("Ед.Изм."); Таблица.Cell(1,3).Shading.BackgroundPatternColor = 16776960; НомерСтроки = 1; Выборка = ВыборкаКоличества.Выбрать(); Пока Выборка.Следующий() Цикл НомерСтроки = НомерСтроки + 1; Таблица.Cell(НомерСтроки,1).Range().InsertAfter(Выборка.Номенклатура); Таблица.Cell(НомерСтроки,2).Range().InsertAfter(Строка(Выборка.Цена)); Таблица.Cell(НомерСтроки,3).Range().InsertAfter(Выборка.ЕдиницаИзмерения); КонецЦикла; MSWord.Visible = Истина; MSWord.Activate(); Исключение // Если произойдет ошибка выводятся данные об ошибке и объект закрывается. Сообщить(ОписаниеОшибки()); MSWord.Application.Quit(); КонецПопытки; Как выполнить запрос к произвольной базе данных SQL?

стрПодключения = "Driver={SQL Server};" стрПодключения = стрПодключения + ИмяСервера + ";"; стрПодключения = стрПодключения +"Uid=" + ИмяПользователя + ";"; стрПодключения = стрПодключения + "Pwd=" + Пароль + ";"; стрПодключения = стрПодключения + "DataBase =" + ИмяБазы + ";"; стрПодключения = стрПодключения + "Pwd=" + Пароль + ";"; Connection = Новый COMОбъект("ADODB.Connection"); Connection.OpenServer = стрПодключения; RS = Новый COMОбъект("ADODB.Recordset"); // Запрос к базе на языке SQL запросов. RS.Open("Select * from TradeUnit", Connection); Пока RS.EOF() = 0 Цикл // Можно обращаться и обрабатывать значения полей выборки. ИД = RS.Fields("ID").Value; Код = RS.Fields("Code").Value; // Обработка других полей RS.MoveNext(); КонецЦикла; RS.Close(); Connection.Close();

, 1c

Previous post Next post
Up