В этой статье рассмотрим один из способов вывода сообщения пользователю 1С – использование объекта СообщениеПользователю. С этим объектом можно работать на тонком, толстом, мобильном и веб-клиенте, а также в серверном контексте 1С 8.3.
Сообщение пользователю на управляемой форме 1С
Разберем, как при помощи этого метода вывести сообщение пользователю на управляемой форме в 1С. Самый простой вариант использования будет следующий:
&НаКлиенте Процедура Заполнить(Команда) Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Выберете контрагента"; Сообщение.Сообщить(); КонецПроцедуры
В этом случае, просто внизу формы выйдет сообщение.
Это самый простой вариант использования этого объекта, и он ни чем не отличается от метода Сообщить. Но, этот объект можно использовать гораздо эффективнее. Например, можно привязать нужное нам сообщение к конкретному реквизиту формы, который выведен на форму в качестве элемента.
Например, у меня на форме документа имеется поле ввода Контрагент, которое связано с одноименным реквизитом документа. Этот реквизит формы Контрагент является подчиненным реквизитом основного реквизита формы Объект.
Сделаем вывод сообщения, которое будет привязано к элементу формы, связанному с реквизитом Контрагент. Для этого следует использовать свойство ПутьКДанным объекта СообщениеПользователю, в котором необходимо указать путь на управляемой форме к этому реквизиту.
&НаКлиенте Процедура Заполнить(Команда) Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Выберете контрагента"; Сообщение.Поле = "Объект.Контрагент"; Сообщение.Сообщить(); КонецПроцедуры
В результате, плюсом к обычному сообщению внизу формы выйдет сообщение, которое будет привязано к элементу, связанному с этим реквизитом.
В свойстве Поле объекта СообщениеПользователю можно указать путь к любому реквизиту формы. Например, добавим на форму реквизит Комментарий, который ни как не будет связан с основным реквизитом формы.
Мы можем вывести сообщение, которое будет привязано к элементу, связанному с этим реквизитом.
&НаКлиенте Процедура Заполнить(Команда) Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Заполните комментарий"; Сообщение.Поле = "Комментарий"; Сообщение.Сообщить(); КонецПроцедуры
В результате, сообщение будет привязано к элементу формы, связанного с реквизитом формы Комментарий.
Также, сообщение можно привязать к нужной колонке нужной строки табличной части на форме. В моем примере есть табличная часть Товары с колонкой Количество.
Сделаем проверку на то, что значение в этой колонке пустое.
&НаКлиенте Процедура Заполнить(Команда) Для Каждого стрТовар из Объект.Товары Цикл Если стрТовар.Количество = 0 Тогда Сообщение = Новый СообщениеПользователю; ИндексСтроки = стрТовар.НомерСтроки - 1; Сообщение.Поле = "Объект.Товары["+ИндексСтроки+"].Количество"; Сообщение.Текст = "Количество не заполнено"; Сообщение.Сообщить(); Возврат КонецЕсли; КонецЦикла; КонецПроцедуры
В результате выйдет сообщение, привязанное к определенной строке нужной колонки.
Вывести сообщение пользователю 1С
Пойдем дальше! Иногда требуется выполнить проверку заполнения того или иного реквизита при проведении документа. В последних платформах 1С следует это делать в обработчике ОбработкаПроверкиЗаполнения, этот обработчик создается в модуле объекта, и срабатывает перед проведением документа.
В нем необходимо делать проверки на заполнение реквизитов документа.
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если Не ЗначениеЗаполнено(Контрагент) Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не заполнен контрагент"; Сообщение.Поле = "Контрагент"; Сообщение.ПутьКДанным = "Объект"; Сообщение.КлючДанных = ЭтотОбъект.Ссылка; Сообщение.Сообщить(); Отказ = Истина; КонецЕсли; КонецПроцедуры
Если мы попробуем провести документ «Продажа товара» с пустым полем «Контрагент», то выйдет сообщение.
Можно сделать проще:
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если Не ЗначениеЗаполнено(Контрагент) Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не заполнен контрагент"; Сообщение.Поле = "Контрагент"; Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Сообщить(); Отказ = Истина; КонецЕсли; КонецПроцедуры
Результат будет тот же самый. Что делает метод УстановитьДанные? Этот метод автоматически устанавливает свойства ПутьКДанным и КлючДанных на основании переданного в него объекта.
Статья про вывод простых сообщений пользователям
Более подробно и основательно разработка в 1С дается в моей книге: «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655
Вступайте в мои группы:
Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009
«выберете» — эх, Семён Семёныч.
Правильно — «выберите».
А можно сообщение, привязанное к полю, выводить без заголовка «Ошибка»? Или с другим заголовком?