helpf.pro
Регистрация
 +3 
Распечатать

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

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

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


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

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

Код 1C v 8.3
 Если ЗначениеЗаполнено(объект.ИнтернетМагазин) Тогда		
// Все заполнено, обрабатываем
Иначе
сбп=Новый СообщениеПользователю;
сбп.Текст = "Укажите интернет-магазин данные которого Вы загружаете!";
сбп.Поле="ИнтернетМагазин";
сбп.ПутьКДанным = "Объект";
сбп.Сообщить();
КонецЕсли;

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

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

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

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

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

Код 1C v 8.3
  &НаСервере
Процедура ДействиеСОбъектом(ОбъектДанных)
    // Какие либо действия, которые требуют создания сообщения

    // Создание сообщения
    Сообщение = Новый СообщениеПользователю();
    Сообщение.Текст = "В строке 11 табличной части ""Номенклатура"" не хватает " + 
                      НедостающееКоличество + " " + ЕдиницаИзмеренияНоменклатуры;
    Сообщение.Поле = "Номенклатура[10].Количество";

    // Привязка объекта к реквизиту формы произойдет за счет
    // установленного выше по стеку соответствия методом
    // УстановитьСоответствиеОбъектаИРеквизитаФормы
    Сообщение.УстановитьДанные(ОбъектДанных);
    // Теперь у сообщения заполнено поле ПутьКДанным (установлено имя реквизита формы, до этого была пустая строка),
    // и свойство КлючДанных (установлена ссылка на документ, до этого было Неопределено)

    // Сообщение выводится пользователю
    Сообщение.Сообщить();
    // в дальнейшем сообщение будет показано в форме и привязано к
    // элементу управления связанного с полем Количество 
    // в 11-й строке табличной части Номенклатура.
КонецПроцедуры;

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

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

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

Еще примеры:

Код 1C v 8.3
 &НаКлиенте
Процедура ДействиеСОбъектомНаКлиенте(ОбъектДанных)
     // Какие либо действия, которые требуют создания сообщения
    // Создание сообщения
    Сообщение = Новый СообщениеПользователю();
    Сообщение.Текст = "В строке 11 табличной части ""Номенклатура"" не хватает " + 
                      НедостающееКоличество + " " + ЕдиницаИзмеренияНоменклатуры;
    Сообщение.Поле = "Номенклатура[10].Количество";


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


    // Сообщение выводится пользователю
    Сообщение.Сообщить();
КонецПроцедуры;


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

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


// Показываем сообщение из документа
// КлючДанных - пустой, ПутьКДанным заполнится автоматически
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Поле = "Товары[0].Количество";
    Сообщение.Текст = "Не заполнено количество товара в первой строке!";
    Сообщение.УстановитьДанные(ЭтотОбъект);
    Сообщение.Сообщить();

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

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

Код 1C v 8.3
 ПоказатьОповещениеПользователя(НСтр("ru = 'Выполнение:'"), ПолучитьНавигационнуюСсылку(Объект), "Выгрузка завершена, все ОК!", БиблиотекаКартинок.ПолнотекстовыйПоискДалее);   
Код 1C v 8.3
  &НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ПолучитьДатуЗапретаРедактирования() >= Объект.Дата Тогда
НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Объект.Ссылка);
ПоказатьОповещениеПользователя("Только просмотр!", 
НавигационнаяСсылка, 
"Разрешен только просмотр документа!");
КонецЕсли;                                
КонецПроцедуры


&НаСервереБезКонтекста
Функция ПолучитьДатуЗапретаРедактирования()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Константы.ДатаЗапретаРедактирования
|ИЗ
| Константы КАК Константы";
РезультатЗапроса = Запрос.Выполнить();
Возврат РезультатЗапроса.Выгрузить()[0].ДатаЗапретаРедактирования;
КонецФункции  
Разместил:   Версии: | 8.2 УП | 8.3 |  Дата:   Прочитано: 45628
 +3 
Распечатать
Возможно, вас также заинтересует
Как заполнить табличную часть формы программно? 6
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 36
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
1C: Enterprise Development Tools 49
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем
Google maps : вывод точек на карту и режим панорамы 5
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора
Битая ссылка, , Уникальный Идентификатор, GUID - Управляемые формы 2
Переделал обработки из статей Битая ссылка, Объект не найден, Уникальный Идентификатор, GUID и Поиск в базе битых ссылок - объект не найден под Управляемые формы. Скачать
Посмотреть все результаты поиска похожих
Комментарии
crismar24
09.06.2020 15:22Комментарий: 1
crismar24
Код 1C v 8.3

НаКлиенте

Процедура ДействиеСОбъектомНаКлиенте(ОбъектДанных)

// Какие либо действия, которые требуют создания сообщения

// Создание сообщения

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

Сообщение.Текст = "В строке 11 табличной части ""Номенклатура"" не хватает " +

НедостающееКоличество + " " + ЕдиницаИзмеренияНоменклатуры;

Сообщение.Поле = "Номенклатура[10].Количество"; - правильно для формы документа- Сообщение.Поле = "Объект.Номенклатура[10].Количество";

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