Подсказка для строк динамического списка на управляемых формах

10.01.25

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

В данном материале описывается вариант реализации подсказки для каждой строки динамического списка на управляемых формах.

Не так давно ко мне обратилась старая знакомая и задала интересный вопрос. Возможно ли в 1С на управляемых формах создать подсказку для каждой строки динамического списка? Причём такая подсказка должна появляться при клике на иконку вопросика и отображать текст определённого реквизита элемента текущей строки.

Как оказалось, разработчики, которым она поставила эту задачу, дружно ответили: «Это невозможно сделать в 1С». Такой ответ звучал достаточно категорично, и сначала я был склонен согласиться с ними. Но мне стало интересно: может быть, в новых версиях платформы уже есть какие-то изменения, которые позволяют решить такую задачу?

После проверки выяснилось, что действительно никаких встроенных механизмов для реализации такого функционала нет. Однако, как часто бывает, именно такие вызовы становятся интересной задачей для разработчика. Я решил найти способ сделать невозможное возможным. Это чувство азарта, знакомое многим программистам, стало моим главным мотиватором.

В этой статье я опишу процесс поиска решения, поделюсь найденным методом, а также дам подробное руководство для тех, кто столкнётся с подобной задачей.

Сейчас будет описываться мыслительный процесс, которым сопровождался поиск решения. Кому не интересно, его можно смело промотать.

Итак, с чего начать?

Первое, что приходит на ум – использовать поле HTML-документа. Это мощный инструмент, который позволяет внедрять свои решения с помощью HTML, CSS и JavaScript. И уж там-то мы сможем оторваться по полной.

Можно было бы создать свой кастомный динамический список с блекджеком и шл… любым дизайном и функционалом. Но я быстро отказался от этой идеи. Почему? Масштаб работы и последующая оптимизация не стоили тех усилий, которые потребовались бы для её реализации. Подобные задачи уместны в крупных проектах, но здесь это выглядело как стрельба из пушки по воробьям. К тому же тратить кучу такого ценного ресурса, как время, на столь альтруистичную идею без коммерческой выгоды - дело гиблое. Возможно, в далёкие времена студенчества я бы таким и занялся, но не сейчас))) 

Следующим шагом я начал рассматривать стандартные элементы управляемых форм. Варианты использования таблицы значений или табличного документа тоже не подошли. Они выглядели слишком громоздкими и неудобными для реализации лаконичного и изящного решения. Да чего уж там, выглядели, как полный бред. Требовалось что-то простое и понятное, реализуемое лишь парой абзацев кода.

Итак, дальше описывается сам принцип предлагаемого решения.

Идея решения пришла неожиданно. Почему бы не использовать диалоговое окно вопроса в качестве «облачка» подсказки? Это подходило идеально: окно можно настроить так, чтобы оно появлялось при клике на иконку вопросика, а в качестве содержимого использовать текст комментария из текущей строки списка.

В качестве кнопки, вызывающей подсказку, я решил использовать колонку динамического списка с типом «Картинка», где будет отображаться пиктограмма вопросика.

Вот как выглядит итоговое решение на практике:

 

 

Довольно симпатично, правда? Теперь разберёмся по шагам, как это реализовать.

Шаг 1. Добавление колонок динамического списка

Первым делом необходимо добавить в динамический список две новые колонки:

  1. Колонка «Подсказка» – это вспомогательная колонка, в которую всегда будет выводиться число «0». Это значение соответствует индексу картинки, используемой в колонке.
  2. Колонка с текстом подсказки – в нашем примере это реквизит объекта «Комментарий», который будет содержать текст для отображения во всплывающем окне.

 

 

Шаг 2. Использование свойства «Использовать всегда»

Важно поставить галочку «Использовать всегда» для реквизита, содержащего текст подсказки. Почему это важно?

Дело в том, что мы не будем выводить данную колонку на форму. Если мы не поставим эту галку, то данный реквизит будет отсутствовать в текущих данных на клиентской стороне и нам придётся каждый раз делать серверный вызов и вытаскивать комментарий из ссылки, что совсем не круто.

Поставив же данную галку, мы обеспечим присутствие данного реквизита в текущих данных динамического списка независимо от того, выводится ли данная колонка на форму.

Это уменьшает нагрузку на сервер и ускоряет отображение данных, что особенно важно при работе с большими таблицами.

 

 

Шаг 3. Настройка колонки «Подсказка»

Выведите колонку «Подсказка» на форму. Ту самую, которая всегда равна 0.

Почему она равна нулю, спросите вы? Всё очень просто, 0 – это индекс картинки. Если картинка из библиотеки картинок состоит сразу из множества картинок, то каждая из картинок этого множества пронумерована, начиная с 0. Например как здесь:

 

 

