При настройке регулярного обмена между конфигурациями 1С:Управление торговлей 11 и 1С:Бухгалтерия предприятия 3.0 часто возникает ситуация, когда кассовые документы (ПриходныйКассовыйОрдер и РасходныйКассовыйОрдер) после первичной выгрузки дорабатываются бухгалтером непосредственно в базе приемника. Если менеджер в базе источника вносит корректировки в исходный документ задним числом, очередная синхронизация затирает бухгалтерские правки.
Типовая дата запрета изменения данных в 1С:Бухгалтерии 3.0 устанавливается в разрезе организаций и пользователей, но не позволяет точечно ограничить перезапись только определенных видов документов. Разберем основные способы решения этой задачи.
Это наиболее надежный способ, который не требует снятия конфигурации с поддержки и не сбрасывается при типовых обновлениях правил синхронизации. Мы перехватываем попытку записи существующего документа в момент загрузки данных.
Разберем по шагам реализацию через расширение:
ПриходныйКассовыйОрдер и РасходныйКассовыйОрдер.ПередЗаписью для добавленных кассовых документов.
Процедура ЗапретитьПерезаписьКассовыхДокументовПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
// Проверяем, что запись вызвана процессом загрузки обмена
Если Источник.ОбменДанными.Загрузка И НЕ Источник.ЭтоНовый() Тогда
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Проанализируем работу этого механизма: свойство Источник.ОбменДанными.Загрузка принимает значение Истина исключительно во время работы механизмов синхронизации. Метод Источник.ЭтоНовый() проверяет наличие ссылки в базе данных. Новые документы будут успешно созданы и проведены, а любые попытки обновить уже существующие документы в базе-приемнике будут отменены без нарушения целостности данных.
В типовом обмене между УТ 11.1 и БП 3.0 используются правила конвертации данных формата КД 2.0. Если требуется решить задачу непосредственно в правилах обмена, выполним следующие действия:
ExchangeRules или правила корреспондента CorrespondentExchangeRules в зависимости от стороны настройки прямого подключения).ПриходныйКассовыйОрдер и РасходныйКассовыйОрдер.Если требуется более тонкая логика управления записью, откроем обработчик события Перед загрузкой в ПКО кассового документа и зададим программный отказ от перезаписи:
// Если объект уже идентифицирован в базе-приемнике
Если Ссылка <> Неопределено И НЕ Ссылка.Пустая() Тогда
НеЗамещать = Истина;
КонецЕсли;
Если необходимо полностью отменить выполнение загрузки найденного документа без лишней обработки его табличных частей, используем параметр отказа:
Если Ссылка <> Неопределено И НЕ Ссылка.Пустая() Тогда
Отказ = Истина;
КонецЕсли;
После внесения правок сохраним правила в XML-файл и загрузим их обратно в настройку синхронизации в режиме использования внешнего файла правил.
Альтернативный подход — исключить саму регистрацию кассовых документов на узле обмена в УТ 11 после их первичной отправки. Для этого используются Правила регистрации объектов (ПРО):
ПриРегистрации правила регистрации для кассовых документов проверяется факт первоначальной выгрузки.Отказ присваивается значение Истина, предотвращая добавление записи в таблицы изменений узла плана обмена.Рассмотрим нюансы, на которые следует обратить внимание при внедрении запрета на перезапись документов:
ExchangeRules, могут быть перезаписаны типовыми макетами при обновлении конфигураций. Использование расширения с подпиской на событие исключает эту проблему.