Почему при обмене между УТ и БП 2.0 появляются документы с одинаковыми номерами?

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

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

Давайте подробно разберем, почему штатные механизмы контроля уникальности «засыпают» в момент обмена, и как предотвратить подобные инциденты в будущем.

Механизм свойства ОбменДанными.Загрузка

Первоочередная причина, по которой платформа 1С позволяет записать документ с дублирующимся номером, кроется в использовании программного свойства ОбменДанными.Загрузка. Рассмотрим, как это работает на уровне кода и логики платформы.

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


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

В режиме ОбменДанными.Загрузка = Истина платформа намеренно отключает большинство прикладных проверок, включая контроль уникальности кодов и номеров. Это необходимо для того, чтобы процесс синхронизации больших массивов данных не прерывался из-за мелких логических нестыковок. Предполагается, что данные в источнике уже корректны. В результате, если в сообщении обмена пришли два объекта с одинаковыми номерами, они будут записаны «как есть».

Идентификация объектов по GUID против визуального номера

Важно понимать, что для платформы 1С документом-дублем является не тот объект, у которого совпадает номер, а тот, у которого совпадает Уникальный Идентификатор (GUID). Рассмотрим ситуацию, которая часто приводит к появлению визуальных дублей:

  1. В базе УТ создается документ с номером «001».
  2. Происходит обмен, документ попадает в БП с тем же GUID и номером «001».
  3. В базе УТ пользователь удаляет этот документ и создает новый, вручную присваивая ему номер «001», либо происходит сбой нумерации.
  4. Новый документ в УТ имеет новый GUID, хотя номер остался прежним.
  5. При следующем обмене БП видит новый GUID и создает новый объект. Поскольку проверка уникальности номера при загрузке отключена, в базе БП появляются два разных документа с номером «001».

Проанализируем ситуацию: для системы это два абсолютно разных объекта, которые просто имеют одинаковую строковую метку в поле Номер.

Проблемы префиксации и настройки узлов обмена

В конфигурации БП 2.0 критически важна правильная настройка префиксов. Если префиксы информационной базы в настройках параметров учета и в узлах обмена (планах обмена) настроены некорректно, механизмы автонумерации могут давать сбои. Рассмотрим основные моменты:

Специфика банковских документов

Разберем конкретный пример с документом Поступление на расчетный счет. В БП 2.0 этот документ является сложным объектом. В нем есть два важных поля:

  1. Номер — внутренний номер документа в системе 1С.
  2. НомерВходящегоДокумента — номер платежного поручения из банковской выписки.

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

Как решить проблему и предотвратить дублирование

Для исправления ситуации и предотвращения её повторения рекомендуем выполнить следующие шаги:

1. Использование инструментов поиска и замены дублей

Если дубликаты уже созданы и проведены, их нельзя просто перепровести. Необходимо воспользоваться специализированной обработкой «Поиск и замена дублей». Проанализируем алгоритм действий:

2. Корректировка прав и логики обмена

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


Если ОбменДанными.Загрузка Тогда
    // Проверяем наличие документа с таким же номером, но другим GUID
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Документ.ПоступлениеНаРасчетныйСчет 
                   ГДЕ Номер = &Номер И Ссылка <> &Ссылка";
    Запрос.УстановитьПараметр("Номер", ЭтотОбъект.Номер);
    Запрос.УстановитьПараметр("Ссылка", ЭтотОбъект.Ссылка);
    
    Результат = Запрос.Выполнить();
    Если НЕ Результат.Пустой() Тогда
        // Здесь можно либо записать ошибку в лог, либо Отказ = Истина;
    КонецЕсли;
КонецЕсли;

3. Проверка настроек префиксации

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

Подводя итог, можно сказать, что появление дублей номеров при обмене — это не «глюк» системы, а следствие работы механизма быстрой загрузки данных, который приоритизирует GUID объекта над его визуальным номером. Регулярный мониторинг состояния нумерации и использование корректных префиксов — залог чистоты вашей базы данных.

← На главную