В таком случае, если бы нам нужно было выводить картинку с зелёным кружочком, мы бы выбрали картинку СостоянияПроцессов, и в колонку всегда выводили число 3.

Если же картинка не составная, а одинарная, ей всегда соответствует индекс 0. Это как раз наш случай. Ведь мы в данной ситуации используем стандартную картинку «Информация».

 

 

Итак, после того, как вы поместили колонку на форму, установите для неё следующие свойства:

  1. Вид: Поле картинки.
  2. КартинкаЗначений: выберите из библиотеки картинок стандартную иконку «Информация».

 

 

Справедливости ради, отмечу, что, если вам не нравится данная картинка, вы можете подобрать любую другую из библиотеки картинок, которая вам кажется более подходящей. Либо загрузить свою картинку. Либо вовсе обойтись без картинки, а выводить в колонку сразу значок «?» и поиграться с цветом текста и шрифтом, которым этот вопросик будет выводиться. Тут уж, как говорится, на вкус и цвет все фломастеры разные.

Шаг 4. Обработка события

Для колонки «Подсказка» назначьте обработчик на событие «При активизации ячейки».

 

 

В созданной процедуре добавьте следующий код, состоящий всего из 6 строк:

&НаКлиенте

Процедура СписокПриАктивизацииЯчейки(Элемент)

    Если Элемент.ТекущийЭлемент.Имя = "СписокПодсказка" Тогда

        СписокКнопок = Новый СписокЗначений;

        СписокКнопок.Добавить("Понятно");

        ТекстВопроса = Элемент.ТекущиеДанные.Комментарий;

        ПоказатьВопрос(Новый ОписаниеОповещения(), ТекстВопроса, СписокКнопок);

    КонецЕсли;

КонецПроцедуры

Давайте пробежимся по коду процедуры и подробно проговорим, что же мы делаем.

Во-первых, мы ставим проверку, что пользователь кликнул именно на ячейку с пиктограммой подсказки, поскольку событие ПриАктивизацииЯчейки отрабатывает при выборе любой ячейки из любой колонки динамического списка.

Убедившись, что пользователь кликнул именно туда, куда нам нужно, мы подготавливаем две переменные – СписокКнопок и ТекстВопроса.

СписокКнопок – это список значений, содержащий названия всех кнопок, которые мы выводим пользователю в диалоговом окне вопроса. В нашем случае, у нас будет всего одна кнопка, на которой написано «Понятно» (можете придумать свой вариант).

В переменную ТекстВопроса мы помещаем наш комментарий, который выступает в роли текста подсказки. Как я упоминал выше, тянем мы его из текущих данных динамического списка, в которых он всегда присутствует, благодаря галочке, которую мы установили.

Ну и наконец – в последней строке мы вызываем процедуру ПоказатьВопрос(), в которую передаём текст вопроса и список с кнопкой.

Обратите внимание, что первым аргументом мы передали новый объект ОписаниеОповещения, поскольку данный параметр является обязательным. По логике, в процедуре, которая должна отработать после нажатия пользователем одной из кнопок, мы должны обработать его выбор и в зависимости от нажатой кнопки, выполнить то или иное действие.

В нашем же случае, никакого действия нам выполнять не нужно.

Изначально я создавал пустую процедуру-заглушку, но после пары экспериментов выяснил, что можно не делать этого и просто создать пустое ОписаниеОповещения. Система прекрасно это проглатывает.

Возможные доработки

Если вам нужно больше функциональности, можно:

  • Добавить несколько кнопок в диалоговое окно. Например, кнопку «Подробнее», которая открывает дополнительную информацию. В таком случае, нам уже понадобится процедура обработки оповещения, чтобы мы могли понимать, на какую из кнопок нажал пользователь.
  • Использовать разные иконки в зависимости от условий (например, разные типы подсказок).
  • Создать отдельный справочник для хранения текстов подсказок, если данные дублируются.
  • Добавить цветовую индикацию для подсказок, чтобы различать их важность или тип (например, с помощью условного оформления).

Альтернативные решения

Если задача требует большей гибкости или функционала, можно рассмотреть следующие подходы:

  1. Использование поля HTML документа: Поле HTML позволяет создать полностью кастомизированный интерфейс. Этот метод потребует больше усилий, но открывает практически безграничные возможности. В нашем случае, это был бы перебор, но ситуации бывают разные, поэтому вариант имеет место быть.
  2. Создание отдельных форм для подсказок: Если подсказка содержит много информации, можно открывать собственную форму с подробным описанием, вкладками, полосами прокрутки, изображениями или даже видео.

Примеры использования

Функционал всплывающих подсказок может быть полезен в различных сценариях, например:

  1. CRM-системы: Отображение информации о клиенте, его заказах или примечаниях.
  2. Учётные системы: Вывод подсказок о характеристиках товаров или деталях операций.
  3. Обучающие приложения: Помощь пользователям в освоении системы через интерактивные подсказки.

