Почему при перегрузке меняется номер документа в 1С и как исправить его задвоение?

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

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

В этой статье мы подробно разберем, почему возникает эта классическая проблема, изучим ее внутренние механизмы и пошагово исправим правила обмена в конфигурации «Конвертация данных 2» (КД 2), а также скорректируем поведение планов обмена на стороне платформ 1С.

Выясняем причины: почему меняется номер документа в базе-приемнике?

Когда документ переносится из базы-источника в базу-приемник, его номер может измениться. Рассмотрим основные факторы, которые к этому приводят:

  1. Флаг автоматической генерации номеров в ПКО. В правилах конвертации объектов (ПКО) для конкретного документа может быть активна опция «Автоматически генерировать код или номер, если он не определен», либо в правилах конвертации свойств (ПКС) для реквизита Номер отключена передача значения. В таком случае система игнорирует исходный номер и генерирует новый по порядку в соответствии с текущей нумерацией базы-приемника.
  2. Применение программных обработчиков в правилах обмена. Часто разработчики используют обработчики событий в КД 2 (например, «При загрузке», «Перед записью» или «После загрузки») для кастомизации процесса. Если в этих обработчиках прописан вызов метода УстановитьНовыйНомер() или принудительная очистка поля номера, то при записи объект обязательно получит новый номер.
  3. Влияние префиксов организации и узлов обмена. В базе-приемнике могут быть настроены локальные префиксы для организаций или префиксы самого узла распределенной информационной базы (РИБ). При записи документа подписки на события или механизмы платформы автоматически модифицируют пришедший номер, добавляя к нему префикс приемника.

Анализируем механизм задвоения документов при обратной выгрузке

Само по себе изменение номера в розничной или торговой базе — это лишь половина проблемы. Настоящая беда начинается, когда этот измененный документ отправляется обратно в центральную базу (УПП) и создает там дубликат. Проанализируем, почему так происходит:

1. Поиск объекта по «Полям поиска» вместо GUID (УИД)

Если в настройках ПКО выключен поиск по уникальному идентификатору (GUID), система сопоставляет объекты по ключевым полям поиска. Обычно для документов это связка Дата + Номер (иногда + Организация). Схема сбоя выглядит следующим образом:

2. Эффект «эха» и принудительная регистрация изменений

Даже если в правилах обмена прописано, что из подчиненного узла (магазина) должны выгружаться только «Заказы поставщикам», документы поступления все равно могут возвращаться обратно. Это происходит из-за записи объектов при загрузке без блокировки регистрации. На уровне платформы запись должна сопровождаться установкой признака ОбменДанными.Загрузка = Истина. Если в конфигурации-приемнике созданы некорректные подписки на события, они могут проигнорировать этот флаг и зарегистрировать загруженный документ на отправку обратно в источник.

3. Избыточная выгрузка связанных объектов по ссылке

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

Разбираем по шагам: как исправить правила обмена и устранить проблему

Для ликвидации проблемы изменения номеров и задвоения документов нам потребуется скорректировать правила конвертации в программе «Конвертация данных 2» и проверить некоторые подписки на события в конфигураторе.

Шаг 1. Настройка сопоставления объектов по GUID (УИД)

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

  1. Запустите конфигурацию «Конвертация данных 2» и загрузите в нее ваши правила обмена.
  2. Перейдите в список «Правила конвертации объектов» (ПКО).
  3. Найдите ПКО для проблемного документа (например, ПоступлениеТоваровУслуг).
  4. Откройте форму редактирования ПКО.
  5. На вкладке «Основные» установите флаг «Искать объект приемника по внутреннему идентификатору источника» (поиск по GUID).
  6. Убедитесь, что флаг «Продолжить поиск по полям поиска, если по идентификатору объект не найден» также установлен (это поможет сопоставить документы, созданные до исправления правил).

Теперь, даже если номер документа в магазине изменится до неузнаваемости, при обратной выгрузке 1С сопоставит его по скрытому уникальному GUID и просто обновит существующий документ в УПП вместо создания нового.

Шаг 2. Контроль передачи номера в правилах конвертации свойств (ПКС)

Проанализируем, как передается сам номер документа, чтобы исключить его нежелательное изменение:

  1. В ПКО нужного документа перейдите на вкладку «Конвертация свойств».
  2. Найдите строку, где источником и приемником выступает свойство Номер.
  3. Убедитесь, что для ПКС номера активна выгрузка. Если вам требуется строгое соответствие номеров в обеих базах, снимите флаг «Не замещать существующие значения в приемнике».
  4. Проверьте обработчики событий ПКО (вкладка «Обработчики событий» -> «Перед загрузкой», «При загрузке»). Если там присутствует код, очищающий номер или вызывающий генерацию нового номера, удалите или закомментируйте его.

Шаг 3. Устранение обратной регистрации изменений (эффект «эха»)

Чтобы документы, загруженные из центрального офиса, не регистрировались автоматически на обратную выгрузку в розничной базе, необходимо проверить программный код подписок на события. Откройте конфигуратор базы-приемника и найдите общие подписки, отвечающие за регистрацию изменений на узлах планов обмена (например, при записи документов). В начале процедур-обработчиков обязательно должно присутствовать следующее условие:


Если Источник.ОбменДанными.Загрузка Тогда
    Возврат;
КонецЕсли;

Этот простой фрагмент кода гарантирует, что если документ записывается в процессе импорта данных (когда платформа автоматически устанавливает свойство Загрузка = Истина), никакие механизмы регистрации изменений для обмена затрагиваться не будут.

Шаг 4. Настройка выгрузки связанных документов только по ссылке

Выясним причину, по которой документ «Поступление» выгружается вместе с «Заказом поставщику», несмотря на запреты. Для этого ограничим выгрузку связанных объектов:

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

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

Шаг 5. Очистка ошибочных регистраций в узлах обмена

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

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

Подведем итоги. Мы проанализировали сложную архитектурную проблему двустороннего обмена 1С, выявили уязвимые места в правилах сопоставления документов и пошагово исправили их. Настройка поиска по GUID в связке с ограничением выгрузки по ссылкам и контролем регистрации изменений позволит вам навсегда забыть о дублировании документов и хаосе в нумерации ваших баз данных.

← На главную