1с привязать ошибку к полю

 +1 

   

Распечатать

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

Когда платформа проверяет заполненность реквизитов при записи, она, в случае ошибки, выводит сообщение, привязанное к тому реквизиту формы, который не заполнен:
title

Как самому вывести такое же сообщение, если в моей обработке введены неправильные данные?

Для вывода таких сообщений предназначен объект СообщениеПользователю. Такой объект можно создать конструктором и для того, чтобы указать поле, возле которого выводится сообщение, нужно правильно заполнить его свойство Поле.

Например, есть обработка, форма которой содержит реквизит Комментарий:
title

В некоторый момент нужно проверить, заполнено это поле или нет. Если поле не заполнено — выдать сообщение.

Для этого в форме обработки можно использовать такой код:

Код 1C v 8.2 УП

 Если СокрЛП(Комментарий) = "" Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Поле = "Комментарий";
Сообщение.Текст = "Нужно написать комментарий.";
Сообщение.Сообщить();
КонецЕсли;

Здесь в свойстве Поле указывается имя реквизита формы. В результате выведенное сообщение будет привязано к тому элементу формы, который связан с этим реквизитом формы:
title

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

Например, так:

Код 1C v 8.2 УП

 МаксимальныйИндекс = Таблица.Количество() - 1;
Для Индекс = 0 По МаксимальныйИндекс Цикл
Если Таблица[Индекс].Количество = 0 Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Поле = "Таблица[" + Индекс + "].Количество";
Сообщение.Текст = "Нужно указать количество.";
Сообщение.Сообщить();
КонецЕсли;
КонецЦикла;

В результате сообщение будет привязано именно к той ячейке колонки Количество, в которой содержится значение 0:
title

Учебный курс: Подготовка на 1С:Специалист по платформе 1С:Предприятие 8.3

Решение задач по управляемым формам – тема № 9:
Как вывести сообщения пользователю с привязкой к элементам формы, в которых допущена ошибка

В современных типовых конфигурациях реализовано большое количество проверок, чтобы пользователь не смог ввести в систему некорректные данные. Например, нельзя провести документ реализации, если на складе недостаточно товара.

При этом система не просто должна запрещать проведение документа, а подсказывать пользователю, в чем заключается ошибка. Сообщать, какого именно товара недостаточно на складе, сколько штук товара не хватает.

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

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

Задача на экзамене может выглядеть примерно так:

Требуется вывести диагностическое сообщение пользователю о наличии ошибки. Сообщение должно быть привязано к конкретному полю формы:

Привязка сообщения об ошибке к полю формы

Рисунок 1 – Привязка сообщения об ошибке к полю формы

При наличии ошибки в табличной части сообщение должно быть привязано к конкретной ячейке в строке табличной части, в которой введены некорректные данные:

Привязка сообщения об ошибке к ячейке в строке табличной части

Рисунок 2 – Привязка сообщения об ошибке к ячейке в строке табличной части

Рассмотрим несколько вариантов выдачи сообщения пользователю:

  1. Проверка заполнения реквизитов
  2. Привязка сообщения к полю формы
  3. Привязка сообщения к ячейке в строке табличной части.

К сожалению, у Вас недостаточно прав для дальнейшего просмотра.

Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.

Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.

Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.

Комментарии закрыты

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

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

(контроль реквизита шапки)

Если Объект.СуммаДокумента = 0 Тогда

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

КонецЕсли;

(Контроль элемента табличной части)

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

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

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

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

КонецЕсли;

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

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

КонецЕсли;

КонецЦикла;

Когда платформа проверяет заполненность реквизитов при записи, она, в случае ошибки, выводит сообщение, привязанное к тому реквизиту формы, который незаполнен: 

Как самому вывести такое же сообщение, если в моей обработке введены неправильные данные? 

Для вывода таких сообщений предназначен объект СообщениеПользователю. Такой объект можно создать конструктором и для того, чтобы указать поле, возле которого выводится сообщение, нужно правильно заполнить его свойство Поле.

Например, есть обработка, форма которой содержит реквизит Комментарий:

В некоторый момент нужно проверить, заполнено это поле или нет. Если поле не заполнено — выдать сообщение.

Для этого в форме обработки можно использовать такой код:

Если СокрЛП(Комментарий) = "" Тогда
   Сообщение = Новый СообщениеПользователю;
   Сообщение.Поле  = "Комментарий";
   Сообщение.Текст = "Нужно написать комментарий.";
   Сообщение.Сообщить();
КонецЕсли; 

Здесь в свойстве Поле указывается имя реквизита формы. В результате выведенное сообщение будет привязано к тому элементу формы, который связан с этим реквизитом формы:

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

Например, так:

