Процедура закрытия месяца в современных конфигурациях на базе 1С:ERP, Комплексная автоматизация 2 и Управление торговлей 11 является одним из самых сложных и ресурсоемких процессов — для автоматического исправления ошибок учета есть обработка закрытия месяца в 1С:ERP и КА. Одной из наиболее частых проблем, с которой сталкиваются специалисты, является сбой на этапе «Расчёт сумм документов в валютах учёта и перепроведение по финансовым регистрам». Ошибка может проявляться как в виде явных сообщений о невозможности актуализировать движения по документам РеализацияТоваровУслуг, так и в виде «бесконечного» выполнения фонового задания, которое не завершается сутками.
В этой статье мы подробно разберем причины возникновения данной ситуации, проанализируем механизмы работы платформы и предложим конкретные шаги по исправлению ошибок, основываясь на практическом опыте решения подобных задач.
Прежде чем приступать к исправлению, давайте поймем, что именно делает система на этом этапе. В версиях 11.5 (и выше) механизм проведения документов по финансовым регистрам был существенно переработан. Теперь при записи документа не всегда сразу формируются все движения по регистрам накопления, отвечающим за управленческий баланс, взаиморасчеты и себестоимость — выявить расхождения по ним поможет обработка сверки регистров товаров и себестоимости. Вместо этого система создает записи в специальных технических регистрах — «Задания к распределению...».
При закрытии месяца запускается регламентное задание, которое считывает эти задания и в многопоточном режиме выполняет расчет сумм в валютах учета и актуализирует движения. Если в коде конфигурации, данных документа или логике распределения возникает сбой, фоновый процесс может либо «упасть» с ошибкой, либо попасть в бесконечный цикл.
Как показывает практика, первой и самой распространенной причиной ошибок являются некорректно реализованные доработки. Рассмотрим ситуацию: если в документ внесены изменения (через расширения или напрямую в конфигурацию), которые влияют на структуру движений или подписки на события, стандартный механизм актуализации может конфликтовать с ними.
Проанализируем ситуацию: если при временном отключении всех расширений или приведении базы к типовому состоянию ошибка исчезает, значит, причину нужно искать в коде ваших доработок. Обратите особое внимание на:
ПередЗаписью и ПриЗаписи для документов реализации (здесь поможет история изменения документов).Одной из наиболее коварных проблем является ситуация, когда процесс закрытия месяца «крутится» сутками без видимого результата. Это часто связано с механизмом распределения заданий по потокам. В некоторых релизах (например, в ветке 11.5.25) был замечен баг, при котором система не может корректно разделить данные между фоновыми заданиями, что приводит к зацикливанию.
Рассмотрим техническое решение. Нам необходимо проверить менеджер записей регистра сведений ЗаданияКРаспределениюВзаиморасчетов. В функции ДанныеДляМногопоточнойФоновойОбработки может содержаться условие, которое блокирует корректный выход из цикла при фоновом выполнении.
Посмотрим на пример возможной корректировки кода:
// В менеджере регистра ЗаданияКРаспределениюВзаиморасчетов
// Найдите функцию ДанныеДляМногопоточнойФоновойОбработки
// Попробуйте временно исключить проверку признака фоновой обработки,
// если это приводит к бесконечному ожиданию данных в потоке:
// Было:
Если СтруктураФормированияПотока.ФоноваяОбработкаЗаданий Тогда
// Логика формирования данных для потока
КонецЕсли;
// Попробуйте выполнить расчет без этого условия или проанализируйте,
// почему СтруктураФормированияПотока не инициализируется корректно.
Такое изменение позволяет системе обработать задания в основном потоке или корректно инициализировать выборку данных для параллельных процессов, что зачастую решает проблему «бесконечного кружка».
Если система выдает конкретные сообщения об ошибках («Завершилось с ошибками»), необходимо выяснить, какие именно данные мешают проведению. Часто это связано с тем, что документы заполнялись программно (через сторонние обработки или загрузки) and в них нарушена ссылочная целостность или логика учета — для быстрой диагностики базы пригодится обработка проверки и исправления битых ссылок в 1С.
Выясним причину (возможно, потребуется исправление ключей аналитики учета), выполнив следующие проверки:
Партнер, Контрагент, Договор, Организация (используйте отчет для поиска ошибок в учете).Иногда записи в регистрах ЗаданияКРаспределению... могут стать «битыми» или избыточными после неудачных попыток закрытия месяца. Чтобы сбросить состояние очереди, можно попробовать очистить эти регистры за проблемный период.
Разберем по шагам, как это сделать:
Задания к распределению взаиморасчетов (или аналогичные по себестоимости).Поскольку актуализация движений выполняется в фоновом режиме, текст ошибки в интерфейсе часто бывает крайне скудным. Чтобы получить подробную техническую информацию, нам необходимо проанализировать Журнал регистрации.
Проделаем следующие действия:
РегламентноеЗадание.АктуализацияДвиженийПоФинансовымРегистрам.Подводя итог, отметим, что проблема с актуализацией движений чаще всего носит комплексный характер. Мы рекомендуем начинать с диагностики расширений, так как типовые конфигурации на последних патчах обычно работают стабильно. Если же база типовая, то основным инструментом решения становится анализ регистра заданий и проверка программного кода в части многопоточности.
Помните, что перед внесением любых изменений в код или массовым удалением записей в регистрах, необходимо обязательно создать резервную копию базы данных. Процедура закрытия месяца очень чувствительна к целостности данных, и любые некорректные действия могут привести к расхождениям в финансовой отчетности.