1С Конвертация, использование внешнего источника данных

26.09.12

Интеграция - Внешние источники данных

Загрузка информации в базу данных платформы 1С 8.2 из внешних источников с помощью "Конвертации данных"

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 с таким содержимым:

 

 С помощью обработки загрузки данных загружаем информацию в приемник:

 

 

Задача выполнена.

См. также

Внешние источники данных Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

28500 руб.

15.11.2022    20631    20    49    

38

Поиск данных Внешние источники данных Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Если вам нужно автоматически генерировать представления (view) к вашей базе данных 1С (есть две версии - для СУБД MS SQL Server и для PostgreSQL) по структуре метаданных 1С, то вам необходима данная обработка. Наш "Генератор View", другими словами - это коннектор к данным 1С для Power BI - незаменимый помощник для бизнес-аналитиков, работающих с базами 1С из Yandex Datalens/Power BI и т.д. Работает для обычных и управляемых форм под 1С 8.3

230000 руб.

31.07.2020    13733    13    48    

25

Внешние источники данных Зарплата Бюджетный учет Программист Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 7.хх учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

48000 руб.

24.04.2017    51022    100    165    

89

Зарплата Внешние источники данных Бюджетный учет Перенос данных 1C Системный администратор Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    25027    23    1    

25

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    10771    12    8    

14

Производство готовой продукции (работ, услуг) Внешние источники данных Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

Обработка предназначена для загрузки файлов, выгруженных из системы Базис-мебельщик, в справочник 1С "Спецификации" для последующих процессов учета и диспетчирования полуфабрикатов и изделий.

10200 руб.

24.06.2021    20691    57    53    

35
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. yandextesting 148 26.09.12 14:47 Сейчас в теме
Чего-то я не понял: на кой в данном случае вообще используется конвертация данных, если мы все равно все в коде ручками прописываем? Куда интересней и универсальней, на мой взляд, реализация отсюда - "Загрузка информации из внешних данных с помощью конфигурации "Конвертация данных" "
daho; maXon777; +2 Ответить
3. comol 5107 02.10.12 08:58 Сейчас в теме
(1) там модификация КД, которая уже не актуальна ввиду развития самой КД. Здесь просто описание решения конкретной задачи штатными средствами.
2. comol 5107 02.10.12 08:57 Сейчас в теме
Хорошая идея. Вроде и просто а не всегда в голову придёт.
4. vahate 04.10.12 12:26 Сейчас в теме
очень интересует обработка для перехода (переноса) с Розница 1.0 для Украины (от российской почти ничем не отдичается) на Розница 2.0 для России.
5. klel 11.10.12 07:36 Сейчас в теме
хорошая статейка в особенности внешние источники данных
6. higs 11.10.12 10:23 Сейчас в теме
Довольно своеобразный подход к Конвертации данных, однако, имеет право на жизнь. Спасибо за альтернативную точку зрения!
7. Трактор 1254 11.10.12 10:23 Сейчас в теме
Это статья конкурса http://mg.spec8.ru/2012/10/06/competition-july2012/ На мой взгляд самая толковая статья из всех статей конкурса. Плюс от меня достался только двум статьям. Этой и про УРИБ
8. zipik 11.10.12 12:42 Сейчас в теме
9. pt_olga 61 11.10.12 17:27 Сейчас в теме
я бы конечно таким путем не пошла, т.к. к DBF таблицам можно обращаться и напрямую без бубна конвертации, автор использует достаточно креативный подход, за что ему плюс :)
PLAstic; mihan; +2 Ответить
10. Gawws 11.10.12 20:23 Сейчас в теме
Плюс здесь в том, что создаются с помощью КД правила конвертации данных. А для переноса используется универсальная загрузка данных из xml. Хорошая статья.
11. Kamikadze 46 11.10.12 21:48 Сейчас в теме
Плюс за идею однознчно
12. and_r 12.10.12 05:38 Сейчас в теме
Спасибо за статью, вроде все не сложно, но когда впервые сталкиваешься, убивается много времени, благодаря автору шишек набъется меньше :-)
13. EvgeniuXP 12.10.12 20:17 Сейчас в теме
Если честно, ничего не понял, где связь между внешними источниками и конвертацией даннных.... такое ощущение, что автор показал как подключаться через внешние источники и отдельно как перенести данные.... только откуда из дбф напрямую?... но в качестве источника ничего не указано...
14. EvgeniuXP 12.10.12 20:19 Сейчас в теме
всё, отбой, не доглядел :-\
15. Йожкин Кот 1008 17.10.12 17:16 Сейчас в теме
Я в своей разработке использую прослойку с виде подключаемой обработки, в которой реализованы методы подключения к внешним источникам и получения данных этих источников в виде ТЗ. Пользуюсь еще со времен 8.1, где объекта "Внешние источники данных" нет. Идею подсмотрел где-то на партнерском форуме.
Событие перед обработкой получается примерно похожее:
ОбработкаРаботаСВнешнимиДанными = ДопОбработки.РаботаСВнешнимиДанными;

