[ОБУЧАЛОВКА] Как перестать парить себе мозги и не фанить тюльку... - 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 ), а именно: используем возможности предопределенной процедуры ПриПовторномОткрытии(), так как при нажатии манеджером БКК, тьфу! кнопки Обработка.ПодборОбъектов выполняет такой код:
Если Найти(ИмяФормыДействия, ".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 - есть такая возможность для удобного просмотра результатов выборки:



Уберем из перечня реквизитов для просмотра выборки

Пояснение к предыдущему коду
И тперь мы можем выполнять подбор объектов в привычной манере, не потеряв при этом возможности условий по реквизитам:


Подбор в простой штатной манере...
Все.
Очередная лекция - закончена.
В следующей статье мы попробуем решить более хитрую задачу: в возможность выбора элементов справочника по условиям, накладываемым на реквизиты справочника, добавить возможность выбора элементов справочника по условию принадлежности к некоему заранее неопределяемому составу документов... заумно...? Тогда скажем так: без лишнего "непроизводительного" программирования получить перечень элементов справочника, принадлежащих номенклатурному набору вполне конкретного клиента.. Зачем? А вот зачем: чтобы совать ему не весь прайс в 3000 позиций. а только тот перечень, который его интересует (тот, который он берет постоянно...)

Статья понравилась/пригодилась? Узнал что-то новое? Поощри автора - приплюсуй рейтинг или если хотите выразить свою благодарность другим способом - можете сделать взнос на рублевый кошелек WebMoney R292336385918 (через платежный терминал, например...)..

уффффффф... устал....

См. также

Механизмы платформы 1С Программист Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

В статье расписаны примеры из жизни использования "Виртуального" работника. Разобраны вопросы, возникающие при работе с ним.

28.11.2021    1828    user707242_Gold_karas    18    

5

Механизмы платформы 1С Программист Платформа 1С v7.7 Абонемент ($m)

Пример построения программного кода для достижения функционала обратных вызовов (call back) во внешних обработках исключительно штатными средствами. Тестировалось на платформе 1с77 релиз 027. Конфигурация значения не имеет.

1 стартмани

06.10.2018    7780    Vortigaunt    5    

11

Механизмы платформы 1С Программист Оперативный учет 7.7 Абонемент ($m)

Когда занимаешься разработкой в среде 1С, редко задумываешься о том, что программным кодом ты работаешь с объектной моделью базы данных, а не с самой базой данных. И что это вообще разные вещи. Ты создаешь объекты: документы и справочники, записываешь их - и в базе данных появляются соответствующие записи. Это настолько привычно, что когда сталкиваешься с нетипичным поведением платформы, первым делом думаешь: надо протестировать базу, она битая. В этой статье я хочу разобрать одну интересную ситуацию, которая как раз демонстрирует такое поведение. Описанная ниже ситуация воспроизводится как в файловом, так и в клиент-серверном (SQL) варианте. Тестировалось на версии платформы 1с77 релиз 027.

1 стартмани

16.05.2018    10456    Vortigaunt    26    

5

Механизмы платформы 1С Программист Платформа 1С v7.7 Платформа 1С v8.3 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    95863    Serginio    116    

188

Механизмы платформы 1С Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

В 1С 8 наличие картинок товаров предусмотрено изначально, а в 7.7 такого нет. Проблема существует и ее исправляют, но это, как правило, частные случаи, касающиеся, например, печати прайса http://infostart.ru/public/289876/ , показу картинок в справочнике номенклатура http://infostart.ru/public/17125/, файловый менеджер картинок товара http://infostart.ru/public/15239/ или просто конфигурации работы с картинками http://infostart.ru/public/21142/ (не стремился дать полный обзор, поэтому не попавшие не обижайтесь :). Что не устроило – информация разбросана по статьям, необходимость дополнительно напрягаться, чтобы это заработало. Здесь я попытался собрать все «до кучи», а так же дать необходимые ссылки для желающих «копнуть вглубь».

1 стартмани

18.11.2014    44803    95    kitminsk    18    

20

Механизмы платформы 1С Программист Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

Если вы используете в работе 1С:Предприятие 8.х, то наверняка знакомы и с замечательной системной процедурой, как ЗаполнитьЗначенияСвойств(). Ее использование помогает значительно упростить написание программного кода в ряде случае, делает его (код) более наглядным и простым. Но что же делать тем, кто до сих пор использует (постоянно или иногда) 1С:Предприятие 7.7?

24.07.2014    24217    tomvlad    5    

14

Механизмы платформы 1С Программист Платформа 1С v7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Позволяет в открытой форме списка, выбора или подбора справочника производить динамическую фильтрацию по набранному наименованию.

02.07.2012    18940    maxpiter    62    

15
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. poppy 18.10.07 21:43 Сейчас в теме
Не соглашусь с фразами:
"Практически полным аналогом внешней обработки UCHOICE.ERT является обработка, включенная в состав конфигурации: Обработка.ПодборОбъектов"
и
"Её отличие от Ushoice.ert состоит в том, что Обработка.ПодборОбъектов... "

Странно говорить об отличиях абсолютно идентичных обработок. ;-)

