Мне часто приходиться пользоваться типовой обработкой "Групповая обработка справочников и документов". Она довольна удобна: можно обработать любые справочники и документы, имеющиеся в конфигурации, встроенный гибкий отбор, возможность изменять реквизиты и табличные части. Вот только иногда бывают ситуации, когда новое значение реквизита нельзя задать в виде константы для всех обрабатываемых элементов, а нужно формировать его из каких-нибудь данных текущего обрабатываемого элемента. Или с отобранными элементами нужно провести более широкий ряд действий, чем просто пометка на удаление, проведение, отмена проведения и т.д. То есть, выполнить какой-то произвольный код, вписанный в обработку в режиме "Предприятия".
Чтобы было понятнее, можно рассмотреть ситуацию, когда для всех элементов справочника номенклатура у которых не задан реквизит "ПолноеНаименование" необходимо в этот реквизит записать Наименование и Артикул этого элемента.
В самой форме обработки нововедений всего два: в списке действий появилось действие "Выполнить код[...]", и появилась новая закладка с полем для кода, который будет исполняться.
Открываем обработку, выбираем справочник "Номенклатура", в поле "Отбор" добавляем новую строку: Поле = ПолноеНаименование; ТипСравнения=Равно; Значение=""; (то есть пустая строка) и нажимаем кнопку "Отобрать". Переходим на закладку "Обработка" там должна появиться таблица с элементами справочника, удовлетворяющих указанному условию отбора (то есть с незаполненным ПолнымНаименованием).
Теперь собственно основной момент. Переходим на закладку "Код обработки" и вводим там код, который будет выполняться над каждым отмеченным элементом справочника номенклатура отобранным в прошлом шаге. Код будет примерно такой:
//Значение ссылки на элемент справочника или документа
//обрабатываемой в текущей итерации отобранных и отмеченных элементов
//доступно через переменную "ТекСсылка"
СпрОбъект = ТекСсылка.ПолучитьОбъект();
СпрОбъект.ПолноеНаименование = СокрЛП(ТекСсылка.Наименование)+" "+СокрЛП(ТекСсылка.Артикул);
Попытка
СпрОбъект.Записать();
Сообщить(""+ТекСсылка+" элемент записан.");
Исключение
Сообщить("Не удалось записать элемент: "+ТекСсылка+" "+ОписаниеОшибки());
КонецПопытки;
То есть обработка будет в цикле перебирать все отмеченные строки таблицы с отобранными объектами, и в каждой итерации вызывать оператор "Выполнить()" с нашим кодом.
Возвращаемся на закладку "Обработка" , в списке действий выбираем "Выполнить код[...]" и нажимаем кнопку "Выполнить".
Вот в принципе и все.
Остается только лишний раз напомнить что в неумелых руках данная обработка может натворить много бед, а в умелых стать хорошим подспорьем. Поэтому не забывайте и не ленитесь лишний раз делать резервные копии базы, и проверять код который вы собираетесь запускать на выполнение. Всем успехов!