HelpF.pro

Как заменить значение ресурса регистра сведений – универсальная процедура

В том случае, когда в каком-то регистре сведений нужно заменить несколько видов значений какого-то конкретного ресурса на заданное значение, лучше использовать вот такую универсальную процедуру (при ее вызове достаточно подставить название регистра, название ресурса и передать старые заменяемые значения и новое, на которое они заменяются):
Код 1C v 8.х
 // Процедура выполняет в независимом регистре сведений "ИмяРегистраСведений" замену 
// всех значений ресурса "ИмяИзменяемогоРесурса", // соответствующих массиву "МассивСтарыхЗначенийРесурса"
// на новое значение ресурса "НовоеЗначениеРесурса".
// В запрос можно передать дополнительное условие, ограничивающее выборку данных из регистра "ДопУсловие"
Процедура ЗаменаРесурсаНезависимогоРегистра(ИмяРегистраСведений, ИмяИзменяемогоРесурса, МассивСтарыхЗначенийРесурса, НовоеЗначениеРесурса, ДопУсловие = "")
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("МассивСтарыхЗначенийИзмерения", МассивСтарыхЗначенийРесурса);
Запрос.УстановитьПараметр("НовоеЗначениеИзмерения", НовоеЗначениеРесурса);

// Подготовим таблицу значений для позиционирования (установки отбора) на нужных записях регистра:
Запрос.Текст =
"ВЫБРАТЬ *
|ИЗ
| РегистрСведений." + ИмяРегистраСведений + " КАК Регистр
|ГДЕ
| Регистр." + ИмяИзменяемогоРесурса + " В (&МассивСтарыхЗначенийИзмерения)" + ДопУсловие;

Сообщить("1 Приступаем к выполнению запроса к данным регистра """ + ИмяРегистраСведений + """ - " + ТекущаяДата());

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

Сообщить("2 Приступаем к обработке результата запроса к регистру """ + ИмяРегистраСведений + """ - " + ТекущаяДата());

// заполнение строки progress bar
ЭлементыФормы.Индикатор2.Значение = 0; // обнуляем, чтобы при повторном запуске статусбар сбросился в 0
ЭлементыФормы.Индикатор2.МаксимальноеЗначение = ТаблицаЗаполнения.Количество(); // задаем значение для 100%

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

ЭлементыФормы.Индикатор2.Значение = ЭлементыФормы.Индикатор2.Значение + 1; //указываем прирост внутри цикла

// попробуем через СоздатьМенеджерЗаписи()
текЗапись = РегистрыСведений[ИмяРегистраСведений].СоздатьМенеджерЗаписи();

ЗаполнитьЗначенияСвойств(текЗапись, СтрокаЗаполнения);

// прочитаем эту запись (внимание, эта команда обязательна, иначе можно ненароком очистить весь регистр!)
текЗапись.Прочитать();

Если текЗапись.Выбран() Тогда // убедились, что спозиционироваться удалось
// сообщаем, что именно и на какое значение нужно изменить в регистре
текЗапись[ИмяИзменяемогоРесурса] = НовоеЗначениеРесурса;

// записываем изменения в регистре
текЗапись.Записать();

Иначе // спозиционироваться не удалось, можно выходить
Сообщить("Возникла проблема определения " + НовоеЗначениеРесурса + " в регистре через менеджер записи " + НовоеЗначениеРесурса);
КонецЕсли;

КонецЦикла;
Сообщить("3 Окончание исправления регистра """ + ИмяРегистраСведений + """ - " + ТекущаяДата());
КонецПроцедуры // ЗаменаИзмеренияНезависимогоРегистра()

Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq/view/1057.html