1С Конвертация, использование внешнего источника данных.
В процессе работы возникла потребность перенести информационную базу из древней программы, написанной еще на foxpro, на платформу 1С 8.2
Решил воспользоваться конфигурацией «Конвертация данных» и возможностью подключения к внешнему источнику данных платформы 1С 8.2.
Сначала надо было получить доступ к информационной базе, состоящей из DBF-таблиц. Для этого я воспользовался возможностью подключения к внешним источникам данных платформы 1С 8.2.
Создал новый источник данных, обозвал его подходящим именем. На вкладке «Данные» нажал кнопку «Добавить». В открывшемся конструкторе выбрал вариант «Выбрать из списка таблиц внешнего источника данных».
Открывшаяся форма потребовала ввести строку соединения с источником данных. Для меня строки соединения как шаманские заклинания. Погуглив маленько, я нарыл несколько вариантов строк соединения. Мне подошла строка:
Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:\mydbpath;
Заменив в ней «Dbq=c:\mydbpath» на путь к моей локальной базе и нажав ОК, получил список таблиц:
Выбрал таблицу, к которой нужно подключиться и нажал ОК.
В результате во внешнем источнике данных сформировалась таблица KVART.
Для проверки возможности выборки информации из этой таблицы написал обработку Test01.
Модуль формы обработки:
&НаКлиенте
Процедура Загрузить(Команда)
ЗагрузитьНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьНаСервере()
ПараметрыСоединения = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
ПараметрыСоединения.СтрокаСоединения="Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=d:\79;";
ВнешниеИсточникиДанных.KV.УстановитьОбщиеПараметрыСоединения(ПараметрыСоединения);
ВнешниеИсточникиДанных.KV.УстановитьСоединение();
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| KVART.KOD,
| KVART.FIO,
| KVART.SEMJA,
| KVART.POLPLO,
| KVART.LLIFT,
| KVART.LZNAL
|ИЗ
| ВнешнийИсточникДанных.KV.Таблица.KVART КАК KVART";
тз = Запрос.Выполнить().Выгрузить();
КонецПроцедуры
С помощью отладчика можно просмотреть содержимое таблицы значений:
Все ОК. Информация присутствует.
На втором этапе необходимо загрузить информацию из внешней таблицы в соответствующий объект конфигурации.
Для этого использую конфигурацию «Конвертация данных».
В качестве источника и приемника данных будет использоваться одна конфигурация.
Для начала создадим справочник, в который будем загружать информацию. Назовем его «ЛицевыеСчета».
С помощью соответствующей обработки конфигурации «Конвертация данных» выгрузим структуру метаданных нашей конфигурации. Зарегистрируем нашу конфигурацию в списке конфигураций. Далее необходимо настроить правила обмена. Для реализации механизма выгрузки информации из внешнего источника создадим «правило выгрузки данных».
В событии «Перед обработкой» разместим запрос к внешнему источнику данных и обработаем результат.
Текст обработчика:
ПараметрыСоединения = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
ПараметрыСоединения.СтрокаСоединения="Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=d:\79;";
ВнешниеИсточникиДанных.KV.УстановитьОбщиеПараметрыСоединения(ПараметрыСоединения);
ВнешниеИсточникиДанных.KV.УстановитьСоединение();
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| KVART.KOD КАК КОД,
| KVART.FIO КАК ФИО,
| KVART.SEMJA КАК СЕМЬЯ,
| KVART.POLPLO КАК ПЛОЩАДЬОБЩАЯ
|ИЗ
| ВнешнийИсточникДанных.KV.Таблица.KVART КАК KVART";
Результат = Запрос.Выполнить();
Строки = Результат.Выгрузить();
Для Каждого строка из Строки Цикл
ИсходящиеДанные = Новый Структура("КОД,ФИО,СЕМЬЯ,ПЛОЩАДЬОБЩАЯ");
ИсходящиеДанные.КОД = Строка.КОД;
ИсходящиеДанные.ФИО = Строка.ФИО;
ИсходящиеДанные.СЕМЬЯ = Строка.СЕМЬЯ;
ИсходящиеДанные.ПЛОЩАДЬОБЩАЯ = Строка.ПЛОЩАДЬОБЩАЯ;
ВыгрузитьПоПравилу(,,ИсходящиеДанные,,"ЛицевыеСчета");
КонецЦикла;
Создадим «Правило конвертации объектов» для справочника «Лицевые счета».
Реквизит «Источник» не заполняем. Правила конвертации свойств будут выглядеть следующим образом:
Сохраняем правила и выгружаем информацию. В результате формируется файл Данные.XML с таким содержимым:
С помощью обработки загрузки данных загружаем информацию в приемник:
Задача выполнена.