Заключение

Ну вот, собственно, и всё! Предложенное решение оказалось простым, удобным и достаточно элегантным. Добавив всего две колонки и написав 6 строк кода, мы добились функционала, который в целом удовлетворяет потребность во всплывающей подсказке для каждой строки динамического списка. Функционала, который, как казалось, был недоступен в рамках стандартных возможностей 1С на управляемых формах.

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

Надеюсь, эта статья окажется полезной и вдохновит вас на создание своих уникальных решений.

Удачи в разработке! :)

P.S. По многочисленным замечаниям в комментариях, я исправил заголовок и текст статьи, убрав везде слово "всплывающая", поскольку многих оно вводило в заблуждение. Если вы один из этих людей, приношу вам свои искренние извинения!

УФ управляемые формы динамический список всплывающая подсказка

См. также

Работа с интерфейсом Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    55335    17    23    

43

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    63730    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    19580    27    6    

42

Работа с интерфейсом Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Редактор графов в 1С - внешний отчет, который формирует графы на основе таблицы значений, используя рисунки табличного документа. Есть возможность добавления, редактирования объектов графа и выгрузки результата в таблицу значений.

1500 руб.

06.10.2020    10797    7    7    

11

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    21021    mrXoxot    44    

128

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    10439    smielka    37    

105

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    17790    1223    elcoan    53    

125
Отзывы
2. ixijixi 1976 10.01.25 17:21 Сейчас в теме
Я бы использовал гиперссылку ячейки и событие Выбор вместо ПриАктивизацииЯчейки, т.к. при активизации подсказка будет выскакивать даже при перемещении по колонкам с помощью стрелок, что будет мешать работе пользователя. Плюс вызов ПриАктивизацииЯчейки вызывается каждый раз при перемещении по списку, а Выбор только 1 раз.

А так всё хорошо)
Прикрепленные файлы:
_ВнешняяОбработка1.epf
untru; mrChOP93; de0nis; knyazke; fancy; keyn5565`; bulpi; 0x00; Xershi; AntonH851; XilDen; svbel85; 0ct0ber; rpgshnik; mrsmrv; +15 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. quazare 3867 10.01.25 16:35 Сейчас в теме
Я бы использовал бспшный СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю для пущей важности)
2. ixijixi 1976 10.01.25 17:21 Сейчас в теме
Я бы использовал гиперссылку ячейки и событие Выбор вместо ПриАктивизацииЯчейки, т.к. при активизации подсказка будет выскакивать даже при перемещении по колонкам с помощью стрелок, что будет мешать работе пользователя. Плюс вызов ПриАктивизацииЯчейки вызывается каждый раз при перемещении по списку, а Выбор только 1 раз.

А так всё хорошо)
Прикрепленные файлы:
_ВнешняяОбработка1.epf
untru; mrChOP93; de0nis; knyazke; fancy; keyn5565`; bulpi; 0x00; Xershi; AntonH851; XilDen; svbel85; 0ct0ber; rpgshnik; mrsmrv; +15 Ответить
6. XilDen 522 11.01.25 22:37 Сейчас в теме
(2) отличное дополнение, спасибо!
3. SerVer1C 840 11.01.25 11:02 Сейчас в теме
Это НЕ всплывающая подсказка, а диалоговое окно!
Всплывающая подсказка "всплывает" при наведении мыши, а не по клику.
rpgshnik; fancy; TbIKBA; bulpi; stopa85; Angry; +6 Ответить
5. ixijixi 1976 11.01.25 22:34 Сейчас в теме
(3) Кстати, не хватает события onHover, все решалось бы ещё легче
9. XilDen 522 11.01.25 22:53 Сейчас в теме
(5) мечты, мечты) очень многих низкоуровневых событий не хватает...
8. XilDen 522 11.01.25 22:52 Сейчас в теме
(3) ну тут возможна путаница в терминологии небольшая) в 1С у реквизитов есть возможность отображения подсказки при клике на пиктограмму вопросика. Разные определения по разному трактуют термин всплывающая подсказка. Я подразумеваю под ней подсказку, которая всплывает, а событие, при котором это происходит, оставляю за скобками.
Да, это диалоговое окно, в этом и суть описываемого решения, это так называемый костыль, когда диалоговое окно выступает в роли облака, ввиду невозможности реализации данного функционала с оригинальным облаком)
10. miniogn 42 12.01.25 13:47 Сейчас в теме
(3) Поддерживаю. Заголовок статьи не соответствует результату. Хотя сама статья сама по себе полезна.
Всплывающая подсказка на то и всплывающая, что для этого пользователь ничего не должен нажимать, а просто навести мышку.
Как вариант, если есть необходимость часто смотреть доп информацию, то надо просто добавить реквизит вне таблицы и выводить туда связанную информацию.
4. bulpi 217 11.01.25 18:56 Сейчас в теме
Плюс поставил, но :
1)Почему вопрос, а не предупреждение ?
2)разработчики, которым она поставила эту задачу, дружно ответили: «Это невозможно сделать в 1С»
???????? Тут не только ничего невозможного, но даже и сложного немного. И никаких недокументированных свойств. Это не разработчики, а "разработчики".
7. XilDen 522 11.01.25 22:46 Сейчас в теме
(4) 1 - в диалоговом окне вопроса отображается пиктограмма с вопросительным знаком, что, на мой взгляд, подходит намного больше, учитывая, что у нас подсказка, а значит у пользователя возник вопрос, на который даётся пояснение. Предупреждение же с пиктограммой восклицательного знака в оранжевом треугольнике, вызывает скорее эмоции опасения и тревоги.
2 - ну, справедливости ради, отмечу, что прям всплывающую подсказку, которая возникала бы в облаке при наведении курсора для строк динамического списка реализовать действительно невозможно средствами 1С. Кроме как создавать собственный аналог динамического списка в поле HTML документа, о чём я упоминал в статье. А данный вариант - лишь попытка реализации максимально приближенного по функционалу решения, отделавшись при этом малой кровью.
26. JohnyDeath 302 13.01.25 19:16 Сейчас в теме
(7)
1 - в диалоговом окне вопроса отображается пиктограмма с вопросительным знаком, что, на мой взгляд, подходит намного больше, учитывая, что у нас подсказка, а значит у пользователя возник вопрос, на который даётся пояснение. Предупреждение же с пиктограммой восклицательного знака в оранжевом треугольнике, вызывает скорее эмоции опасения и тревоги.

