[ Вопрос дня ] Какой способ заполнения набора записей регистра выбрать на экзамене 1С:Специалист по платформе?

Доброго дня, коллеги!
Если слушатель начинает думать, анализировать и задавать вопросы, значит он движется в правильном направлении и сертификат 1С:Специалист у него обязательно будет! Это просто вопрос времени :)

Вопрос

Добрый день. Есть два варианта заполнения набора записей регистра:

  • Построчный обход выборки из результата запроса
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл  
             Движение = Движения.ОстаткиНоменклатуры.ДобавитьРасход();
             Движение.Период = Дата;
             Движение.Номенклатура = Выборка.Номенклатура;
             Движение.Количество = Выборка.Количество;
             Движения.Записать();   
    КонецЦикла;
    
  • Загрузка набора записей значениями из переданной таблицы значений
    РезультатЗапроса = Запрос.Выполнить();
    Движения.ОстаткиНоменклатуры.Загрузить(РезультатЗапроса.Выгрузить());
    

Подскажите, это одно и тоже?

Ответ

Здравствуйте. В настоящее время мы рекомендуем использовать первый вариант заполнения набора записей регистра – построчным обходом выборки из результатов запроса. По сути, результат выполнения обоих фрагментов кода одинаковый, но есть несколько замечаний к вашему первому варианту:

  1. Не следует выполнять запись набора записей регистра в цикле (одного: ИмяРегистра.Записать() или всех сразу: Движения.Записать()). Набор записей следует записывать, только когда это необходимо – после полного заполнения набора всеми строками. Запись данных – это затратная операция. Запись производится, как правило, один раз – явным вызовом метода “Записать()” набора записей отдельного регистра (ИмяРегистра.Записать()) или же явным или неявным вызовом метода “Записать()” объекта “Движения”. (В последнем варианте записываются сразу все наборы записей регистров, для которых свойство “Записывать” установлено в значение “Истина”). В вашем варианте такая запись в цикле, скорее всего, считалась бы ошибкой, так как она резко снижает эффективность выполнения – здесь производятся многократные бесполезные операции записи данных.
  2. Заполнение строк регистра при использовании цикла по строкам выборки запроса можно сделать компактнее и эффективнее, если воспользоваться методом ЗаполнитьЗначенияСвойств(). При этом имена полей запроса и регистра должны совпадать (соответствие в этом методе по именам полей источника и приемника).

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.