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