Как вывести сообщение с сервера

1С 8.3 : Как показать сообщение пользователю? методы: СообщениеПользователю и ПоказатьОповещениеПользователя

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

А для информирования о выполняемом действии рекомендуется использовать метод встроенного языка ПоказатьОповещениеПользователя().

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

Пример вывода сообщения на клиенте:

При обработке на сервере:

Необходимо зарегистрировать в системе соответствие объекта и имени реквизита формы. Для этого в глобальном контексте реализована функция УстановитьСоответствиеОбъектаИРеквизитаФормы(). Сделать это можно следующим образом:

В данном фрагменте выполняется преобразование объекта из данных формы в реальный объект и устанавливается его соответствие с реквизитом формы по имени «Объект».

Если в дальнейшем требуется создать сообщение, можно сделать это следующим образом:

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

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

ТипШаблонПример
Реквизит ИмяРеквизита Контрагент
Табличная часть ИмяТабличнойЧасти Скидки
Реквизит табличной части ИмяТабличнойЧасти[ИндексСтроки].ИмяРеквизита Номенклатура[10].Количество
Реквизит набора записей [ИндексСтроки].ИмяРеквизита [10].Курс

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

Источник

Работа с сообщениями пользователю

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

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

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

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

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

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

После этого наступает ответственный момент — форме надо предоставить информацию о том, чьё это сообщение и в каком реквизите формы хранится наш объект. Это делается для того, чтобы форма могла впоследствии привязать сообщение к нужному элементу управления. Для установки связи объект данных вызывает у объекта сообщения метод УстановитьДанные() , передавая себя в качестве параметра. При этом происходит поиск среди запомненных ранее соответствий «объект — имя реквизита формы». Если для объекта существует значение имени реквизита формы, метод УстановитьДанные() помещает имя реквизита формы в свойство ПутьКДанным объекта СообщениеПользователю , а ссылка объекта (или ключ записи регистра) помещается в свойство КлючДанных .

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

ПРИМЕЧАНИЕ
Пока управление не передано обратно на клиента, можно получить массив сообщений методом глобального контекста ПолучитьСообщенияПользователю() .

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

Если свойство КлючДанных заполнено, но в форме отсутствует реквизит с именем из свойства ПутьКДанным , то будет открыта новая форма объекта, в которую будут перенесены все сообщения с таким ключом данных (ссылкой или ключом записи регистра).

Программное создание сообщений

Теперь посмотрим, как можно добиться такого поведения полностью программно.

Первое, что необходимо сделать — зарегистрировать в системе соответствие объекта и имени реквизита формы. Для этого в глобальном контексте реализована функция УстановитьСоответствиеОбъектаИРеквизитаФормы(). Сделать это можно следующим образом:

В данном фрагменте выполняется преобразование объекта из данных формы в реальный объект и устанавливается его соответствие с реквизитом формы по имени «Объект».

Если в дальнейшем требуется создать сообщение, можно сделать это следующим образом:

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

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

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

ПРИМЕЧАНИЕ
Отметим, что в обоих примерах сообщение, устанавливаемое свойству Текст, указывает строку как 11-ю, а значение, устанавливаемое свойству Поле, указывает на 10-ю. Так сделано потому, что в интерфейсе строки табличных частей начинают нумерацию с 1, а в программном коде — с 0.

Источник

Сообщения пользователю в 1С 8.3

В 1С бывают 2 вида сообщений пользователю:

  1. Ознакомительные — просто выводят сообщение на экран.
  2. Терминирующие(модальные) — блокируют выполнение программы, пока пользователь не нажмет какую-то кнопку (устарели, раньше это были методы Вопрос и Предупреждение).

Сообщить

Метод Сообщить выводит сообщение на экран. Сообщение всегда привязывается к форме, в которой было вызвано. Если в этой форме нажать «Записать и закрыть» и в момент записи вывести сообщение, то пользователь не увидит его, потому что форма после записи сразу закроется.

