1с сообщение пользователю с указанием на реквизит

 +7 

   

Распечатать

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

Частенько нужно сообщить пользователю какую-то информацию, раньше использовали Сообщить() или

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

Код 1C v 8.3

 Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Комментарий не указан";
Сообщение.Поле = "КомментарийКЗадаче";//ИмяТабличнойЧасти[ИндексСтроки].ИмяРеквизита
Сообщение.УстановитьДанные(Объект);
Сообщение.Сообщить();

//////////////////// КОД для ТИПОВЫХ конфигураций:
//Для БСП:
//в модуле объекта
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(“Текст ошибки”,                
                        ЭтотОбъект,
                        "Договор",,
                        Отказ);
//в форме объекта
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Дублирование пременной'"), ,
"Запросы["+ИдентификаторСтроки+"].ИмяПеременнойЗапроса",//путь к данным
 "Объект", Отказ);

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

еще примеры:

Код 1C v 8.3

 

// Сообщение.КлючДанных = Ссылка на объект базы или ключ записи

// Сообщение.ПутьКДанным = содержит путь в форме до объекта.

// показываем сообщение из обработки

// КлючДанных и ПутьКДанным - пустые

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

Сообщение.Поле = "Комментарий";

Сообщение.Текст = "Заполните комментарий";

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

// показываем сообщение из документа

// КлючДанных - пустой, ПутьКДанным заполнится автоматически

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

Сообщение.Поле = "Товары[0].Количество";

Сообщение.Текст = "Не заполнено количество товара в первой строке!";

Сообщение.УстановитьДанные(ЭтотОбъект);

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

В этой статье рассмотрим один из способов вывода сообщения пользователю 1С – использование объекта СообщениеПользователю. С этим объектом можно работать на тонком, толстом, мобильном и веб-клиенте, а также в серверном контексте 1С 8.3.

Сообщение пользователю на управляемой форме 1С

Разберем, как при помощи этого метода вывести сообщение пользователю на управляемой форме в 1С. Самый простой вариант использования будет следующий:

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

В этом случае, просто внизу формы выйдет сообщение.

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

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

Например, у меня на форме документа имеется поле ввода Контрагент, которое связано с одноименным реквизитом документа. Этот реквизит формы Контрагент является подчиненным реквизитом основного реквизита  формы Объект.

Реквизиты управляемой формы 1С

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

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

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

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

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

Реквизиты управляемой формы 1С

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

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

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

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

Также, сообщение можно привязать к нужной колонке нужной строки табличной части на форме.  В моем примере есть табличная часть Товары с колонкой Количество.

Реквизиты управляемой формы 1С

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

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

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

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

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

Пойдем дальше! Иногда требуется выполнить проверку заполнения того или иного реквизита при проведении документа. В последних платформах 1С следует это делать в обработчике ОбработкаПроверкиЗаполнения, этот обработчик создается в модуле объекта, и срабатывает перед проведением документа.

В нем необходимо делать проверки на заполнение реквизитов документа.

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
	Если Не ЗначениеЗаполнено(Контрагент) Тогда
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Не заполнен контрагент";
		Сообщение.Поле = "Контрагент";
		Сообщение.ПутьКДанным = "Объект";
		Сообщение.КлючДанных = ЭтотОбъект.Ссылка;
		Сообщение.Сообщить();
		Отказ = Истина;
	КонецЕсли;
КонецПроцедуры

Если мы попробуем провести документ «Продажа товара» с пустым полем «Контрагент», то выйдет сообщение.

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

Можно сделать проще:

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
	Если Не ЗначениеЗаполнено(Контрагент) Тогда
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Не заполнен контрагент";
		Сообщение.Поле = "Контрагент";
		Сообщение.УстановитьДанные(ЭтотОбъект);
		Сообщение.Сообщить();
		Отказ = Истина;
	КонецЕсли;
КонецПроцедуры

Результат будет тот же самый. Что делает метод УстановитьДанные? Этот метод автоматически устанавливает свойства ПутьКДанным и КлючДанных на основании переданного в него объекта.  

Статья про вывод простых сообщений пользователям

Более подробно и основательно разработка в 1С дается в моей книге: «Программировать в 1С за 11 шагов»

