Как в регистре сведений изменить значение какого-либо параметра по условию – универсальная процедура (1С: Программисту)

Вопрос Как в регистре сведений изменить значение какого-либо параметра по условию?
Ответ
Пример. Регистр сведений «усСтрокиОтбора» содержит ресурс «Исполнитель» (тип – справочник «усРаботники»). Требуется не заполненное значение «Исполнителя» в регистре заменить на конкретного исполнителя «Жеглов».

Для этих целей можно использовать универсально написанную процедуру:

Процедура ПерезаполнитьРегистр()
 // с помощью конструктора запросов создаем запрос ко всем измерениям, ресурсам и реквизитам регистра (для примера, возьмем регистр усСтрокиОтбора),
 // при этом специальным образом определим тот параметр, который хотим изменить (в нашем примере это "исполнитель"):
 Запрос = Новый Запрос;
 Запрос.Текст =
 "ВЫБРАТЬ
 | &НовыйИсполнитель КАК Исполнитель, // <- определим, что незаполненные Исполнители будут у нас Жегловым
 | усСтрокиОтбора.Владелец,
 | усСтрокиОтбора.СтрокаНомер,
 | усСтрокиОтбора.Идентификатор,
 | усСтрокиОтбора.ИдентификаторПакета,
 | усСтрокиОтбора.ТипОперации,
 | усСтрокиОтбора.Ячейка,
 | усСтрокиОтбора.ТранспортнаяЕдиница,
 | усСтрокиОтбора.Номенклатура,
 | усСтрокиОтбора.ЕдиницаХранения,
 | усСтрокиОтбора.Качество,
 | усСтрокиОтбора.СрокГодности,
 | усСтрокиОтбора.СерийныйНомер,
 | усСтрокиОтбора.ПартияТовара,
 | усСтрокиОтбора.ЗаказНаОтгрузку,
 | усСтрокиОтбора.Количество,
 | усСтрокиОтбора.КоличествоБазовых,
 | усСтрокиОтбора.ЕдиницаДробления,
 | усСтрокиОтбора.СтатусСоздано,
 | усСтрокиОтбора.СтатусВыполнено,
 | усСтрокиОтбора.СтатусОтменено,
 | усСтрокиОтбора.ПричинаБлокировки,
 | усСтрокиОтбора.НомерДляСортировки,
 | усСтрокиОтбора.НеКонтролировать,
 | усСтрокиОтбора.БезПредварительногоПланирования
 |ИЗ
 | РегистрСведений.усСтрокиОтбора КАК усСтрокиОтбора
 |ГДЕ
 | усСтрокиОтбора.Исполнитель = ЗНАЧЕНИЕ(Справочник.усРаботники.ПустаяСсылка)";// <- условие отбора только незаполненных исполнителем записей регистра
 // Жеглова найдем в справочнике по коду
 Запрос.УстановитьПараметр("НовыйИсполнитель", Справочники.усРаботники.НайтиПоКоду("Жеглов"));

 // выгрузим запрос в таблицу значений ТаблицаЗаполнения
 ТаблицаЗаполнения = Запрос.Выполнить().Выгрузить();

 // Создадим набор данных и для плана обмена определим, что выпоняется загрузка данных:
 НаборЗаписей = РегистрыСведений.усСтрокиОтбора.СоздатьНаборЗаписей();
 НаборЗаписей.ОбменДанными.Загрузка = Истина;

 // для каждой строки таблицы значений установим отбор и перезапишем регистр
 Для Каждого СтрокаЗаполнения Из ТаблицаЗаполнения Цикл

 // для каждого элемента отбора определяем отбор нашего набора записей по значению этой графы в текущей строке из таблицы значений:
 Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл
 ЭлементОтбора.Установить(СтрокаЗаполнения[ЭлементОтбора.Имя])
 КонецЦикла;

 // заполняем строку регистра сведений данными строки таблицы значений
 ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), СтрокаЗаполнения);

 // записываем:
 НаборЗаписей.Записать();

 // очищаем для следующего использования:
 НаборЗаписей.Очистить();

 КонецЦикла;

КонецПроцедуры

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

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

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