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