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