Как убрать автоматическую регистрацию документа к обмену при изменении некритичных реквизитов

Программист 1С:Управление торговлей Управленческий учет IT и автоматизация бизнеса
← На главную

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

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

Метод 1. Настройка правил регистрации через «Конвертацию данных»

Это самый правильный и «чистый» способ с точки зрения архитектуры 1С. В типовых обменах за логику попадания объектов в очередь отвечает отдельный файл — Правила регистрации данных (ПРД). Нам потребуется программный продукт «Конвертация данных 2.1».

Рассмотрим последовательность действий:

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

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

Пример кода в обработчике «При регистрации»:


// Получаем старую версию объекта из базы данных для сравнения
ОбъектСтарый = Объект.Ссылка.ПолучитьОбъект();

Если ОбъектСтарый <> Неопределено Тогда
    // Если изменился только комментарий, а важные реквизиты остались прежними
    Если Объект.Комментарий <> ОбъектСтарый.Комментарий 
        И Объект.СуммаДокумента = ОбъектСтарый.СуммаДокумента 
        И Объект.Дата = ОбъектСтарый.Дата Тогда
        
        // Устанавливаем Отказ, чтобы документ не попал в узел обмена
        Отказ = Истина;
    КонецЕсли;
КонецЕсли;

После внесения правок правила нужно сохранить и загрузить обратно в УТ 10.3 через настройку узла обмена. Для оптимизации процесса разработки и тестирования таких правил полезно использовать инструмент оптимизации разработки правил регистрации в Конвертации данных 2.

Метод 2. Программное удаление регистрации в модуле объекта

Если вы не хотите работать с «Конвертацией данных», можно использовать встроенные средства платформы 1С. Для этого нам понадобится процедура ПриЗаписи в модуле нужного документа или использование подписки на событие.

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

Для реализации этого метода используем метод ПланыОбмена.УдалитьРегистрациюИзменений(). Рассмотрим пример реализации через подписку на событие ПриЗаписи:


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

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

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

Метод 3. Отключение автоматической регистрации в метаданных

В сложных случаях, когда логика регистрации должна быть полностью под вашим контролем, можно пойти на радикальный шаг — отключить Авторегистрацию для конкретного документа в свойствах Плана обмена.

Разберем этот процесс по шагам:

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

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

Пример ручной регистрации в модуле документа:


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

Метод 4. Метод «Хеширования» для контроля версии (профессиональный подход)

Если документов много и нужно гарантированно отсекать любые «пустые» изменения, рекомендуется использовать механизм контрольных сумм (хеширования).

Суть метода заключается в следующем:

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

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

Метод 5. Административное ограничение (Дата запрета редактирования)

Иногда технические сложности можно решить организационными мерами. Если документ уже «переехал» в бухгалтерскую программу, он, как правило, относится к прошлому периоду. Использование стандартного механизма «Дата запрета редактирования» в УТ 10.3 полностью предотвращает любые изменения в закрытых периодах. Если пользователь не может изменить документ, то и регистрация к обмену не возникнет. Этот метод стоит рассмотреть как дополнение к программным способам, чтобы минимизировать человеческий фактор.

Заключение

Мы рассмотрели различные подходы к решению проблемы лишней регистрации документов. Наиболее гибким и рекомендуемым является использование Правил регистрации данных в «Конвертации данных 2.1». Если же требуется быстрое решение без привлечения внешних инструментов, хорошо зарекомендовал себя метод с программным удалением регистрации через ПланыОбмена.УдалитьРегистрациюИзменений() в подписках на события. Выбор конкретного метода зависит от архитектуры вашей системы и критичности данных. Для автоматического сравнения ключевых реквизитов и точечной регистрации расхождений можно использовать готовую обработку сравнения документов УТ 10.3 и БП 3.0.

← На главную