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

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

При разработке на платформе 1С:Предприятие начинающие разработчики часто сталкиваются с ошибками при попытке изменения данных в регистре сведений. Наиболее распространенная ситуация — попытка обратиться к полям регистра как к свойствам объекта РегистрСведенийНаборЗаписей напрямую, минуя коллекцию строк. Рассмотрим, почему это приводит к ошибкам и как сделать это правильно.

Разбор причины ошибки

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

Правильный алгоритм работы с набором записей

Для того чтобы внести изменения в регистр сведений, необходимо придерживаться строгой последовательности действий. Давайте разберем этот процесс по шагам:

  1. Создание набора: Вызываем метод СоздатьНаборЗаписей() для нужного регистра.
  2. Установка отбора: Обязательно указываем отбор по измерениям, чтобы ограничить выборку теми записями, которые мы планируем изменять.
  3. Чтение данных: Вызываем метод Прочитать(), чтобы данные из базы попали в наш объект.
  4. Обход коллекции: Поскольку записей может быть несколько (или даже одна), необходимо перебрать их в цикле.
  5. Запись изменений: Применяем метод Записать() для сохранения результатов.

Пример корректного кода для изменения записи

Проанализируем пример кода, который позволит избежать ошибки обращения к набору как к единичному объекту:


// Создаем набор записей
НаборЗаписей = РегистрыСведений.АИС_УведомленияПользователей.СоздатьНаборЗаписей();

// Устанавливаем отбор по нужному измерению (например, УИ)
НаборЗаписей.Отбор.УИ.Установить(ВыборкаДетальныеЗаписи.УИ);

// Считываем записи из базы данных
НаборЗаписей.Прочитать();

// Проверяем, есть ли записи, и обходим их циклом
Если НаборЗаписей.Количество() > 0 Тогда
    Для Каждого Запись Из НаборЗаписей Цикл
        Запись.Сообщать = Ложь;
        Запись.ДатаЗавершения = ТекущаяДата();
    КонецЦикла;
    
    // Сохраняем изменения обратно в базу
    НаборЗаписей.Записать();
КонецЕсли;

Почему возникают ошибки при выборке данных

Часто разработчики сталкиваются с «ошибкой чтения» при работе с результатами запроса. Рассмотрим основные причины:

Рекомендация по использованию Менеджера записи

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


Менеджер = РегистрыСведений.АИС_УведомленияПользователей.СоздатьМенеджерЗаписи();
Менеджер.УИ = ВыборкаДетальныеЗаписи.УИ;
Менеджер.Прочитать(); // Загружаем данные по ключу

Если Менеджер.Выбран() Тогда
    Менеджер.Сообщать = Ложь;
    Менеджер.Записать();
КонецЕсли;

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

← На главную