При настройке обмена данными между конфигурациями 1С:Управление торговлей 11 и 1С:Бухгалтерия предприятия специалисты часто сталкиваются с технической особенностью: когда документ в базе-источнике (УТ 11) помечается на удаление или распроводится, при повторной выгрузке в базу-приемник (БП) очищается его табличная часть или происходит рассинхронизация данных.
В этой статье мы подробно разберем причину возникновения такой ситуации и проанализируем практические способы её решения с помощью правил конвертации данных (КД 2.1).
В конфигурации 1С:Управление торговлей 11 табличные части многих первичных документов (например, РеализацияТоваровУслуг или СборкаТоваров) при стандартной выгрузке через правила конвертации заполняются на основе данных служебных таблиц и регистров, таких как ВидыЗапасов и АналитикаУчетаНоменклатуры.
Эти структуры данных обладают следующей спецификой:
ВидыЗапасов корректно заполнена только тогда, когда документ находится в состоянии Проведен.ВидыЗапасов становится пустой.ВНУТРЕННЕЕ СОЕДИНЕНИЕ к таблице ВидыЗапасов, то для непроведенного или помеченного на удаление документа запрос возвращает 0 строк.При загрузке такого объекта в базу-приемник обработка обмена получает XML-структуру с пустой табличной частью и перезаписывает объект в приемнике, стирая ранее перенесенные строки.
Рассмотрим первое решение, которое часто применяют при работе с настраиваемыми правилами конвертации. Суть метода заключается в создании отдельного легкого правила конвертации объектов (ПКО), которое передает только ключевые поля и флаг пометки удаления, отключая выгрузку табличных частей.
Разберем по шагам реализацию этой логики в Конвертации данных 2.1:
РеализацияТоваровУслуг_ПометкаУдаления).Ссылка (или УникальныйИдентификатор), Номер, Дата и реквизит ПометкаУдаления.Товары).ПередКонвертациейОбъекта прописываем условие динамической смены правила:
Если Источник.ПометкаУдаления Тогда
ИмяПКО = "РеализацияТоваровУслуг_ПометкаУдаления";
КонецЕсли;
В результате, если документ помечен на удаление, платформа применит облегченное ПКО, выгрузит в файл XML только признак ПометкаУдаления = Истина и не передаст пустые табличные части, сохраняя состав документа в приемнике.
Проанализируем второй вариант, при котором не требуется создавать дублирующие ПКО. Мы можем запретить выгрузку табличных частей непосредственно в обработчике событий конвертации.
Для этого в Конвертации данных откроем соответствующее Правило Конвертации Свойств (ПКС) или Правило Конвертации Табличной Части и в обработчик ПередВыгрузкойТабличнойЧасти добавим следующий код:
Если Источник.ПометкаУдаления Тогда
Отказ = Истина;
КонецЕсли;
В этом случае при выгрузке помеченного на удаление документа табличная часть полностью пропускается и не попадает в итоговый XML-файл.
Рассмотрим ситуацию, когда требуется выгружать состав табличной части независимо от того, проведен документ или помечен на удаление. Если в правилах выгрузки выборка данных выполняется через запрос к служебным таблицам, проанализируем текст этого запроса.
Обычно в правилах используется запрос следующего вида:
ВЫБРАТЬ
ДокументТаблица.Номенклатура КАК Номенклатура,
ДокументТаблица.Количество КАК Количество
ИЗ
Документ.РеализацияТоваровУслуг.ВидыЗапасов КАК ВидыЗапасов
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК Аналитика
ПО ВидыЗапасов.АналитикаУчетаНоменклатуры = Аналитика.КлючАналитики
Для исправления работы запроса заменим обращение к ВидыЗапасов на физическую табличную часть документа Документ.РеализацияТоваровУслуг.Товары и заменим ВНУТРЕННЕЕ СОЕДИНЕНИЕ на ЛЕВОЕ СОЕДИНЕНИЕ к аналитике учета. Тогда, даже если документ распроведен или помечен на удаление, запрос вернет фактический список товаров и их количество из физической табличной части документа.
Посмотрим на финальный этап обработки данных на стороне базы-приемника (БП). Помеченный на удаление документ не должен формировать проводки или движения по регистрам сведений и накопления.
Если в вашей системе проведения документов выгрузка происходит с автоматическим проведением или записи движений передаются из источника, в ПКО базы-приемника в обработчике ПриЗагрузке или ПослеЗагрузки необходимо прописать очистку наборов записей или отмену проведения:
Если Объект.ПометкаУдаления Тогда
Объект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
КонецЕсли;
Это гарантирует, что при получении пометки удаления из УТ документ в БП не только пометится на удаление, но и корректно снимет все сформированные ранее проводки.