Мне часто приходиться пользоваться типовой обработкой «Групповая обработка справочников и документов». Она довольна удобна: можно обработать любые справочники и документы, имеющиеся в конфигурации, встроенный гибкий отбор, возможность изменять реквизиты и табличные части. Вот только иногда бывают ситуации, когда новое значение реквизита нельзя задать в виде константы для всех обрабатываемых элементов, а нужно формировать его из каких-нибудь данных текущего обрабатываемого элемента. Или с отобранными элементами нужно провести более широкий ряд действий, чем просто пометка на удаление, проведение, отмена проведения и т.д. То есть, выполнить какой-то произвольный код, вписанный в обработку в режиме «Предприятия».
Чтобы было понятнее, можно рассмотреть ситуацию, когда для всех элементов справочника номенклатура у которых не задан реквизит «ПолноеНаименование» необходимо в этот реквизит записать Наименование и Артикул этого элемента.
В самой форме обработки нововедений всего два: в списке действий появилось действие «Выполнить код[…]», и появилась новая закладка с полем для кода, который будет исполняться.
Открываем обработку, выбираем справочник «Номенклатура», в поле «Отбор» добавляем новую строку: Поле = ПолноеНаименование; ТипСравнения=Равно; Значение=»»; (то есть пустая строка) и нажимаем кнопку «Отобрать». Переходим на закладку «Обработка» там должна появиться таблица с элементами справочника, удовлетворяющих указанному условию отбора (то есть с незаполненным ПолнымНаименованием).
Теперь собственно основной момент. Переходим на закладку «Код обработки» и вводим там код, который будет выполняться над каждым отмеченным элементом справочника номенклатура отобранным в прошлом шаге. Код будет примерно такой:
//Значение ссылки на элемент справочника или документа
//обрабатываемой в текущей итерации отобранных и отмеченных элементов
//доступно через переменную "ТекСсылка"
СпрОбъект = ТекСсылка.ПолучитьОбъект();
СпрОбъект.ПолноеНаименование = СокрЛП(ТекСсылка.Наименование)+" "+СокрЛП(ТекСсылка.Артикул);
Попытка
СпрОбъект.Записать();
Сообщить(""+ТекСсылка+" элемент записан.");
Исключение
Сообщить("Не удалось записать элемент: "+ТекСсылка+" "+ОписаниеОшибки());
КонецПопытки;
То есть обработка будет в цикле перебирать все отмеченные строки таблицы с отобранными объектами, и в каждой итерации вызывать оператор «Выполнить()» с нашим кодом.
Возвращаемся на закладку «Обработка» , в списке действий выбираем «Выполнить код[…]» и нажимаем кнопку «Выполнить».
Вот в принципе и все.
Остается только лишний раз напомнить что в неумелых руках данная обработка может натворить много бед, а в умелых стать хорошим подспорьем. Поэтому не забывайте и не ленитесь лишний раз делать резервные копии базы, и проверять код который вы собираетесь запускать на выполнение. Всем успехов!
Было уже во многих обработках:
Например в Ei:
Кроме встроенного языка+установка реквизитов+проведение+загрузка данных. Причем для любых данных не только находящихся в БД…
German так я на эксклюзивный патент и не претендую.
Кроме того Ei — 2.5 Mb, ГрупповаяОбработкаСправочниковИДокументов — 45 Kb.
Меня длинным гуглевским урлом не напугаешь ))
У меня тоже есть такая же разработка(сам писал) ))) но со временем я от нее отказался…
http://www.infostart.ru/profile/15778/projects/2795/ , но со временем Вам понравится(я уже пользуюсь только ей), тем более я скоро продолжу описание http://www.infostart.ru/profile/15778/blogs/709/ (извините за рекламу я не со зла)
Попробуйте попользоваться
kitt, спасибо! Быстро, просто и как раз то, что нужно ))
Огромное спасибо!
Спасибо хорошая обработка а самое главное очень гибкая.
Респект kitt 💡
Плюс, конечно. Спасибо.
Спасибо огромное, в своё время обработка очень мне помогла!
Спасибо, мне помогла. Есть пожелание: для примера показать в закомментированом виде наиболее распространенные варианты кода.
Спасибо, постоянно использую, очень удобно
Очень полезная обработка. Пользуюсь постоянно. Спасибо автору.
Я считаю, чем обработка универсальнее, тем она так сказать неудобнее. Я заметил, что в универсальных обработках есть бока, которые проявляются в нетиповых решениях. Поэтому конечно люди пишут свои. Мне например эта подошла как раз, и интерфейс я сделал бы таким же, если бы писал сам. Спасибо автору и удачи.
Спасибо хорошая обработка
Я не понял, а как обратится к объекту если нужно обработать и табличные части и реквизиты документов ?
(17) hedgehog.net,
Документ.ПоступлениеТоваров.Товары.__НужныйРеквизит__
Обработка классная! спасибо!
Приветствую всех! Кому надо разработать код для данной обработки, пишите на isihome@yandex.ru (предоплата)
да. действительно маст-хэв. Можно отобрать сразу несколько документов и сделать с ними что захочешь, например я использовал для удаления объектов. 😉
На управляемых формах ? В описании надо бы указать, это важно.
Картинку очень желательно добавлять в описание!
(23) IsiKosta, смотри дату публикации и включай голову
Для Розница, редакция 1.0 потребовались незначительные изменения в коде, но РАБОТАЕТ!
Доволен заказчик, доволен Я, автору Респект