Механизмы проведения документов при обмене по универсальному формату

04.03.20

Интеграция - Обмен между базами 1C

Как проводятся документы при обмене по универсальному формату. Пример доработки типовых правил обмена с переносом состояния документа: проведен/не поведен/пометка удаления.

Не нашел нигде описание процесса получения и проведения документов при обмене по универсальному формату. Ответ пришлось искать в недрах БСП (версии 3.0.3.164).

 

Логику поведения обмена документами можно понять из функции общего модуля ОбменДаннымиXDTOСервер.СтруктураОбъектаXDTOВДанныеИБ.

Логика получения документа из файла обмена:

1. Получаются данные из файла обмена и находится соответствующий им объект в базе.

ПолученнныеДанные — объект сформированный из полученных из xml файла обмена данных. Ссылку не содержит.

ДанныеИБ — объект информационной базы, соответсвующий (согласно правилам идентификации) объекту из файла. Если объекта в базе нет, то Неопределено.

2. Вызвается процедура из правил конвертации ПередЗаписьюПолученныхДанных, в которой с этими объектами можно произвести нужные манипуляции (но не все будет действовать). Или можно совсем отказаться от дальнейшей работы БСП, прописав свою логику и установив ПолученнныеДанные=Неопределено и ДанныеИБ=Неопределено.

3. Из ПолученнныеДанные и ДанныеИБ определяется объект ДанныеДляЗаписиВИБ с которым и происходит дальнейшая работа. Если ДанныеИБ существует, происходит заполнение его свойств из ПолученнныеДанные (ЗаполнитьДанныеИБПоПолученнымДанным), но при этом не переносится ПометкаУдаления и признак Проведено. По сути Проведено будет действовать только для новых документов. Для уже существующих будет использоваться их признак Проведено.

 
 Часть кода БСП: определение итогового объекта для проведения

4. ПометкаУдаления сбрасывается.

 
 Часть кода БСП: Сброс пометки удаления

5. Анализируется признак ДанныеДляЗаписиВИБ.Проведен. Если документ проведен, то проведение в ИБ отменяется и документ добавляется в таблицу для отложенного проведения  КомпонентыОбмена.ДокументыДляОтложенногоПроведения. Если документ не проведен, то просто отменяется проведение. Кстати в дальнейшем, из таблицы строку документа можно удалить и проведение не произойдет.

 
 Часть кода БСП: проведение или отмена проведения документа при загрузке документа

 

В формате EnterpriseData для документов нет признаков ПометкаУдаления и Проведен.

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

 

Реализация практической задачи

 

Встала задача. Организовать перенос из БП в УТ типового документа, которым они обмениваются в другом направлении. В БП документ реализован в расширении, в УТ это типовой документ. Необходимо синхронизировать состояние документа: проведен, не проведен, установлена пометка удаления.

Базы с поддержки не снимаем, используем расширения. Дорабатываем типовые правила обмена.

 

Решение:

 

1. Загружаем правила конвертации из баз БП и УТ. Тот еще квест. Подсказки можно найти в статье //infostart.ru/public/695523/. У меня так и не получилось, что бы в результате загрузки получились идентичные модули менеджера обмена. Но для доработки правила обмена одного документа это не критично.

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

Создаем Правило конвертации объекта, Правила конвертации свойств в нем. Для свойств табличных частей обязательно указываем «используется алгоритм конвертации» и обрабатываем заполнение в обработчиках.

 
 Правила нужно реализовывать сразу в двух базах

3. Реализуем перенос состояния документа при отправке через AdditionalInfo (событие при отправке данных)

 
 Код процедуры события при отправке данных

4. Реализуем логику приема со статусом в другой конвертации

4.1. Сначала в событии  ПриКонвертацииДанныхXDTO получаем состояние документа из AdditionalInfo и заполняем им ПолученныеДанные

 
 Код процедуры события ПриКонвертацииДанныхXDTO

4.2. В событии  ПередЗаписьюПолученныхДанных выставляем правильные флаги у правильных объектов, что бы алгоритмы БСП сделали синхронизацию состояния проведения объектов, а не взяли состояние текущего объекта.

Для этого нужно всего лишь статус  ДанныеИБ.Проведен (если ДанныеИБ нашлись) заполнить из  ПолученныеДанные.Проведен. Далее все произойдет корректно, документ из ИБ заполнистя данными из файла обмена, отменится его проведение и он будет добавлен в  ДокументыДляОтложенногоПроведения если это необходимо.

Пометку удаления необходимо обрабатывать отдельно и отменять дальнейшее действие правила, потому что далее в БСП она игнорируется.

Можно также здесь отменить загрузку непроведенного документа, отсутствующего в базе приемнике (в тексте не реализовано).

 
 Код процедуры события ПередЗаписьюПолученныхДанных

5. Добавляем правила в расширения.