МаксимальныйИндекс = Таблица.Количество() - 1;
Для Индекс = 0 По МаксимальныйИндекс Цикл
   Если Таблица[Индекс].Количество = 0 Тогда
      Сообщение = Новый СообщениеПользователю;
      Сообщение.Поле  = "Таблица[" + Индекс + "].Количество";
      Сообщение.Текст = "Нужно указать количество.";
      Сообщение.Сообщить();
   КонецЕсли;
КонецЦикла; 

В результате сообщение будет привязано именно к той ячейке колонки Количество, в которой содержится значение 0:

Объект СообщениеПользователю

Обратите внимание на то, что здесь мы пользуемся обычным методом Сообщить – мы выводим в окно сообщения одно сообщение, содержащее необходимые сведения. В 1С:Предприятие 8.2. мы можем поступить по-другому – вывести сообщения об ошибках или другие сведения, «привязав» их к полям, которые вызвали ошибки. Для этого можно воспользоваться объектом СообщениеПользователю. Он, помимо прочих полезных возможностей, позволяет формировать сообщения и «привязывать» их к реквизитам формы. Перепишем код таким образом, чтобы сообщения об ошибках (то есть, о незаполненных полях Фамилия, Имя, или Отчество), выявленных в процедуре ПередЗаписью, выводились бы в привязке к соответствующим элементам формы. Вот какой код позволяет этого добиться:

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
 //Если не введена фамилия...
 Если ПустаяСтрока(Объект.Фамилия) Тогда
   СообщитьПользователю("Объект.Фамилия", "Заполните поле Фамилия", Отказ);  
 КонецЕсли;
 //Если не введено имя...
 Если ПустаяСтрока(Объект.Имя) Тогда
   СообщитьПользователю("Объект.Имя", "Заполните поле Имя", Отказ);  
 КонецЕсли;
 //Если не введено отчество...
 Если ПустаяСтрока(Объект.Отчество) Тогда
   СообщитьПользователю("Объект.Отчество", "Заполните поле Отчество", Отказ);  
 КонецЕсли;
 //Если флаг Отказ не был установлен - формируем наименование
 Если НЕ Отказ Тогда
   Объект.Наименование=Объект.Фамилия+" "+ ВРег(Лев(Объект.Имя,1))+". "+ВРег(Лев(Объект.Отчество,1))+".";
 КонецЕсли;
   
КонецПроцедуры

&НаКлиенте
//Процедура, формирующая и выводящая сообщение с переданными ей параметрами
Процедура СообщитьПользователю(ПутьКРеквизиту, Текст, Отказ)
 Сообщение=Новый СообщениеПользователю;
 Сообщение.Поле=ПутьКРеквизиту;
 Сообщение.Текст=Текст;
 Сообщение.Сообщить();
 Отказ=Истина;
КонецПроцедуры

Поясним приведенный код. Для начала, мы создали новую клиентскую процедуру СообщитьПользователю. Эта процедура принимает три параметра. Первый – ПутьКРеквизиту содержит строковый путь к полю, к которому должно быть привязано сообщение. Второй – Текст – содержит текст сообщения. Третий – Отказ – используется для установки в значение Истина параметра Отказ процедуры ПередЗаписью в том случае, если процедура СообщитьПользователю будет вызвана хотя бы один раз. А хотя бы однократный ее вызов означает, что одно из полей не заполнено, то есть наименование сформировать невозможно, соответственно, записать объект так же не получится.

Когда процедура вызывается, мы сначала создаем новый объект типа СообщениеПользователю. Затем его свойство Поле устанавливаем в значение параметра ПутьКРеквизиту. Этот параметр должен быть строковым и имеет, в нашем случае вид «Объект.Фамилия», «Объект.Имя», «Объект.Отчество» — это позволяет правильно «привязать» сообщение к полям формы. Свойство Текст объекта СообщениеПользователю содержит текст для вывода.

Мы, кроме того, полностью переработали процедуру ПередЗаписью. А именно, если проверка на заполнение поля указывает на то, что поле пустое, вызывается процедура СообщитьПользователю. По окончании проверок мы проверяем, установлен ли параметр Отказ в значение Истина – если не установлен – ни одна из проверок не завершилась обнаружением пустого поля и мы можем формировать наименование. Если установлен – наименование мы не формируем – и процедура заканчивает работу, а записи объекта, естественно, не происходит – пользователь видит лишь сообщения об ошибках.

Если было сформировано несколько сообщений типа СообщениеПользователюпользователь видит одно окно сообщения около поля, но это окно снабжено кнопками для перемещения вперед и назад – щелчок по кнопке приводит к «переходу» сообщения от одного поля с ошибкой к другому,
рис.
3.22, 3.23.

Сообщение об ошибке, привязанное к полю Имя

