[ОБУЧАЛОВКА] Многоуровневое меню своими руками

30.06.09

Разработка - Работа с интерфейсом

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

Источник данных
"Плоская ТЗ" - это значит, что в ней нет никаких итогов-группировок и прочего.. В нашем примере источником данных для меню является ТЗ со строками такой структуры: группа лек.средств-производитель-номенклатура, например:

Формат плоской ТЗ
Важное замечание: иерархия меню определяется порядком столбцов в ТЗ-источнике!!! Смотрим, как это выглядит...
1. Запускаем выбор меню:


Запуск меню
В данном нашем примере - по нажатию кнопки производится выборка данных (см.вышеприведенный код), и вываливается для выбора первый уровень меню (Группа, см.формат плоской ТЗ):

Первый уровень меню
Выбираем нужный пункт меню (в данном случае это - ПСИХОЛЕПТИКИ) и попадаем на следующий уровень меню (Производитель, см.формат плоской ТЗ):

Второй уровень меню
Выбираем нужный пункт меню (в данном случае это - LUNDBECK) и попадаем на следующий уровень меню (Номенклатура, см.формат плоской ТЗ):

Третий уровень меню
После выбора ПОСЛЕДНЕГО уровня (меню-то иерархическое) - пользователь в том или ином виде получает свой выбор (для философского созерцания - можно открыть карточку номенклатуры, или для производительного труда - выбор далее обрабатывается программно, исходя из логики алгоритма/задачи). В нашем примере, выбор пользователя чисто иллюстративно показывается в табло сообщений:

Результат выбора меню

Вызов меню
Признаком того, что меню не выбрано - пустое значение, которое возвращает функция глБВК_ВернутьМеню(...). В качестве признака выбора/невыбора меню также можно использовать признак "непустой/пусто" списока значений СЗИтогВыбора.
Итог выбора меню - находится в списке значений СЗИтогВыбора. Порядок значений в списке соответствует иерархии выбора всех уровней меню:

Итог выбора меню
В списке значений представление - это название очередного уровня иерархии меню, а значение - пункт, выбранный на данном уровне иерархии. В нашем примере это можно посмотреть на рисунке (см.выше) "Результат выбора меню":
выбор: Группа = ПСИХОЛЕПТИКИ,Производитель = Lundbeck,Номенклатура = Клопиксол табл.п.о 25мг №50
..
Данный результат формируется просто: последовательно проходимся по списку значений и формируем итоговую строку:

Пример формирования вывода результата
Если нас интересует только "конечный" выбор, то его можно получить так:
СЗИтогВыбора.Получить(СЗИтогВыбора.РазмерСписка()).
..вот и весь алгоритм. В компактном виде большую часть этого алгоритма занимает подготовка данных для меню и вывод результата выбора из меню на экран... весь код:

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


Пример обработки, с рассмотренными выше возможностями (немного изменен источник данных) приведен здесь //infostart.ru/projects/985/?ref=174
Если статья оказалась для вас полезной - скажи спасибо автору - приплюсуй рейтинг.

См. также

1С:Фото номенклатуры 7.7 - решение для работы с фотографиями номенклатуры в 1С:7.7 (включая формат PNG)

Работа с интерфейсом Логистика, склад и ТМЦ Платформа 1С v7.7 1С:Торговля и склад 7.7 Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Решение для разработчика и конечного пользователя для работы с фотографиями номенклатуры: систематизация, хранение, отображение, а также выгрузка на Яндекс-Диск и FTP (кроме версии лайт). Поддерживаются графические форматы: bmp, jpg, gif, tiff, а также png - не поддерживаемый штатными средствами 1С. Выполнено без использования внешних компонент (кроме функции выгрузки на FTP). Поставляется как в виде пустой конфигурации с набором объектов и модулей для работы с фото, так и в виде обновления к 1С:Торговля и склад 7.7. Выполнено в двух версиях: "полная" и "лайт".

5000 руб.

