Работа с регистрами сведений

Регистры сведений позволяют хранить произвольные данные в разрезе нескольких измерений. Они позволяют получить срез информации (текущее значение показателей) на любой момент времени.

Для регистров сведений связь с регистраторами не всегда обязательна.

Добавление записей в регистр сведений

Программно добавить записи в регистр сведений можно двумя способами:

  • с помощью объекта МенеджерЗаписи;
  • с помощью объекта НаборЗаписей.

Добавление записей с помощью объекта МенеджерЗаписи

Объект МенеджерЗаписи можно использовать только для работы с независимыми регистрами. Причем можно обрабатывать только одну запись. Таким образом, для того, чтобы в периодический, независимый регистр сведений “КурсыВалют” с измерением “Валюта” и ресурсами “Курс” и “Кратность” добавить одну запись – курс и кратность валюты на определенную дату – можно использовать следующий код:

КурсыВалютМенеджерЗаписи = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();

КурсыВалютМенеджерЗаписи.Период     = ДатаУстановкиКурса; // Дата курса 
КурсыВалютМенеджерЗаписи.Валюта     = Валюта; // СправочникСсылка.Валюты
КурсыВалютМенеджерЗаписи.Курс       = ЗначениеКурсаНаДату; // Устанавливаемый курс
КурсыВалютМенеджерЗаписи.Кратность  = 1; // Кратность

КурсыВалютМенеджерЗаписи.Записать();

Добавление записей в независимый регистр сведений помощью объекта НаборЗаписей

Добавление записей в независимый регистр сведений с помощью НабораЗаписей выполняется по следующему алгоритму:

  1. Создание объекта НабораЗаписи;
  2. Установка отбора по измерениям и периоду (если регистр периодический);
  3. Добавление и заполнение значений полей записи;
  4. Запись набора.

Для примера выполним добавление записей в тот же регистр сведений “КурсыВалют“, предварительно установив отбор по измерению “Валюта” и периоду.

КурсыВалютНаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();

КурсыВалютНаборЗаписей.Отбор.Валюта.Установить(Валюта);
КурсыВалютНаборЗаписей.Отбор.Период.Установить(ДатаУстановкиКурса);

Запись = КурсыВалютНаборЗаписей.Добавить();
Запись.Период = ДатаУстановкиКурса;
Запись.Валюта = Валюта; // СправочникСсылка.Валюты
Запись.Курс   = ЗначениеКурсаНаДату; // Устанавливаемый курс
Запись.Кратность = 1; // Кратность

КурсыВалютНаборЗаписей.Записать();

Добавление записей в регистр сведений, подчиненный регистратору

Для добавление записей в регистр сведений, подчиненный регистратору, выполняется с помощью объекта НаборЗаписей по следующему алгоритму:

  1. Создание объекта НаборЗаписей;
  2. Установка отбора по определенному регистратору;
  3. Заполнение записей набора;
  4. Запись набора.
// ДанныеДляПроведения - хранит данные для заполнения регистра сведений (например, выгрузка результата запроса)

НаборЗаписей = РегистрыСведений.МероприятияТрудовойДеятельности.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);

ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), ДанныеДляПроведения);

НаборЗаписей.Записать();

Изменение записей в регистре сведений

Изменение записей в независимом регистре сведений

Изменять записи в независимом регистре сведений можно как с помощью МенеджераЗаписи, так и с помощью НабораЗаписей. Изменение записей выполняется по следующему алгоритму:

  1. Создание объекта МенеджерЗаписи или НаборЗаписи;
  2. Установить отборы;
  3. Чтение записей из базы данных, соответствующих наложенному отбору;
  4. Редактирование полученных записей;
  5. Запись измененных записей.

При изменении записей в независимом регистре сведений с помощью объекта МенеджерЗаписи, действуют такие же ограничения как и при добавлении. При изменении записи с помощью менеджера, после чтения значений выполним проверку – есть ли записи для изменения.

КурсыВалютМенеджерЗаписи = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();

КурсыВалютМенеджерЗаписи.Период     = ДатаУстановкиКурса; // Дата курса 
КурсыВалютМенеджерЗаписи.Валюта     = Валюта; // СправочникСсылка.Валюты

КурсыВалютМенеджерЗаписи.Прочитать();

Если КурсыВалютМенеджерЗаписи.Выбран() Тогда
    КурсыВалютМенеджерЗаписи.Курс       = ЗначениеКурсаНаДату; // Устанавливаемый курс
    КурсыВалютМенеджерЗаписи.Кратность  = 1; // Кратность

    КурсыВалютМенеджерЗаписи.Записать();
КонецЕсли;

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

КурсыВалютНаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();

КурсыВалютНаборЗаписей.Отбор.Валюта.Установить(Валюта);
КурсыВалютНаборЗаписей.Отбор.Период.Установить(ДатаУстановкиКурса);

КурсыВалютНаборЗаписей.Прочитать();

Для Каждого Запись Из КурсыВалютНаборЗаписей Цикл
    Запись.Курс   = ЗначениеКурсаНаДату; // Устанавливаемый курс
    Запись.Кратность = 1; // Кратность
КонецЦикла;

КурсыВалютНаборЗаписей.Записать();

Изменение записей в регистрах сведений подчиненных регистраторам

Изменение записей регистров, подчиненных регистраторам, возможно только с помощью наборов записей. При этом всегда используется отбор по регистратору. Нельзя добавлять или удалять отдельные записи. Можно только считывать и записывать записи по регистратору.

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

  1. Создать объект НаборЗаписей;
  2. Установить отбор по определенному регистратору;
  3. Прочитать набор;
  4. Изменить записи набора;
  5. Записать набор.
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    МероприятияТрудовойДеятельности.Регистратор КАК Регистратор
    |ИЗ
    |    РегистрСведений.МероприятияТрудовойДеятельности КАК МероприятияТрудовойДеятельности";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
    
    Сообщить(СтрШаблон("Изменение записей по регистратору: %1", Выборка.Регистратор));

    НаборЗаписей = РегистрыСведений.МероприятияТрудовойДеятельности.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);

    Для каждого Запись Из НаборЗаписей Цикл
        Запись.ДатаМероприятия = Дата(2021, 12, 12);
    КонецЦикла;

    НаборЗаписей.Записать();

КонецЦикла;

Удаление записи в регистре сведений

Удаление записи из независимого регистра сведений

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

  1. Создать объект НаборЗаписей;
  2. Установить нужные отборы по измерениям и, если регистр периодический, периоду;
  3. Записать набор без предварительного чтения.
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Валюта.Установить(Валюта);
НаборЗаписей.Отбор.Период.Установить(ДатаУстановкиКурса);

НаборЗаписей.Записать();

Удаление записи из регистра сведений подчиненного регистратору

  1. Создать объект НаборЗаписей;
  2. Установить отбор по определенному регистратору;
  3. Прочитать набор;
  4. Удалить записи из набора (по условию);
  5. Записать набор.
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);

НаборЗаписей.Прочитать();

Для Каждого Запись Из НаборЗаписей Цикл

    Если Запись.Валюта = Валюта Тогда 
        // Предположим, что хотим удалить записи по регистратору
        // с определенной Валютой

        НаборЗаписей.Удалить(Запись);

    КонецЕсли;

КонецЦикла;

НаборЗаписей.Записать();

НаборЗаписей.Записать();

Добавить комментарий

Ваш адрес email не будет опубликован.