Из КД3 выгружаем модуль менеджера обмена для конвертации. Сравниваем его в с текущим модулем менеджера обмена (Файл — Сравнить файлы). Отличия реализуем через расширение (одних методов После вполне достаточно). Повторяем для другой конвертации.

6. Добавляем к Плану обмена обеих конфигураци СинхронизацияДанныхЧерезУниверсальныйФормат реквизит типа булево, включающий нашу функциональность (РасшБП_ВключитьНашОбмен). Выносим его на форму узла.

 
 Код процедуры расширения, добавляющий реквизит на форму узла. Модуль формы узла

7. Реализуем регистрацию объекта на узлах плана обмена.

В моем случае в БП (источнике) документ был добавлен в расширение, а в УТ (получателе) уже был в конфигурации, но нужно было отменять отправку, если мы его получили.

 

Состав Плана обмена СинхронизацияДанныхЧерезУниверсальныйФормат можно дополнить через расширение (снимаем авторегистрацию).

Подписки на события изменять в расширении нельзя, но для одного документа можно просто  дополнить процедуры ПередЗаписью и ПередУдалением, разместив там вызов процедуры из событий подписок СинхронизацияДанныхЧерезУниверсальныйФорматРегистрацияДокумента и СинхронизацияДанныхЧерезУниверсальныйФорматРегистрацияУдаления.

 

С этими процедурами будут отрабатывать правила регистрации, если их отредактировать.

 

И далее можно:

а) Изменить правила регистрации, указав зависимость регистрации документа от установки этого реквизита РасшБП_ВключитьНашОбмен (их можно загрузить из файла в пользовательском режиме), но потом возможно нужно будет обновлять правила регистрации при их обновлении в типовой, что может быть не удобно.

б) Либо программно убрирать лишние узлы в событии документа ПередЗаписью (так сказать, правила регистрации программно)

 
 Процедура ПередЗаписью удаляющая регистрацию для узлов с отключенным признаком, модуль объекта

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

 

Готово. Типовая может обновляться, правила типовой могут обновляться, переделка нашего правила при этом не потребуется.

 

Выводы:

 

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

2. Документы попадают в эту таблицу по признаку Проведен:

для нового документа — используется признак из обмена (ПолученныеДанные.Провден)

для существующего документа — используется признак из ИБ (ДанныеИБ.Проведен)

ДанныеИБ.Проведен не замещается из ПолученныеДанные.

3. Если нужно изменить это поведение, в событии ПередЗаписьюПолученныхДанных можно для ДанныеИБ.Проведен установить нужный признак. Или вообще реализовать свою логику  и отказаться от дальнейшего выполнения правила.

КД3 EnterpriseData УниверсальныйФорматОбмена

См. также

SALE! 10%

Перенос данных из УПП 1.3 в ERP 2 / УТ 11 / КА 2. Переносятся документы, справочная информация и остатки

Обмен между базами 1C Платформа 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) в продаже с 2015 года, постоянно работаем над их развитием | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

50722 45650 руб.

04.08.2015    160271    368    268    

349

SALE! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 руб.

12.06.2017    135537    730    291    

391

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

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

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.226.x) и БП 3.0 (3.0.151.x). Правила подходят для версии ПРОФ и КОРП.

28000 руб.

15.12.2021    20605    137    38    

94

SALE! 10%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

38500 34650 руб.

15.04.2019    68822    179    139    

111

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.87.x) и УТ 11.5 (11.5.16.x).

28000 руб.

23.07.2020    46751    199    64    

162

SALE! 10%

Перенос данных из БП 3.0 в УТ 11 / КА 2 / ERP 2. Переносятся начальные остатки, документы и справочники

Обмен между базами 1C Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

В продаже с 2014г. | Воспользовались более 122 предприятий! | Перенос данных из БП 3.0 в УТ 11 | из БП 3.0 в КА 2 | из БП 3.0 в ERP | Сэкономьте свое время - используйте готовое решение для перехода! | Постоянно работаем над развитием переноса данных | Обновляем на новые релизы 1С | Есть фильтр выгрузки по организациям | Переносятся начальные остатки на выбранную дату, документы за период времени и вся возможная справочная информация | Перенос сделан на технологии КД 2 (правила конвертации данных)

50722 45650 руб.

31.10.2014    231882    124    327    

296

SALE! 10%

Перенос данных из БП 3.0 в УНФ 3.0 / УНФ 1.6. Переносятся остатки, документы и справочная информация

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

В продаже с 2018г. | Воспользовались более 41 предприятия! | Правила конвертации (КД 2) для переноса данных из БП 3 в УНФ | Переносятся все виды документов, начальные остатки и вся возможная справочная информация | Есть фильтр по организациям | Оперативно обновляем на новые релизы | Оказываем техподдержку | В комплект файлов входит инструкция, авторская версия обработки "Универсальный обмен...", актуальные правила переноса данных и архив старых версий переноса | Учет в БП 3 должен быть корректным, некорректные данные не переносятся | Можно бесплатно проверить на вашем сервере до покупки!

