1С: Конвертация данных 2. Разработка с "нуля" на простых примерах разработки








































1. Вступление
2. Что понадобится: конфигурация 1С: Конвертация данных 2. и обработки из пакета. Для примера задач возьмем конфигурации 1С: Управление торговлей 11 и 1С: БП 3.*.
3. Нам понадобятся Обработки для выгрузки структуры метаданных и обмена.
4. Выгрузка структуры метаданных конфигурации 1С: Управление торговлей 11.3 и 1С: Бухгалтерия предприятия 3.0.*
5. Загрузка структур метаданных конфигураций в базу конвертации.
6. Создание правил конвертации в 1С на конкретном примере задачи.
7. Подводим итоги: Выгрузка и загрузка данных с помощью разработанных правил обмена данными.

1. Вступление.

В этой статье хотелось бы минимально затронуть теорию или не трогать вообще. И в отличие от других ресурсов, показать на простых жизненных примерах разработку правил конвертации объектов. Хочется поделиться какими-то стандартными механизмами, зная которые, можно выделить более «нужные», «правильные» и без «мусора» правила.

2. Что понадобится: конфигурация 1С: Конвертация данных 2.* и обработки из пакета. Для Примера задач возьмем конфигурации 1С: Управление торговлей 11 и 1С: БП 3.*.

Итак, для разработки правил выгрузки данных в 1С потребуется конфигурация 1С: Конвертация объектов 2, а также обработки, входящие в пакет.

Например, у нас уже развернута база конвертации и запущена.

 


 
Разработку правил обмена будем писать между конфигурацией 1С:  Управление торговлей 11 и 1С: Бухгалтерия предприятия 3 (правила обмена УТ / БУХ).
 

3. Нам понадобятся Обработки для выгрузки структуры метаданных и обмена.

Первое, что нужно получить для разработки – это файлы со структурой метаданных. Выполняется это с помощью обработок выгрузки структуры метаданных, входящих в пакет конвертации объектов.


 
Собственно, в распакованном каталоге конфигураций для конфигураций на управляемых формах нас интересует обработка MD83Exp.epf. Если выгрузку нужно сделать из конфигураций на обычных формах, тогда используется обработка MD82Exp.epf. Это если, например, нужно получить структуру из таких конфигураций, как 1С: УТ 10, 1С: Управление производственным предприятием 1.3, 1С: Комплексная автоматизация 1.1, 1С: Зуп 2.5 и так далее.

Далее уже для выгрузки-загрузки данных в 1С с помощью наших правил понадобится обработка «Универсальный обмен данными в формате XML» V8Exchan83.epf для конфигураций на управляемых формах таких как 1С: Управление торговлей 11.*, 1С БП 3, 1С: ERP 2.* и подобных. И соответственно V8Exchan83.epf — для конфигураций на обычных формах.
 

4. Выгрузка структуры метаданных конфигурации 1С: Управление торговлей 11.3 и 1С: Бухгалтерия предприятия 3.0.*

Начнем с выгрузки структуры метаданных из конфигурации 1С: Бухгалтерия предприятия 3.
Откроем обработку MD83Exp.epf

В форме обработки имеются дополнительные настройки, где мы можем включить или отключить параметр выгружать регистры и движения в 1С. Также есть выбор, где будет проходить выгрузка: на сервере 1С или «на клиенте.» Указываем название файла, куда выгрузится структура данных. Аналогичным образом делаем выгрузку структуры метаданных конфигурации Управление торговлей 11.

5. Загрузка структур метаданных конфигураций в базу конвертации.

Теперь необходимо загрузить конфигурацию в базу конвертаций. К данному пункту можно прийти и из списка конфигураций, и из списка конвертаций. Сделаем просто загрузку из рабочего стола:


 

В диалоговом окне загружаем структуру БП:
 

  И аналогично — структуру Управления торговлей.
 

  По окончании загрузки появится диалоговое окно, где можно указать удобное для вас наименование. 

 

  6. Создание правил конвертации в 1С на конкретном примере задачи.

