среда, 3 июля 2019 г.

1C 8.3 + Excel (ADO)

&НаСервере
Функция ПолучитьДанныеПоДокументу(TableName)
// Получаем номенклатуру для выгрузки
Запрос = Новый Запрос("ВЫБРАТЬ
                      | ИнвентаризацияНоменклатура.Штрихкод КАК Штрихкод,
                      | ИнвентаризацияНоменклатура.Факт КАК Количество,
                      | ИнвентаризацияНоменклатура.Товар.Артикул КАК Артикул,
                      | ИнвентаризацияНоменклатура.Товар.ПолноеНаименование КАК ПолноеНаименование
                      |ИЗ
                      | Документ.Инвентаризация.Номенклатура КАК ИнвентаризацияНоменклатура
                      |ГДЕ
                      | ИнвентаризацияНоменклатура.Ссылка = &Ссылка");
Запрос.Параметры.Вставить("Ссылка", Объект.Ссылка);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Массив = Новый Массив;
// Заполняем таблицу данными выборки
Пока Выборка.Следующий() Цикл
        Массив.Добавить("INSERT INTO [" + TableName + "] VALUES ("""+Выборка.Штрихкод+""","""+Выборка.Количество+""","""+ Выборка.Артикул+""","""+Выборка.ПолноеНаименование+""")");
КонецЦикла;
Возврат Массив;
КонецФункции



&НаКлиенте
Процедура СохранитьВФайл(Команда)
ИмяФайлаЭксель = "D:\Export.xls"; // Имя создаваемого файла
Режим = РежимДиалогаВыбораФайла.Сохранение;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
Фильтр = "(Excel*.xls)|*.xls";
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = "Выберите файл";
Если ДиалогОткрытияФайла.Выбрать() Тогда
    МассивФайлов = ДиалогОткрытияФайла.ВыбранныеФайлы;
    Для Каждого ИмяФайла Из МассивФайлов Цикл
        //Файл = Новый Файл(ИмяФайла);
ИмяФайлаЭксель = ИмяФайла;
    КонецЦикла;
Иначе
    Предупреждение(НСтр("ru = 'Файл(ы) не выбран!'; en = 'File(s) not selected!'"));
КонецЕсли;

// Собираем строку подключения
СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0;
|Data Source="+ИмяФайлаЭксель+";
|Extended Properties=""Excel 8.0;HDR=No;"";";

// Создаем объект ADOX.Catalog
Catalog = Новый COMОбъект("ADOX.Catalog");
Catalog.ActiveConnection = СтрокаПодключения;

// Создаем таблицу и добавляем в неё два столбца
Table = Новый COMОбъект("ADOX.Table");
Table.Name = "Inventory";

Column = Новый COMОбъект("ADOX.Column");
Column.Name = "Barcode";
Column.Type = 202;
Table.Columns.Append(Column);

Table.Columns.Append("Fact");
Table.Columns.Append("Article");

Column = Новый COMОбъект("ADOX.Column");
Column.Name = "Description";
Column.Type = 202;
Table.Columns.Append(Column);

// Присоединяем таблицу
Для сч = 0 По Catalog.Tables.Count - 1 Цикл
Если Catalog.Tables.Item(сч).Name = Table.Name Тогда
Catalog.Tables.Delete(Table.Name);
Прервать;
КонецЕсли;
КонецЦикла;
Catalog.Tables.Append(Table);

// Создаем соединение
Connection = Новый COMОбъект("ADODB.Connection");
Connection.Open(СтрокаПодключения);
Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = Connection;
Command.CommandType = 1;

ТЗ = ПолучитьДанныеПоДокументу(Table.Name);
Для сч = 0 По ТЗ.Количество() - 1 Цикл
Command.CommandText = ТЗ[сч];
    Command.Execute();
КонецЦикла;

Table = Неопределено;
Catalog = Неопределено;

// Закрываем соединение
Command = Неопределено;
Connection.Close();
Connection = Неопределено;
КонецПроцедуры

Комментариев нет:

Отправить комментарий