1с сообщение

Давно не писал в рубрики ‘Джуниор 1с’. Сегодня исправим этот недочет и рассмотрим различные способы вывода сообщения в 1с пользователю. Ведь главное это не просто вывести сообщение пользователю, а еще это сделать максимально информативно и своевременно. Итак, начнем.

Самое элементарное что может сделать начинающий программист, это ознакомиться с функцией глобального контекста ‘Сообщить’:

Конструкция у данной функции элементарная – текст сообщения и статус сообщения. Как мы можем убедиться при выполнении контекста клиента и в контексте сервера выведет на экран сообщению пользователю.

Пока мы не ушли дальше стоит обратить внимание на само окно сообщений (интерфейс ‘Такси’). Если по какой-то причине оно закрылось и вы не успели прочитать все сообщения, то его можно не хитро открыть заново:

Окно сообщений.

Идем дальше, поднимаем немного наши навыки в программирование и начинаем использовать общий объект ‘СообщениеПользователю’:

В принципе если прочитать справку с первого раза ничего не понятно, поэтому нужны примеры.

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

Сообщение с привязкой к полю объекта.
Сообщение с привязкой к полю объекта.

Выведем сообщение в форме текущего документа с привязкой к полю ‘Количество’ табличной части ‘Товары’, при двойном щелчке по сообщению появляется сообщение под полем:

Сообщение с привязкой к полю табличной части.

Выведем сообщение в форме текущего документа с привязкой к полю ‘Организация’ и его реквизиту ‘Наименование’ (говорим что необходимо проверить реквизит наименование у организации). При двойном щелчке по сообщению откроется значение из поля ‘Организация’, и появится сообщение под полем ‘Наименование’. Простыми словами мы подготавливаем информацию для сообщения в другой форме, которая откроется по щелчку по сообщению в текущей форме:

Сообщение в новой форме.
Сообщение в новой форме.

Выведем сообщение из модуля объекта с привязкой к реквизиту объекта ‘МестоХранения’:

Сообщение из модуля объекта.
Сообщение из модуля объекта.

Выведем сообщение для новой открываемой формы. Откроется форма реквизита ‘Партнер’ с уже сформированный сообщением для пользователя:

В общем вариантов исполнения много. Спасибо материалу с сайта ‘инфостарт’. В идеале можно воспользоваться уже готовым конструктором из ‘БСП’ для формирования сообщения пользователю. В разных вариациях она есть в типовых конфигурациях и зачастую её достаточно что бы с ней работать (ищите в своих конфигурациях и без необходимости не засоряйте своими дублями):

Так же мы можем использовать и альтернативный вариант общения с пользователем через функции глобального контекста ‘ПоказатьОповещениеПользователя’. Доступно только на клиенте! Плюс здесь в том, что мы не привязываемся к какому-либо объекту формы. Давайте выведем оповещение для пользователя о том что был закрыт документ и при нажатии на оповещение, откроем его:

‘ПоказатьОповещениеПользователя’.

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

Заметьте, описание оповещения здесь идет с одним параметром ‘ПараметрыОповещения’. Так же оно может располагаться и в общем модуле. Более детально поговорим об описании оповещений в отдельной статье!

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

Состояние.
Состояние.

Если еще немного покопаться, то можно найти еще пару способов, каким образом можно вывести сообщению пользователю. Один из них это клиентский не модальный метод глобального контекста ‘ПоказатьПредупрежедение’. Фишка в том, что при показе предупреждения клиентский код все равно продолжит свое выполнение. Так же здесь можно использовать при необходимости форматную строку и оповещение, которое будет вызвано после нажатии кнопки ‘ОК’:

ПоказатьПредупрежедение.
ПоказатьПредупрежедение.

Ну и пример с оповещением можно сделать для наглядности:

Давайте еще рассмотрим бонусом интересные моменты, которые на прямую не связаны с выводом текста сообщений пользователю, но помогает нам с ними работать.

Допустим мы в процессе выполнения программного кода наплодили сообщений пользователю на сервере, но еще не показали их в клиентской части. Так вот! Эти сообщения можно получить и при желании удалить до показа непосредственно пользователю используя функцию глобального контекста ‘ПолучитьСообщенияПользователю‘! Давайте в процедуре ‘ОбработкаПроведения’ и процедуре формы ‘ПослеЗаписиНаСервере’ оставим наши сообщения и прочитаем, что же у нас накопилось:

И мы видим, что все то, что планируется для показа пользователю есть теперь у нас в массиве! И всего лишь одним параметром процедуры мы можем убрать все сообщения!

ПолучитьСообщенияПользователю
ПолучитьСообщенияПользователю.

Так же все сообщения пользователю можно очистить с экрана с помощью метода ‘ОчиститьСообщения()’:

Казалось бы такая простая тема, но сколько есть тонкостей и возможностей только в одном сообщении пользователю в 1с!

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

6+

2 комментария

  1. Вера

    Добрый вечер. У меня такая задача: в модуле формы документа “Больничный лист” на сервере сравниваю два значения, полученные в результате запроса, если первое больше второго, необходимо вывести оповещение с текстом “Создать документ Разовое начисление?” с вариантами ответа “Да/нет”, если пользователь отвечает “Да”, то, не выходя из формы Больничного листа открыть форму документа “Разовое начисление”. Застопорилась еще на моменте передачи с серверной процедуры на клиентскую этого оповещения. Можете пример привести, как такое можно реализовать?

    2+
  2. Admin (Автор записи)

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

    Смотри, можешь этот вопрос задать на моем форуме. Создай тему в разделе программирование. Там можно будет пример кода привести. И если что я смогу ответить тоже с примером форматированного кода. Так будет удобнее.

    1+

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

Ваш адрес email не будет опубликован.