Как автоматически записывать данные из справочника в независимый периодический регистр сведений?

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

При разработке конфигураций на платформе 1С часто возникает задача дублирования данных из справочников в РегистрыСведений. Это может быть продиктовано необходимостью использования механизма СрезПоследних для аналитики или получения исторических данных. Разберем, как правильно реализовать процесс записи в регистр при сохранении элемента справочника.

Основные принципы архитектуры

Прежде чем приступать к написанию кода, важно проанализировать необходимость создания регистра. Если данные в справочнике являются статичными и не требуют хранения истории изменений, использование регистра может быть избыточным. Однако, если задача требует получения состояния данных на конкретную дату, независимый периодический регистр — верное решение. Ключевое правило: данные, по которым вы будете искать запись, должны стать Измерениями регистра, а хранимые значения — Ресурсами.

Реализация записи в модуле объекта

Для решения задачи мы воспользуемся событием ПриЗаписи в модуле справочника. Именно в этом обработчике объект уже имеет Ссылку, что позволяет корректно идентифицировать запись в регистре.

Разберем по шагам, как реализовать логику обновления регистра:

  1. Создаем НаборЗаписей регистра сведений.
  2. Устанавливаем отбор по Измерению (например, по ссылке на текущий элемент справочника).
  3. Проверяем, является ли элемент помеченным на удаление.
  4. При необходимости записываем новые данные или очищаем набор.

Рассмотрим пример кода, который можно использовать в модуле справочника:


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

Альтернативный подход: использование подписки на событие

Хотя код в модуле объекта работает корректно, более профессиональным решением является использование ПодпискиНаСобытие. Это позволяет вынести логику работы с регистром за пределы модуля справочника, что значительно облегчает обновление типовых конфигураций в будущем.

При использовании ПодпискиНаСобытие:

Важные нюансы работы с данными

При реализации записи всегда учитывайте следующие моменты:

Использование связки Справочник и РегистрСведений позволяет гибко настраивать отчетность, используя СрезПоследних. Следуя приведенным выше инструкциям, вы обеспечите стабильную и быструю работу системы.

← На главную