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