Как запретить автоматическое проведение документов при обмене между Управление торговлей 10.3 и Розница 2.2

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

При настройке обмена данными между конфигурациями «Управление торговлей 10.3» и «Розница 2.2» технические специалисты часто сталкиваются с проблемой: документы (например, «Установка цен номенклатуры») принудительно проводятся в целевой базе, даже если в правилах конвертации (ПКО) явно указан режим записи Запись или свойство Проведен установлено в значение Ложь. В этой статье мы подробно разберем, почему стандартные методы настройки правил не всегда работают, и как программно изменить логику загрузки для достижения нужного результата.

Анализ проблемы: почему ПКО игнорирует настройки

Рассмотрим стандартную ситуацию. Программист создает правила в «Конвертации данных 2.0». В обработчике «Перед загрузкой» или «После загрузки» документа прописывается код:


Объект.Проведен = Ложь;
РежимЗаписи = "Запись";

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

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

Решение 1: Модификация кода обработки загрузки

Наиболее эффективный метод, предложенный опытными разработчиками, заключается в корректировке модуля самой обработки ОбменДаннымиXML в целевой базе (или в базе-источнике, если код обработки встроен). Проанализируем алгоритм изменений.

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

Рассмотрим пример кода, который нужно внедрить в обработку:


Если НужноЗаписатьОбъект Тогда
    // Документы, которые нужно просто записать, игнорируя статус проведения
    Если РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда
        // Проведение убираем, если стоит задача именно отменить его
        ОтменитьПроведениеОбъектаВИБ(Объект, ТипОбъекта);                            
    Иначе
        // Во всех остальных случаях, даже если документ должен быть проведен, 
        // мы вызываем просто запись без проведения
        ЗаписатьОбъектВИБ(Объект, ТипОбъекта);
    КонецЕсли;
КонецЕсли;

Этот подход гарантирует, что даже если в XML-пакете пришел флаг проведения, обработка просто сохранит документ в базе «Розницы» в статусе «Записан».

Решение 2: Использование свойств ОбменДанными.Загрузка

В конфигурациях на платформе 1С:Предприятие 8.3 (к которым относится «Розница 2.2») активно используются подписки на события. Часто проведение документа инициируется не самой обработкой обмена, а программным кодом в модуле объекта или в подписках, которые срабатывают «вдогонку» после записи. Чтобы подавить эту логику, разберем способ использования флага Загрузка.

В правилах конвертации объектов (ПКО) в обработчике «Перед записью» добавим следующую строку:

Объект.ОбменДанными.Загрузка = Истина;

Это стандартный механизм платформы 1С. Когда Загрузка = Истина, большинство типовых проверок и процедур проведения (включая те, что прописаны в ПередЗаписью или ПриЗаписи модуля объекта) будут проигнорированы. Это позволит записать документ «как есть», без лишних движений по регистрам.

Решение 3: Особенности документа «Установка цен номенклатуры»

Проанализируем ситуацию специально для документа «Установка цен номенклатуры». В «Рознице 2.2» этот документ является ключевым для формирования цен. Важно понимать: если документ не проведен, он не создает записи в регистре сведений ЦеныНоменклатуры. Следовательно, если ваша цель — перенести цены так, чтобы они начали работать, документ обязан быть проведен.

Если же ваша задача — просто создать черновики документов для последующей ручной проверки менеджером, тогда использование Решения 1 будет оправданным. Посмотрим, как можно настроить ПКО, чтобы управлять этим процессом более гибко:

  1. В ПКО на закладке «Настройки выгрузки» найдите флаг «Проводить документы при загрузке» и убедитесь, что он снят.
  2. В обработчике «После загрузки» добавьте проверку условий. Например, если сумма документа превышает определенный порог, оставлять его не проведенным.
  3. Используйте дополнительные свойства: Объект.ДополнительныеСвойства.Вставить("ТолькоЗапись", Истина);. Затем в модуле объекта в Рознице можно будет считать это свойство и прервать проведение.

Решение 4: Принудительная установка статуса в ПКО

Иногда помогает «обман» механизма обмена через подмену значения реквизита Проведен непосредственно перед тем, как объект будет передан платформе на запись. Попробуем реализовать это в обработчике «При загрузке» в КД 2.0:


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

Использование ПрекратитьИсполнение = Истина (в зависимости от версии обработки) позволяет остановить дальнейшие стандартные действия загрузчика, так как мы уже программно записали объект в нужном нам режиме.

Резюме

Мы рассмотрели несколько способов борьбы с автоматическим проведением документов при обмене. Выясним, какой из них выбрать:

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

Важный совет: перед внедрением изменений всегда проверяйте, не приведет ли отсутствие проведения документа к нарушению логики учета. Для «Установки цен» это означает отсутствие актуальных цен в магазине до момента ручного проведения документа пользователем.

← На главную