Метод Сообщить можно использовать как на клиенте, так и на сервере. При вызове на сервере все сообщения накапливаются в буфере и выводятся при возврате управления на клиента. Первым параметром можно передать текст сообщения.

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

Метод ПоказатьОповещениеПользователя выводит сообщение в правом нижнем углу экрана. Сообщение медленно затухает и закрывается через 10 секунд. Сообщение не привязано к форме. Одновременно можно вывести максимум 3 оповещения. Метод доступен только на клиенте.

  • Текст — текст сообщения
  • ДействиеПриНажатии — навигационная ссылка (например на элемент справочника) или описание оповещения для выполнения какого-либо действия при нажатии на сообщение. При нажатии на навигационную ссылку будет открыт элемент справочника. Описание оповещения — это указатель на процедуру, которая будет вызвана при нажатии.
  • Пояснение — дополнительное пояснение.
  • Картинка — тут все понятно.
  • СтатусОповещенияПользователя — системное перечисление СтатусОповещенияПользователя. если Важное, то сообщение сохраняется в центре оповещений. Чтобы посмотреть все оповещения в центре оповещений нужно нажать кнопку с колокольчиком в правом верхнем углу экрана:

  • КлючУникальности — если вызвать второй метод с таким же ключом, то не будет показано новое оповещение, а будет изменено текущее. Если параметр не указан, то сообщение считается уникальным.

Источник

PROИТ

Office 365, AD, Active Directory, Sharepoint, C#, Powershell. Технические статьи и заметки.

1С, вывести сообщение пользователю (при помощи БСП, клиент, сервер)

ОбщегоНазначения . СообщитьПользователю ( «Текст сообщения» );

ОбщегоНазначенияКлиент . СообщитьПользователю ( «Текст сообщения» );

ОбщегоНазначенияКлиентСервер . СообщитьПользователю ( « Текст сообщения» );

Попытка
ФайлCSV . Прочитать ( ПутьКФайлу );
Исключение
ОбщегоНазначенияКлиент . СообщитьПользователю ( «Не удалось загрузить файл: « + ПутьКФайлу + Символы . ПС + ОписаниеОшибки ());
КонецПопытки ;

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

Процедура СообщитьПользователю (
Знач ТекстСообщенияПользователю ,
Знач КлючДанных = Неопределено ,
Знач Поле = «» ,
Знач ПутьКДанным = «» ,
Отказ = Ложь ) Экспорт