Это изображение имеет пустой атрибут alt; его имя файла - 1C-в-желтом-цвете-3D-221x300.png

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Это изображение имеет пустой атрибут alt; его имя файла - 1_в-желтом-цвете-3D-маленькая-221x300.jpg

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

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 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

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

Примеры вывода сообщений

Если обращение «с сервера», то для вывода сообщения пользователю можно применять следующую процедуру БСП:

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

Если обращение «с клиента», то для вывода сообщения пользователю можно применять следующую процедуру БСП:

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

Устаревшая процедура, но которая еще используется в конфигурациях на предыдущих версиях БСП:

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

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

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

Общий синтаксис процедуры:

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

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

Примеры:

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

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

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

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

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

Случаи некорректного использования:

1. Передача одновременно параметров КлючДанных и ПутьКДанным.

2. Передача в параметре КлючДанных значения типа отличного от допустимого.

3. Установка ссылки без установки поля (и/или пути к данным).

Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.

1С СообщениеПользователю выводит сообщение пользователю (после окончания обработки) или сохраняет его в очередь, если сообщение невозможно вывести «прямо сейчас», например:
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Привет, мир!";
Сообщение.Сообщить();

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

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

Чтобы вывести сообщение пользователю с помощью 1С СообщениеПользователю в конкретной, уже открытой форме, дополнительно нужно установить идентификатор формы:
Сообщение.ИдентификаторНазначения = Форма.УникальныйИдентификатор;

Чтобы сообщение 1С СообщениеПользователю было выведено во всплывающем окне у конкретного поля формы, в модуле которой выполняется код, нужно указать «путь» к нему:
Сообщение.Поле = "Наименование"; //где Наименование – это реквизит формы
Сообщение.Поле = "Объект.Наименование"; //где Наименование – это реквизит объекта (т.е. справочника, чья форма редактируется)
Сообщение.Поле = "Товары[3].Цена"; //где Товары – таб.часть на форме, Цена – колонка этой таб.части

Чтобы сделать то же, но в модуле другого объекта (общем модуле), нужно дополнительно указать объект (СправочникОбъект, ДокументОбъект и т.п.):
Сообщение.Поле = "Наименование"; //где Наименование – это реквизит СправочникОбъект
Сообщение.УстановитьДанные(СправочникОбъект);
//При двойном щелчке на сообщение будет открыта форма объекта со всплывающим сообщением у требуемого поля

Другой способ связать сообщение 1С СообщениеПользователю с данными объекта:
//для справочника, документа..
Сообщение.КлючДанных = СправочникСсылка;
Сообщение.ПутьКДанным = "Объект";

//для записей регистра
Сообщение.КлючДанных = РегистрМенеджерЗаписи.ИсходныйКлючЗаписи; //обычно основной реквизит формы, связанный с регистром
Сообщение.ПутьКДанным = "Запись";

В типовых конфигурациях на управляемых формах для тонкого клиента, например «Управление торговлей, редакция 11» и «Бухгалтерия, редакция 3», в общем модуле ОбщегоНазначенияКлиентСервер имеется функция СообщитьПользователю(), которая «универсализирует» работу с данным объектом. Синтаксис функций в разных конфигурациях – разный.

Так как 1С СообщениеПользователю формирует список сообщений, чтобы его обнулить (например, перед выполнением сложной обработки), можно вызвать функцию:
ПолучитьСообщенияПользователю(Истина);

Обработать накопившийся список сообщений 1С СообщениеПользователю, после обработки, можно следующим образом:

Загрузка…

  • Главная
  • О сайте
  • Главная
  • Содержание

Рукопашный бой Карташ

Категории

—>

рубрики: Язык программирования 1С | Дата: 15 марта, 2017

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

Сообщение

