При работе в крупных конфигурациях на базе 1С:ERP 2.4 и выше (включая 2.5 и «Комплексную автоматизацию») пользователи часто сталкиваются с неприятной ситуацией: после создания нового элемента в справочнике Валюты система внезапно требует выполнить «Переоценку денежных средств и финансовых инструментов» за все прошлые периоды, начиная с даты начала ведения учета. Это вызывает серьезные опасения у бухгалтеров и финансовых контролеров, так как перезакрытие старых периодов в обновленной базе может привести к изменению финансовых показателей из-за обновленных алгоритмов расчета.
В этой статье мы подробно разберем, почему программа ведет себя именно так, проанализируем внутренние механизмы платформы и выясним, как вернуть статусы закрытия месяцев в актуальное состояние без фактического пересчета данных.
Для начала проанализируем ситуацию с технической точки зрения. В 1С:ERP реализован мощный механизм автоматической регистрации заданий к закрытию месяца. Этот механизм работает через подписки на события: когда в определенные справочники или документы вносятся изменения, система анализирует, на что эти изменения могут повлиять.
Рассмотрим подробнее логику работы при записи новой валюты:
Валюты срабатывает подписка на событие, которая проверяет функциональные опции мультивалютного учета.Ситуация осложняется, если в системе включен учет по МСФО или расширенный управленческий учет на плане счетов. В этих случаях программа требует обеспечить полную сопоставимость данных во всех используемых валютах отчетности.
Как отмечалось в обсуждении, наличие организаций с включенным учетом по МСФО делает механизм закрытия месяца особенно чувствительным. В старых версиях 1С:ERP (в частности, 2.4) алгоритм проверки изменений в валютах был довольно линейным: любое изменение в составе валют трактовалось как повод для полной актуализации переоценок. Выясним причину: программа стремится исключить разрывы в трансляции данных, если валюта вдруг станет функциональной валютой для одной из организаций.
Чтобы решить проблему, нам необходимо понимать, где именно хранятся записи о «слетевшем» закрытии. Рассмотрим основные регистры:
ЗаданияКЗакрытиюМесяца: это основной «виновник». Именно здесь хранятся записи о том, какие регламентные операции (например, ПереоценкаДенежныхСредств) требуют выполнения в конкретном месяце для конкретной организации.ОчередьПересчетаКурсовВалют: в него попадают записи, инициирующие пересчет курсов и зависящих от них операций.ДанныеПервичныхДокументов: иногда может использоваться системой для анализа связи документов с валютой учета.Если мы уверены, что новая валюта не использовалась в прошлых периодах и никаких движений по ней не было, мы можем безопасно удалить лишние задания. Рассмотрим, как это сделать правильно:
ЗаданияКЗакрытиюМесяца (через функции технического специалиста).ТипРегламентнойОперации. Нас интересует значение, связанное с переоценкой денежных средств.Важно: этот метод считается наиболее безопасным, так как он не затрагивает сами данные учета, а лишь убирает «напоминание» системы о необходимости расчета.
Если записей слишком много (например, учет ведется по 50 организациям за 5 лет), ручное удаление нецелесообразно. Посмотрим на пример кода, который может помочь очистить регистр программно:
// Пример кода для очистки очереди заданий по конкретной операции
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Задания.Регистратор,
| Задания.Организация,
| Задания.Месяц
|ИЗ
| РегистрСведений.ЗаданияКЗакрытиюМесяца КАК Задания
|ГДЕ
| Задания.Месяц < &ДатаГраницыЗапрета
| И Задания.ТипРегламентнойОперации = ЗНАЧЕНИЕ(Перечисление.ТипыРегламентныхОпераций.ПереоценкаДенежныхСредств)";
Запрос.УстановитьПараметр("ДатаГраницыЗапрета", '20230101'); // Укажите свою дату
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Набор = РегистрыСведений.ЗаданияКЗакрытиюМесяца.СоздатьНаборЗаписей();
Набор.Отбор.Организация.Установить(Результат.Организация);
Набор.Отбор.Месяц.Установить(Результат.Месяц);
// Дополнительные отборы по измерениям регистра...
Набор.Записать();
КонецЦикла;
При использовании этого метода проанализируем структуру измерений регистра в вашей версии ERP, чтобы не удалить лишние задания по другим операциям (например, по расчету себестоимости).
Чтобы минимизировать риск «слета» в будущем, при создании новой валюты проанализируем правильность ввода ее курсов. Если вы создаете валюту сегодня, не вводите курс за 1980-й год или начало текущего года, если это не требуется. Система анализирует период действия курсов, и ввод исторического курса «на всякий случай» гарантированно спровоцирует требование пересчета за весь этот период.
Выясним причину, по которой «честное» перезакрытие может быть опасным. Даже если первичные документы не менялись, при запуске процедуры закрытия месяца за 2021 или 2022 год система будет использовать текущие алгоритмы кода. Если за это время вы обновляли конфигурацию (например, с ERP 2.4.11 на 2.4.13 или выше), формулы распределения затрат или логика формирования проводок могли измениться. Это может привести к:
Поэтому ручная корректировка РС Задания к закрытию месяца является стандартной и рекомендуемой практикой в среде экспертов 1С при возникновении подобных системных коллизий.
Подводя итог, мы видим, что проблема «слетающего» закрытия при добавлении валюты — это особенность архитектуры 1С:ERP, направленная на обеспечение избыточной точности. Зная, как управлять регистрами заданий, вы сможете легко поддерживать порядок в системе без риска искажения исторических данных.