Далее переходим в «Настройка правил объекта», где создаем новую настройку.
В диалоговом окне создания конвертации выбираем конфигурацию «источник» и конфигурацию «приемник» (которые ранее загрузили) и нажимаем ОК.
 

  Так как в этой статье планировал показать создание «с нуля» и «без мусора», напоминаю, что ничего автоматически не создаем. Никаких прототипов. 

 

В этом диалоговом окне ничего выполнять не будем, просто нажмем — «Закрыть».

Создадим правила для выгрузки не один документ в один, а один вид в другой, например, документ РеализацииТоваровУслуг из УТ 11 с необходимыми справочниками в документ ПоступлениеТоваровУслуг в БП 3.

Итак, создаем новое ПКО (правило конвертации объектов в 1С)
 

  Выбираем источник РеализацияТоваровУслуг и приемник ПоступлениеТоваровУслуг и нажимаем ОК.
При этом появится диалоговое окно, где опять отказываемся от автоматического создания ПКС (Правил конвертации свойств). Далее выберем только необходимые.
 

  А вот на предложение создать ПВД (правил выгрузки данных) отвечаем «Да». 
 

 

Создаются ПВД, которые и будут отражаться в обработке универсального обмена XML для выбора:

Создадутся так же правила конвертации данных с пустыми правилами конвертации свойств. 
 

Причем видно, что ПКО по умолчанию предлагается искать по внутреннему идентификатору объекта. На это указывает лупа возле ПКО. Мы же будем делать свой поиск, и сделаем его по номеру документа и дате на начало дня.

Снимаем поиск по УИО: 
 

  Теперь начнем сопоставление необходимых свойств (реквизитов) объекта. Для этого жмем «СинхронизацияСвойств»  (метка «1» на скрине). Убираем рекурсивное создание правил («2»). Снимаем все отмеченные реквизиты ("3"). И выберем самостоятельно, что нам нужно.
 

Для примера выбираем необходимое:
 

Обращаю внимание на то, что мы сделаем ПКС контрагента в организацию, а организацию в контрагента, и еще сопоставим некоторые реквизиты, которые не совпадают по имени, например, «Валюта» и «Валюта документа».
 

Далее жмем ОК и получаем подобное:
 

  Где видим, что еще нет правил конвертации.

Начнем по реквизитам проходить и описывать. Сначала настраиваем поиск документа так, как писал ранее, делаем выгрузку и поиск документа на начало даты, и сделаем подмену нумерации. Первые три символа будем подменять на свой префикс «УТБ». А так как в БП и УТ нумерация по 11 символов, делаем составной номер: наш префикс и 8 символов от источника. Пример на скрине ниже.
 

  Выгрузку документов делаем всегда не проведенные и без движения. Предполагаем, что документы будут в приемнике проводиться после проверки пользователем.

Для этого ПКС установив, как не проведен, 0 или 1, используем как булево.
 

  На примере валюты создаем для ПКС правило конвертации объекта. При этом считаем, что в обеих базах валюты имеются, и они должны синхронизироваться по коду. Поэтому в ПКО валют не будем создавать все ПКС, а только добавим Код для поиска. Т.е. от предложения создать ПКС для объекта – отказываемся.
 

  В ПКО документа для ПКС подставилось созданное Правило конвертации. А само правило по умолчанию предлагается по уникальному идентификатору. Исправляем, делаем поиск по коду и устанавливаем свойство, чтобы не создавать новый объект.

В итоге получаем вариант:
 

  Далее по аналогии создаем для остальных реквизитов ПКО и ПКС. Причем поиск организации по контрагенту и наоборот устанавливаем по ИНН. Примерно так это выглядит с минимальными реквизитами (можно добавлять при необходимости).
 

  Для ПКО Договоры контрагентов делаем поиск по ПКС Контрагент, наименование и владелец.
 

  Посмотрим, как указать в ПКС нужное значение в типе перечисления. Например, реквизит «ВидОперации». Тут можно использовать различные условия и подставлять значения. Например, нам нужно, чтобы «вид операции» выгружался всегда «Товары», в этом случае достаточно в «лоб» написать нужное значение строкой.
 

  Ниже показано, как установить без сложностей и в большинстве случаев ПКС для КратностьВзаиморасчетов, КурсВзаиморасчетов, Счета учета.


 
