Начиная с версии 8.2 в платформе 1С появился замечательный функционал Сообщение пользователю. Он позволяет выводить сообщения об ошибках заполнения полей и, главное, активизирует эти поля. Пользователю не нужно искать какие именно поля не заполнены. Но, к сожалению, данный механизм не лишен недостатков. А именно, подсветка полей не выполняется для иерархических структур данных, таких как:
- Дерево значений
- Таблица в таблице
При попытке использовать Сообщение пользователю подсвечивается только таблица формы, в которой не заполнено поле, но не активизируется строка, и поле. Для решения этой проблемы разработан механизм Панель сообщений.
Панель сообщений добавляется на форму (в которой выполняется проверка реквизитов) в виде таблицы формы. При активизации строки панели сообщений выполняется позиционирование на незаполненном поле, рядом с которым показывается меню для навигации по ошибкам.
Сама проверка выполняется вызовом из формы одного метода ПроверитьЗаполнениеРеквизитовФормы(). В процессе работы метода выполняется проверка заполнения проверяемых реквизитов и при необходимости вывод таблицы сообщений на исходную форму.
МассивПроверяемыхРеквизитов = Новый Массив;
МассивПроверяемыхРеквизитов.Добавить("Реквизит1");
МассивПроверяемыхРеквизитов.Добавить("Реквизит1.ДатаНачала");
МассивПроверяемыхРеквизитов.Добавить("Объект.Реквизит1");
МассивПроверяемыхРеквизитов.Добавить("Объект.ТабличнаяЧасть1.Реквизит1");
МассивПроверяемыхРеквизитов.Добавить("Объект.ТабличнаяЧасть1.Таблица5.Реквизит2");
МассивПроверяемыхРеквизитов.Добавить("Объект.ТабличнаяЧасть1.Период");
МассивПроверяемыхРеквизитов.Добавить("Объект.ТабличнаяЧасть1.Период.ДатаНачала");
МассивПроверяемыхРеквизитов.Добавить("ПолеВвода1");
МассивПроверяемыхРеквизитов.Добавить("ПолеВвода2");
МассивПроверяемыхРеквизитов.Добавить("Таблица1.ПолеВвода1");
МассивПроверяемыхРеквизитов.Добавить("Таблица1.ПолеВвода2");
МассивПроверяемыхРеквизитов.Добавить("Таблица1.Таблица2.ПолеВвода1");
МассивПроверяемыхРеквизитов.Добавить("Таблица1.Таблица2.ПолеВвода2");
МассивПроверяемыхРеквизитов.Добавить("Таблица1.Таблица2.Таблица3.ПолеВвода1");
МассивПроверяемыхРеквизитов.Добавить("Таблица1.Таблица2.Таблица3.ПолеВвода2");
МассивПроверяемыхРеквизитов.Добавить("Дерево1.ПолеВвода1");
МассивПроверяемыхРеквизитов.Добавить("Дерево1.ПолеВвода2");
МассивПроверяемыхРеквизитов.Добавить("Дерево1.Таблица4.ПолеВвода1");
МассивПроверяемыхРеквизитов.Добавить("Дерево1.Таблица4.ПолеВвода2");
ПанельСообщений.ПроверитьЗаполнениеРеквизитовФормы(ЭтотОбъект, Отказ, МассивПроверяемыхРеквизитов, Элементы.ГруппаПраваяКолонка);
В исходной форме также должен быть прописан обработчик события ПриАктивизацииСтроки() для таблицы сообщений.
&НаКлиенте
Процедура Подключаемый_ПанельСообщенийПриАктивизацииСтроки(Элемент)
ПанельСообщенийКлиент.ПриАктивизацииСтроки(ЭтотОбъект, Элемент);
КонецПроцедуры
Панель сообщений в целях демонстрации возможностей реализована в виде внешней обработки. При желании Вы можете скопировать код из обработки в общие модули чтобы использовать Панель сообщений в своих конфигурациях. В загрузке лежит архив с обработкой для демонстрации и обработкой, содержащей программный интерфейс.
Тестировалось на платформе 1С:Предприятие 8.3 (8.3.12.1714). Механизм можно развивать, жду Ваши замечания и предложения в комментариях.