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

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

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

Анализ проблемы и платформенные ограничения

Проанализируем поведение платформы «1С:Предприятие 8.3» при работе со свойствами элементов формы таблицы. В управляемой форме колонка таблицы представлена элементом типа ПолеФормы (вид ПолеВвода), однако его поведение отличается от отдельного поля ввода на форме:

  1. Область действия свойства Подсказка: Для колонок таблицы данное свойство привязано исключительно к шапке колонки (заголовку). Всплывающая подсказка отображается только при наведении указателя мыши на заголовок всей колонки. Для строк и ячеек таблицы всплывающие тултипы на уровне отдельных данных платформой не формируются, поэтому динамическое изменение свойства Элементы.ИмяКолонки.Подсказка не вызывает появления окна подсказки над активной ячейкой.
  2. Ограничения свойства ПодсказкаВвода: Это свойство предназначено для вывода замещающего текста (плейсхолдера) непосредственно внутри поля, пока оно не заполнено. Однако согласно документации платформы, ПодсказкаВвода не отображается, если связанный реквизит имеет тип Число или Дата, а также если поле содержит значение, отличное от пустого (для числового типа значение 0 является заполненным числом, а не пустым значением). Соответственно, для реквизитов вроде «Сумма», «Количество» или «Цена» плейсхолдер не появится.

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

Вариант 1. Использование объекта СообщениеПользователю с привязкой к ячейке

Наиболее наглядный способ привлечь внимание пользователя к конкретной ячейке — сформировать платформенное всплывающее сообщение (облачко), физически привязанное к реквизиту активной строки таблицы. Рассмотрим реализацию в обработчике события таблицы ПриАктивизацииЯчейки на клиенте.

Разберем по шагам логику привязки сообщения:

  1. Проверяем, что в таблице выбрана строка и фокус находится именно на нужной нам колонке.
  2. Формируем путь к данным текущей строки таблицы. Путь задается в виде строки: Объект.ИмяТабличнойЧасти[Индекс].ИмяРеквизита, где индекс строки рассчитывается от 0 (как номер строки минус один).
  3. Создаем объект СообщениеПользователю, передаем контекст данных через УстановитьДанные() и выводим сообщение методом Сообщить().

Посмотрим на пример программного кода:


&НаКлиенте
Процедура СоставПриАктивизацииЯчейки(Элемент)
	
	ТекущиеДанные = Элементы.Состав.ТекущиеДанные;
	ТекущийЭлементФормы = Элементы.Состав.ТекущийЭлемент;
	
	Если ТекущиеДанные = Неопределено Или ТекущийЭлементФормы = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если ТекущийЭлементФормы.Имя = "СоставСумма" Тогда
		
		ИндексСтроки = ТекущиеДанные.НомерСтроки - 1;
		
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Внимание! Проверьте корректность заполнения суммы без учета НДС.";
		Сообщение.Поле = "Объект.Состав[" + Формат(ИндексСтроки, "ЧГ=0") + "].Сумма";
		Сообщение.УстановитьДанные(ЭтотОбъект);
		Сообщение.Сообщить();
		
	КонецЕсли;
	
КонецПроцедуры

Вариант 2. Информационная надпись под таблицей

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

Разберем настройку по шагам:

  1. Размещаем под табличной частью элемент формы Декорация (вид Надпись), например с именем ПодсказкаКТаблице, задаем ему неяркий цвет текста или стиль подсказки.
  2. В событии таблицы ПриАктивизацииЯчейки анализируем текущий активный элемент.
  3. Если фокус установлен на колонке, требующей пояснений, заполняем заголовок декорации; при переходе на другие колонки — очищаем текст или скрываем декорацию.

Посмотрим на пример реализации данного подхода:


&НаКлиенте
Процедура СоставПриАктивизацииЯчейки(Элемент)
	
	ТекущийЭлементФормы = Элементы.Состав.ТекущийЭлемент;
	
	Если ТекущийЭлементФормы <> Неопределено И ТекущийЭлементФормы.Имя = "СоставСумма" Тогда
		Элементы.ПодсказкаКТаблице.Заголовок = "Подсказка: Сумма рассчитывается автоматически при изменении количества и цены.";
		Элементы.ПодсказкаКТаблице.Видимость = Истина;
	Иначе
		Элементы.ПодсказкаКТаблице.Заголовок = "";
		Элементы.ПодсказкаКТаблице.Видимость = Ложь;
	КонецЕсли;
	
КонецПроцедуры

Вариант 3. Использование системного оповещения

Еще один способ проинформировать пользователя — использование метода ПоказатьОповещениеПользователя(). Такое уведомление всплывает в нижнем правом углу экрана, не перекрывает поля ввода и автоматически исчезает через несколько секунд.

Рассмотрим пример вызова оповещения:


&НаКлиенте
Процедура СоставПриАктивизацииЯчейки(Элемент)
	
	ТекущиеДанные = Элементы.Состав.ТекущиеДанные;
	ТекущийЭлементФормы = Элементы.Состав.ТекущийЭлемент;
	
	Если ТекущиеДанные <> Неопределено И ТекущийЭлементФормы <> Неопределено Тогда
		Если ТекущийЭлементФормы.Имя = "СоставСумма" Тогда
			ПоказатьОповещениеПользователя(
				"Внимание!",
				,
				"Для строки № " + ТекущиеДанные.НомерСтроки + " проверьте введенную сумму.",
				БиблиотекаКартинок.Информация
			);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

Вариант 4. Служебная колонка со статусом или пиктограммой

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

← На главную