В типовых конфигурациях 1С:ERP Управление предприятием (особенно редакций 2.1 и 2.2) взаиморасчеты могут вестись в режиме отложенного (офлайн) распределения. При этом периодически выполняется регламентное задание «Выполнение отложенных движений по расчетам с клиентами/поставщиками». В определенных ситуациях пользователи сталкиваются с тем, что после очередного запуска задания движения по взаиморасчетам в закрытом периоде полностью очищаются, а новые записи не формируются. Разберем, почему возникает эта ошибка и как восстановить данные без нарушения целостности закрытого периода.
Проанализируем логику работы механизма офлайн-взаиморасчетов в 1С:ERP:
ЗаданияКРаспределениюРасчетовСКлиентами.РасчетыСКлиентамиПоДокументам, начиная с даты первого изменения.Если документы находятся в строго закрытом периоде и перепроводить их нельзя, наиболее надежный путь — выгрузить наборы записей из недавней резервной копии базы данных и загрузить их в рабочую базу. Чтобы платформа не проверяла дату запрета изменения и не вызывала обработчики проведения, используем запись набора с флагом ОбменДанными.Загрузка = Истина.
Рассмотрим пример кода для внешней обработки, восстанавливающей движения регистра по конкретному документу:
// Создаем набор записей целевого регистра
НаборЗаписей = РегистрыНакопления.РасчетыСКлиентамиПоДокументам.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка);
// Читаем предварительно сохраненную таблицу движений из файла или архивной базы
// В данном примере ТаблицаДвижений - это выгруженный ранее набор записей
НаборЗаписей.Загрузить(ТаблицаДвижений);
// Отключаем стандартные проверки бизнес-логики и дату запрета изменения
НаборЗаписей.ОбменДанными.Загрузка = Истина;
Попытка
НаборЗаписей.Записать();
Сообщить("Движения успешно восстановлены для документа: " + Строка(ДокументСсылка));
Исключение
Сообщить("Ошибка записи движений: " + ОписаниеОшибки());
КонецПопытки;
Такой подход восстанавливает целостность отчетов по расчетам с клиентами за прошлые периоды без изменения дат и реквизитов самих документов-регистраторов.
Если движения были удалены из-за конфликта с датой запрета изменения, необходимо выполнить регламентную процедуру под пользователем, у которого сняты ограничения на редактирование закрытых периодов:
ВыполнениеОтложенныхДвиженийПоРасчетамСКлиентами.РасчетыСКлиентамиПоДокументам.Чтобы регламентное задание не пыталось снова очистить движения прошлых периодов при возникновении коллизий, разберем порядок проверки очереди заданий:
ЗаданияКРаспределениюРасчетовСКлиентами (через Все функции / Функции для технического специалиста).Своевременный контроль даты запрета для служебных пользователей и корректное ведение очереди заданий позволяют исключить потерю движений по расчетам с клиентами и поставщиками.