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.3.25 генерация речи из текста станет продолжением ранее реализованного функционала (8.3.23 - распознавания речи и перевода в текстовый формат). Начиная с релиза 8.3.25, можно слушать программу, а не изучать инструкции, глядя в экран. Сервис генерирует речь из заданного текста, воспроизводит сразу или сохраняет (*.WAV). Во встроенном языке появились дополнительные объекты и методы для поддержки этой функциональности.
- В версии 8.3.21 в диалоге, который возникает при ошибках подключения к информационной базе, реализована возможность отображения информации, которая упростит (для пользователя) понимание причины ошибки и к кому следует обращаться в случае возникновения этой ошибки.Реализован объект НастройкиОбработкиОшибокПриЗапуске. Для объекта МенеджерОбработкиОшибок реализованы методы УстановитьНастройкиОбработкиОшибокПриЗапуске() и ПолучитьНастройкиОбработкиОшибокПриЗапуке().Для параметров подключения к информационной базы, которые описываются в файле *.v8i реализован параметр StartupErrorHelpURL и StartupErrorHelpText
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник