Как корректно переносить помеченные на удаление документы при обмене между УТ 11 и БП?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

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

В этой статье мы подробно разберем причину возникновения такой ситуации и проанализируем практические способы её решения с помощью правил конвертации данных (КД 2.1).

Причина возникновения проблемы

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

Эти структуры данных обладают следующей спецификой:

  1. Табличная часть ВидыЗапасов корректно заполнена только тогда, когда документ находится в состоянии Проведен.
  2. Если документ распроведен, записан без проведения или помечен на удаление, служебная таблица ВидыЗапасов становится пустой.
  3. Если в правилах выгрузки используется запрос с типом ВНУТРЕННЕЕ СОЕДИНЕНИЕ к таблице ВидыЗапасов, то для непроведенного или помеченного на удаление документа запрос возвращает 0 строк.

При загрузке такого объекта в базу-приемник обработка обмена получает XML-структуру с пустой табличной частью и перезаписывает объект в приемнике, стирая ранее перенесенные строки.

Способ 1. Использование отдельного ПКО для помеченных на удаление объектов

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

Разберем по шагам реализацию этой логики в Конвертации данных 2.1:

  1. Создаем новое правило конвертации объектов (например, РеализацияТоваровУслуг_ПометкаУдаления).
  2. Указываем в нем сопоставление реквизитов поиска: Ссылка (или УникальныйИдентификатор), Номер, Дата и реквизит ПометкаУдаления.
  3. Не добавляем в это ПКО конвертацию табличных частей (например, Товары).
  4. В основном ПКО документа в обработчике ПередКонвертациейОбъекта прописываем условие динамической смены правила:

Если Источник.ПометкаУдаления Тогда
    ИмяПКО = "РеализацияТоваровУслуг_ПометкаУдаления";
КонецЕсли;

В результате, если документ помечен на удаление, платформа применит облегченное ПКО, выгрузит в файл XML только признак ПометкаУдаления = Истина и не передаст пустые табличные части, сохраняя состав документа в приемнике.

Способ 2. Отмена выгрузки табличных частей через обработчики КД 2.1

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

Для этого в Конвертации данных откроем соответствующее Правило Конвертации Свойств (ПКС) или Правило Конвертации Табличной Части и в обработчик ПередВыгрузкойТабличнойЧасти добавим следующий код:


Если Источник.ПометкаУдаления Тогда
    Отказ = Истина;
КонецЕсли;

В этом случае при выгрузке помеченного на удаление документа табличная часть полностью пропускается и не попадает в итоговый XML-файл.

Способ 3. Изменение типа соединения в запросе выгрузки

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

Обычно в правилах используется запрос следующего вида:


ВЫБРАТЬ
    ДокументТаблица.Номенклатура КАК Номенклатура,
    ДокументТаблица.Количество КАК Количество
ИЗ
    Документ.РеализацияТоваровУслуг.ВидыЗапасов КАК ВидыЗапасов
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК Аналитика
    ПО ВидыЗапасов.АналитикаУчетаНоменклатуры = Аналитика.КлючАналитики

Для исправления работы запроса заменим обращение к ВидыЗапасов на физическую табличную часть документа Документ.РеализацияТоваровУслуг.Товары и заменим ВНУТРЕННЕЕ СОЕДИНЕНИЕ на ЛЕВОЕ СОЕДИНЕНИЕ к аналитике учета. Тогда, даже если документ распроведен или помечен на удаление, запрос вернет фактический список товаров и их количество из физической табличной части документа.

Способ 4. Очистка движений в базе-приемнике при получении пометки удаления

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

Если в вашей системе проведения документов выгрузка происходит с автоматическим проведением или записи движений передаются из источника, в ПКО базы-приемника в обработчике ПриЗагрузке или ПослеЗагрузки необходимо прописать очистку наборов записей или отмену проведения:


Если Объект.ПометкаУдаления Тогда
    Объект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
КонецЕсли;

Это гарантирует, что при получении пометки удаления из УТ документ в БП не только пометится на удаление, но и корректно снимет все сформированные ранее проводки.

← На главную