Для ПКО Номенклатура оставим поиск по внутреннему уникальному идентификатору. Но обращу внимание на то, как можно переопределить свою группу. Например, мы согласны, что будет выгружаться новая номенклатура из конфигурации 1С: Управление торговлей 11, но нужно, чтобы номенклатура собиралась в определенной группе «НашаГруппа».
 

  Для реализации данной задачи создаем ещё одно ПКО. Назовем его «НоменклатураРодитель», которое укажем в ПКС родителя в правиле конвертации.

Устанавливаем два поиска: по наименованию, где наименование жестко указываем нашей группы, и обязательное свойство признака «ЭтоГруппа» в истина.

 

  Поскольку мы приняли решение, что у нас вся номенклатура падает в нашу группу, то нет необходимости при выгрузке выгружать группы из УТ 11. Для этого в ПКО Номенклатура в обработчике событий «ПередВыгрузкой» поставим фильтр, что не нужно выгружать группы «Отказ = Источник.ЭтоГруппа;».
 

В ПВД (правила выгрузки данных) РеализацииТоваровУслуг, добавим фильтр, чтобы не выгружались помеченные на удаление документы. Для этого в ПВД в обработчиках событий «ПередВыгрузкой» пропишем фильтр «Отказ = Объект.ПометкаУдаления;».
  

  Сохраним разработанные правила в файл.
 

 

  7. Подводим итоги: Выгрузка и загрузка данных с помощью разработанных правил обмена данными.

 

Открываем в 1С:Управление торговлей 11 обработку «Универсальный обмен данными в формате XML» V8Exchan83.epf.
 

  Выгрузка прошла, теперь этой же обработкой делаем загрузку в 1С: Бухгалтерия предприятия 3.

 


  
Загрузка прошла. Проверяем, что как загрузилось. Итак, документ загружен, как мы и добивались — у нас Организация загружена в контрагента, а контрагент в организацию. Счета учета все загружены и установлены. Номер документа у нас получился с нашим префиксом и на начало дня. Все реквизиты, которые прописали, заполнены.

 

  Проверяем загрузку номенклатуры. Видим, что всё получилось так, как мы и планировали.
 


 


  
У нас создались и заполнились реквизиты так, как мы это задумывали. В конвертации имеется множество тонкостей и каких-то простых, но нужных вещей, которые помогают точно написать конвертацию. А это позволяет минимизировать ошибки, не испортить существующие данные и избавиться от лишнего мусора. Это один из самых простых примеров. Можно так же делать конвертации одного объекта во многие или же наоборот многие — в один.

Сейчас есть конвертация данных 3, она решает другие задачи. Поэтому конвертация 2, так же нужна. Всем удачи в изучении и освоении. 

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

Сергей ОМЕЛЬЧУК

