[ОБУЧАЛОВКА] Как перестать парить себе мозги и не фанить тюльку... - 2
30.06.09
Разработка - Механизмы платформы 1С
Статья продолжает описание полезностей, которые реализуем штатными средствами - вместо головной боли по написанию корявых доморощенных алгоритмов. ;-) В статье рассматривается расширение функционала по подбору объектов в штатной обработке Отчет.ПодборОбъектов (или внешней Uchoice.ert)
Начало (часть 1) находится здесь: //infostart.ru/articles/237/ - перед прочтением текущей статьи рекомендуется посмотреть "первую серию"... Продолжим... Практически полным аналогом внешней обработки UCHOICE.ERT является обработка, включенная в состав конфигурации: Обработка.ПодборОбъектов
Местонахождение в конфигурации
Обработка.ПодборОбъектов, как и Uchoice.ert, передает сформированный набор объектов (элементов справочника, набор документов и т.д.) "наружу" - возвращает сформированный набор объектов через список значений в ту форму (отчет/обработка конфигурации, внешний отчет/обработк, и кое-куда еще..), которая вызвала данную Обработку.ПодборОбъектов для формирования некоего набора данных по произвольным условиям. В "родительской" форме мы получаем готовый набор объектов в виде списка значений, который можем "вертеть" как хотим в зависимости от наших нужд...
В качестве примера рассмотрим задачу формирования списка номенклатуры для отсылки по эл.почте отсканированных сертификатов по запросу клиента. Менеджер, получив запрос от клиента с перечнем номенклатуры (или клиент может озвучить свою хотелку вообще пространно, типа "нужны сертификаты на ножи и термосы") - запускает "рабочее место" по работе с документами качества для выполнения требуемой задачи (а не бежит к программеру с вопросом как получить такой перечень номенклатуры), смотрим скриншот:
В качестве примера рассмотрим задачу формирования списка номенклатуры для отсылки по эл.почте отсканированных сертификатов по запросу клиента. Менеджер, получив запрос от клиента с перечнем номенклатуры (или клиент может озвучить свою хотелку вообще пространно, типа "нужны сертификаты на ножи и термосы") - запускает "рабочее место" по работе с документами качества для выполнения требуемой задачи (а не бежит к программеру с вопросом как получить такой перечень номенклатуры), смотрим скриншот:
начало работы по подбору номенклатуры
На вышеприведенном рисунке нас интересуют объекты в зеленой рамке. Назначение кнопок (X) и (XX) очевидно, это - удаление текущей строки таблицы номенклатуры и полная очистка таблицы номенклатуры (отмечена красной рамкой). Самое интересное - в кнопке ... Кто активно работает с МФ (множествеными фильтрами) в составе типовой ТиС - тот знает, что эта кнопка предназначена для отбора номенклатуры ПО ПРОИЗВОЛЬНЫМ УСЛОВИЯМ и делается это всего пару строчками кода: на кнопку повешена процедура ВыбратьПоФильтру(), смотрим:
Работаем по кнопке
Состав этой процедуры прост до безобразия:
Код процедуры, предоставляющий доступ к неисчерпаемому богатству возможностей
Особое внимание в вышеприведенном коде следует обратить на действия над СписокЗначенийМФ (в белых рамках) - его (это - список значений) мы передаем в Обработку.ПодборОбъектов, чтобы в нем же получить назад набор номенклатурных позиций...
Итак, менеджер жмакает нашу кнопочку - и получает в свое распоряжение мощный инструмент для ПРОИЗВОЛЬНОГО ПОДБОРА НУЖНОЙ ЕМУ НОМЕНКЛАТУРЫ:
Итак, менеджер жмакает нашу кнопочку - и получает в свое распоряжение мощный инструмент для ПРОИЗВОЛЬНОГО ПОДБОРА НУЖНОЙ ЕМУ НОМЕНКЛАТУРЫ:
Задание условий
Произведенный отбор номенклатуры
Вот он, миг торжества менеджера - вожделенная БКК ( Большая Красная Кнопка, лежит здесь: //infostart.ru/profile/174/projects/841/ )!!! Менеджер жмакает кнопку ОК и полученный набор номенклатуры ПЕРЕДАЕТСЯ В РОДИТЕЛЬСКУЮ ОБРАБОТКУ для дальнейшей алгоритмической обработки:
Полученный набор номенклатуры обработан особым образом для отображения
"На рисунках все красиво..." - скажет хитрый "чайник", - "Ты мне пальцем покажи, как это получается!"
И будет прав. Ибо есть одна маленькая засада. А засада следующая: Обработка.ПодборОбъектов вызывается в немодальном режиме и куда она должна передать сформированный набор данных? Понятно куда - в родительскую форму... Но как и в какое место? Ведь после открытия Обработки.ПодборОбъектов родительская обработка (из которой произошел вызов) давно "убежала" по своему коду из того места, ГДЕ ОНА ВЫЗВАЛА Обработку.ПодборОбъектов... Настоящие разведчики засад не боятся и обходят их скрытными горными (получена альпийская подготовка!) тропами (например, такими: http://tomba.infostart.ru/IMAGES/FOTO02/sklon600.jpg ), а именно: используем возможности предопределенной процедуры ПриПовторномОткрытии(), так как при нажатии манеджером БКК, тьфу! кнопки Обработка.ПодборОбъектов выполняет такой код:
И будет прав. Ибо есть одна маленькая засада. А засада следующая: Обработка.ПодборОбъектов вызывается в немодальном режиме и куда она должна передать сформированный набор данных? Понятно куда - в родительскую форму... Но как и в какое место? Ведь после открытия Обработки.ПодборОбъектов родительская обработка (из которой произошел вызов) давно "убежала" по своему коду из того места, ГДЕ ОНА ВЫЗВАЛА Обработку.ПодборОбъектов... Настоящие разведчики засад не боятся и обходят их скрытными горными (получена альпийская подготовка!) тропами (например, такими: http://tomba.infostart.ru/IMAGES/FOTO02/sklon600.jpg ), а именно: используем возможности предопределенной процедуры ПриПовторномОткрытии(), так как при нажатии манеджером БКК, тьфу! кнопки Обработка.ПодборОбъектов выполняет такой код:
Если Найти(ИмяФормыДействия, ".ert") > 0 Тогда
ОткрытьФорму("Отчет", СписВозврата, ИмяФормыДействия); т.е. производит открытие родительской формы с передачей списка объектов. А так как родительская форма не была закрыта при вызове Обработка.ПодборОбъектов (см.выше рисунок "Задание условий" //infostart.ru/articles/242/image.php?img=650 - видишь там, на заднем фоне, видна родительская формочка...?) - в родительской форме успешно отрабатывает процедура ПриПовторномОткрытии(), смотрим на ее код:
Получение списка объектов после хитрожо.. интересных действий менеджера
Белой рамкой обозначен код, блокирующий "несанкционированное" использование процедуры ПриПовторномОткрытии(). Список значений СписокЭлементовМФ УЖЕ СОДЕРЖИТ список номенклатуры, без всяких лишних телодвижений с нашей стороны - так как этот список значений БЫЛ НАМИ ПЕРЕДАН РАНЕЕ в Обработку.ПодборОбъектов и она произвела его заполнение самостоятельно. Приведенный выше код достаточно прост и всего лишь "перелопачивает" полученный набор номенклатурных позиций для удобоваримого вывода в таблице значений, расположенной на форме. Понятно, что при необходимости над полученным набором объектов могут быть произведены ЛЮБЫЕ ДОПУСТИМЫЕ ДЕЙСТВИЯ КАКОЙ-УГОДНО СЛОЖНОСТИ в зависимости от алгоритма/целей родительской обработки.
Все вышерасказзаное предназначено, вообщем-то для одного: показать еще раз (с другого ракурса) возможность избежать программистом "рутинных" действий по "коллекционированию" объектов (что особенно актуально для начинающих и середнячков-программистов, которые так и норовят где-нибудь косяччок забить...) и сосредоточиться на СОДЕРЖАТЕЛЬНОМ программировании "бизнес-процессов".
Попутное замечание: при использовании Обработка.ПодборОбъектов есть возможность возвращать данные в совершенно другую "родительскую" обработку (зависит от передаваемых в Обработку.ПодборОбъектов параметров), что позволяет без особых напрягов вязать достаточно содержательные цепочки обработок...
Все вышерасказзаное предназначено, вообщем-то для одного: показать еще раз (с другого ракурса) возможность избежать программистом "рутинных" действий по "коллекционированию" объектов (что особенно актуально для начинающих и середнячков-программистов, которые так и норовят где-нибудь косяччок забить...) и сосредоточиться на СОДЕРЖАТЕЛЬНОМ программировании "бизнес-процессов".
Попутное замечание: при использовании Обработка.ПодборОбъектов есть возможность возвращать данные в совершенно другую "родительскую" обработку (зависит от передаваемых в Обработку.ПодборОбъектов параметров), что позволяет без особых напрягов вязать достаточно содержательные цепочки обработок...
Собственно говоря, меня немного занесло в другую сторону ( http://tomba.infostart.ru/IMAGES/FOTO03/ann2.jpg ) и я решительно возвращаюсь к тому, что хотел рассказать.
Всем хороши Обработка.ПодборОбъектов и Uchoice.ert, кроме одного: не позволяют отбирать объекты НЕПОСРЕДСТВЕННЫМ ВЫБОРОМ САМОГО ОБЪЕКТА, а предоставляют возможность осуществлять отбор лишь манипулируя условиями, налагаемыми на разнообразные реквизиты справочников/документов. Для особо продвинутых юзеров/менеджеров это трудности не составит, а вот тем, кто не шибко разбирается, что такое "реквизиты", "условия" и прочая "программистская мутотень", - на всякий случай хорошо было бы предоставить возможность "типового" подбора - т.е. позволить выбирать ОБЪЕКТ ЦЕЛИКОМ (как это делается в типовой ТиС в разных документах по кнопке "Подбор"). Почему это не сделано "штатно" ( //infostart.ru/file.php?0,file=40 ) - сие мне не ведомо, поэтому я в полном соответствии с заголовком данной статьи не парю себе мозги, а в два счета добавляю эту возможность.
Добавляем ОБЪЕКТ ЦЕЛИКОМ в перечень реквизитов справочника/документа:
Всем хороши Обработка.ПодборОбъектов и Uchoice.ert, кроме одного: не позволяют отбирать объекты НЕПОСРЕДСТВЕННЫМ ВЫБОРОМ САМОГО ОБЪЕКТА, а предоставляют возможность осуществлять отбор лишь манипулируя условиями, налагаемыми на разнообразные реквизиты справочников/документов. Для особо продвинутых юзеров/менеджеров это трудности не составит, а вот тем, кто не шибко разбирается, что такое "реквизиты", "условия" и прочая "программистская мутотень", - на всякий случай хорошо было бы предоставить возможность "типового" подбора - т.е. позволить выбирать ОБЪЕКТ ЦЕЛИКОМ (как это делается в типовой ТиС в разных документах по кнопке "Подбор"). Почему это не сделано "штатно" ( //infostart.ru/file.php?0,file=40 ) - сие мне не ведомо, поэтому я в полном соответствии с заголовком данной статьи не парю себе мозги, а в два счета добавляю эту возможность.
Добавляем ОБЪЕКТ ЦЕЛИКОМ в перечень реквизитов справочника/документа:
Объект-справочник
Объект-документ
+ к этому заблокируем наши добавленные в список реквизитов "ссылки на объекты" от показа именно как реквизитов справочника/документов в самой Обработке.ПодборОбъектов/Uchoice.ert - есть такая возможность для удобного просмотра результатов выборки:
Уберем из перечня реквизитов для просмотра выборки
Пояснение к предыдущему коду
И тперь мы можем выполнять подбор объектов в привычной манере, не потеряв при этом возможности условий по реквизитам:
Подбор в простой штатной манере...
Все.
Очередная лекция - закончена.
В следующей статье мы попробуем решить более хитрую задачу: в возможность выбора элементов справочника по условиям, накладываемым на реквизиты справочника, добавить возможность выбора элементов справочника по условию принадлежности к некоему заранее неопределяемому составу документов... заумно...? Тогда скажем так: без лишнего "непроизводительного" программирования получить перечень элементов справочника, принадлежащих номенклатурному набору вполне конкретного клиента.. Зачем? А вот зачем: чтобы совать ему не весь прайс в 3000 позиций. а только тот перечень, который его интересует (тот, который он берет постоянно...)
Статья понравилась/пригодилась? Узнал что-то новое? Поощри автора - приплюсуй рейтинг или если хотите выразить свою благодарность другим способом - можете сделать взнос на рублевый кошелек WebMoney R292336385918 (через платежный терминал, например...)..
уффффффф... устал....
Очередная лекция - закончена.
В следующей статье мы попробуем решить более хитрую задачу: в возможность выбора элементов справочника по условиям, накладываемым на реквизиты справочника, добавить возможность выбора элементов справочника по условию принадлежности к некоему заранее неопределяемому составу документов... заумно...? Тогда скажем так: без лишнего "непроизводительного" программирования получить перечень элементов справочника, принадлежащих номенклатурному набору вполне конкретного клиента.. Зачем? А вот зачем: чтобы совать ему не весь прайс в 3000 позиций. а только тот перечень, который его интересует (тот, который он берет постоянно...)
Статья понравилась/пригодилась? Узнал что-то новое? Поощри автора - приплюсуй рейтинг или если хотите выразить свою благодарность другим способом - можете сделать взнос на рублевый кошелек WebMoney R292336385918 (через платежный терминал, например...)..
уффффффф... устал....
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.