Справочные материалы по 1С
Работа с COM-объектами в 1С 8.x
Как из одной базы 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();