// 1. Для вывода сообщения у поля управляемой формы, связанного с реквизитом объекта:
ОбщегоНазначенияКлиент . СообщитьПользователю ( НСтр ( «ru = ‘Сообщение об ошибке.'» ), , «ПолеВРеквизитеФормыОбъект» , «Объект» );

// Альтернативный вариант использования в форме объекта:
ОбщегоНазначенияКлиент . СообщитьПользователю ( НСтр ( «ru = ‘Сообщение об ошибке.'» ), , «Объект.ПолеВРеквизитеФормыОбъект» );

// 2. Для вывода сообщения рядом с полем управляемой формы, связанным с реквизитом формы:
ОбщегоНазначенияКлиент . СообщитьПользователю ( НСтр ( «ru = ‘Сообщение об ошибке.'» ), , «ИмяРеквизитаФормы» );

// 3. Для вывода сообщения связанного с объектом информационной базы:
ОбщегоНазначенияКлиент . СообщитьПользователю ( НСтр ( «ru = ‘Сообщение об ошибке.'» ), ОбъектИнформационнойБазы , «Ответственный» ,, Отказ );

// 4. Для вывода сообщения по ссылке на объект информационной базы:
ОбщегоНазначенияКлиент . СообщитьПользователю ( НСтр ( «ru = ‘Сообщение об ошибке.'» ), Ссылка , , , Отказ );

Источник

сообщение с сервера клиенту

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

&НаСервере
Процедура СерверныйРасчет()
Сообщение = Новый СообщениеПользователю();
Для И=0 По 10 Цикл
Сообщение.Текст = «Итерация = » + И;
Сообщение.Сообщить();
Для Жи = 0 По 1000000 Цикл
Вычислить=2*2;
КонецЦикла;
КонецЦикла;
КонецПроцедуры

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

(0) Читаем СП:
ИдентификаторНазначения (TargetID)
Использование:

Чтение и запись.
Описание:

Тип: УникальныйИдентификатор.
Позволяет точно указать, к какой форме должно быть «привязано» сообщение. Если сообщение не имеет идентификатора назначения, тогда оно выводится и привязывается к активному окну.

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). «

Из БП. ОбщегоНазначенияКлиентСервер

(12) а чего плохого в том, чтоб хотеть и то, и это?

(14) ну башорг ему открывай перед запуском 🙂

Так это вообще не возможно чтоли?

Либо клиента расчетами грузить, либо сетку тупым гоном данных туда — сюда.

(18) Представь. У тебя есть задача: сходить в магазин, набрать товар и сообщать о состоянии набранного товара жене.
Условия: сообщать жене можно только лично. Жена находится дома (клиент), товар набирать можно в магазине (сервер).

У тебя есть два варианта:

— Набрать в магазине (серверная процедура) всю тележку с товаром и по приходу домой сказать: «Всё набрал».

— Набрать пол тележки (на сервере), вернуться домой (на клиент) сказать «набрал 20%», вернуться в магазин (на сервер), донабрать еще товара, вернуться домой (на клиент) сказать «набрал 40%». и т.д. Причем если таскать из магазина до дома всю тележку с товаром, то это будет лишние данные и соответственно тележку (данные) нужно будет оставлять на хранении в магазине (хранилище на сервере).

PS мобильник в магазине «не ловит», поэтому позвонить из магазина домой (передать сообщение с сервера на клиент, как ты хочешь) нельзя 😉

Я когда иду в магазин, то набрав пол тележки, останавливаюсь, звоню по сотику и говорю «набрал 50%», а потом продолжаю набирать дальше. Но, похоже, что с не ловящим сотиком мой случай.

Буду через хранилище, спасибо.

Представил. и не вижу проблемы. AJAX как-то реализует эту функцию без проблем; пример: mail.ru itar-tass.com. Всё интерактивно через Веб.

Правда, это не совсем мой случай, там опрос через промежутки времени.

1. Сервер пишет % или иное по ходу выполнения куда то, куда есть доступ и серверу и клиенту (реквизит обработки, формы, параметры сеанса и прочее)

2. Клиент периодически проверят что там написал сервер и выводит, можно ОбработкаОжидания заюзать

(52) если фоновым заданием запускать, откуда возьмётся «реквизит обработки, формы, параметры сеанса»?

так только в регистр или файл писать.

(65) делаешь фоновое. потом в обработчике ожидания делаешь

ПолучитьСообщенияПользователю (GetUserMessages)
Синтаксис:

Тип: Булево.
Признак необходимости удаления полученных сообщений.
Возвращаемое значение:

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

Сервер, толстый клиент, внешнее соединение.

Тип: Произвольный.
Тип: УникальныйИдентификатор; Строка.
Адрес во временном хранилище, по которому надо поместить данные. Или уникальный идентификатор формы, во временное хранилище которой, надо поместить данные и вернуть новый адрес.
В случае, если передается УникальныйИдентификатор формы, то значение будет автоматически удалено после закрытия этой формы.
Если параметр не указан, помещенное значение будет удалено после очередного запроса сервера из общего модуля, при контекстном и неконтекстном серверном вызове из формы, при серверном вызове из модуля команды или при получении формы.
Возвращаемое значение:

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

Сохраняет сериализуемое значение во временное хранилище.

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Примечание:

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

Источник

Читайте также:  Чем отмыть строительный клей от окон
Оцените статью