22 Comments

  1. leosoft

    Спасибо, отличный материал!

    Если можно — напишите еще как данные из источника

    формировать запросом и передавать их в регистр.

    Reply
  2. bb1962

    Однако, совет хочу дать: без крайней необходимости не размножайте ПКО. Старайтесь создавать для каждого типа объектов одно ПКО. Не забывайте, что объекты часто выгружаются по ссылкам, где правило конвертации не всегда задается явно. ПКО в таком случае обработкой выгрузки определяется по типу объекта. Можно, конечно, и нужно использовать приоритет ПКО, но Вы можете про это забыть и однажды «попасть» на то, что объект выгружается не тем ПКО. А если уж используете второе ПКО, как в данной статье, то не указывайте в нем источник — указывайте «Получить из входящих данных». Или просто задавайте в ПКО все значения реквизитов. Или вообще полностью программно сформируйте объект выгрузки: «Значение = Новый Структура() и т.д.» Приемов — масса.

    В данном случае автор продемонстрировал дурной стиль.

    Reply
  3. user705522_constantin_h

    Отличная статья!!!

    Reply
  4. herfis

    Плюсанул. Рекомендовал в качестве практической части к своему краткому теоретическому экскурсу 🙂

    Reply
  5. MaxS

    Для КД 2 материал полезный, но зачем для примера взяли УТ 11.3? Там уже есть типовые механизмы, которые используют КД 3. Получается, что пример вводит в заблуждение, направляя на шаг назад.

    Правильнее было бы для примера взять УТ 10.3. 😉

    Reply
  6. bb1962

    (5) КД 2 — это не шаг назад, как Вам того хотелось бы. Вот «типовые механизмы» и КД 3 — это как раз шаг еще неизвестно куда. Чего стоит только тот факт, что вмешаться в эти «типовые механизмы» в общем случае можно ТОЛЬКО изменив конфигурацию. Для меня лично это означает сразу «НЕТ» огромными буквами. Технология КД 2 в противоположность абсолютно автономна и никак от конфигурации не зависит.

    Кстати, то что Вы пишете в своих публикациях о пригодности КД 3 на будущее — тоже верно только отчасти. Нет и не может быть такого механизма, который бы не потребовал доработок в будущем. Где именно и что именно будет изменяться — это дело десятое.

    Reply
  7. MaxS

    (6) Единственная проблема в КД 3, которую создала 1С — это то, что в БП 3.0 минимальный формат обмена 1.3. В остальном задумка хорошая и много клиентов работают годами не обновляя и не дорабатывая обмен. Многим клиентам достаточно типового функционала, не нужно переносить что-то нетиповое и дорабатывать формат обмена в КД3. Изменить правила КД3 можно не меняя конфигурации, это штатная возможность.

    http://infostart.ru/upload/iblock/e86/e86bedfd287192e61259736297004214.png

    http://infostart.ru/upload/iblock/d90/d908b0b462262424564b9fe5d00877e2.png

    И я не утверждаю, что КД 2 это шаг назад. Каждому инструменту своё место. Ценность специалиста в умении использовать все доступные инструменты, а не изобретать велосипед. В данном примере для решения задачи обмена УТ 11.3 — БП 3.0 отказ от готового типового механизма и создание обмена на КД 2 с нуля — такое решение шаг в сторону ))

    Reply
  8. herfis

    КД 3 — это шаг наискосок. И разработчики это прекрасно понимают, подчеркивая что КД3 не является полной заменой КД2. И не сможет таковой стать никогда.

    Идея абстрагироваться от специфики базы-корреспондента и не рисовать сто-пицот наборов правил на все возможные комбинации обмена — очень и очень заманчива. Но и достигается эта цель отнюдь не даром. Теряется тоже очень многое.

    Универсальность втиснута в прокрустово ложе «универсального» формата, совместимость теперь ограничена поддержкой нужных его версий.

    Очевидно, что для типовых конфигураций одного поколения плюсы перевешивают минусы. Именно под задачи обмена между ними КД3 на пару с «универсальным» форматом и пилятся. Но шаг влево, шаг вправо — и «выручай, старая добрая КД 2».

    Reply
  9. bb1962

    (7) Эта «единственная проблема» перечеркивает всю технологию. А про то, что в типовых конфигурациях уже все есть, я слышу ровно столько лет, сколько существует 1С. Но у людей думающих должен возникнуть естественный вопрос: «А чем же тогда фирма 1С все эти годы занималась и еще будет заниматься, если в типовой уже все есть?»

    Reply
  10. bb1962

    (7) И я говорил не правилах, а о всем механизме, потому и написал «в общем случае».

    КД 2, еще раз подчеркиваю, абсолютно никак не связана с конфигурацией. Сама технология, сама реализация переноса не связана.

    Reply
  11. MaxS

    (9) По крайней мере версия универсального формата обмена в БП 3 поддерживается несколько лет. Это означает, что настроив синхронизацию УТ 11.3 — БП 3.0 сегодня и не обновляя УТ 11.3 несколько лет, можно не дорабатывать правила после обновления БП 3.0 так, как это пришлось бы делать, используя обмен в КД 2.

    ERP 2.4 и КА 2.4 не отказались от старого формата обмена.

    За универсальность приходится «платить» наличием в конфигурации БСП. Но плюсов от этого больше, т.к. работает регулярный обмен по расписанию, используется план обмена.

    В конфигурациях на платформе 8.3.10 можно не меняя конфигурацию исправить ошибки в БСП и в правилах.

    Ошибки в правилах бывают, в БСП критических ошибок, чтобы не работал обмен давно не встречал.

    Reply
  12. Pim

    Отличная статья. Такую бы для КД 3.0…

    Reply
  13. sansys

    (12) Согласен, статья блестящая. Будем надеяться, автор создаст подобный шедевр и для КД 3.0. Однозначно плюс

    Reply
  14. LexSeIch

    (13) К сожалению, КД 2.1 и КД 3 — это две большие разницы. Но без 2-ки даже, на новых конфигурациях, жизнь была бы скучной — например нет стандартного обмена ЗУП 3.1 и БП 2.0 — в этом случае выручить могут правила, созданные в КД 2.0 для обработки «Универсальный обмен данными в формате XML». Автору спасибо за статью.

    Reply
  15. aspirator23

    1.При обменах с 77 использовалось в качество Булево 1/0. Там просто его не было. При обменах в 8.хх методически правильно указать Истина/Ложь

    2.Не выгружать помеченные на удаление — нужно использовать осторожно. Указание -не выгружать помеченные на удаление приведет к появлению битой ссылке если в документе он был ненароком использован.

    Reply
  16. RailMen

    Поставил огромный лайк!

    Сделал ссылку из своей публикации на эту статью. Кстати, моя статья посвящается специалистам с некоторым опытом работы в КД 2.1, пример создания правил выгрузки ведомостей и банковских счетов из ЗУП 2.5 в БП КОРП 3.0

    https://infostart.ru/public/695916/

    Reply
  17. KAV2

    Статья замечательная, спасибо! Но как быть с регистрацией изменений и планами обмена, они ведь почти всегда нужны, необходимо при выгрузке делать фильтр только по измененным данным.

    Reply
  18. user800132

    Основательная работа была проделана. Спасибо автору за подробное описание! Конвертация объектов на простых примеров, как раз то что искал!

    Reply
  19. taasha25

    Спасибо!

    Reply
  20. vis_tmp

    Спасибо! Отличная статья «Конвертация данных на простых примерах разработки».

    Reply
  21. progr-2008

    Да, КД 2 все-равно периодически необходима.

    Reply
  22. wowan ht

    Здравствуйте.

    КД версия 2

    Задача: выгрузить из источника записи Регистра сведений и в приемнике создать Документ на каждую запись.

    В источнике отсутствует такой объект.

    Создал ПВД с пустым объектом и произвольным запросом, результат которого попадает в ВыборкаДанных

    Далее создал ПКО также с пустым источником, реквизиты приемника заполняю из выборки.

    При использовании обработки «Универсальный обмен данными» все выгрузки-загрузки отрабатывают без проблем.

    В источнике создал план обмена, включил его в подсистему Синхронизация (обмен данными), загрузил правила.

    При попытке выгрузки возникает ошибка, что такой объект не найден по типу в метаданных.

    Можно как-то выкрутиться из данной ситуации?

    Пробовал создавать ОписаниеОбъекта в ПВД — не прокатило

    Пробовал вставлять запрос в обработчик «Перед получением измененных» — та же картина

    Есть еще варианты?

    Заранее спасибо

    Reply

Leave a Comment

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