gifts2017

Алгоритм выгрузки из 1С в Access

Опубликовал Нет Нет (dimens) в раздел Программирование - Практика программирования

Работающий алгоритм выгрузки из 1С в Access. Понадобилось выгрузить отчет в ACCESS, пришлось разбираться.

Пришлось перекопать множество материалов пока не наткнулся на книгу А. Михайлова "1C: Предприятие 7.7/8.0: системное программирование. Данный код можно использовать в отчетах для их выгрузки в файл ACCESS.

//Создаем файл Access

dbe = Новый COMОбъект("DAO.DBEngine.36");

wksp = dbe.Workspaces(0);

db = 0;

Имя = "С:\Темр";

ИмяФайла = "File";

Путь = Имя + "\"+ИмяФайла+".mdb";

db = wksp.CreateDataBase(Путь,";LANGID=0x0419;CP=1251;COUNTRY=0");

wksp.Close();

dbe = Неопределено;

СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Путь;

// Создание таблицы

// Начальная инициализация

Catalog = Новый COMОбъект("ADOX.Catalog");

Catalog.ActiveConnection = СтрокаПодключения;

// Создание новой таблицы

Table = Новый COMОбъект("ADOX.Table");

// Имя таблицы

Table.Name = "DistrSalesReport";

// Создание новой колонки

// Допустимые типы

// adDouble = 5 Значение с плавающей точкой двойной точности

// adDAte = 7 Дата

// adCurrency = 6 Денежная сумма

// adBoolean = 11 Булево  

// adVarWChar = 202 Символьная строка Unicode, заканчивающаяся NULL

// adLongVarWChar = 203 Длинное строковое значение

Column = Новый COMОбъект("ADOX.Column");

// Имя колонки

Column.Name = "IdRow";

Column.Type = 5; // Число

// Присоединение колонки к таблице

Table.Columns.Append(Column);

Column = Новый COMОбъект("ADOX.Column");

// Имя колонки

Column.Name = "PRRDistribCode";

Column.Type = 202; // Строка

// Присоединение колонки к таблице

Table.Columns.Append(Column);

// Присоединение созданной таблицы (листа)

Catalog.Tables.Append(Table);

СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Путь + ";""";

Connection = Новый COMОбъект("ADODB.Connection");

Попытка

      Connection.Open(СтрокаПодключения);

Исключение

      Сообщить(ОписаниеОшибки());

      Возврат;

КонецПопытки;

Запись = Новый COMОбъект("ADODB.RecordSet");

ТекстЗапроса = "SELECT * FROM DistrSalesReport";

Запись.Open(ТекстЗапроса, Connection, 1, 3);

Indy = 0;

//Здесь ваш запрос или тз для выгрузки

//Бежим по выборке запроса 1С

Пока Выборка.Следующий() Цикл

   Indy = Indy + 1;

   // Добавление новой записи в колонки

   Запись.AddNew();

   Запись.Fields(0).Value = Indy;

   Запись.Fields(1).Value = "Какая то строка";

   Запись.UpDate();

КонецЦикла;

// Закрываем соединение

Connection.Close();

Connection = Неопределено;

//проверяем файл

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Василий Борисов (EliasShy) 01.11.13 06:18
Судя по всему - вы открыли для себя Recordset и работу с Jet соединением, что в принципе, само по себе не несет ценности сообществу.
Вот если бы описали бы и выложили прокси-модуль, которому скармливаешь таблицу значений, например, и он отрабатывает - была бы польза.
А по теме - довольно странно, что базу вы создаете новую программно. По-идее, база должна сначала разрабатываться, со своей структурой - смысл Access - интеграция с офисными приложениями, формы, репорты - этого нет. Хотя, может такая задача - просто странно.



2. Нет Нет (dimens) 01.11.13 09:38
У меня была конкретная задача: сделать отчет и выгрузить его в файл ASSECC по заранее определенной структуре (2 таблицы и определенное количество и названия столбцов). Порылся на этом сайте, решения не нашел. Сделал свое. Я описал лишь свой опыт не претендуя на новизну (это не научная статья). Другому программисту 1С при выполнении схожей задачи будет проще. Хорошо тогда как под 1С создать по вашему файл Assecc?
3. Василий Борисов (EliasShy) 05.11.13 12:07
(2) dimens, Добрый день.
Если у Вас заранее определенная структура файла базы - то зачем его каждый раз создавать. Сделали шаблон, скопировали, заполнили.
4. Нет Нет (dimens) 05.11.13 23:35
Добрый день! У меня пользователь сам выбирает куда ему сохранять файл с отчетом + имя этого файла приходиться генерить.
5. Василий Борисов (EliasShy) 06.11.13 08:15
(4) dimens, ну имя файла - просто строка! Сохранить заготовленный шаблон с новым именем.
6. Sergey Boltach (ser6702) 06.11.13 10:29
полезно - книгу же Михайлова где сейчас найти ;-)
8. Нет Нет (dimens) 06.11.13 12:28
EliasShy, конечно можно использовать "заготовку файла Assecc" нужной структуры, как вариант сохранять его в двоичные данные или active document, но это тема отдельной статьи.
9. Василий Борисов (EliasShy) 06.11.13 12:36
(8) dimens, Ну на счет отдельной статьи - надеюсь Вы пошутили.
Было бы интересно, если бы сделали наподобие прокси-класса для работы с базами Access. Однако практическая ценность дальше "интересно" вряд-ли распространится.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа