Как исправить документ Корректировка регистров в закрытом периоде после обновления 1С:КА 2.5.16

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

Переход на новые релизы 1С:Комплексная автоматизация (начиная с 2.5.12 и выше, особенно в ветке 2.5.16) часто сопровождается сюрпризами при попытке перезакрыть прошлые периоды. Одной из самых неприятных ошибок является сообщение системы: «Внимание! Требуется исправление остатков взаиморасчетов. Исправить остатки автоматически невозможно, так как введен некорректный документ Корректировка регистров». Это происходит потому, что механизмы контроля взаиморасчетов стали более жесткими, а структура хранения данных изменилась.

В этой статье мы подробно разберем, как исправить «красные поля» в корректировках регистров за прошлые годы, не вызывая при этом цепную реакцию перезакрытия всех последующих месяцев. Мы проанализируем причины возникновения ошибки и воспользуемся программными методами решения задачи.

Причины возникновения проблемы в версии 2.5.16

Разберем по шагам, что именно ломается при обновлении. В версии 2.5.16 фирма «1С» завершила масштабную унификацию механизмов взаиморасчетов. Даже если в настройках вашей системы все еще выбран «офлайн» режим, программный код уже активно использует структуры, характерные для онлайн-взаиморасчетов.

Проанализируем основные изменения:

  1. Объекты расчетов: Раньше во многих регистрах расчетов с клиентами и поставщиками можно было указывать прямую ссылку на документ (Заказ, Реализацию). Теперь система требует ссылку на справочник ОбъектыРасчетов. Если в старой корректировке заполнена прямая ссылка, а поле объекта расчетов пустое, система подчеркнет его красным и откажется закрывать месяц.
  2. Направления деятельности: Усилен контроль за заполнением аналитики НД. Если корректировка была создана в период, когда учет по НД не велся или был настроен иначе, новые проверки заблокируют проведение.
  3. Регистр «Расчеты по срокам»: Система пытается автоматически транслировать данные из основных регистров накопления в регистры графиков платежей. Ручные корректировки, сделанные без учета этих вспомогательных данных, создают «разрывы», которые алгоритм закрытия месяца не может обработать автоматически.

Метод программного исправления без сдвига границы закрытия

Если мы просто откроем документ Корректировка регистров, внесем изменения и нажмем «Записать», система немедленно пометит все последующие периоды как требующие перезакрытия. Чтобы «обмануть» этот механизм, мы применим программную запись с использованием специального признака.

Рассмотрим основной способ — использование свойства ОбменДанными.Загрузка = Истина. Это свойство отключает стандартные проверки при записи и, что самое важное, блокирует работу подписок на события, которые ставят период в очередь на перезакрытие.

Разберем пример кода для программного исправления движений документа:


// Определяем ссылку на наш документ корректировки
СсылкаНаДокумент = Документы.КорректировкаРегистров.НайтиПоНомеру("0000-000001", Дата("20240101"));

// Работаем с набором записей конкретного регистра, например, РасчетыСКлиентами
НаборЗаписей = РегистрыНакопления.РасчетыСКлиентами.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДокумент);
НаборЗаписей.Прочитать();

// Перебираем записи и заполняем недостающие реквизиты
Для Каждого Запись Из НаборЗаписей Цикл
    // Проверяем заполнение объекта расчетов
    Если Не ЗначениеЗаполнено(Запись.ОбъектРасчетов) Тогда
        // Здесь должна быть логика поиска или создания объекта расчетов на основании Заказа/Накладной
        Запись.ОбъектРасчетов = ПолучитьОбъектРасчетов(Запись.ЗаказКлиента); 
    КонецЕсли;
КонецЦикла;

// Записываем набор с признаком Загрузка = Истина
НаборЗаписей.ОбменДанными.Загрузка = Истина;
НаборЗаписей.Записать();

Посмотрим на этот процесс подробнее. При использовании метода Записать() с флагом Загрузка = Истина система не выполняет пересчет итогов и не регистрирует изменения в планах обмена. Это идеальный инструмент для «точечной хирургии» в закрытых периодах.

Работа со справочником Объекты расчетов

Одной из самых частых причин «красных полей» является отсутствие связи с Объектом расчетов. В новых релизах КА этот справочник является ключевым звеном. Если вы видите, что поле пустое, вам необходимо либо найти существующий объект для данного документа основания (Заказа или Реализации), либо создать его.

Проанализируем, как можно программно получить объект расчетов, если он не был создан при обновлении:


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

Очистка регистров заданий (чтобы не слетело закрытие)

Даже если вы записали движения документа через Загрузка = Истина, иногда система все равно может «заметить» изменения через механизмы платформенного контроля или если вы случайно затронули сам объект документа (шапку), а не только его движения.

Выясним причину, по которой статус периода в мониторе закрытия месяца меняется на «Требуется выполнение». Это происходит из-за появления записей в специальных регистрах сведений — регистрах заданий. В 1С:КА 2.5 это такие регистры как:

Разберем алгоритм действий для сохранения статуса «Закрыто»:

  1. Выполните исправление корректировки регистров программным кодом, как описано выше.
  2. Сразу после выполнения кода откройте указанные регистры сведений через «Все функции» (или «Функции для технического специалиста»).
  3. Найдите записи, датированные текущим моментом (моментом вашей правки) за период Январь 2024 (или тот, который вы правили).
  4. Удалите эти записи.

Важно: Это действие нужно выполнять крайне осторожно и только в том случае, если вы на 100% уверены, что ваша правка корректировки регистров не вносит реального искажения в данные, а лишь заполняет технические поля для совместимости с новым релизом.

Рекомендации по выполнению работ

Посмотрим на ситуацию со стороны рисков. Любая ручная корректировка регистров — это «мина замедленного действия». При каждом крупном обновлении логика работы с этими данными может меняться. Чтобы минимизировать проблемы в будущем, придерживайтесь следующих правил:

Проанализировав ситуацию, мы видим, что проблема «красных полей» в КА 2.5.16 — это следствие эволюции метаданных. Использование Загрузка = Истина в сочетании с очисткой регистров заданий позволяет решить проблему оперативно и без остановки работы бухгалтерии на период перепроведения старых данных.

← На главную