ИМХО автор сам не до конца понимает и вносит путаницу в ряды начинающих программистов.
Из двух статей можно сделать вывод, что внешняя обработка предназначена для работы с плугинами, но внутренняя - для подбора объектов. Это равносильно, например, утверждению, что 1С:Бух для Скуль предназначена для ЕНВД, но 1С:Бух сетевая для других налогов... ;)
2. CheBurator 2712 18.10.07 21:57 Сейчас в теме
(1) Согласен. В статью вношу поправочку. Но я и здесь молчать не буду! ;-) Встроенная обработка имеет некоторые отличия - кому интересно пусть сам над ними помозгует. В русле изложения статьи они несущественны.
4. poppy 18.10.07 22:35 Сейчас в теме
(2)
Сравни встроенную обработку из типовой Бухии с внешней... Там отличий никаких нет.
В типовой ТиС есть небольшое отличие встроенной обработки.

(3)
Думаю, это будет неплохим продолжением темы. По мере возможности приложу к этому усилия.

В целом считаю поднятую тему = полезной. Будет куда пинать начинающих кодеров перенумераторов документов.
Ufimtsev; +1 Ответить
5. CheBurator 2712 18.10.07 22:41 Сейчас в теме
(4) по (3) - давай! а то я собственно и взялся ХОТЬ ЧТО-ТО написать по этому поводу именно из-за кучи уе...х перенумераторов, которые плодятся как кролики...
Ufimtsev; +1 Ответить
3. CheBurator 2712 18.10.07 22:01 Сейчас в теме
(1) + если кто-то более детально разовъет тему грамотного использования упомянутых обработок (как, например, было сделано по следам моей статьи по косякам во множественном фильтре) - буду только рад и с удовольствием сам почитаю...
Ufimtsev; +1 Ответить
6. Abadonna 3968 19.10.07 03:00 Сейчас в теме
Мерзкую морду фара из картинок убрал - респект ;)
Ufimtsev; +1 Ответить
7. CheBurator 2712 19.10.07 09:07 Сейчас в теме
(6) а что делать...? если всякое ламерье падко на гуй... ;-) - вот и рождаются для них всякие висты... ;-)
Ufimtsev; +1 Ответить
8. Abadonna 3968 19.10.07 09:57 Сейчас в теме
(7) Не ламерье, а люди с нормальным вкусом
ms33; Ufimtsev; +2 Ответить
9. CheBurator 2712 19.10.07 10:09 Сейчас в теме
10. CheBurator 2712 20.10.07 02:43 Сейчас в теме
ну вот, сегодня приперло... по быстрому набросал десяток строк - теперь набор элементов справочника можно получать по условию вхождения во множество документов...
Ufimtsev; Львенок; +2 Ответить
11. v_id 106 09.11.07 10:48 Сейчас в теме
Хочу поделюсь своими экспериментами.
Странно, но мой экземпляр Uchoice.ert не хотел отбирать объекты справочников по периодическим реквизитам. Пришлось исправить
Код
 Если (гТипОбъекта = "Операция") Или (гТипОбъекта = "Документ") Тогда 
Показать полностью


на

Код
 Если (гТипОбъекта = "Операция") Или (гТипОбъекта = "Документ")  Или (гТипОбъекта = "Справочник") Тогда 
Показать полностью


после этого заработало.
ЗЫ. Хотя я конечно допускаю, что я где-то ошибся в параметрах вызова обработки.
Ufimtsev; +1 Ответить
12. CheBurator 2712 09.11.07 11:15 Сейчас в теме
(11) возможно, я этого не использовал, поэтому сказать ничего не могу.
Просьба указывать примерный номер строки или давать "окружение" кода, чтобы однозначно идентифицировать место вставки.
Styvi; Ufimtsev; +2 Ответить
13. GenTay 27.10.13 13:56 Сейчас в теме
14. CheBurator 2712 06.09.23 15:16 Сейчас в теме
Вот, самому себе пригодилась сегодня... ;-) Быстро "склеить" универсальный фильтр для добавления номенклатуры в ТЧ документа...
Оставьте свое сообщение