18.10.2022    5160    1    45    

3

WebЦвета для 1с77 FormEx

Инструментарий разработчика Работа с интерфейсом Платформа 1С v7.7 Абонемент ($m)

Обработка с фрагментами кода для программного использования набора цветов из коллекции WebЦвета 1с версии 8+ в 1с версии 77. Требуется предварительное подключение сторонней библиотеки FormEх. Будет полезно программистам 1с 77, 1с 8. Да и вообще при программировании на любом языке при потребности использовать коллекцию цветов WebЦвета.

1 стартмани

30.03.2022    4543    2    igor7777    4    

5

К привязкам элементов форм (1С 7.7, FormEx)

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

Публикация имеет цель обратить внимание на возможность улучшения интерфейса.

15.12.2021    4465    62    Cерый    13    

6

Выбор цвета для 1С 7.7

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

Простая и удобная внешняя обработка для выбора цвета без применения внешних компонент.

1 стартмани

09.06.2020    7025    3    vap_pig    5    

3

Производственный календарь для 1С 7.7

Учет рабочего времени Работа с интерфейсом Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

Обработка производственного календаря с возможностью импорта и экспорта xls для 1С 7.7 (7.70.027) без изменения конфигурации.

1 стартмани

18.09.2019    12580    6    Jill    8    

3

Альтернативная обработка "Выбор периода"

Работа с интерфейсом Оперативный учет 7.7 1С:Торговля и склад 7.7 Абонемент ($m)

Альтернативная обработка ввода периода для 1С 7.7.

1 стартмани

27.03.2019    6588    3    v.a.n-    11    

2

Несколько табличных частей в 1С:7.7 - это просто

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

При программировании на платформе V7 достаточно часто возникает задача создать несколько табличных частей документа (или справочника). Традиционно эта задача имеет несколько решений..

1 стартмани

01.05.2018    22420    27    Gkmy    11    

5
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. CheBurator 3119 29.05.07 00:41 Сейчас в теме
Просьба комментировать?
Нужны ли подобные статьи в дальнейшем?
на какие темы вы хотите видеть статьи?
2. корум 287 29.05.07 13:20 Сейчас в теме
На любые темы практической работы с 1с такие статьи будут полезны.

