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

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. По многочисленным замечаниям в комментариях, я исправил заголовок и текст статьи, убрав везде слово "всплывающая", поскольку многих оно вводило в заблуждение. Если вы один из этих людей, приношу вам свои искренние извинения!

INFOSTART TOOLKIT

Самый продвинутый набор инструментов для управляемых форм 1С:8.3


Вступайте в нашу телеграмм-группу Инфостарт

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

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Работа с интерфейсом Рабочее место 1С:Предприятие 8 1C:Бухгалтерия 1С:Комплексная автоматизация 2.х Платные (руб)

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

6100 руб.

16.01.2015    68464    46    60    

85

Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

09.02.2015    62117    boogie    24    

43

Работа с интерфейсом Программист Абонемент ($m)

Как получить новые возможности при создании интерфейса 1С и разнообразить интерфейс, который местами бывает суровым и очень текстовым.

1 стартмани

30.11.2014    37741    66    oleg.rizvanov    35    

119

Работа с интерфейсом 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Очень удобные и функциональные часы с будильником в виде обработки 1С.

1 стартмани

24.09.2014    15809    8    miller-adm    5    

8

Работа с интерфейсом Универсальные функции Инструментарий разработчика Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

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

2 стартмани

22.09.2014    66767    720    Alex_E    31    

217

Работа с интерфейсом 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Обработка позволяет ответить на такие вопросы, как "Сколько календарных/рабочих/выходных дней в периоде?", "Сколько месяцев в периоде?", "Какое число будет через 45 дней?", "Какой месяц будет через 25 месяцев?", "Сколько рабочих часов в наборе дат?".

1 стартмани

14.08.2014    25668    30    mbreaker    6    

10

Работа с интерфейсом Инструкции пользователю 1С:Предприятие 8 1С:Бухгалтерия 2.0 Бесплатно (free)

Новомодный интерфейс "Такси" застал пользователей врасплох и многие не знают как дальше "в этом" работать. А между прочим, фирма 1С сделала его достаточно удобным, если знать как правильно его "готовить" :) Итак, для начала включим интерфейс "Такси", рассмотрим все на примере конфигурации "Бухгалтерия 3.0".

09.07.2014    87874    Diversus    117    

124

Работа с интерфейсом Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Объекты ActiveX недоступны для размещения в управляемых формах, как было ранее в обычных, при этом необходимость размещения таких объектов востребована. Покопался на форумах, мне нужно было разместить файл PDF в управляемой форме, чтобы доступ был в веб-клиенте. В тонком клиенте получилось (не как в обычной форме, но довольно просто), а в веб-клиенте потребовалось покопаться. Привожу описание как сделал размещение файла PDF, с целью чтобы вы не спотыкались на моих граблях.

1 стартмани

07.07.2014    269875    59    sapervodichka    35    

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

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

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

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