Рис.
3.22.
Сообщение об ошибке, привязанное к полю Имя

Сообщение об ошибке, привязанное к полю Отчество

Рис.
3.23.
Сообщение об ошибке, привязанное к полю Отчество

Доведем до логического завершения пример со справочником ФизическиеЛица. Для этого заполним справочник Районы и введем в информационную базу сведения о следующих физических лицах:

Фамилия Имя Отчество Дата рождения Пол Район
Иванов Иван Иванович 27.02.1984 Мужской Ленинский
Петров Петр Петрович 12.06.1985 Мужской Ленинский
Васильев Павел Петрович 17.05.1985 Мужской Ленинский
Расчетчиков Александр Иванович 12.03.1980 Мужской Октябрьский
Александров Александр Александрович 17.09.1970 Мужской Октябрьский
Бухгалтерова Василиса Владимировна 13.08.1976 Женский Уральский

Обратите внимание на то, что справочник ФизическиеЛица – это пример справочника, с которым пользователям нашей информационной базы придется работать достаточно часто. В данный момент для того, чтобы создать новый элемент справочника, нам нужно выполнить несколько действий – перейти в раздел Расчет заработной платы, щелкнуть по ссылке, открывающей список справочника, после чего нажать на кнопку Создать новый элемент списка. Для того, чтобы сократить количество действий, необходимых для выполнения часто используемых операций, мы можем соответствующим образом настроить интерфейс нашего прикладного решения, в частности, поработать с панелью действий соответствующего раздела и с Рабочим столом.

Настройка командного интерфейса для ускорения доступа к справочнику

Добавим команду создания нового элемента справочника ФизическиеЛица в панель действий раздела Расчет заработной платы. Для этого откроем окно Все подсистемы командой контекстного меню ветви Подсистемы дерева конфигурации и установим флаг Видимость напротив команды Физические лица: Создать в области Панель действий.Создать,
рис.
3.24.

Мы можем включить команду добавления нового физического лица в командный интерфейс Рабочего стола.

Для этого выполним команду контекстного меню корневого элемента конфигурации Открыть командный интерфейс рабочего стола

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

Теперь,
рис.
3.26., команда для быстрого создания элементов справочника ФизическиеЛица добавлена в панель действий Рабочего стола, аналогичная команда появилась в разделе Расчет заработной платы.

Новая команда в панели действий рабочего стола

Рис.
3.26.
Новая команда в панели действий рабочего стола

Выводы

В этой лекции мы создали справочники Организации и ФизическиеЛица. Для справочника ФизическиеЛица мы реализовали программное заполнение реквизита на основе других реквизитов, познакомились с объектом СообщениеПользователю, который позволяет выводить сообщения в привязке к элементам управления. Так же мы рассмотрели основные составные части редактора управляемых форм и настроили командный интерфейс для ускорения доступа пользователя к часто используемой функциональности справочника ФизическиеЛица.

В том случае, когда производится проверка в табличной части с большим количеством строк, пользователям становится неудобно искать стоку с ошибкой. Для того, чтобы пользователь мог оперативно перейти к строке с ошибкой, в 1С есть специальная функция — «СообщениеПользователю». Ниже приведен пример ее использования. В данном коде производится проверка на наличие одинаковых номеров счетов-фактур в табличной части «Документы».

Для Каждого ТекущаяСтрока Из Объект.Документы Цикл

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = «Дубли номеров СФ: « + ТекущаяСтрока.ОрганизацияПоставщик + » № « + Строка(ТекущаяСтрока.НомерСФ);

Сообщение.Поле = «Объект.Документы[« + (ТекущаяСтрока.НомерСтроки-1) + «].НомерСФ»;

Сообщение.Сообщить();

КонецЦикла;

Вот как будет выглядеть ошибка в пользовательском режиме ⇓. Чтобы перейти к нужной строке пользователю просто нужно дважды щелкнуть на сообщении об ошибке.

СообщениеПользователю

Внешний вид сообщения

Также добавлена подсветка неверных строк красным цветом, это делается в «Условном оформлении» формы.

Большим преимуществом функции «СообщениеПользователю» является возможность использовать ее как на клиенте, так и на сервере. Но, к сожалению, использовать ее можно только на управляемых формах.

А если вы хотите научиться без программирования решать задачи, возникающие в 1С — приглашаю Вас на мой курс Аналитик 1С

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • 1с при редактировании текста модуля произошла внутренняя ошибка
  • 1с при работе формы произошла системная ошибка
  • 1с при проверке заполненности данных произошли ошибки
  • 1с при построении очереди отложенных обработчиков обнаружены ошибки
  • 1с при получении менеджера лицензий слк возникла ошибка

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии