Справочные материалы по 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();           



Задайте вопрос программисту 1С о COM

+7 901 312 83 57