ОбработкаРаботаСВнешнимиДанными.ТекстЗапроса =
"
|SELECT
|posts.code,
|posts.name
|
|FROM [posts] as posts
|";

Если ОбработкаРаботаСВнешнимиДанными.ВыполнитьЗапрос() Тогда

ВходящиеДанные = Новый Структура;

Таблица = ОбработкаРаботаСВнешнимиДанными.Таблица.Скопировать();

Для каждого СтрокаТаблицы Из Таблица Цикл

ВходящиеДанные.Очистить();
ВходящиеДанные.Вставить("Код", СокрЛП(СтрокаТаблицы.code));
ВходящиеДанные.Вставить("Наименование", СокрЛП(СтрокаТаблицы.name));

ВыгрузитьПоПравилу(,, ВходящиеДанные,, "ДолжностиОрганизаций");

КонецЦикла;

КонецЕсли;
daho; Новенький_2209; +2 Ответить
16. Новенький_2209 04.11.12 00:06 Сейчас в теме
(15) Йожкин Кот, хорошая идея! Надо будет попробовать.
17. daho 8 06.11.12 14:57 Сейчас в теме
Ставлю плюс, автору спасибо!
18. Franchiser 47 26.11.12 12:21 Сейчас в теме
Интересно, кто-нибудь проверял код работает? Обычно если источник пустой, нужно в любом случае указывать Значение= "1"; И еще КД запоминает выгруженные объекты и скорее всего нужно определять переменную "КлючВыгружаемыхданных", иначе может загрузиться, например, только 1 элемент.
24. daho 8 23.05.13 11:31 Сейчас в теме
(18) Franchiser, А если источник ТЗ или структура?
26. Franchiser 47 23.05.13 14:09 Сейчас в теме
(24) Что значит источник ТЗ или структура. Если из тз или из структуры требуется вытащить некое значение то нужно определять переменную КлючВыгружаемыхданных, т.к. это в другой объект тоже может быть передана эта же тз или структура и получится что проставится не то значение. Если же говорить о структуре ВходящиеДанные или ТЗ Выборка Данных тогда мы работаем уже не с самой ТЗ а со строкой ТЗ, не с самой структурой а значением из структуры, поэтому тут все хорошо.
19. SergeMalikov 572 27.11.12 15:24 Сейчас в теме
Работает. В screenshot-ах результаты работы на реальных данных.
20. Olga12 170 12.12.12 12:14 Сейчас в теме
Спасибо, было полезно познакомиться с такой возможностью
21. AlexO 135 18.01.13 14:16 Сейчас в теме
Только на курсах обучают грузить DBF через КД.
Да, кому ничего не понятно - то ну очень интересное решение :)
25. daho 8 23.05.13 11:33 Сейчас в теме
(21) AlexO, dbf потихоньку умирает...
22. MaxS 2944 13.04.13 00:27 Сейчас в теме
Самому в голову приходило такая идея. Но некогда было её исследовать и тем более оформить как статью. ;) +
23. Spacer 363 01.05.13 23:25 Сейчас в теме
Что-то я попробовал подключиться через внешние источники данных к dbf файлам FoxPro,
используя вашу строку подключения: "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:\mydbpath;".
Вроде подключилось, таблицы видит, а поля этих таблиц - нет.
И про каждую таблицу пишет: "Необъектные данные". Не могу понять в чем дело...
27. MaxS 2944 13.09.13 07:22 Сейчас в теме
Если в КД программно выбираются данные, зачем промежуточное звено в виде 1С и внешнего источника данных? Причем в примере выше, DBF выгружается в ТЗ.

С таким же успехом можно было в ПВД бы сделать так:

ДБФ = Новый XBase(ПолноеИмя,ИмяФайлаИндекса,Истина);

ДБФ.Первая();
  Пока НЕ ДБФ.ВКонце() Цикл
  ИсходящиеДанные = Новый Структура("КОД,ФИО,СЕМЬЯ,ПЛОЩАДЬОБЩАЯ");
  ИсходящиеДанные.КОД = ДБФ.ПолучитьЗначениеПоля("КОД");
  //...
  ВыгрузитьПоПравилу(,,ИсходящиеДанные,,"ЛицевыеСчета");
КонецЦикла;
Показать


В этом варианте если dbf файл огромный, мы читаем его последовательно, а не выгружаем целиком в таблицу значений.

Задача усложняется, если в dbf хранится например строковое поле УИД (ссылка на справочник), ссылающееся на другой dbf (справочник).
В КД нужно будет создать ПКО для заполнения реквизита, в этом случае ПВД не сработает, а данные из dbf получить как-то нужно. Т.е. читать dbf нужно в ПКО или ещё раньше...
28. Dragga 17.02.14 01:22 Сейчас в теме
Молодец, хорошая реализация. Как пример к использованию
29. ураниум 7 11.07.16 18:12 Сейчас в теме
как строку перенести в перечисление, справочник?
Оставьте свое сообщение