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

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

1

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

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

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

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

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

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

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

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

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

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

 КонецЦикла;

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

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

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

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

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

Next Post

C Новым годом, дорогие друзья!

Чт Дек 30 , 2010
С новым годом, дорогие посетители 1С-h! C наступающим 2011 годом! Пусть в новом году у вас все будет хорошо,