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

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%

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

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

50722 45650 руб.

04.08.2015    165037    383    275    

369

Перенос данных 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 руб.

12.06.2017    140089    781    295    

408

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

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

28000 руб.

15.12.2021    23077    157    47    

116

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

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

84000 руб.

19.08.2020    24337    23    1    

25

SALE! 10%

Перенос данных 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 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

50722 45650 руб.

15.04.2019    71477    180    148    

120

SALE! 10%

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

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Предлагаем качественное и проверенное временем решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

50722 45650 руб.

24.04.2015    194117    148    242    

279

SALE! 10%

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

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

50722 45650 руб.

31.10.2014    235979    99    333    

304

SALE! 10%

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

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

48278 43450 руб.

03.12.2020    35990    90    62    

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

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


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

КонецПроцедуры
Показать
8. user1318024 19.09.24 01:12 Сейчас в теме
Благодарю, полезная статья!
Получилось реализовать передачу состояний документов. Создал новое расширение, добавил в общий модуль МенеджерОбменаЧерезУниверсальныйФормат13 код.

&После("ВыгрузитьДополнительныеРеквизитыИСведения")
Процедура раС_ВыгрузитьДополнительныеРеквизитыИСведения(КомпонентыОбмена, ДанныеИБ, ДанныеXDTO, ЕстьДопРеквизиты)
	Если Метаданные.Документы.Содержит(ДанныеИБ.Метаданные()) Тогда
		ДанныеXDTO.Вставить("AdditionalInfo", Новый Структура("Проведен, ПометкаУдаления", ДанныеИБ.Проведен, ДанныеИБ.ПометкаУдаления));
	КонецЕсли;
КонецПроцедуры

&После("ЗагрузитьДополнительныеРеквизиты")
Процедура раС_ЗагрузитьДополнительныеРеквизиты(ПолученныеДанные, ДанныеXDTO, КомпонентыОбмена, ЕстьТЧДопРеквизиты)
	Если ДанныеXDTO.Свойство("AdditionalInfo") Тогда
		ПолученныеДанные.ДополнительныеСвойства.Вставить("Проведен", ДанныеXDTO.AdditionalInfo.Проведен);
		ПолученныеДанные.ДополнительныеСвойства.Вставить("ПометкаУдаления", ДанныеXDTO.AdditionalInfo.ПометкаУдаления);
	КонецЕсли;
КонецПроцедуры

&После("УстановитьПризнакПроведенПриЗагрузке")
Процедура раС_УстановитьПризнакПроведенПриЗагрузке(ПолученныеДанные, ДанныеИБ, ПараметрыКонвертации)
	ПризнакПроведен = Неопределено;
	ПризнакПометкаУдаления = Неопределено;
	
	ПолученныеДанные.ДополнительныеСвойства.Свойство("Проведен", ПризнакПроведен);
	ПолученныеДанные.ДополнительныеСвойства.Свойство("ПометкаУдаления", ПризнакПометкаУдаления);
	
	Если ПризнакПометкаУдаления <> Неопределено и ПризнакПометкаУдаления Тогда
		ПолученныеДанные.ПометкаУдаления = ПризнакПометкаУдаления;
		ПолученныеДанные.Проведен = Ложь;
	ИначеЕсли ПризнакПроведен <> Неопределено Тогда
		ПолученныеДанные.Проведен = ПризнакПроведен;
	КонецЕсли;
КонецПроцедуры
Показать
Прикрепленные файлы:
Синхронизация.cfe
Оставьте свое сообщение