Сообщение можно выводить двумя способами. Оба метода доступны на толстом клиент, тонком клиенте, веб-клиенте, на сервере, во внешнем соединении и в мобильном приложении.

  1. Метод Сообщить().

    Выводит указанный текст в окно сообщений. Синтаксис очень прост:

    
    
    
    Сообщить(<ТекстСообщения>, <СтатусСообщения>)
    

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

    • БезСтатуса
    • Важное
    • Внимание
    • Информация
    • Обычное
    • ОченьВажное

    СтатусСообщения необязательный параметр и может опускаться.
    На практике это выглядит примерно так:

    
    
    
    Сообщить("Произошла ошибка", СтатусСообщения.Внимание);
    
  2. Объект СообщениеПользователю.

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

    
    
    
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "";
    Сообщение.Поле = "";
    Сообщение.УстановитьДанные();
    Сообщение.Сообщить();
    

    В простейшем случае (когда не хотим ни к чему привязывать сообщение) достаточно доработать этот шаблон следующим образом:

    
    
    
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Произошла ошибка";
    Сообщение.Сообщить();
    

    Для того, чтобы привязать СообщениеПользователю к элементу формы, необходимо заполнить его свойства ПутьКДанным и КлючДанных. Это можно сделать непосредственно присвоив значение каждому из этих свойств. Либо применить метод УстановитьДанные(<Объект>), который заполнит эти два свойства на основании данных объекта. Механизм по выводу сообщений с привязкой к элементу формы работает только для управляемых форм.
    Рассмотрим пару примеров. Для начала возьмем форму справочника (в моем случае он называется «Товары»):


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

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

    Теперь откроем элемент справочника и запишем его. В результате получим сообщение привязанное к полю Поставщик.

    Чтобы установить непосредственно свойства ПутьКДанным и КлючДанных без использования метода УстановитьДанные() необходимо видоизменить процедурау ВывестиСообщение() следующим образом

    
    
    
    Процедура ВывестиСообщение()
    
    	Сообщение = Новый СообщениеПользователю;
    	Сообщение.Текст = "Здесь должен быть указан поставщик";
    	Сообщение.Поле = "Поставщик";
    
    	СправочникОбъект = ДанныеФормыВЗначение(Объект, Тип("СправочникОбъект.Товары"));
    
    	Сообщение.ПутьКДанным = "Объект";
    	Сообщение.КлючДанных = СправочникОбъект.Ссылка;
    
    	Сообщение.Сообщить();
    
    КонецПроцедуры
    

    Работа ее при этом не измениться.

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

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

    
    
    
    &НаКлиенте
    Процедура Сообщение(Команда)
    
    	Сообщение = Новый СообщениеПользователю;
    	Сообщение.Текст			= "Должен быть указан товар";
    	Сообщение.Поле			= "ТабличнаяЧасть[1].Товар";
    	Сообщение.ПутьКДанным	= "Объект";
    
    	Сообщение.Сообщить();
    
    КонецПроцедуры
    

    Как видим для внешней обработки КлючДанных указывать не нужно. Достаточно свойства ПутьКДанным. Результат выполнения этой процедуры показан на картинке:

Предупреждение

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



Предупреждение("В процессе работы возникла ошибка", 10);

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

Вопрос

Зачастую от пользователя требуется подтверждение того или иного действия. В этих случаях используется диалоговое окно с вопросом. Как и с предупреждением в вопросе обязательно указание таймаута. Я как правило использую вот такую конструкцию:




Ответ = Вопрос("Вы действительно хотите совершить это действие?", РежимДиалогаВопрос.ДаНет, 10);
Если Ответ <> КодВозвратаДиалога.Да Тогда

	Возврат;

КонецЕсли;

В этом случае в диалоговом окне присутствуют две кнопки: Да и Нет.

Как легко можно понять из кода, в случае если нажата кнопка Нет или прошло более 10 секунд, дальнейшее выполнение кода прерывается.

О чем эта статья

Статья продолжает цикл статей «Первые шаги в разработке на 1С».

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

Применимость

В статье рассматривается функциональность:

  • Интерфейса в варианте «Версии 8.2» для конфигурации, разработанной на платформе «1С:Предприятие» 8.2.19.130
  • Интерфейса «Такси» для конфигурации, разработанной на платформе «1С:Предприятие» 8.3.4.496 до 8.3.9+
  • Интерфейса «Такси» для конфигурации, разработанной на платформе «1С:Предприятие» 8.3.10-8.3.11

Как в 1С вывести сообщение пользователю

  1. Ознакомительные сообщения
  2. Механизм оповещений
  3. Терминирующие сообщения
  4. Особенности использования модальных окон в Платформе 8.3
  5. Класс СообщениеПользователю
  6. Уведомление о состоянии процесса

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

  • отражение хода выполнения текущего процесса (показ стадии выполнения процесса; показ расчетных значений, полученных в ходе работы алгоритма);
  • выдача ошибок пользователю для возможного их исправления;
  • выдача рекомендаций;

