четверг, 15 марта 2018 г.

Как самому вывести сообщение, чтобы оно указывало на поле формы, в котором ошибка?

Как самому вывести сообщение, чтобы оно указывало на поле формы, в котором ошибка?





Примеры из типовых конфигураций:

(контроль реквизита шапки)
Если Объект.СуммаДокумента = 0 Тогда

Отказ = Истина;
Сообщение = НСтр("ru = 'Не заполнена сумма общего плана!'");
Поле = "СуммаДокумента";
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Сообщение, Объект.Ссылка, Поле, "Объект");

КонецЕсли;

(Контроль элемента табличной части)
//проверка строк на обязательное заполнение
Для ТекИндекс = 0 По Объект.Товары.Количество()-1 Цикл

АдресОшибки = НСтр("ru=' в строке %НомерСтроки%'");
АдресОшибки = СтрЗаменить(АдресОшибки, "%НомерСтроки%", Объект.Товары[ТекИндекс].НомерСтроки);

Если КонтрольОбщаяЦена
И Объект.Товары[ТекИндекс].Цена = 0 
И Не ЗначениеЗаполнено(Объект.Товары[ТекИндекс].Номенклатура)
Тогда

ТекстОшибки = НСтр("ru='Необходимо указать общую стоимость'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ТекстОшибки + АдресОшибки,
Объект.Ссылка,
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", Объект.Товары[ТекИндекс].НомерСтроки, "Цена"),
"Объект",
Отказ
);

КонецЕсли;

Если КонтрольОбщееКоличество
И Объект.Товары[ТекИндекс].Количество = 0 
И Не ЗначениеЗаполнено(Объект.Товары[ТекИндекс].Номенклатура)
Тогда

ТекстОшибки = НСтр("ru='Необходимо указать общее количество'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ТекстОшибки + АдресОшибки,
Объект.Ссылка,
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", Объект.Товары[ТекИндекс].НомерСтроки, "Количество"),
"Объект",
Отказ
);

КонецЕсли;

КонецЦикла;


Когда платформа проверяет заполненность реквизитов при записи, она, в случае ошибки, выводит сообщение, привязанное к тому реквизиту формы, который незаполнен: 
Как самому вывести такое же сообщение, если в моей обработке введены неправильные данные? 
Для вывода таких сообщений предназначен объект СообщениеПользователю. Такой объект можно создать конструктором и для того, чтобы указать поле, возле которого выводится сообщение, нужно правильно заполнить его свойство Поле.
Например, есть обработка, форма которой содержит реквизит Комментарий:
В некоторый момент нужно проверить, заполнено это поле или нет. Если поле не заполнено - выдать сообщение.
Для этого в форме обработки можно использовать такой код:
Если СокрЛП(Комментарий) = "" Тогда
   Сообщение = Новый СообщениеПользователю;
   Сообщение.Поле  = "Комментарий";
   Сообщение.Текст = "Нужно написать комментарий.";
   Сообщение.Сообщить();
КонецЕсли; 
Здесь в свойстве Поле указывается имя реквизита формы. В результате выведенное сообщение будет привязано к тому элементу формы, который связан с этим реквизитом формы:
Аналогичным образом можно привязать сообщение и к любой ячейке таблицы, расположенной в форме. В этом случае кроме имени реквизита, содержащего таблицу, необходимо будет указать индекс нужной строки в таблице и имя колонки таблицы.
Например, так:
МаксимальныйИндекс = Таблица.Количество() - 1;
Для Индекс = 0 По МаксимальныйИндекс Цикл
   Если Таблица[Индекс].Количество = 0 Тогда
      Сообщение = Новый СообщениеПользователю;
      Сообщение.Поле  = "Таблица[" + Индекс + "].Количество";
      Сообщение.Текст = "Нужно указать количество.";
      Сообщение.Сообщить();
   КонецЕсли;
КонецЦикла; 
В результате сообщение будет привязано именно к той ячейке колонки Количество, в которой содержится значение 0:

Комментариев нет:

Отправить комментарий