В процессе эксплуатации систем на базе 1С, особенно в связке «Управление торговлей 10.3» и «Бухгалтерия предприятия», часто возникает проблема избыточного обмена данными. Например, после того как документ уже был передан в бухгалтерию, менеджер в торговой базе решает добавить комментарий или изменить второстепенное описание. Система автоматически регистрирует это изменение, и документ снова «улетает» в обмен, что может привести к нежелательным последствиям: перезаписи данных в БП, конфликтам в закрытых периодах или просто к неоправданному росту трафика и времени синхронизации.
В этой статье мы разберем несколько эффективных способов, как настроить систему так, чтобы изменения в определенных полях (например, в комментарии) не вызывали повторную регистрацию документа к обмену. Мы пройдем путь от простых настроек правил до программных методов контроля.
Это самый правильный и «чистый» способ с точки зрения архитектуры 1С. В типовых обменах за логику попадания объектов в очередь отвечает отдельный файл — Правила регистрации данных (ПРД). Нам потребуется программный продукт «Конвертация данных 2.1».
Рассмотрим последовательность действий:
Документы.ПоступлениеТоваровУслуг.В этом обработчике мы можем прописать логику анализа изменений. Идея заключается в том, чтобы сравнить текущее состояние объекта с тем, что уже записано в базе данных. Если значимые поля (сумма, дата, контрагент, табличная часть) не изменились, мы можем отменить регистрацию.
Пример кода в обработчике «При регистрации»:
// Получаем старую версию объекта из базы данных для сравнения
ОбъектСтарый = Объект.Ссылка.ПолучитьОбъект();
Если ОбъектСтарый <> Неопределено Тогда
// Если изменился только комментарий, а важные реквизиты остались прежними
Если Объект.Комментарий <> ОбъектСтарый.Комментарий
И Объект.СуммаДокумента = ОбъектСтарый.СуммаДокумента
И Объект.Дата = ОбъектСтарый.Дата Тогда
// Устанавливаем Отказ, чтобы документ не попал в узел обмена
Отказ = Истина;
КонецЕсли;
КонецЕсли;
После внесения правок правила нужно сохранить и загрузить обратно в УТ 10.3 через настройку узла обмена. Для оптимизации процесса разработки и тестирования таких правил полезно использовать инструмент оптимизации разработки правил регистрации в Конвертации данных 2.
Если вы не хотите работать с «Конвертацией данных», можно использовать встроенные средства платформы 1С. Для этого нам понадобится процедура ПриЗаписи в модуле нужного документа или использование подписки на событие.
Проанализируем ситуацию: когда документ записывается, платформа по умолчанию регистрирует его во всех связанных планах обмена. Мы можем «перехватить» этот момент и удалить регистрацию принудительно, если видим, что изменения некритичны.
Для реализации этого метода используем метод ПланыОбмена.УдалитьРегистрациюИзменений(). Рассмотрим пример реализации через подписку на событие ПриЗаписи:
Процедура ПриЗаписиДокументаДляОбмена(Источник, Отказ) Экспорт
// Проверяем, что запись происходит не в процессе загрузки обмена
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// Определяем узел, для которого хотим ограничить регистрацию
УзелОбмена = ПланыОбмена.ОбменУправлениеТорговлейБухгалтерияПредприятия.НайтиПоКоду("БП");
// Здесь должна быть логика проверки: изменились ли важные поля.
// Если изменился только комментарий, удаляем регистрацию
Если ТолькоКомментарийИзменился(Источник) Тогда
ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, Источник.Ссылка);
КонецЕсли;
КонецПроцедуры
Метод УдалитьРегистрациюИзменений позволяет точечно убрать конкретный документ из очереди выгрузки для определенного узла, не затрагивая другие обмены.
В сложных случаях, когда логика регистрации должна быть полностью под вашим контролем, можно пойти на радикальный шаг — отключить Авторегистрацию для конкретного документа в свойствах Плана обмена.
Разберем этот процесс по шагам:
ПоступлениеТоваровУслуг) и в свойствах установим параметр «Авторегистрация» в значение «Запретить».Важно: теперь документ вообще перестанет автоматически вставать в очередь на обмен. Теперь мы сами должны прописать код регистрации в модуле объекта (в процедуре ПриЗаписи). Это дает нам абсолютную гибкость: мы регистрируем изменения только тогда, когда это действительно нужно.
Пример ручной регистрации в модуле документа:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
// Проверяем наличие существенных изменений
Если СущественныеИзмененияПроизведены() Тогда
// Регистрируем документ для обмена вручную
Узел = ПланыОбмена.ОбменУправлениеТорговлейБухгалтерияПредприятия.НайтиПоКоду("БП");
ПланыОбмена.ЗарегистрироватьИзменения(Узел, Ссылка);
КонецЕсли;
КонецПроцедуры
Если документов много и нужно гарантированно отсекать любые «пустые» изменения, рекомендуется использовать механизм контрольных сумм (хеширования).
Суть метода заключается в следующем:
ХешВерсии.Дата + Номер + Сумма + Контрагент + СоставТабличнойЧасти).Этот способ является самым надежным, так как он не зависит от того, как именно пользователь изменил документ — интерактивно или программно обработкой.
Иногда технические сложности можно решить организационными мерами. Если документ уже «переехал» в бухгалтерскую программу, он, как правило, относится к прошлому периоду. Использование стандартного механизма «Дата запрета редактирования» в УТ 10.3 полностью предотвращает любые изменения в закрытых периодах. Если пользователь не может изменить документ, то и регистрация к обмену не возникнет. Этот метод стоит рассмотреть как дополнение к программным способам, чтобы минимизировать человеческий фактор.
Мы рассмотрели различные подходы к решению проблемы лишней регистрации документов. Наиболее гибким и рекомендуемым является использование Правил регистрации данных в «Конвертации данных 2.1». Если же требуется быстрое решение без привлечения внешних инструментов, хорошо зарекомендовал себя метод с программным удалением регистрации через ПланыОбмена.УдалитьРегистрациюИзменений() в подписках на события. Выбор конкретного метода зависит от архитектуры вашей системы и критичности данных. Для автоматического сравнения ключевых реквизитов и точечной регистрации расхождений можно использовать готовую обработку сравнения документов УТ 10.3 и БП 3.0.