Типы сообщений:

  • терминирующие, которые останавливают выполнение программы и не дают продолжить ее, пока пользователь не ознакомится с этим сообщением и не выполнит определенные действия. Например, на экран пользователю будет выдан вопрос, на который нужно будет ответить Да или Нет. Пока пользователь не ответит – программа не выполняет дальнейшие действия;
  • ознакомительные сообщения, которые просто выводятся для пользователя и позволяют работать дальше (т.е. используются в режиме оповещения).

Терминирующими сообщениями должны быть сообщения об ошибках, а ознакомительными: рекомендации, сообщения о текущем этапе процесса и показ расчетных значений (отладочная печать).

Ознакомительные сообщения

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

Необходимо, чтобы пользователь с ней обязательно ознакомился и, возможно, предпринял какие-то действия, которые описаны в этом сообщении.

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

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

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

Открепить от формы окно с сообщением нельзя.

Синтаксис функции:

Сообщить (<Текст сообщения>, <Статус>)

Т.е. первым параметром является сам текст.

Второй параметр (статус сообщения) является необязательным. Для статуса можно указывать значения: Обычное, Важное, ОченьВажное и т.д.

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

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

Ознакомительные сообщения

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

Пользователь нажимает на кнопку Записать и закрыть, в этом случае сообщение выводится в соответствующее окно (справа формы).

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

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

Неправильное использование функции Сообщить

Тем не менее, функция Сообщить может использоваться для вывода информации о некоторых ошибках, например в момент проведения документа.

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

Функция Сообщить полностью поддерживается в Платформе 8.3. Ее можно использовать, и она будет работать (и в файловом варианте, и в клиент-серверном).

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

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

Так, программный код в Платформе 8.3 может быть исполнен как на стороне Клиента, так и на стороне Сервера.

При этом клиентский программный код отвечает за взаимодействие с пользователем, т.е. на стороне клиента открываются формы, выводятся отчеты.

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

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

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

В этот момент система запросит данные из буфера и выведет их на экран.

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

НаСервере Сообщить

В результате использования метода Сообщить на стороне Сервера вывелись сообщения на экран на стороне Клиента.

Сообщения на Клиенте

Механизм оповещений

Механизм оповещений нужен, чтобы информировать пользователя о том, что в системе “что-то” произошло и это “что-то” требует внимания пользователя. Оповещения создаются двумя сценариями:

  1. Самой платформой при интерактивной записи или изменении объекта
  2. Разработчиком при вызове в коде метода ПоказатьОповещениеПользователя().

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

Механизм оповещений

Кроме того, к оповещениям можно обратиться в соответствующей области информационной панели (кнопка “История” слева внизу формы приложения в варианте интерфейса «Версии 8.2»).

Чтобы создавать свои собственные оповещения, необходимо использовать метод глобального контекста ПоказатьОповещениеПользователя(). Его синтаксис до редакции 8.3.10 представлен ниже:

ПоказатьОповещениеПользователя (<Текст>, <НавигационнаяССылка>, <Пояснение>, <Картинка>)

В первом параметре передается текст, который будет выводиться в оповещении.

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

С помощью третьего параметра можно передать пояснение для сообщения, т.е. какое-то расширенное описание.

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

Следует отметить, что все эти параметры являются необязательными для заполнения. Ниже приведен пример использования данного метода (в конфигураторе и в пользовательском режиме в варианте интерфейса «Версии 8.2»).

Механизм оповещений
Механизм оповещений

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

ПоказатьОповещениеПользователя(<Текст>, <ДействиеПриНажатии>, <Пояснение>, <Картинка>, <СтатусОповещенияПользователя>, <КлючУникальности>)

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

Механизм оповещений

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

Следующий параметр СтатусОповещенияПользователя появился впервые. В нем указывается статус оповещения (Информация или Важное).

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

Механизм оповещений

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

Механизм оповещений

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

Если в Центре есть какие-то оповещения, то рядом с ним появляется маленькая оранжевая точка, чтобы привлечь внимание пользователя. Пользователь может открыть Центр оповещений, прочитать текст и, если необходимо, выполнить какие-то действия.