50722 руб.

10.07.2018    67748    41    123    

46

SALE! 10%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

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

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Воспользовались более 79 предприятий! | Предлагаем приобрести готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | В продаже с 2020г. | Оперативно обновляем правила до актуальных релизов 1С | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

48278 43450 руб.

03.12.2020    34414    81    58    

78
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. VKuser296681124 07.03.20 19:27 Сейчас в теме
Спасибо за информацию! Многое прояснил для себя еще раз))
+
2. triviumfan 93 10.03.20 15:55 Сейчас в теме
Тяжело читать. Что за шрифт у вас? Меня одного он напрягает? Глаза в кучу...
Liberation Serif? Што за...
+
3. partizand 130 11.03.20 19:36 Сейчас в теме
Шрифты не выбирал и не настраивал. Какие были.
+
4. MaxS 2850 15.03.20 13:56 Сейчас в теме
Полезная статья. )
Для информации.
Где-то читал, что обмен в формате ED подразумевает обмен документами, участвующими в учете и по умолчанию считается, что раз он попал в обмен, то он проведён.
Если после обмена документ пометили на удаление и потом окончательно удалили, то из этой базы отправляется команда удаления этого объекта, в другой базе документ распроводится и помечается на удаление. Так работает типовой механизм.

Опасность обмена непроведенными документами в том, что они могут быть недозаполненными, поэтому могут не пройти проверку и обмен остановится, если в настройках не указано пропускать объект при ошибках выгрузки. Это в КД2 можно что угодно передавать, тем самым распространять бардак по другим базам. )
Т.е. нужно это знать перед тем, как дорабатывать обмен реквизитами "проведен", "не проведен" и т.п.
+
5. partizand 130 16.03.20 20:37 Сейчас в теме
(4)
О, точно! Не подумал об обязательных полях. Спасибо за замечание.
Задача была не в том, что бы передать непроведенный документ, а передать изменения. И распровести документ, если он был распроведен в источнике.
По сути это корявая реализация строка ТЧ -> Документ. При удалении строки ТЧ нужно удалить документ. А синхронизация состояния - постановка задачи от заказчика. Хотя тут мне нужно было обязательные незаполненные поля обговаривать.
К тому же так и не понял, получается распровели документ в исходной базе, но не удалили, конечная об этом не узнает. По мне, странное поведение.
+
6. resonance 81 21.04.20 17:33 Сейчас в теме
Очень полезная статья, спасибо.
+
7. volokitinac 06.11.21 20:26 Сейчас в теме
для включения объекта которого нет в правилах для плана обмена можно написав процедуру для элемента плана обмена


Процедура ОбновитьНастройкуСинхронизацииНаСервере()
	
	КорреспондентСсылка  =  Параметры.Ключ;
	
	ИмяПланаОбмена = "СинхронизацияДанныхЧерезУниверсальныйФормат";
	
	ТаблицаОбъектыБазы = ОбменДаннымиXDTOСервер.ПоддерживаемыеОбъектыФормата(ИмяПланаОбмена,
																			 "ОтправкаПолучение",
																			 КорреспондентСсылка);
																			
	ТаблицаОбъектыКорреспондента = ТаблицаОбъектыБазы.СкопироватьКолонки();
	
	Для Каждого СтрокаОбъектыБазы Из ТаблицаОбъектыБазы Цикл
		СтрокаОбъектыКорреспондента = ТаблицаОбъектыКорреспондента.Добавить();
		ЗаполнитьЗначенияСвойств(СтрокаОбъектыКорреспондента, СтрокаОбъектыБазы, "Версия, Объект");
		СтрокаОбъектыКорреспондента.Отправка  = СтрокаОбъектыБазы.Получение;
		СтрокаОбъектыКорреспондента.Получение = СтрокаОбъектыБазы.Отправка;
	КонецЦикла;
	
	МенеджерНастройкиXDTO = ОбщегоНазначения.ОбщийМодуль("РегистрыСведений.НастройкиОбменаДаннымиXDTO");
	
	МенеджерНастройкиXDTO.ОбновитьНастройки(КорреспондентСсылка, "ПоддерживаемыеОбъекты", ТаблицаОбъектыБазы);
	
	МенеджерНастройкиXDTO.ОбновитьНастройкиКорреспондента(КорреспондентСсылка, "ПоддерживаемыеОбъекты", ТаблицаОбъектыКорреспондента);
	
	СтруктураЗаписи = Новый Структура;
	СтруктураЗаписи.Вставить("УзелИнформационнойБазы",       КорреспондентСсылка);
	СтруктураЗаписи.Вставить("ИмяПланаОбменаКорреспондента", ИмяПланаОбмена);
	
	ОбменДаннымиСлужебный.ОбновитьЗаписьВРегистрСведений(СтруктураЗаписи, "НастройкиОбменаДаннымиXDTO");

КонецПроцедуры
Показать
+
Оставьте свое сообщение