Ситуация, когда в системе 1С:Управление торговлей 11 (или ERP) случайно перепроводят документ многолетней давности, является критической для администратора базы данных. Система автоматически фиксирует изменения в служебных регистрах и «откатывает» статус закрытия всех последующих месяцев. В результате бухгалтер видит требование пересчитать себестоимость за огромный период (например, за 3 года), что физически невозможно или крайне рискованно из-за возможного изменения финансовых показателей.
В данной статье мы разберем, как технически «обмануть» систему, очистить задания к расчету и восстановить корректную работу без тотального пересчета прошлых периодов. Мы проанализируем механизмы работы заданий к закрытию месяца и научимся точечно исправлять последствия таких «диверсий».
Прежде всего, выясним причину такого поведения программы. В УТ 11 реализован механизм отложенных расчетов. Как только любой документ, влияющий на остатки или стоимость, проводится или изменяется, система создает запись в специальных регистрах сведений (заданиях). При запуске обработки «Закрытие месяца» программа проверяет наличие записей в этих регистрах начиная с самой ранней даты. Если вы изменили документ 2021 года, система создала задание на расчет именно с этой даты, и пока оно не будет выполнено, все последующие месяцы будут считаться неактуальными.
Чтобы программа перестала требовать закрытие прошлых периодов, нам необходимо удалить записи из служебных регистров. Рассмотрим подробнее, где именно хранятся эти «метки».
Для доступа к этим регистрам перейдем в меню «Функции для технического специалиста» (ранее — «Все функции»). В строке поиска наберем слово «Задания». Нас интересуют следующие регистры сведений:
Важное правило: Мы не рекомендуем очищать регистры полностью за все время. Нам нужно удалить только те записи, у которых поле Месяц или Дата возникновения меньше начала текущего отчетного (рабочего) периода. Все задания за текущий рабочий месяц лучше оставить, чтобы система корректно завершила текущие расчеты.
Проанализируем ситуацию с помощью встроенных средств диагностики. В самой обработке «Закрытие месяца», если нажать кнопку «Еще», можно найти отчет «Периоды заданий к расчету».
Этот отчет наглядно показывает, какой именно регистр и какой конкретно документ «тянет» последовательность назад. Это позволяет не действовать вслепую, а точечно найти записи в регистрах сведений и удалить только те, которые относятся к злополучному документу ввода остатков трехлетней давности.
Просто очистить регистры часто недостаточно. Разберем пример: вы изменили номер ГТД в документе трехлетней давности. За эти три года товар с этим ГТД уже был неоднократно продан. Теперь в системе возник коллизия: по старым записям списан ГТД «№1», а в остатках теперь числится ГТД «№2». Это приведет к ошибке «Отрицательные остатки по номерам ГТД» или «Развернутое сальдо по видам запасов» уже в текущем месяце. Для автоматического исправления таких разрывов подойдёт помощник корректировки отрицательных остатков по ГТД в текущем периоде.
Вместо того чтобы пересчитывать 3 года, применим следующий алгоритм:
Если вы понимаете, что правка старого документа была ошибкой и хотите вернуть всё «как было», но бэкап разворачивать слишком долго, воспользуемся советом опытных программистов:
Рассмотрим вариант выгрузки документа из архивной копии. Если у вас есть копия базы, где документ еще в старом состоянии, можно выгрузить его через обработку «Выгрузка и загрузка данных XML» и загрузить в рабочую базу в режиме разработчика (с отключением обработки ПередЗаписью и ПриЗаписи). Это позволит вернуть данные в документе, не вызывая повторного срабатывания механизмов регистрации заданий к закрытию.
Пример программного кода для записи объекта без регистрации изменений (в консоли кода):
ДокументОбъект = Документы.ВводОстатков.НайтиПоНомеру("001", ДатаДокумента).ПолучитьОбъект();
ДокументОбъект.ОбменДанными.Загрузка = Истина; // Отключаем проверки и регистрацию заданий
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
Использование свойства ОбменДанными.Загрузка = Истина является ключевым методом для исправления технических ошибок в закрытых периодах, когда нужно изменить реквизит без инициации пересчета себестоимости.
Чтобы подобные ситуации не повторялись, проанализируем настройки безопасности. В 1С:УТ 11 существует Дата запрета редактирования. Однако, как показывает практика, пользователи с полными правами часто её игнорируют или временно отключают.
Рекомендация: Всегда устанавливайте дату запрета не только для пользователей, но и для администраторов. Если необходимо внести текстовое исправление в старый документ (например, поправить опечатку в комментарии или номере ГТД, которая не влияет на суммы), используйте обработку «Групповое изменение реквизитов».
В дополнительных настройках этой обработки включите флаг «Записывать объекты без проверок». Это позволит изменить текстовое поле, не вызывая срабатывания механизмов «Заданий к закрытию месяца».
Если вы столкнулись со «слетевшим» закрытием месяца за несколько лет:
Помните, что вмешательство в данные трехлетней давности — это крайняя мера. Если отчетность уже сдана, любые исправления лучше вносить корректировками текущего периода. При значительном объеме исторических данных для очистки базы и формирования остатков можно запустить многопоточную свёртку 1С:ERP.