хуй

antipodarok


Антиподарок

аренда подъемников


Previous Entry Share Next Entry
1C Работа с COM-объектами
хуй
antipodarok

Как из одной базы 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();
Tags: ,

?

Log in

No account? Create an account