Механизм оповещений

Из Центра оповещение убирается нажатием на кнопку очистки, однако если с оповещением связано какое-то действие, то, как только пользователь щелкнет мышью по тексту сообщения, оно тоже пропадет.

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

Как видим, возможностей, предоставляемых соответствующим методом, стало еще больше! Но это не все изменения в механизме оповещений.

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

Также к новым возможностям относится и одновременное отображение на экране до трех оповещений.

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

Давайте представим такую простую ситуацию: пользователь установил фильтр в каком-то списке для удобства. Допустим, он сделал это в форме списка справочника Номенклатуры. Потом, через какое-то время, решил ввести новый элемент с наименованием “Стул”, который не соответствует установленному ранее фильтру. Вводит его, записывает и…? И не видит его в списке. Что будет делать среднестатистический пользователь? Конечно, введет его второй раз, но опять не увидит. Дальше может последовать третий, четвертый, пятый раз. Когда ему надоест вводить одно и тоже, он, наконец, спросит у вас: а куда все пропадает?

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

Механизм оповещений

Терминирующие сообщения

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

О возможности использования терминирующих сообщений в Платформе 8.3 мы поговорим немного позже (в последнее время их стараются не использовать, поэтому рассмотренный пример больше касается Платформы 8.2).

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

В вопросе могут определяться разные наборы вариантов ответов (ДаНет, ДаНетОтмена, ОК, ОКОтмена, ПовторитьОтмена, ПрерватьПовторитьПропустить), которые задаются с помощью параметра.

Выведем какое-нибудь предупреждение с помощью строки (например, в модуле управляемого приложения):

Предупреждение(“Сейчас будет открыта база”);

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

Открытие модуля управляемого приложения

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

Модальное окно

Аналогичным образом работает и функция Вопрос.

Синтаксис:
Вопрос(<ТекстВопроса>,<Кнопки>,<Таймаут>,<КнопкаПоУмолчанию>,<Заголовок>,
<КнопкаТаймаута>);

Обязательными являются только первые два параметра. Для второго параметра тип данных составной (РежимДиалогаВопрос или СписокЗначений). Третий параметр (<Таймаут>) характеризует интервал времени в секундах, в течение которого система будет ожидать ответа пользователя.

По истечении интервала окно вопроса будет закрыто. Аналогичный параметр(<Таймаут>) есть и у функции Предупреждение.

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

Модуль управляемого приложения

Использование функции Вопрос

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

Особенности использования модальных окон в Платформе 8.3

В платформе 8.3 существуют режимы работы с использованием и без использования модальности. По умолчанию стоит настройка Не использовать режим модальности.

В этом случае использование терминирующих сообщений невозможно. В случае необходимости использования терминирующих сообщений (функции Предупреждение и Вопрос) следует изменить значение свойства конфигурации Режим использования модальности на Использовать.

Режим использования модальности

Модальное окно выводится на самый верх и блокирует работу с другими окнами до завершения действий с модальным окном. Кроме того, останавливается выполнение программного кода на том месте, где происходит вызов этого окна. Выполнение кода продолжится только после закрытия модального окна.

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

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

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

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

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

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

Синтаксис функции ПоказатьПредупреждение:

ПоказатьПредупреждение(<ОписаниеОповещенияОЗавершении>, <ТекстПредупреждения>, <Таймаут>, <Заголовок>)

Параметр <ОписаниеОповещенияОЗавершении> (необязательный)

Тип данных: ОписаниеОповещения.

Содержит описание процедуры, которая будет вызвана после закрытия окна предупреждения.

Синтаксис функции ПоказатьВопрос:

ПоказатьВопрос(<ОписаниеОповещенияОЗавершении>, <ТекстВопроса>, <Кнопки>, <Таймаут>, <КнопкаПоУмолчанию>, <Заголовок>, <КнопкаТаймаута>)

Обязательными являются первые три параметра.

Ниже приведен пример использования функции.

Процедура ОписаниеОповещения

Пример функции оповещения в 1С

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

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

Сообщения могут быть привязаны к конкретному экранному элементу. Этот объект доступен и на Сервере.

Следует обратить внимание, что, во-первых, данный объект нужно создавать. Например: Сообщение = Новый СообщениеПользователю;

Таким образом мы создаем экземпляр данного объекта.

