вывести сообщение пользователю после закрытия формы 1с
Вывод сообщений пользователю из закрывающейся управляемой формы 1С
Введение
В управляемом интерфейсе 1С, сообщения, выводимые пользователю с помощью функции Сообщить(. ) или объекта СообщениеПользователю, отображаются с привязкой к форме. И даже если явно такая привязка не задана, то платформа их автоматически привязывает к текущей активной форме.
В общем случае такое поведение системы весьма удобно и разумно.
Но есть ситуация, когда оно имеет негативный побочный эффект.
Чаще всего такая ситуация возникает, когда пользователь в форме документа или справочника нажимает на кнопку «Провести и закрыть» или «Записать и закрыть».
Если во время записи объекта, или во время проведения документа, пользователю выводятся какие-то предупреждающие сообщения (которые не приводят к отмене выполняемого действия), то сообщения выводятся в форму, которая по окончании выполнения кода закрывается, и пользователь эти сообщения не замечает (и возможности их посмотреть у него уже нет).
Вот для того, чтобы эти сообщения все-таки «донести» до пользователя, я и придумал описанный ниже прием.
Впервые этот прием был описан мною в обсуждении темы на Инфостарте.
Здесь же я проверил свои предположения о возможности оптимизации описанной там версии приема, и описал уже результирующую оптимизированную версию.
Ограничения
Т.к. платформа 1С не предоставляет возможности работать с сообщениями, выведенными из клиентского контекста, то описанный ниже прием работает только для тех сообщений, которые выводятся в серверном контексте исполнения кода.
А так как сохранение объектов и проведение документов выполняется в серверном контексте, то нам такое решение вполне подходит.
Общая идея
Общая идея метода заключается в том, чтобы перед возвратом из серверного контекста в клиентский, сохранять сообщения пользователю в специально созданном для этого реквизите формы. А при закрытии формы, если в этом реквизите есть какие-то сообщения, то отображать их, изменяя идентификатор назначения сообщения на пустой GUID. В этом случае, сообщения будут привязываться к текущей активной форме. Но так как это все происходит при закрытии текущей формы, то сообщения будут привязаны к форме, которая станет активной после закрытия текущей формы.
Ну и естественно, что нужно следить за очисткой этого списка сообщений, если форма не закрывается (и сообщения пользователю отобразила платформа).
Подробности реализации на примере
Обоснование
Для того, чтобы продемонстрировать техническую реализацию данного метода, возьмем для примера типовую конфигурацию «Бухгалтерия для Украины 2.0» (2.0.23.1). В ней при проведении документа «Приложение 2 к Налоговой накладной», если документ не включен в ЕРНН, пользователю в окно сообщений выдается предупреждение
«Не указана дата регистрации документа в ЕРНН покупателем! Проводки сформированы частично».
Но если пользователь нажимает на кнопку «Провести и закрыть», то он это предупреждение не увидит (см. видео).
Добавление реквизита формы
После записи объекта, в этом реквизите сохраняются все выводимые пользователю сообщения. А при закрытии формы, чтобы они не пропали, они выводятся в родительскую форму.
Сохранение сообщений после записи на сервере
Следующим шагом нужно в обработчике события формы ПослеЗаписиНаСервере(. ) выбирать готовящиеся к отображению сообщения пользователю, и сохранять их в добавленном выше реквизите формы.
Вывод сообщений в родительское окно при закрытии формы
В обработчике события формы ПриЗакрытии(. ), хранимые в добавленном выше реквизите формы сообщения пользователю, выведем в окно, которое станет активным после закрытия текущей формы.
Делаем это только в том случае, если окно закрывается без завершения работы системы, так как при завершении работы системы закроются все окна, и куда бы мы эти сообщения ни вывели, пользователь все-равно их не увидит.
Удаление сообщений, если форма не закрылась (и они отобразились пользователю платформой)
В самом же обработчике события просто очищаем список сохраненных сообщений пользователю, так как, если он вызвался, значит форма не закрылась и сообщения пользователю отобразила платформа.
Демонстрация результата
В результате мы получили более дружелюбное к пользователю поведение системы (см. видео).
О Лицензии
Работа с сообщениями пользователю
Чтобы понять, как работает новая система сообщений, рассмотрим ситуацию, когда нужно проверить, что некоторые, определенные реквизиты формы заполнены данными.
Платформа позволяет указать, какие реквизиты объектов конфигурации должны автоматически проверяться на заполненность. Если в процессе работы пользователь хочет записать объект, а какой-либо реквизит этого объекта не заполнен, платформа отобразит пользователю сообщение об ошибке. Такое сообщение будет «привязано» к элементу управления в форме. Если щелкнуть на сообщении в окне сообщений, фокус ввода перейдет на указанное поле, а рядом появится информационное окно с текстом сообщения.
Рассмотрим подробно, что при этом происходит и как можно добиться такого же поведения в своем коде. В качестве примера возьмем ситуацию проведения документа.
Когда форма объекта начинает выполнять команду записи, на сервере, куда передается управление, происходит преобразование данных объекта в полноценный объект. При этом, после того, как объект был преобразован, платформа запоминает в общедоступном месте соответствие, состоящее из объекта и имени реквизита формы, который хранит объект в форме. После этого процесс записи и проведения идет своим ходом, до тех пор, пока не появится необходимость отобразить сообщение.
Когда объекту необходимо сформировать сообщение, он ничего не знает о том, где он «родился и живет». Объект знает лишь, что его реквизит не заполнен. Поэтому он создает новый объект СообщениеПользователю и заполняет его свойство Текст описанием ошибки, а свойство Поле заполняет именем своего реквизита, который не заполнен.
Теперь сообщение полностью заполнено и готово к тому, чтобы предстать перед пользователем. После выполнения всех действий на сервере пакет сообщений передается с сервера на клиента и показывается в окне сообщений.
Программное создание сообщений
Теперь посмотрим, как можно добиться такого поведения полностью программно.
В данном фрагменте выполняется преобразование объекта из данных формы в реальный объект и устанавливается его соответствие с реквизитом формы по имени «Объект».
Если в дальнейшем требуется создать сообщение, можно сделать это следующим образом:
ВАЖНО
Привязка объекта к имени реквизита формы действует только для конкретного экземпляр объекта, а не для его ссылки, и живет до тех пор, пока этот экземпляр существует.
Также система позволяет вручную привязать сообщение к форме. Такое может понадобиться, например, при выводе сообщения на стороне клиента, где отсутствуют объекты данных.
Как вывести сообщение пользователю из сервера когда форма документа уже закрыта.
(3) newborn, продам СП, дорого.
СообщениеПользователю (UserMessage)
Свойства:
ИдентификаторНазначения (TargetID)
КлючДанных (DataKey)
Поле (Field)
ПутьКДанным (DataPath)
Текст (Text)
Сообщить (Message)
УстановитьДанные (SetData)
Предназначен для хранения параметров сообщения, которые необходимо вывести пользователю.
Если сообщение еще не было показано пользователю (такое может быть при работе на стороне сервера, в фоновом задании, внешнем соединении или Web-сервисах), можно получить накопленные сообщения методом ПолучитьСообщенияПользователю.
В управляемых формах, в случае выполнения просмотра сообщения, выполняется следующий механизм обработки:
Если у сообщения свойство КлючДанных заполнено и не совпадает с ключевым значением основного реквизита текущей формы (ссылкой объекта или ключом записи регистра сведений), то:
открывается новая форма объекта, соответствующая значению свойства КлючДанных;
если у сообщения свойство ПутьКДанным не заполнено, то в него проставляется имя основного реквизита открытой формы объекта;
вызывается показ сообщения в только что открытой форме;
выполняется перенос всех соответствующих сообщений из окна первой формы в новую форму (с таким же значением свойств КлючДанных, как у выбранного сообщения). При этом перенесенным сообщениям аналогичным образом проставляется свойство ПутьКДанным, если оно не установлено.
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Пример:
Сообщение пользователю после закрытия формы
1С:Предприятие 8.3 (8.3.4.389)
Бухгалтерия предприятия, редакция 3.0 (3.0.28.12)
Дописал в БП 3.0 подписку на событие перед запиью регистра бухгалтерии НаборЗаписей в модуле на сервере, которое информирует пользователя, т.е. выводит сообщение, в случае необходимости.
Но если пользователь в открытом документ нажимает «Провести и закрыть», то данное сообщение показывается в форме документа и закрывается тут же, поэтому прочесть его нет возможности.
Игрался с КлючДанных и ПутьКДанным ничего не получилось.
Как можно вывести сообщение не в текущую форму, а в форму списка регистра бухгалтерии или допустим в форму рабочего стола?
Неужели никто так и не поборол этот «подарок от разработчиков платформы»?
В реквизиты формы добавил реквизит с типом СписокЗначений. Я его назвал СообщенияПользователюПослеЗаписи.
Далее, в обработчике формы ПослеЗаписиНаСервере, пока, после выполнения записи объекта на сервере, управление еще не вернулось на клиента, и выведенные пользователю сообщения еще не отображены на клиенте, я снимаю копию очереди сообщений пользователю и сохраняю ее в добавленном реквизите СообщенияПользователюПослеЗаписи:
Подозреваю, что можно было вызывать ПолучитьСообщенияПользователю(. ) с аргументом Ложь, и тогда можно было бы прямо полученные сообщения и добавлять в реквизит СообщенияПользователюПослеЗаписи, не делая их копии. Но опробовать эту «оптимизацию» еще не успел, поэтому привел работающий вариант кода.
Потом, в конце обработчика формы ПослеЗаписи, подключаю обработчик ожидания, который должен вызваться сразу после завершения цепочки вызовов других обработчиков.
Сам обработчик выглядит вот так
Тут хитрость заключается в том, что данный обработчик вызывается только, если форма осталась открытой (т.е. была запись объекта без закрытия формы).
Если же форма после записи закрывается (пользователь нажал кнопку «Записать и закрыть»), то данный обработчик уже не будет вызван никогда.
Вообще, эта очистка очереди сообщений нужна для того, чтобы в случае, если пользователь получил свои сообщения при записи объекта, то чтобы ему не выводились эти же сообщения еще раз при закрытии формы, если он ее закрывает без записи. Такая ситуация может возникнуть, например, если пользователь нажал «Записать», прочитал сообщения, и нажимает «Закрыть» (без записи). В таком случае вывод сообщений будет «странным» с точки зрения пользователя.
В этом обработчике, мы все собранные в реквизите формы сообщения пользователю выводим, перепривязывая их (с помощью свойства ИдентификаторНазначения) к текущей активной форме (которая уже не наша закрываемая форма). Делаем мы это только в том случае, если окно закрывается не «при завершении работы», т.к. при завершении работы закрыты будут все окна 1С, и пользователь все-равно ничего не успеет прочитать.
А! Ну а сами сообщения выдаются в обработчиках модуля объекта (ПередЗаписью, ПриЗаписи, ОбработкаПроверкиЗаполнения и т.п.) с помощью классического метода Сообщить или через объект СообщениеПользователю. Кстати, в последнем случае можно даже привязать сообщения к конкретным реквизитам записываемого объекта, и тогда, после записи и закрытия формы объекта, можно будет двойным щелчком по сообщению обратно открыть объект и перейти к редактированию «стремного» реквизита. Что уже приобретает смысл «удобства пользователя».
Как в 1С вывести сообщение пользователю (бесплатная статья по Программированию в 1С)
из цикла статей «Первые шаги в разработке на 1С»
О чем эта статья
Статья продолжает цикл статей «Первые шаги в разработке на 1С».
В ней мы рассмотрим способы информирования пользователя, которые присутствуют в платформе «1С:Предприятие» 8, а также акцентируем ваше внимание на некоторых особенностях работы этих механизмов, эти особенности связаны с режимом использования модальности.
Применимость
В статье рассматривается функциональность:
Как в 1С вывести сообщение пользователю
Вывод сообщений в пользовательском режиме решает ряд задач:
Терминирующими сообщениями должны быть сообщения об ошибках, а ознакомительными: рекомендации, сообщения о текущем этапе процесса и показ расчетных значений (отладочная печать).
Ознакомительные сообщения
Ознакомительные сообщения предназначены для того, чтобы выдать пользователю некоторую информацию.
Необходимо, чтобы пользователь с ней обязательно ознакомился и, возможно, предпринял какие-то действия, которые описаны в этом сообщении.
Очень важно, чтобы пользователь действительно читал эти сообщения, поэтому они должны содержать только важную информацию.
Тестовые и отладочные сообщения выдавать пользователю не стоит, т.к. рано или поздно он начнет игнорировать абсолютно все сообщения.
В концепции управляемого интерфейса несколько изменился подход к выдаче сообщения. Оно теперь привязано к форме, в которой возникло. Его уже нельзя закрыть так, чтобы текст было совсем невидно.
Открепить от формы окно с сообщением нельзя.
Т.е. первым параметром является сам текст.
Второй параметр (статус сообщения) является необязательным. Для статуса можно указывать значения: Обычное, Важное, ОченьВажное и т.д.
От данного значения зависит, какой значок будет расположен рядом с сообщением. Однако это работает только в обычном интерфейсе.
В концепции управляемого интерфейса значок всегда в виде восклицательного знака, переопределить его нельзя.
Дело в том, что если сообщение будет формироваться в момент записи элемента справочника, может произойти следующая ситуация.
Пользователь нажимает на кнопку Записать и закрыть, в этом случае сообщение выводится в соответствующее окно (справа формы).
Но форма моментально закрывается, и пользователь не увидит, что для него выводилась какая-то информация.
Поэтому в концепции управляемого приложения ознакомительные сообщения рекомендуется выводить с помощью так называемых оповещений. Пример неправильного использования функции Сообщить представлен на рисунке.
Тем не менее, функция Сообщить может использоваться для вывода информации о некоторых ошибках, например в момент проведения документа.
В этом случае системе можно сообщить, что форму закрывать не нужно, и показать пользователю, какие ошибки возникают при проведении документа.
Функция Сообщить полностью поддерживается в Платформе 8.3. Ее можно использовать, и она будет работать (и в файловом варианте, и в клиент-серверном).
Но также следует отметить, что у функции Сообщить есть дальнейшее развитие – это класс сообщения пользователю, который позволяет помимо того, что выводить сообщение, привязывать его контекстно к каким-либо элементам формы.
Например, сообщение об ошибке можно привязать к элементу формы, что для пользователя очень наглядно. Несколько позже к рассмотрению этого вопроса мы вернемся. У функции Сообщить есть интересная особенность.
Так, программный код в Платформе 8.3 может быть исполнен как на стороне Клиента, так и на стороне Сервера.
При этом клиентский программный код отвечает за взаимодействие с пользователем, т.е. на стороне клиента открываются формы, выводятся отчеты.
Различные диалоговые документы также отображаются только на клиенте. На сервере они не могут быть исполнены, поскольку сервер не имеет возможности взаимодействия с пользователями.
Но функция Сообщить может быть исполнена как на стороне Клиента, так и на стороне Сервера. При этом использование метода Сообщить на Сервере вовсе не означает, что сообщение будет выводиться именно на Сервере, там их просто некуда выводить.
Это означает, что если мы в серверной процедуре будем выводить сообщение с помощью этого метода, они будут накапливаться в некотором буфере и выведутся они на экран только тогда, когда серверная процедура закончится и произойдет возврат на Клиента.
В этот момент система запросит данные из буфера и выведет их на экран.
Эта же особенность касается и класса СообщениеПользователю. На рисунке приведен пример использования метода Сообщить на стороне Сервера.
В результате использования метода Сообщить на стороне Сервера вывелись сообщения на экран на стороне Клиента.
Механизм оповещений
Механизм оповещений нужен, чтобы информировать пользователя о том, что в системе “что-то” произошло и это “что-то” требует внимания пользователя. Оповещения создаются двумя сценариями:
Само оповещение представляет собой небольшое окошко, которое появляется, как правило, в нижнем правом углу и сообщает о совершенном действии. В течение нескольких секунд оно постепенно гаснет и пропадает. При этом, если навести на оповещение курсор мышки, оно не гаснет и можно внимательно его прочитать.
Кроме того, к оповещениям можно обратиться в соответствующей области информационной панели (кнопка “История” слева внизу формы приложения в варианте интерфейса «Версии 8.2»).
Чтобы создавать свои собственные оповещения, необходимо использовать метод глобального контекста ПоказатьОповещениеПользователя(). Его синтаксис до редакции 8.3.10 представлен ниже:
В первом параметре передается текст, который будет выводиться в оповещении.
Далее вторым параметром можно передать некую навигационную ссылку на какой-либо элемент информационной базы (тот элемент, который соответствует тексту нашего сообщения). При нажатии пользователем на оповещение будет выполнен переход по этой ссылке.
С помощью третьего параметра можно передать пояснение для сообщения, т.е. какое-то расширенное описание.
Также можно присвоить картинку, отображающую статус оповещения.
Следует отметить, что все эти параметры являются необязательными для заполнения. Ниже приведен пример использования данного метода (в конфигураторе и в пользовательском режиме в варианте интерфейса «Версии 8.2»).
В редакции платформы 8.3.10.216 для интерфейса в варианте «Такси» механизм оповещений был существенным образом доработан с целью повышения удобства работы как в тонком, так и в веб-клиенте. По этой причине изменились и передаваемые параметры в метод ПоказатьОповещениеПользователя(). Теперь синтаксис выглядят так:
Видно, что второй параметр, ранее называемый НавигационнаяСсылка, получил новое имя ДействиеПриНажатии. Это связано с тем, что теперь в него стало возможным передавать не только строку с навигационной ссылкой, но и описание оповещения. Это проиллюстрировано скриншотом ниже:
Как видно из примера, у нас появилась возможность программным образом обрабатывать нажатие на окно с оповещением, согласно той логике, которая необходима.
Следующий параметр СтатусОповещенияПользователя появился впервые. В нем указывается статус оповещения (Информация или Важное).
В случае варианта Важное, если пользователь не отреагировал на сообщение, то после того, как оно будет скрыто с экрана, его можно будет прочитать через Центр оповещений (о нем ниже). В случае же варианта Информация, оповещение удаляется без запоминания в этом центре. Давайте перепишем код из нашего примера, как показано ниже:
После выполнения команды получим приблизительно такой вид окна приложения:
В панели инструментов появилась кнопка с пиктограммой звонка, по которой вызывается упомянутый выше Центр оповещений. В нем накапливаются новые важные оповещения, на которые пользователь пока никак не отреагировал.
Если в Центре есть какие-то оповещения, то рядом с ним появляется маленькая оранжевая точка, чтобы привлечь внимание пользователя. Пользователь может открыть Центр оповещений, прочитать текст и, если необходимо, выполнить какие-то действия.
Из Центра оповещение убирается нажатием на кнопку очистки, однако если с оповещением связано какое-то действие, то, как только пользователь щелкнет мышью по тексту сообщения, оно тоже пропадет.
И наконец, последним добавленным параметром стал КлючУникальности. С его помощью можно найти отображенное на экране оповещение и изменить его. Если же оповещения с таким параметром нет, то будет показано новое оповещение.
Как видим, возможностей, предоставляемых соответствующим методом, стало еще больше! Но это не все изменения в механизме оповещений.
Как вы уже, наверное, успели заметить, изменился их внешний вид. Теперь оповещения выглядят более современно и эргономично, но их нельзя перемещать по экрану и изменять их размер. Обратите внимание, в нашем примере, текст оповещения попросту не поместился целиком в самом окне, и прочитать его полностью пользователь сможет, только открыв Центр Оповещений. Поэтому не стоит в текст оповещения писать большое количество текста.
Также к новым возможностям относится и одновременное отображение на экране до трех оповещений.
На этом завершим наше знакомство с программным формированием оповещений. Однако вспомним, что оповещения формируются не только разработчиком программно, но и самой платформой в момент интерактивной записи или изменения объекта. И часто этот факт вызывает непонимание в первую очередь у начинающих пользователей: зачем нужны эти служебные оповещения, которые, кстати, нельзя отключить?
Давайте представим такую простую ситуацию: пользователь установил фильтр в каком-то списке для удобства. Допустим, он сделал это в форме списка справочника Номенклатуры. Потом, через какое-то время, решил ввести новый элемент с наименованием “Стул”, который не соответствует установленному ранее фильтру. Вводит его, записывает и…? И не видит его в списке. Что будет делать среднестатистический пользователь? Конечно, введет его второй раз, но опять не увидит. Дальше может последовать третий, четвертый, пятый раз. Когда ему надоест вводить одно и тоже, он, наконец, спросит у вас: а куда все пропадает?
Вот именно поэтому платформа и отображает эти служебные оповещения, информируя пользователя о том, что его действие выполнено. В нашем примере в момент интерактивной записи пользователь увидит следующее оповещение:
Терминирующие сообщения
Терминирующие сообщения – это те сообщения, которые не позволят работать, пока пользователь не произведет определенные действия, т.е. пока он не обработает сообщение.
О возможности использования терминирующих сообщений в Платформе 8.3 мы поговорим немного позже (в последнее время их стараются не использовать, поэтому рассмотренный пример больше касается Платформы 8.2).
Существуют два метода для выдачи терминирующих сообщений Предупреждение и Вопрос. Предупреждение отличается от Вопроса тем, что у него есть единственная кнопка ОК.
В вопросе могут определяться разные наборы вариантов ответов (ДаНет, ДаНетОтмена, ОК, ОКОтмена, ПовторитьОтмена, ПрерватьПовторитьПропустить), которые задаются с помощью параметра.
Выведем какое-нибудь предупреждение с помощью строки (например, в модуле управляемого приложения):
Предупреждение(“Сейчас будет открыта база”);
Чтобы открыть модуль управляемого приложения, следует в дереве конфигурации выбрать объект Конфигурация, вызвать контекстное меню и выбрать пункт Открыть модуль управляемого приложения.
В данном случае, при запуске приложения, будет выводиться окно, которое является модальным. Модальное окно перекрывает собой все окна, которые существуют в приложении. Пока мы не обработаем это окно, дальнейшие действия невозможны.
Аналогичным образом работает и функция Вопрос.
Обязательными являются только первые два параметра. Для второго параметра тип данных составной (РежимДиалогаВопрос или СписокЗначений). Третий параметр ( ) характеризует интервал времени в секундах, в течение которого система будет ожидать ответа пользователя.
По истечении интервала окно вопроса будет закрыто. Аналогичный параметр( ) есть и у функции Предупреждение.
В качестве примера использования функции Вопрос можно использовать следующий код, записанный в модуле управляемого приложения:
Обращаю Ваше внимание, что данные методы (Предупреждение и Вопрос) не доступны на Сервере. И это логично, потому что интерфейсные методы не могут быть выполнены на Сервере, где нет пользователя.
Особенности использования модальных окон в Платформе 8.3
В платформе 8.3 существуют режимы работы с использованием и без использования модальности. По умолчанию стоит настройка Не использовать режим модальности.
В этом случае использование терминирующих сообщений невозможно. В случае необходимости использования терминирующих сообщений (функции Предупреждение и Вопрос) следует изменить значение свойства конфигурации Режим использования модальности на Использовать.
Модальное окно выводится на самый верх и блокирует работу с другими окнами до завершения действий с модальным окном. Кроме того, останавливается выполнение программного кода на том месте, где происходит вызов этого окна. Выполнение кода продолжится только после закрытия модального окна.
Во-первых, проблемы по использованию модальных окон возникают для мобильного приложения. Во-вторых, в браузере модальность окон реализуется с помощью отдельных всплывающих окон.
В настройках браузера по умолчанию всплывающие окна зачастую запрещены. Пользователя приходится заставлять устанавливать разрешение на эти окна.
Браузеры для планшетных компьютеров и для телефонов в большинстве случаев вообще не поддерживают всплывающие окна.
Для замены функций Вопрос и Предупреждение разработаны новые методы: ПоказатьВопрос, ПоказатьПредупреждение.
Эти методы позволяют вызывать окно, но не останавливать выполнение программного кода. Технически это реализуется формированием псевдоокна внутри родительского окна. Псевдоокно не перекрывает родительское окно. После открытия такого окна код продолжает выполняться.
Получение и обработка введенных пользователем значений осуществляется в отдельной процедуре, которая вызывается при закрытии диалогового окна.
Синтаксис функции ПоказатьПредупреждение:
Тип данных: ОписаниеОповещения.
Содержит описание процедуры, которая будет вызвана после закрытия окна предупреждения.
Синтаксис функции ПоказатьВопрос:
Обязательными являются первые три параметра.
Ниже приведен пример использования функции.
Класс СообщениеПользователю
Основное удобство класса сообщений СообщениеПользователю заключается в том, что это контекстное сообщение (в отличии от методов Предупреждение и Вопрос).
Сообщения могут быть привязаны к конкретному экранному элементу. Этот объект доступен и на Сервере.
Следует обратить внимание, что, во-первых, данный объект нужно создавать. Например: Сообщение = Новый СообщениеПользователю;
Таким образом мы создаем экземпляр данного объекта.
Во-вторых, нужно прописывать текст сообщения в отдельном свойстве.
В-третьих, в свойстве Поле можно указать, к какому элементу формы данное сообщение должно быть привязано.
Внимание! Для привязки к нужному полю формы обратите внимание на инициализацию свойств ПутьКДанным и КлючДанных. Применительно для документа при размещении кода в модуле объекта можно писать:
Сообщение.ПутьКДанным = “Объект”;
Сообщение.КлючДанных = ЭтотОбъект.Ссылка;
Чтобы открыть модуль документа, следует в окне редактирования объекта (документа) на закладке Прочее нажать на кнопку Модуль объекта.
Для эксперимента в модуле объекта какого-либо документа разместим код.
Ниже представлен полученный в пользовательском режиме результат для Платформы 8.3.
Следует отметить, что сообщения, выводимые с помощью нового объекта системы СообщениеПользователю в общем случае не являются терминирующими. Т.е. система позволит пользователю продолжить дальнейшие действия не отреагировав на выводимые сообщения.
Но, во-первых, данные сообщения достаточно заметны. Во-вторых, обычно сообщения пользователю выводятся в момент записи элементов справочников или проведения документов, т.е., когда выполняются какие-то проверки. И если были обнаружены ошибки, то пользователь увидит эти самые сообщения.
Соответственно, в момент обнаружения ошибок отменяется транзакция, т.е. запрещается запись элемента справочника, либо запрещается проведение документа.
Таким образом, происходит своего рода эмуляция терминирующего сообщения. Потому что действие отменяется, пока пользователь не отреагирует на вводимое сообщение, завершить действие, например, провести документ, будет нельзя.
Но, с другой стороны, есть возможность закрыть документ без проведения, никак не прореагировав на сообщение. Поэтому данные сообщения пользователю не являются терминирующими.
Уведомление о состоянии процесса
Существует специальная функция, с помощью которой можно отображать примерный ход выполнения какого-либо процесса.
При этом могут меняться надписи, а могут изменяться значения параметра Прогресс.
Функция может вызываться как из одной процедуры (функции), так и из нескольких. Таким образом можно отслеживать состояние выполнения процесса.
Если вы хотите ознакомиться с механизмом уведомления более подробно, то прямо сейчас прервитесь и прочтите нашу новую статью Отображение прогресса длительных операций в 8.3.10. В ней уже не на уровне новичка объясняются все тонкости и подводные камни работы этого механизма.
Мы же завершаем знакомство со способами информирования пользователя. Надеемся, что у вас сложилось понимание, в каких ситуациях следует применять тот или иной способ.
Хочется еще раз акцентировать ваше внимание на том факте, что если ваша конфигурация (версии 8.3.3+) предполагает работу с помощью веб-клиента, то:
Более подробно об отказе от использования модальных окон в платформе 1С:Предприятие 8.3 можно почитать в финальной статье цикла. А мы идем дальше и, наконец, приступаем к изучению долгожданного интерфейса «Такси», который уже не раз упоминался в наших материалах.
PDF-версия статьи для участников группы ВКонтакте
Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.
Статья в PDF-формате
Вы можете скачать эту статью в формате PDF по следующей ссылке:
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)