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

Работающий алгоритм выгрузки из 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 = Неопределено;

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

9 Comments

  1. EliasShy

    Судя по всему — вы открыли для себя Recordset и работу с Jet соединением, что в принципе, само по себе не несет ценности сообществу.

    Вот если бы описали бы и выложили прокси-модуль, которому скармливаешь таблицу значений, например, и он отрабатывает — была бы польза.

    А по теме — довольно странно, что базу вы создаете новую программно. По-идее, база должна сначала разрабатываться, со своей структурой — смысл Access — интеграция с офисными приложениями, формы, репорты — этого нет. Хотя, может такая задача — просто странно.

    Reply
  2. dimens

    У меня была конкретная задача: сделать отчет и выгрузить его в файл ASSECC по заранее определенной структуре (2 таблицы и определенное количество и названия столбцов). Порылся на этом сайте, решения не нашел. Сделал свое. Я описал лишь свой опыт не претендуя на новизну (это не научная статья). Другому программисту 1С при выполнении схожей задачи будет проще. Хорошо тогда как под 1С создать по вашему файл Assecc?

    Reply
  3. EliasShy

    (2) Добрый день.

    Если у Вас заранее определенная структура файла базы — то зачем его каждый раз создавать. Сделали шаблон, скопировали, заполнили.

    Reply
  4. dimens

    Добрый день! У меня пользователь сам выбирает куда ему сохранять файл с отчетом + имя этого файла приходиться генерить.

    Reply
  5. EliasShy

    (4) ну имя файла — просто строка! Сохранить заготовленный шаблон с новым именем.

    Reply
  6. ser6702

    полезно — книгу же Михайлова где сейчас найти 😉

    Reply
  7. dimens

    Книга здесь

    Reply
  8. dimens

    EliasShy, конечно можно использовать «заготовку файла Assecc» нужной структуры, как вариант сохранять его в двоичные данные или active document, но это тема отдельной статьи.

    Reply
  9. EliasShy

    (8) Ну на счет отдельной статьи — надеюсь Вы пошутили.

    Было бы интересно, если бы сделали наподобие прокси-класса для работы с базами Access. Однако практическая ценность дальше «интересно» вряд-ли распространится.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *