[ОБУЧАЛОВКА] Как перестать парить себе мозги и не фанить тюльку... - 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 (через платежный терминал, например...)..

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

См. также

"Виртуальный" работник на платформе 1C v7.7

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

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

28.11.2021    1545    user707242_Gold_karas    18    

5

Асинхронное программирование в 1с77 без внешних компонент. Обратные вызовы.

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

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

1 стартмани

06.10.2018    7444    Vortigaunt    5    

11

Особенности разделения объектной модели документа и базы данных в 1С 7.7. Забавный глюк

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

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

1 стартмани

16.05.2018    10125    Vortigaunt    26    

5

Использование классов .Net в 1С для новичков

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

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

27.01.2016    93962    Serginio    116    

188

Все про картинки в 1С 7.7, ну или почти все...

Механизмы платформы 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    43977    95    kitminsk    18    

20

ЗаполнитьЗначенияСвойств - заставляем работать в 7.7

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

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

24.07.2014    23721    tomvlad    5    

14

Динамическая фильтрация в справочнике при вводе наименования

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

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

02.07.2012    18357    maxpiter    62    

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

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

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

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

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


на

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


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