Как исправить ошибочный период пересчета партий в 1С:ERP 2.5 после ввода документа с некорректной датой

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет
← На главную

В современных конфигурациях на платформе 1С, таких как 1С:ERP Управление предприятием 2.5 или 1С:Комплексная автоматизация, механизмы расчета себестоимости и партионного учета значительно отличаются от старых версий. Одной из распространенных проблем, с которой сталкиваются администраторы и программисты, является "зацикливание" или "уход в прошлое" регламентных заданий по расчету партий из-за банальной ошибки пользователя при вводе даты документа. Например, если пользователь по ошибке указал 0201 год вместо 2021, система регистрирует необходимость пересчета данных, начиная с этого аномального периода.

Рассмотрим подробно, почему это происходит, как устроена очередь заданий и какими способами можно вернуть систему в рабочее состояние, не дожидаясь окончания автоматического пересчета за сотни лет.

Разберем механизм работы очереди пересчета

В 1С:ERP 2.5 отсутствует понятие последовательностей в их классическом виде, как это было в 1С:УПП. Вместо этого используется система заданий. Когда любой документ, влияющий на движение товаров или затрат, проводится, изменяется или удаляется, система автоматически создает запись в специальных технических регистрах сведений. Эти записи сигнализируют механизму закрытия месяца, что данные изменились и требуется актуализация расчета партий и себестоимости.

Если в систему попадает документ с датой 01.01.0201, алгоритм считает, что цепочка партий нарушена именно с этого момента. Поскольку расчет партий — это строго последовательный процесс, программа будет пытаться закрыть каждый месяц, начиная с третьего века нашей эры, чтобы обеспечить корректность остатков на текущую дату. Даже если за эти периоды в базе нет других движений, система тратит время на проверку каждого месяца, создание записей в итогах и продвижение границы расчета.

Проанализируем ключевые регистры

Чтобы решить проблему, нам необходимо найти и очистить записи в технических регистрах, которые хранят информацию об этой "очереди". Основными объектами нашего внимания будут:

  1. Регистр сведений «Задания к расчету себестоимости» — здесь хранятся основные триггеры для запуска расчета.
  2. Регистр сведений «Задания к расчету партий и себестоимости» — ключевой регистр в ERP 2.5, определяющий, с какой даты и по какой организации нужно начать актуализацию данных.
  3. Регистр сведений «Состояния закрытия месяца» — в нем фиксируются статусы выполнения операций для интерфейса «Закрытие месяца».

Способ 1: Очистка через удаление записей регистра (Рекомендуемый)

Самый эффективный и безопасный метод — это программное или ручное удаление записей из регистров заданий за некорректный период. Рассмотрим, как это сделать программно, чтобы не выбирать записи вручную.

Для выполнения этой операции нам потребуется создать внешнюю обработку или воспользоваться консолью кода. Нам нужно очистить набор записей регистра ЗаданияКРасчетуСебестоимости (или аналогичного), где период меньше даты начала реального ведения учета.


// Пример программной очистки регистра заданий
Процедура ОчиститьОшибочныеЗадания()
    // Укажите дату, ранее которой задания считаются ошибочными
    ПороговаяДата = '20200101000000'; 
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Задания.Организация,
        |   Задания.Месяц
        |ИЗ
        |   РегистрСведений.ЗаданияКРасчетуСебестоимости КАК Задания
        |ГДЕ
        |   Задания.Месяц < &ПороговаяДата";
    
    Запрос.УстановитьПараметр("ПороговаяДата", ПороговаяДата);
    Результат = Запрос.Выполнить().Выбрать();
    
    Пока Результат.Следующий() Цикл
        Набор = РегистрыСведений.ЗаданияКРасчетуСебестоимости.СоздатьНаборЗаписей();
        Набор.Отбор.Организация.Установить(Результат.Организация);
        Набор.Отбор.Месяц.Установить(Результат.Месяц);
        Набор.Записать(); // Записываем пустой набор, тем самым удаляя запись
    КонецЦикла;
    
    Сообщить("Ошибочные задания успешно удалены.");
КонецПроцедуры

После удаления записей из этого регистра система перестанет пытаться пересчитать данные за 0201 год. Важно проверить также регистр ЗаданияКРасчетуПартий, так как структура регистров может незначительно отличаться в зависимости от конкретного релиза ERP 2.5.

Способ 2: Корректировка заданий через интерфейс

Если вы не хотите прибегать к программированию, можно воспользоваться типовыми инструментами администратора:

  1. Перейдите в раздел НСИ и администрирование — Обслуживание — Корректировка данных.
  2. Используйте обработку «Редактирование записей регистров».
  3. Выберите регистр Задания к расчету себестоимости.
  4. Установите фильтр по периоду (например, "меньше 2020 года") и удалите найденные строки.

После очистки рекомендуется зайти в рабочее место «Закрытие месяца». Вы увидите, что за прошлые (аномальные) периоды статус операций изменится. Возможно, потребуется вручную создать "правильное" задание на актуальный месяц для вашей организации, чтобы система поняла, откуда ей теперь следует начинать расчет.

Выясним причины быстрого прохождения "пустых" периодов

Пользователи часто удивляются: "Почему система за ночь пересчитала 300 лет?". Ответ кроется в оптимизации механизмов 1С. При выполнении задания по расчету партий программа проверяет наличие движений по регистрам накопления (таким как СебестоимостьТоваров, ВыручкаИСебестоимостьПродаж). Если за месяц записей нет, система просто ставит отметку о выполнении регламентной операции и переходит к следующему месяцу. Однако, даже такая "пустая" работа создает нагрузку на сервер БД и может привести к неоправданному росту индексов в таблицах итогов.

Радикальный метод: Трюк с итогами на уровне SQL

В исключительных случаях, если база имеет огромный объем (сотни гигабайт) и регистр заданий разросся до критических масштабов, некоторые специалисты используют команду TRUNCATE TABLE на уровне SQL-сервера. Внимание: этот метод крайне опасен и не рекомендуется для использования в обычных условиях, так как он полностью очищает таблицу без учета ссылочной целостности и логики приложения.

Штатный метод через НаборЗаписей в 1С работает достаточно быстро даже на больших объемах данных, так как мы удаляем только специфические записи за "древние" года.

Профилактика: Как избежать повторения ситуации

Чтобы подобные инциденты не повторялись, проанализируем настройки прав и ограничений в вашей базе. Самым действенным способом защиты является установка Даты запрета редактирования.

В 1С:ERP рекомендуется устанавливать дату запрета двумя способами:

Таким образом, комбинируя своевременную очистку технических регистров заданий и грамотную настройку дат запрета редактирования, вы обеспечите стабильную работу механизма закрытия месяца в 1С:ERP.

← На главную