Хозяйке на заметку: в текст предупреждения можно добавлять не просто строку, а ФорматированнуюСтроку, где указать, в том числе и картинку
11. Jenya78 12.01.25 14:44 Сейчас в теме
Взял к себе. Плюсик правда почему то перестали давать ставить...
Спасибо.
12. moolex 916 13.01.25 07:48 Сейчас в теме
У диалогового окна есть большой минус - текст нельзя скопировать в буфер обмена. Но это больше вопрос к разработчикам windows.
13. XilDen 522 13.01.25 08:43 Сейчас в теме
(12) Ну выкрутиться можно тоже, при необходимости. Добавить в диалоговое окно кнопку "Скопировать в буфер обмена". И в процедуре реализовать помещение текста в буфер программно. Либо реализовать всё таки свою форму, вместо стандартного диалогового окна, и там уже никто не ограничивает.
14. ixijixi 1976 13.01.25 11:52 Сейчас в теме
(12) Для подобных случаев есть прекрасный метод БСП
СтандартныеПодсистемыКлиент.ПоказатьПодробнуюИнформацию(ОписаниеОповещения, Текст)
Прикрепленные файлы:
15. user625107_barabambler1s 13.01.25 12:02 Сейчас в теме
Статья ни о чем. Уровень пятилетнего мальчика
19. XilDen 522 13.01.25 13:52 Сейчас в теме
(15) Спасибо за оценку) Спорить не буду) Надеюсь и вы в дальнейшем воздержитесь от оскорблений чужого труда)
16. rpgshnik 3817 13.01.25 12:40 Сейчас в теме
Смущает в заголовке слово "всплывающая", наверное всё таки это "подсказка через диалог", но "всплывающая" звучит более хайпово, но и не верно.
20. XilDen 522 13.01.25 14:04 Сейчас в теме
(16) Извиняюсь, что заголовок ввёл в заблуждение. Никакого хайпа на заголовке не предполагалось)
22. rpgshnik 3817 13.01.25 14:44 Сейчас в теме
(20) извинения излишни, редактирование заголовка вам доступно ;)
24. XilDen 522 13.01.25 15:59 Сейчас в теме
17. a2080016 33 13.01.25 13:02 Сейчас в теме
Вот такие должны быть всплывающие подсказки.
Очень жаль, что 1С не дает нам такой возможности без страданий.
Прикрепленные файлы:
XilDen; rpgshnik; +2 Ответить
18. XilDen 522 13.01.25 13:46 Сейчас в теме
(17) Поделитесь, как реализовано?)
21. rpgshnik 3817 13.01.25 14:42 Сейчас в теме
(17) пушка! поле хтмл вижу я, оно же?
27. a2080016 33 13.01.25 22:42 Сейчас в теме
(21) Да да это поле html документа.
23. xlmel 13.01.25 15:14 Сейчас в теме
Может стоит убрать в заголовке колонки текст Подсказка и поместить какую-то картинку, поле можно будет ужать по ширине
25. XilDen 522 13.01.25 16:00 Сейчас в теме
(23) Можно, тут уже на вкус и цвет)
Оставьте свое сообщение