Во-вторых, нужно прописывать текст сообщения в отдельном свойстве.

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

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

Сообщение.ПутьКДанным = “Объект”;
Сообщение.КлючДанных = ЭтотОбъект.Ссылка;

Чтобы открыть модуль документа, следует в окне редактирования объекта (документа) на закладке Прочее нажать на кнопку Модуль объекта.

Для эксперимента в модуле объекта какого-либо документа разместим код.

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

Ниже представлен полученный в пользовательском режиме результат для Платформы 8.3.

Сообщение пользователю в пользовательском режиме 1С

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

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

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

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

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

Уведомление о состоянии процесса

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

Синтаксис: Состояние(<ТекстСообщения>, <Прогресс>, <Пояснение>, <Картинка>)
Параметры: <ТекстСообщения> и <Пояснение> – не обязательные, тип – Строка.
Текст выводится на специальную панель состояния.
<Прогресс> параметр тоже необязательный, но наглядный.
Тип: Число. Значение индикатора прогресса (от 1 до 100).
<Картинка> тоже необязательный параметр.
При обработке какого-либо события могут использоваться периодические вызовы функции типа:

Вызов функции

При этом могут меняться надписи, а могут изменяться значения параметра Прогресс.

Функция может вызываться как из одной процедуры (функции), так и из нескольких. Таким образом можно отслеживать состояние выполнения процесса.

Состояние выполнения процесса

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

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

Хочется еще раз акцентировать ваше внимание на том факте, что если ваша конфигурация (версии 8.3.3+) предполагает работу с помощью веб-клиента, то:

  • на уровне конфигурации должна быть установлена настройка режима модальности «Не использовать»
  • в коде должны использоваться методы асинхронной модели взаимодействия с пользователем. Такие методы начинаются со слов Показать или Начать.

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

PDF-версия статьи для участников группы ВКонтакте

Мы ведем группу ВКонтакте – http://vk.com/kursypo1c.

Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.

Статья по программированию - в PDF-формате

Полезные ссылки:

Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)

