1С 8.3 Диалоги
Данные > Примеры кода 1С > 1С 8.3 Диалоги
Диалог в 1С 8.3 - это окно (элемент графического интерфейса), которое открывается пользователю (независимо от формы) для вывода информации/вопросов, получение ответов, ввода информации. Диалоги могут быть модальные и немодальные. Модальные диалоги блокируют работу с другими окнами формы до своего закрытия. Обычно с их помощью реализуется диалог, требующий от пользователя принятия некоторого решения. Соответственно немодальные диалоги могут параллельно отрываться и работать одновременно с другими окнами формы.
Начиная с версии 8.3.3.721 (06.09.2013) желательно отказаться от модальности!
Для проектирования форм уведомлений, вопросов и предупреждений рекомендую следующий инструментарий: Консоль диалоговых форм (УФ)
Диалоговое окно открывается для вопроса или предупреждения пользователю. Это блокирующее сообщение, которое требует обязательного внимания пользователя. Обычно выводится для необратимых действий, например, очистка табличной части или установка особого режима работы.
Оглавление:
Модальные диалоги (устаревшее) в 1С 8.3:
&НаКлиенте
Процедура МодальныеДиалогиНаКлиенте(Команда)
Перем пВводДаты;
Перем пВводЧисла;
Перем пВводСтроки;
// Вывод предупреждения пользователю (модально)
Предупреждение("Внимание! Константа изменена!", 0, "Предупреждение об изменении константы");
// Вывод диалога вопроса с заголовком и нужными кнопками (модально)
ВашОтвет = Вопрос("Загрузить список банков?", РежимДиалогаВопрос.ДаНетОтмена, 0, КодВозвратаДиалога.Да, "Список банков 2020г.");
Если ВашОтвет = КодВозвратаДиалога.Да Тогда
Сообщить("Список банков с сайта koder.by загружен!");
КонецЕсли;
// Открыть значение для работы с ним (модально)
ОткрытьЗначение(98.12);
// Удаление сообщении и подача сигнала
Для Н = 1 По 5 Цикл
Сообщить(Н);
КонецЦикла;
Предупреждение("Через 10 секунд все сообщения будут удалены!", 10);
ОчиститьСообщения();
Сигнал();
// Установка статуса сообщения
Сообщить("Внимание! Построение данного отчета временно запрещено!", СтатусСообщения.ОченьВажное);
// Ввод даты пользователем (модально)
Если ВвестиДату(пВводДаты, "Введите дату выгрузки информации на портал koder.by", ЧастиДаты.Дата) = Истина Тогда
Сообщить("Информация выгружена на дату: " + пВводДаты);
КонецЕсли;
// Ввод значения определенного типа пользователем (модально)
Если ВвестиЗначение(пВводЧисла, "Введите значение", "Число") Тогда
Сообщить(пВводЧисла);
КонецЕсли;
// Ввод строки пользователем (модально)
Если ВвестиСтроку(пВводСтроки, "Введите строку", 0, Истина) Тогда
Сообщить(пВводСтроки);
КонецЕсли;
// Ввод числа определенного формата пользователем (модально)
Если ВвестиЧисло(пВводЧисла, "Введите число", 3, 1) Тогда
Сообщить(пВводЧисла);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура МодальныеДиалогиНаСервере(Команда)
ОткрытьЗначение(Справочники.МестаХранения.НайтиПоНаименованию("Основной"));
КонецПроцедуры
Процедура МодальныеДиалогиНаКлиенте(Команда)
Перем пВводДаты;
Перем пВводЧисла;
Перем пВводСтроки;
// Вывод предупреждения пользователю (модально)
Предупреждение("Внимание! Константа изменена!", 0, "Предупреждение об изменении константы");
// Вывод диалога вопроса с заголовком и нужными кнопками (модально)
ВашОтвет = Вопрос("Загрузить список банков?", РежимДиалогаВопрос.ДаНетОтмена, 0, КодВозвратаДиалога.Да, "Список банков 2020г.");
Если ВашОтвет = КодВозвратаДиалога.Да Тогда
Сообщить("Список банков с сайта koder.by загружен!");
КонецЕсли;
// Открыть значение для работы с ним (модально)
ОткрытьЗначение(98.12);
// Удаление сообщении и подача сигнала
Для Н = 1 По 5 Цикл
Сообщить(Н);
КонецЦикла;
Предупреждение("Через 10 секунд все сообщения будут удалены!", 10);
ОчиститьСообщения();
Сигнал();
// Установка статуса сообщения
Сообщить("Внимание! Построение данного отчета временно запрещено!", СтатусСообщения.ОченьВажное);
// Ввод даты пользователем (модально)
Если ВвестиДату(пВводДаты, "Введите дату выгрузки информации на портал koder.by", ЧастиДаты.Дата) = Истина Тогда
Сообщить("Информация выгружена на дату: " + пВводДаты);
КонецЕсли;
// Ввод значения определенного типа пользователем (модально)
Если ВвестиЗначение(пВводЧисла, "Введите значение", "Число") Тогда
Сообщить(пВводЧисла);
КонецЕсли;
// Ввод строки пользователем (модально)
Если ВвестиСтроку(пВводСтроки, "Введите строку", 0, Истина) Тогда
Сообщить(пВводСтроки);
КонецЕсли;
// Ввод числа определенного формата пользователем (модально)
Если ВвестиЧисло(пВводЧисла, "Введите число", 3, 1) Тогда
Сообщить(пВводЧисла);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура МодальныеДиалогиНаСервере(Команда)
ОткрытьЗначение(Справочники.МестаХранения.НайтиПоНаименованию("Основной"));
КонецПроцедуры
Вывод диалога предупреждения с заголовком (немодально) в 1С 8.3:
&НаКлиенте
Процедура ВыводДиалогаПредупреждения(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияПредупреждение", ЭтотОбъект);
ПоказатьПредупреждение(Оповещение, "Внимание! Константа изменена!", 0, "Предупреждение об изменении константы");
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗакрытияПредупреждение(Параметры) Экспорт
КонецПроцедуры
Процедура ВыводДиалогаПредупреждения(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияПредупреждение", ЭтотОбъект);
ПоказатьПредупреждение(Оповещение, "Внимание! Константа изменена!", 0, "Предупреждение об изменении константы");
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗакрытияПредупреждение(Параметры) Экспорт
КонецПроцедуры
Вывод диалога вопроса с заголовком и нужными кнопками (немодально) в 1С 8.3:
// Пример.1//
&НаКлиенте
Процедура ВыводДиалогаВопроса(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопроса", ЭтотОбъект);
ПоказатьВопрос(Оповещение, "Загрузить банки?", РежимДиалогаВопрос.ДаНетОтмена, 0, КодВозвратаДиалога.Да, "Список банков 2020г.");
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗакрытияВопроса(Результат, Параметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
Сообщить("Список банков с сайта koder.by загружен!");
КонецЕсли;
КонецПроцедуры
// Пример.2 Асинх//
&НаКлиенте
Асинх Процедура ЗадатьВопрос()
// Диалоговое окно открывается для вопроса или предупреждения пользователю.
// Это блокирующее сообщение, которое требует обязательного внимания пользователя.
// Обычно выводится для необратимых действий, например, очистка табличной части или установка особого режима работы
// Стоит уделить особое внимание тексту в диалоговом окне. Из текста должно быть понятно, что требуется от пользователя.
// Должен быть четкий вопрос с однозначным ответом
// Утвердительная кнопка должна однозначно говорить о том, что будет выполнено.
// В идеале должна повторять действие, которое запрашивается у пользователя
// Кнопка закрытия диалогового окна (крестик справа вверху) должене обрабатываться.
// Для этого одна из команд диалогового окна должна быть Отмена. Для этого стоит добавить свои кнопки диалогового окна
ТекстВопроса = "Для отключения уведомлений и комфортной работы рекомендуем использовать режим тишины.
|В этом режиме будут приходить только важные уведомления. Установить режим тишины?";
Кнопки = Новый СписокЗначений;
Кнопки.Добавить(КодВозвратаДиалога.Да, "Установить режим тишины");
Кнопки.Добавить(КодВозвратаДиалога.Отмена, "Нет, оставить как есть");
Результат = Ждать ВопросАсинх(ТекстВопроса, Кнопки);
Если Результат = КодВозвратаДиалога.Да Тогда
Сообщить("Режим тишины установлен");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыводДиалогаВопроса(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопроса", ЭтотОбъект);
ПоказатьВопрос(Оповещение, "Загрузить банки?", РежимДиалогаВопрос.ДаНетОтмена, 0, КодВозвратаДиалога.Да, "Список банков 2020г.");
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗакрытияВопроса(Результат, Параметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
Сообщить("Список банков с сайта koder.by загружен!");
КонецЕсли;
КонецПроцедуры
// Пример.2 Асинх//
&НаКлиенте
Асинх Процедура ЗадатьВопрос()
// Диалоговое окно открывается для вопроса или предупреждения пользователю.
// Это блокирующее сообщение, которое требует обязательного внимания пользователя.
// Обычно выводится для необратимых действий, например, очистка табличной части или установка особого режима работы
// Стоит уделить особое внимание тексту в диалоговом окне. Из текста должно быть понятно, что требуется от пользователя.
// Должен быть четкий вопрос с однозначным ответом
// Утвердительная кнопка должна однозначно говорить о том, что будет выполнено.
// В идеале должна повторять действие, которое запрашивается у пользователя
// Кнопка закрытия диалогового окна (крестик справа вверху) должене обрабатываться.
// Для этого одна из команд диалогового окна должна быть Отмена. Для этого стоит добавить свои кнопки диалогового окна
ТекстВопроса = "Для отключения уведомлений и комфортной работы рекомендуем использовать режим тишины.
|В этом режиме будут приходить только важные уведомления. Установить режим тишины?";
Кнопки = Новый СписокЗначений;
Кнопки.Добавить(КодВозвратаДиалога.Да, "Установить режим тишины");
Кнопки.Добавить(КодВозвратаДиалога.Отмена, "Нет, оставить как есть");
Результат = Ждать ВопросАсинх(ТекстВопроса, Кнопки);
Если Результат = КодВозвратаДиалога.Да Тогда
Сообщить("Режим тишины установлен");
КонецЕсли;
КонецПроцедуры
Вывод значения для интерактивной работы с ним (немодально) в 1С 8.3:
&НаКлиенте
Процедура ВыводЗначенияДляИнтерактивнойРаботыСНим(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияЗначения", ЭтотОбъект);
ПоказатьЗначение(Оповещение, 98.12);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗакрытияЗначения(Параметры) Экспорт
КонецПроцедуры
Процедура ВыводЗначенияДляИнтерактивнойРаботыСНим(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияЗначения", ЭтотОбъект);
ПоказатьЗначение(Оповещение, 98.12);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗакрытияЗначения(Параметры) Экспорт
КонецПроцедуры
Вывод даты пользователю (немодально) в 1С 8.3:
&НаКлиенте
Процедура ВыводДатыПользователю(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеВводаДаты", ЭтотОбъект);
ПоказатьВводДаты(Оповещение, , "Введите дату выгрузки информации на портал koder.by:", ЧастиДаты.Дата);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВводаДаты(ДатаВыгрузки, Параметры) Экспорт
Если Не ДатаВыгрузки = Неопределено Тогда
Сообщить("Информация выгружена на дату: " + ДатаВыгрузки);
КонецЕсли;
КонецПроцедуры
Процедура ВыводДатыПользователю(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеВводаДаты", ЭтотОбъект);
ПоказатьВводДаты(Оповещение, , "Введите дату выгрузки информации на портал koder.by:", ЧастиДаты.Дата);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВводаДаты(ДатаВыгрузки, Параметры) Экспорт
Если Не ДатаВыгрузки = Неопределено Тогда
Сообщить("Информация выгружена на дату: " + ДатаВыгрузки);
КонецЕсли;
КонецПроцедуры
Ввод значения определенного типа пользователем (немодально) в 1С 8.3:
&НаКлиенте
Процедура ВводЗначенияОпределенногоТипаПользователем(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеВводаЗначения", ЭтотОбъект);
ПоказатьВводЗначения(Оповещение, , "Введите значение", "Число");
КонецПроцедуры
&НаКлиенте
Процедура ПослеВводаЗначения(Результат, Параметры) Экспорт
Если Не Результат = Неопределено Тогда
Сообщить(Результат);
КонецЕсли;
КонецПроцедуры
Процедура ВводЗначенияОпределенногоТипаПользователем(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеВводаЗначения", ЭтотОбъект);
ПоказатьВводЗначения(Оповещение, , "Введите значение", "Число");
КонецПроцедуры
&НаКлиенте
Процедура ПослеВводаЗначения(Результат, Параметры) Экспорт
Если Не Результат = Неопределено Тогда
Сообщить(Результат);
КонецЕсли;
КонецПроцедуры
Ввод строки пользователем (немодально) в 1С 8.3:
&НаКлиенте
Процедура ВводСтрокиПользователем(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеВводаСтроки", ЭтотОбъект);
ПоказатьВводСтроки(Оповещение, , "Введите строку", 0, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВводаСтроки(Результат, Параметры) Экспорт
Если Не Результат = Неопределено Тогда
Сообщить(Результат);
КонецЕсли;
КонецПроцедуры
Процедура ВводСтрокиПользователем(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеВводаСтроки", ЭтотОбъект);
ПоказатьВводСтроки(Оповещение, , "Введите строку", 0, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВводаСтроки(Результат, Параметры) Экспорт
Если Не Результат = Неопределено Тогда
Сообщить(Результат);
КонецЕсли;
КонецПроцедуры
Ввод числа определенного типа пользователем (немодально) в 1С 8.3:
&НаКлиенте
Процедура ВводЧислаОпределенногоТипаПользователем(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеВводаЧисла", ЭтотОбъект);
ПоказатьВводЧисла(Оповещение, , "Введите число", 3, 1);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВводаЧисла(Результат, Параметры) Экспорт
Если Не Результат = Неопределено Тогда
Сообщить(Результат);
КонецЕсли;
КонецПроцедуры
Процедура ВводЧислаОпределенногоТипаПользователем(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеВводаЧисла", ЭтотОбъект);
ПоказатьВводЧисла(Оповещение, , "Введите число", 3, 1);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВводаЧисла(Результат, Параметры) Экспорт
Если Не Результат = Неопределено Тогда
Сообщить(Результат);
КонецЕсли;
КонецПроцедуры
💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом #Диалоги:
📰 Актуальные новости с тегом #Диалоги:
- В версии 8.3.28 (она же 8.5.2) появилась возможность использования специальной фразы для активации распознавания речи, а также поддержка знаков препинания и конвертации чисел.
- В версии 8.3.25 генерация речи из текста станет продолжением ранее реализованного функционала (8.3.23 - распознавания речи и перевода в текстовый формат). Начиная с релиза 8.3.25, можно слушать программу, а не изучать инструкции, глядя в экран. Сервис генерирует речь из заданного текста, воспроизводит сразу или сохраняет (*.WAV). Во встроенном языке появились дополнительные объекты и методы для поддержки этой функциональности.
- В версии 8.3.21 в диалоге, который возникает при ошибках подключения к информационной базе, реализована возможность отображения информации, которая упростит (для пользователя) понимание причины ошибки и к кому следует обращаться в случае возникновения этой ошибки.Реализован объект НастройкиОбработкиОшибокПриЗапуске. Для объекта МенеджерОбработкиОшибок реализованы методы УстановитьНастройкиОбработкиОшибокПриЗапуске() и ПолучитьНастройкиОбработкиОшибокПриЗапуке().Для параметров подключения к информационной базы, которые описываются в файле *.v8i реализован параметр StartupErrorHelpURL и StartupErrorHelpText
🐱 Рекомендуемые статьи с тегом #Диалоги:
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник