В том случае, когда в каком-то регистре сведений нужно заменить несколько видов значений какого-то конкретного ресурса на заданное значение, лучше использовать вот такую универсальную процедуру (при ее вызове достаточно подставить название регистра, название ресурса и передать старые заменяемые значения и новое, на которое они заменяются):
// Процедура выполняет в независимом регистре сведений "ИмяРегистраСведений" замену // всех значений ресурса "ИмяИзменяемогоРесурса", // соответствующих массиву "МассивСтарыхЗначенийРесурса" // на новое значение ресурса "НовоеЗначениеРесурса". // В запрос можно передать дополнительное условие, ограничивающее выборку данных из регистра "ДопУсловие" Процедура ЗаменаРесурсаНезависимогоРегистра(ИмяРегистраСведений, ИмяИзменяемогоРесурса, МассивСтарыхЗначенийРесурса, НовоеЗначениеРесурса, ДопУсловие = "") Запрос = Новый Запрос; Запрос.УстановитьПараметр("МассивСтарыхЗначенийИзмерения", МассивСтарыхЗначенийРесурса); Запрос.УстановитьПараметр("НовоеЗначениеИзмерения", НовоеЗначениеРесурса); // Подготовим таблицу значений для позиционирования (установки отбора) на нужных записях регистра: Запрос.Текст = "ВЫБРАТЬ * |ИЗ | РегистрСведений." + ИмяРегистраСведений + " КАК Регистр |ГДЕ | Регистр." + ИмяИзменяемогоРесурса + " В (&МассивСтарыхЗначенийИзмерения)" + ДопУсловие; Сообщить("1 Приступаем к выполнению запроса к данным регистра """ + ИмяРегистраСведений + """ - " + ТекущаяДата()); ТаблицаЗаполнения = Запрос.Выполнить().Выгрузить(); Сообщить("2 Приступаем к обработке результата запроса к регистру """ + ИмяРегистраСведений + """ - " + ТекущаяДата()); // заполнение строки progress bar ЭлементыФормы.Индикатор2.Значение = 0; // обнуляем, чтобы при повторном запуске статусбар сбросился в 0 ЭлементыФормы.Индикатор2.МаксимальноеЗначение = ТаблицаЗаполнения.Количество(); // задаем значение для 100% // для каждой строки таблицы значений установим отбор и перезапишем регистр Для Каждого СтрокаЗаполнения Из ТаблицаЗаполнения Цикл ЭлементыФормы.Индикатор2.Значение = ЭлементыФормы.Индикатор2.Значение + 1; //указываем прирост внутри цикла // попробуем через СоздатьМенеджерЗаписи() текЗапись = РегистрыСведений[ИмяРегистраСведений].СоздатьМенеджерЗаписи(); ЗаполнитьЗначенияСвойств(текЗапись, СтрокаЗаполнения); // прочитаем эту запись (внимание, эта команда обязательна, иначе можно ненароком очистить весь регистр!) текЗапись.Прочитать(); Если текЗапись.Выбран() Тогда // убедились, что спозиционироваться удалось // сообщаем, что именно и на какое значение нужно изменить в регистре текЗапись[ИмяИзменяемогоРесурса] = НовоеЗначениеРесурса; // записываем изменения в регистре текЗапись.Записать(); Иначе // спозиционироваться не удалось, можно выходить Сообщить("Возникла проблема определения " + НовоеЗначениеРесурса + " в регистре через менеджер записи " + НовоеЗначениеРесурса); КонецЕсли; КонецЦикла; Сообщить("3 Окончание исправления регистра """ + ИмяРегистраСведений + """ - " + ТекущаяДата()); КонецПроцедуры // ЗаменаИзмеренияНезависимогоРегистра()
Здесь можно скачать пример обработки замены ресурса и измерения (в зависимости от регистра) «ПартияТовара» во всех регистрах сведений на примере конфигурации логистики: [download id=»6″]
В этой обработке используется приведенная тут универсальная процедура — можно посмотреть пример ее использования.