Не надо только размазни "как у нас в .... всё плохо, понимания нет, зарплаты на хлеб не хватаает..."
3. CheBurator 3119 29.05.07 15:56 Сейчас в теме
Насчет размазни - не понял... это где у меня в статьях есть такое? ну-ка ткните меня носом, будем "нытье" вычищать...
4. support 4484 29.05.07 23:18 Сейчас в теме
а почему код в виде картинок?
5. karat60 02.06.07 21:20 Сейчас в теме
6. DDD2005 06.06.07 08:54 Сейчас в теме
Статьи такие нужны и побольше!
7. CheBurator 3119 07.06.07 22:57 Сейчас в теме
Спасибо за отзывы. Будем стараться...
8. CheBurator 3119 07.06.07 22:57 Сейчас в теме
Опять же: пишите в отзывах - что вам хотелось бы почитать/узнать - если это свопадет с моими возможностями/желаниями - гуд.. забульбеним, не вопрос!
9. logarifm 1117 26.06.07 10:48 Сейчас в теме
10. CheBurator 3119 31.07.07 15:56 Сейчас в теме
Что значит "неплохо"...? я считаю - "зашибись"....!
11. ineoosaki 23.08.07 19:57 Сейчас в теме
Совсем "не зашибись". Автора идеи необходимо было упомянуть хотя бы вскользь. Найду автора и ссылку на его обработку, выложу.
Нехорошо плагиатом заниматься.
Тогда со спокойной совестью минусну и статью и обработку.
У автора идеи в обработке не только демонстрация работы но и конструктор этих меню.
12. CheBurator 3119 24.08.07 00:12 Сейчас в теме
2 ineoosaki
решительно отметаю наезд!!!
да, сейчас после твоего постинга припоминаю, что такое дело есть на проклабе, причем возможно я его качал и запускал... но! этих обработок через меня прошло столько! что "я успел забыть больше, чем вы знали" ;-) Реально, когда это писал и делал - даже не вспомнил про эту обраьотку!!! вообще!!! вод ведь как бывает... если будут силы - на выходных соспоставлю обработки и напишу чем мой подход - лучше ;-)
13. ineoosaki 24.08.07 17:26 Сейчас в теме
"Наезд" продолжаю.
Автором обработки "Вложенные (многоуровневые) меню штатными средствами v7.7" является toling. Обработка выложена на проклабе 03/10/2005. Рейтинг: 5.00.
В обработке tolingа использована рекурсивная функция, очень похожая на ту, что находиться в вашей обработке. Судя по всему автором использованой вами функции есть некто БВК. В использованной вами конфе <ФАРМ СИНДИКАТ 2005-03.05.07> Торговля+Склад, редакция 9.2","7.70.933" много объектов метаданных от этого БВК.
Дали бы ссылку в статье хоть на БВК.
14. CheBurator 3119 24.08.07 22:07 Сейчас в теме
Я не возражаю, что автором обработки "Вложенные (многоуровневые) меню штатными средствами v7.7" является toling. Я категорически возражаю на то, что тонко пытаются намекнуть что я у кого-то слямзил идею...
15. CheBurator 3119 24.08.07 22:28 Сейчас в теме
вот, порылся...
http://1c.proclub.ru/modules/newbb/viewtopic.php?viewmode=thread&topic_id=275738&forum=6&post_id=314958#314958
- это мой топик к упомянутой ниже разработке. - порылся у себя в файлоотстойнике - ага, качал.. hmenu.zip
Почему не стал использовать - хз.. не момню уже.. невостребовано видимо было.. когда понадобилось - наваял сам.. ибо искать долше, чем ваять.. ;-)
16. CheBurator 3119 24.08.07 22:33 Сейчас в теме
освежил tolinga в памяти - код его обработок более насыщен и функционален. Мой - попроще. Зато у tolinga - только инструмент, который еще надо прикрутить к своей конфиге, а у меня - "полный цикл" показан, от источника данных до результат выбора..
каждому - свое...
17. CheBurator 3119 24.08.07 23:43 Сейчас в теме
не удержусь... вот такое я гуано... ;-)
Уважаемый ineoosaki!
В 13 топике вы прямо и недвусмысленно признались в том, что располагаете конфигой, "уведенной" с моей фирмы, потому как БВК = Che Burashka, т.е. конфига - МОЯ! Источник утечки мне, в принципе, понятен. Осталось данную ветку показать гендиру моей фирмы... т.е. кое-кого вы подставляете по-крупному...
ржунимагу... вот такая жизнь...
18. CheBurator 3119 25.08.07 00:58 Сейчас в теме
> я у кого-то слямзил идею...
тем более, что конфу у меня слямзили вы ;-)
так что я - белый и пушистый (как всегда), а вот вы - склизкие и пупырчатые ;-)
19. ineoosaki 26.08.07 00:44 Сейчас в теме
> я у кого-то слямзил идею...
тем более, что конфу у меня слямзили вы ;-)
так что я - белый и пушистый (как всегда), а вот вы - склизкие и пупырчатые ;-)

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

> "я успел забыть больше, чем вы знали"
выходит, многое ты не "переварил" ;;))))
21. Abadonna 3958 26.08.07 10:06 Сейчас в теме
(19) Не вникая в смысл, не понял, почему у меня надо просить прощения за кирилицу??????
Я когда-то транслитом писал, али на нашем, на демоническом? ;)
20. CheBurator 3119 26.08.07 01:48 Сейчас в теме
ну и фигли... поржали оба... ;-)
22. пользователь 13.11.11 19:20
Сообщение было скрыто модератором.
...
Оставьте свое сообщение