Если Вы уже участник группы – нужно просто повторно авторизоваться в ВКонтакте, чтобы скрипт Вас узнал. В случае проблем решение стандартное: очистить кеш браузера или подписаться через другой браузер.

  • FesenkoA 15.02.2019 at 11:04

    Вот такие статьи я люблю. Вроде какая то фигня о сообщениях, но раскрывается потенциал платформы!

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

    Reply

  • mifka186 15.02.2019 at 11:20

    Команда удобна своей простатой

    Наверное простотой?

    Reply

  • Goleff74 15.02.2019 at 12:23

    (1)

    Сервер взаимодействия

    Reply

  • ids79 15.02.2019 at 12:44

    (2) Исправил, спасибо.

    Reply

  • NeviD 15.02.2019 at 13:32

  • pbabincev 17.02.2019 at 01:32

    (1)

    Сервер взаимодействия на раз решает это

    Reply

  • the1 18.02.2019 at 09:10

    Срочно внести в Синтакс-помощник!

    Reply

  • Inziya 20.02.2019 at 06:46

    Спасибо! Все понятно и подробно описано.

    Reply

  • Roin2512 20.02.2019 at 11:52

    (1)Глянте в сторону подписок на события

    Reply

  • Дмитрий74Чел 20.02.2019 at 11:59

    Неточности:

    Путь к реквизитам объекта формы необходимо указывать задав ключевое слово «Объект».

    Сообщение.Поле = «Объект.Товары[1].Номенклатура»;

    «Объект» — обычно такое имя задано у ключевого реквизита формы документа или справочника. Но формы бывают и другие.И Имя реквизита может быть не «Объект», а например, «Список».

    Лучше написать «Путь к реквизитам, подчиненным основному реквизиту формы, необходимо прописывать указывая «полный путь» с имением основного реквизита, например…».

    Reply

  • Дмитрий74Чел 20.02.2019 at 12:12

    Вообще, идентичны варианты

    Сообщение.Поле = «Наименование»;
    Сообщение.ПутьКДанным = «Объект»;

    и

    Сообщение.Поле = «Объект.Наименование»;

    А еще не слова не сказано про типовые процедуры. Я сторонник всегда использовать типовой функционал. Вот как обычно в типовых используют СообщениеПользователю:

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

    Показать

    Reply

  • herfis 20.02.2019 at 12:22

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

    Да и вообще в принципе хоть как-то отобразить сообщения из модуля проведения документа при проведении документа из списка без открытия его формы.

    Reply

  • FesenkoA 20.02.2019 at 13:23

    (9)Подписка на событие, при записи — все едино. Есть пользователь ШЕФ, он сидит в отчетах,или вообще ничего не делает, и пользователи 1,2,3…н, которые создают заявки. Заявка создана — у шефа уведомление. То есть разные клиентские сеансы.

    Reply

  • ids79 20.02.2019 at 16:52

  • ids79 20.02.2019 at 16:58

    (13)Наверно только сервер взаимодействия

    Reply

  • ids79 20.02.2019 at 17:01

    (10)Согласен, может быть и другой основной реквизит формы.

    Reply

  • ids79 20.02.2019 at 17:05

    (11)

    Вообще, идентичны варианты

    Не всегда.

    Если сообщение необходимо привязать к реквизитам формы, которая закрыта, только первый вариант можно использовать.

    Если выводить сообщение в текущую форму, разницы нет.

    Reply

  • FesenkoA 20.02.2019 at 17:39

    (15)Сейчас бы я ее так бы и решил ) Но когда ее проектировали СВ то ли не было, то ли в какой то глубокой бете был…

    Reply

  • ids79 22.02.2019 at 11:07

    (12)Просто вывести сообщение в форме списка очень просто, так как сообщение сформированное в модуле документа будет выведено в текущем активном окне.

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

    Reply

  • herfis 22.02.2019 at 12:16

    (19)

    Просто вывести сообщение в форме списка очень просто, так как сообщение сформированное в модуле документа будет выведено в текущем активном окне.

    Вы правы. Это я напутал уже за давностью.

    Проблема возникает при нажатии дефолтной кнопки «Провести и закрыть» в открытой форме документа.

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

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

    Reply

  • ids79 23.02.2019 at 12:51

    (20)Я в статье писал про этот момент с закрытием форм с сообщением.

    Из модуля объекта вывести такое сообщение, я думаю, не получится.

    Если из клиентской процедуры формы, например «При записи» можно попробовать, передав идентификатор формы списка.

    Reply

  • ids79 23.02.2019 at 12:58

    (5)Спасибо за дополнение.

    Можно пользоваться и этой процедурой или «СообщитьПользователюВФорму».

    Но ничего нового они не добавляют, и не упрощают ввод, на мой взгляд.

    Да и результат будет зависеть от того, что разработчики решат сделать в конкретном релизе.

    По мне, удобнее использовать сам объект.

    Reply

  • АлександрЯрославичъ 04.06.2019 at 12:02

    Народ, а кто-то сталкивался с проблемой привязки сообщения к полю в процедуре, которая указана в описании оповещения?

    У меня не работает ((

    Reply

  • MSK_Step 01.07.2019 at 10:30

    (3)ага, к нему купить лицензии КОРП+сделать сервер отдельный,непонятно как это работать будет стабильно сейчас

    А это проверенный способ, который работает.

    Reply

  • pavel_pss 01.07.2019 at 15:33

    Спасибо, за сбор все информации в одном месте.

    Было бы не плохо, если бы еще добавил, как добавить в оповещения (значок колокольчика)

    Reply

  • sikvel2012 10.09.2019 at 13:00

    Почему — то забыли про ПолучитьСообщенияПользователю()

    и почему-то она не работает

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

    Reply

  • ids79 10.09.2019 at 14:22

    (26)

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

    Эта функция выводит накопленные (поле Сообщение.Сообщить()) и еще не выведенные сообщения.

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

    Reply

  • sikvel2012 10.09.2019 at 16:49

    (27) странная конечно реализация, под сообщить подразумевается что оно выводится, зачем его ещё накапливать?

    Я из описания понял что она собирает сообщения которые ещё не выведены командой сообщить, то есть очередь сообщений, это было бы логично

    Reply

  • max_zhilin 16.09.2019 at 13:40

    Как вывести сообщение при открытии формы существующего документа?

    Например, сообщение о том, что редактировать документ не рекомендуется.

    В привязке к открываемой форме, естественно.

    UPD: выяснилась интересная особенность:

    если документ открывать из списка, то всё ОК, сообщение цепляется к форме открываемого документа.

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

    А если открытых форм, нет, то к «Начальной странице».

    Посему вопрос формулируется так: Как вывести сообщение при открытии формы существующего документа из меню истории (Ctrl+Shift+H)?

    Reply

  • ids79 16.09.2019 at 13:52

    (29)Если до открытия формы, то сообщение будет выведено в текущей форме. Новая ведь еще не открыта. Привязать его можно к открываемой — второй вариант из статьи.

    Reply

  • max_zhilin 16.09.2019 at 14:03

    (30)

    сообщение будет выведено в текущей форме. Новая ведь еще не открыта

    В ПриЧтенииНаСервере вызываю

        Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = ТекстСообщения;
    //Сообщение.ИдентификаторНазначения = Форма.УникальныйИдентификатор;
    Сообщение.Сообщить();

    Либо просто

        Сообщить(ТекстСообщения);

    При этом привязка к открываемой форме происходит. То же самое из ПриОткрытии.

    Но с вышеописанными особенностями: если из списка или из любой другой формы, то норм, но из истории ведет себя странно — привязывает к текущей активной форме. Может, баг платформы? 1С:Предприятие 8.3 (8.3.12.1714)

    Сообщение.ИдентификаторНазначения = Форма.УникальныйИдентификатор; — так тоже пробовал, поведение не меняется.

    Reply

  • Madsos 27.09.2019 at 14:16

    (4)Зачем исправил, было правильно?!

    Reply

  • DmitryKSL 15.10.2019 at 10:00

    Сообщение выходит и в поле и внизу окна, как сделать чтобы только в поле выходило?

    Reply

  • ids79 15.10.2019 at 10:52

    (33)На сколько я знаю, никак. Снизу всегда будет выводиться.

    Reply

  • kassbar 13.11.2019 at 20:18

    из обработки проведения не удалось вывести в форму сообщение с привязкой, перебрал возможно около 10 разных вариантов, например такой:

    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = «текст»;
    Сообщение.УстановитьДанные(ЭтотОбъект);
    Сообщение.Поле = «Объект.Товары[1].Номенклатура»;
    Сообщение.Сообщить(); 

    или такой:

    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = «текст»;
    Сообщение.УстановитьДанные(ЭтотОбъект);
    Сообщение.Поле = «Склад»;
    Сообщение.Сообщить(); 

    и много других..

    платформа 8.3.15.1656

    Reply

  • ids79 14.11.2019 at 07:23

    из обработки проведения не удалось вывести в форму сообщение с привязкой

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

    Сообщение.Текст = «Текст сообщения»;

    Сообщение.Поле = «Товары[0].Номенклатура»;

    Сообщение.УстановитьДанные(ЭтотОбъект);

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

    Выводит все корректно. Платформа 8.3.15.1656, режим совместимости 8.3.12.

    Если форма документа была открыта, привязывается к ней.

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

    Reply

  • kassbar 14.11.2019 at 18:38

    (36) попробуйте в расширение (например в УТ 11 или КА 2.4) добавить нечто такое:

    &Перед(«ОбработкаПроведения»)

    Процедура Расш1_ОбработкаПроведения(Отказ, РежимПроведения)

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

    Сообщение.Текст = «текст сообщения»;

    Сообщение.Поле = «Товары[0].Номенклатура»;

    Сообщение.УстановитьДанные(ЭтотОбъект);

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

    КонецПроцедуры

    Будет текст привязан к строке ТЧ или выведется внизу ? К слову сказать типовые сообщения при нехватке например товара в документе реализации тоже без привязки к строкам выводятся (УТ 11.4.10.62)

    Reply

  • kassbar 15.11.2019 at 22:30

    Единственное объяснение этому возможно кроется в окне предупреждения, которое генерирует платформа (или БСП), с текстом «Не удалось провести документ…».

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

    Reply

  • Понравилась статья? Поделить с друзьями:
  • 1с управляемая форма реквизит использовать всегда
  • 1с управляемые формы получить реквизит на клиенте
  • 200 тысяч на открытие бизнеса от государства 2022
  • 200 часов исправительных работ это сколько в днях
  • 2021 реквизиты для платежей по несчастным случаям