Что делать, если пропали движения в регистре «Расчеты с клиентами по документам» в закрытом периоде 1С:ERP?

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

В типовых конфигурациях 1С:ERP Управление предприятием (особенно редакций 2.1 и 2.2) взаиморасчеты могут вестись в режиме отложенного (офлайн) распределения. При этом периодически выполняется регламентное задание «Выполнение отложенных движений по расчетам с клиентами/поставщиками». В определенных ситуациях пользователи сталкиваются с тем, что после очередного запуска задания движения по взаиморасчетам в закрытом периоде полностью очищаются, а новые записи не формируются. Разберем, почему возникает эта ошибка и как восстановить данные без нарушения целостности закрытого периода.

Почему регламентное задание удаляет движения

Проанализируем логику работы механизма офлайн-взаиморасчетов в 1С:ERP:

  1. Регистрация необходимости пересчета: при любых изменениях в цепочке документов (редактирование дат, договоров, сумм, проведение корректировок) система ставит отметку в регистре сведений ЗаданияКРаспределениюРасчетовСКлиентами.
  2. Сдвиг границы и очистка набора записей: фоновое задание берет объект расчетов и перед распределением по алгоритму ФИФО сначала очищает существующие движения в регистре накопления РасчетыСКлиентамиПоДокументам, начиная с даты первого изменения.
  3. Конфликт с датой запрета изменения данных: если фоновое задание выполняется под пользователем или системной учетной записью, для которой установлена дата запрета редактирования, процедура успешно очищает старые движения, но платформа блокирует запись новых строк в закрытом периоде. В результате движения по документу оказываются пустыми.
  4. Таймауты и взаимоблокировки: при высокой нагрузке на СУБД транзакция распределения может аварийно завершиться после фазы очистки движений, не успев записать и зафиксировать новые рассчитанные данные.

Способ 1. Программный перенос движений из резервной копии без открытия периода

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

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


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

// Читаем предварительно сохраненную таблицу движений из файла или архивной базы
// В данном примере ТаблицаДвижений - это выгруженный ранее набор записей
НаборЗаписей.Загрузить(ТаблицаДвижений);

// Отключаем стандартные проверки бизнес-логики и дату запрета изменения
НаборЗаписей.ОбменДанными.Загрузка = Истина;

Попытка
    НаборЗаписей.Записать();
    Сообщить("Движения успешно восстановлены для документа: " + Строка(ДокументСсылка));
Исключение
    Сообщить("Ошибка записи движений: " + ОписаниеОшибки());
КонецПопытки;

Такой подход восстанавливает целостность отчетов по расчетам с клиентами за прошлые периоды без изменения дат и реквизитов самих документов-регистраторов.

Способ 2. Повторный запуск фонового задания с полными правами

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

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

Способ 3. Анализ и очистка очереди заданий к распределению

Чтобы регламентное задание не пыталось снова очистить движения прошлых периодов при возникновении коллизий, разберем порядок проверки очереди заданий:

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

Своевременный контроль даты запрета для служебных пользователей и корректное ведение очереди заданий позволяют исключить потерю движений по расчетам с клиентами и поставщиками.

← На главную