При разработке интерфейсов на управляемых формах 1С разработчики часто сталкиваются с ситуацией, когда при создании объекта СообщениеПользователю текст ошибки отображается сразу в двух местах: в виде выноски возле самого элемента формы и в отдельной системной панели сообщений в нижней части окна. Разберем, почему платформа ведет себя именно так и какие альтернативные механизмы можно использовать, если требуется локальный вывод информации.
Посмотрим на стандартный код вывода диагностического сообщения:
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Вы выбрали количество больше чем в остатке";
Сообщение.Поле = "ВыбКоличество";
Сообщение.Сообщить();
Выясним причину дублирования текста. Объект СообщениеПользователю в платформе 1С:Предприятие 8 изначально спроектирован как централизованный журнал диагностических сообщений. Его главная задача — зафиксировать список всех возникших предупреждений и ошибок при выполнении операции (например, при проверке заполнения документа, проведении или валидации табличной части).
Заполнение свойства Поле (или ПутьКДанным) не отменяет вывод в панель, а связывает строку сообщения с конкретным элементом формы. Это позволяет пользователю кликнуть по строке в нижнем списке и сразу перейти к проблемному реквизиту. Выноска с текстом над полем — это лишь интерактивный указатель текущего активного сообщения.
Важно: в платформе 1С:Предприятие 8 отсутствуют стандартные свойства или методы, позволяющие отключить вывод строки в нижнюю панель сообщений при использовании метода Сообщить().
Если бизнес-логика требует отображать предупреждение исключительно рядом с полем ввода без засорения общей панели сообщений, рассмотрим альтернативные варианты реализации.
Разберем по шагам создание локального блока сообщения через элемент формы вида Декорация - Надпись:
Надпись (например, с именем НадписьОшибкаКоличества).Видимость по умолчанию отключим (значение Ложь).ПриИзменении поля ввода) будем программно управлять видимостью и текстом надписи.Посмотрим на пример программного кода:
&НаКлиенте
Процедура ВыбКоличествоПриИзменении(Элемент)
Если Объект.ВыбКоличество > ОстатокНаСкладе Тогда
Элементы.НадписьОшибкаКоличества.Заголовок = "Вы выбрали количество больше чем в остатке";
Элементы.НадписьОшибкаКоличества.Видимость = Истина;
Иначе
Элементы.НадписьОшибкаКоличества.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
Проанализируем второй способ — использование встроенного механизма подсказок элементов формы. У элементов управления доступны свойства Подсказка и ПоложениеПодсказки, которые можно изменять динамически на клиенте.
Посмотрим, как изменить оформление поля при обнаружении некорректных данных:
&НаКлиенте
Процедура ПроверитьКоличествоНаКлиенте()
Если Объект.ВыбКоличество > ОстатокНаСкладе Тогда
Элементы.ВыбКоличество.ПоложениеПодсказки = ПоложениеПодсказкиЭлементаФормы.ОтображатьВнизу;
Элементы.ВыбКоличество.Подсказка = "Внимание: указанное количество превышает доступный остаток!";
Иначе
Элементы.ВыбКоличество.Подсказка = "";
КонецЕсли;
КонецПроцедуры
Для ненавязчивого информирования пользователя можно изменить цвет рамки элемента формы при возникновении ошибки, не выводя громоздкие тексты:
&НаКлиенте
Процедура ВыделитьОшибочноеПоле(ЕстьОшибка)
Если ЕстьОшибка Тогда
Элементы.ВыбКоличество.ЦветРамки = ЦветаСтиля.ЦветОшибочныхДанных;
Иначе
Элементы.ВыбКоличество.ЦветРамки = ЦветаСтиля.ЦветРамки;
КонецЕсли;
КонецПроцедуры
Если требуется показать временное уведомление без фиксации в нижней панели формы, применим глобальную процедуру ПоказатьОповещениеПользователя(). Она отображает всплывающее Toast-окно в углу экрана и автоматически исчезает через заданный промежуток времени:
&НаКлиенте
Процедура УведомитьПользователя()
ПоказатьОповещениеПользователя(
"Ошибка ввода",
,
"Вы выбрали количество больше чем в остатке",
БиблиотекаКартинок.Предупреждение32
);
КонецПроцедуры
Таким образом, если перед нами стоит задача комплексной валидации документа с возможностью навигации по всему списку ошибок — используем стандартный СообщениеПользователю. Если же требуется локальная подсветка ошибки для одного конкретного реквизита без появления нижней системной панели — применяем скрытые декорации или управление подсказками элементов формы.