Модальный диалог в 1с что это
Перейти к содержимому

Модальный диалог в 1с что это

  • автор:

1С 8.3 Диалоги — Программист 1С Минск. Автоматизация бизнеса.

✔ Модальные диалоги (НаКлиенте и НаСервере)

&НаКлиенте
Процедура МодальныеДиалогиНаКлиенте ( Команда )

Перем пВводДаты ;
Перем пВводЧисла ;
Перем пВводСтроки ;

// Вывод предупреждения пользователю (модально)
Предупреждение ( «Внимание! Константа изменена!» , 0 , «Предупреждение об изменении константы» );

// Вывод диалога вопроса с заголовком и нужными кнопками (модально)
ВашОтвет = Вопрос ( «Загрузить список банков?» , РежимДиалогаВопрос . ДаНетОтмена , 0 , КодВозвратаДиалога . Да , «Список банков 2020г.» );
Если ВашОтвет = КодВозвратаДиалога . Да Тогда
Сообщить ( «Список банков с сайта koder.by загружен!» );
КонецЕсли;

// Открыть значение для работы с ним (модально)
ОткрытьЗначение ( 98.12 );

// Удаление сообщении и подача сигнала
Для Н = 1 По 5 Цикл
Сообщить ( Н );
КонецЦикла;

Предупреждение ( «Через 10 секунд все сообщения будут удалены!» , 10 );
ОчиститьСообщения ();
Сигнал ();

// Установка статуса сообщения
Сообщить ( «Внимание! Построение данного отчета временно запрещено!» , СтатусСообщения . ОченьВажное );

// Ввод даты пользователем (модально)
Если ВвестиДату ( пВводДаты , «Введите дату выгрузки информации на портал koder.by» , ЧастиДаты . Дата ) = Истина Тогда
Сообщить ( «Информация выгружена на дату: » + пВводДаты );
КонецЕсли;

// Ввод значения определенного типа пользователем (модально)
Если ВвестиЗначение ( пВводЧисла , «Введите значение» , «Число» ) Тогда
Сообщить ( пВводЧисла );
КонецЕсли;

// Ввод строки пользователем (модально)
Если ВвестиСтроку ( пВводСтроки , «Введите строку» , 0 , Истина) Тогда
Сообщить ( пВводСтроки );
КонецЕсли;

// Ввод числа определенного формата пользователем (модально)
Если ВвестиЧисло ( пВводЧисла , «Введите число» , 3 , 1 ) Тогда
Сообщить ( пВводЧисла );
КонецЕсли;

&НаСервере
Процедура МодальныеДиалогиНаСервере ( Команда )

ОткрытьЗначение ( Справочники . МестаХранения . НайтиПоНаименованию ( «Основной» ));

Модальный диалог в 1с что это

Войдите как ученик, чтобы получить доступ к материалам школы

Внутренний язык программирования 1С 8.3 для начинающих программистов: использование диалогов в 1С

Автор уроков и преподаватель школы: Владимир Милькин

Давайте определимся, что же такое диалог? Вызов команды Сообщить является диалогом? А вызов команды ВвестиЧисло? А вызов ОткрытьЗначение?

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

Диалог — это не просто окно. Это окно, которое открывается пользователю с целью вывода информации и (или) получения ответа.

Вопрос Вывод значения

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

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

Отличным примером диалога является вывод предупреждения пользователю:

Что мы видим? Вызов команды Предупреждение, в которую в качестве параметра передаётся строка «Осторожно».

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

К примеру, пусть у нас есть такой код:

Как он будет выполняться?

В начале компьютер дойдёт до строчки №1 и выполнит команду Предупреждение с параметром «1». В этот момент пользователю покажется диалоговое окно с текстом «1», а компьютер замрёт на этой строчке и будет ожидать, пока пользователь закроет диалог. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

После закрытия диалога компьютер перейдёт к выполнению строчки №2 и выполнит команду Предупреждение уже с другим параметром «2». Пользователю снова покажется диалоговое окно, но уже с текстом «2», а компьютер замрёт уже на второй строчке и будет ожидать, пока пользователь закроет диалог.

Затем компьютер перейдёт к третьей строчке. Ну и так далее.

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

Таймаут — означает количество секунд, через которое диалог закроется сам, если этого не сделает пользователь.

Заголовок — подменяет стандартный заголовок «1С:Предприятие» на строку пользователя.

К примеру, такой код:

покажет диалог с текстом «Осторожно.» и заголовком «Внимание!», а также закроется через 5 секунд, если пользователь не сделает этого раньше:

01

А что если мы хотим задать только текст и заголовок окна, а таймаут не задавать?

Во-первых, мы можем передать в качестве таймаута ноль:

А во-вторых, мы можем просто оставить пустое место вместо параметра и система сама поймёт, что нужно оставить его значение по умолчанию:

Для того, чтобы узнавать обо всех возможных параметрах встроенных команд 1С — пользуйтесь синтакс-помощником так, как это описано в одном из предыдущих уроков (ссылка).

Ввод числа

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

К примеру, напишем:

02

Зачем мы передаём в команду параметр Число? Во-первых, для того, чтобы отобразить начальное значение ввода в диалоге. А, во-вторых, чтобы вернуть в эту переменную значение, которое ввёл пользователь. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Но что если пользователь отказался от ввода и нажал кнопку «Отмена»? Как об этом узнать? Оказывается, функция ВвестиЧисло не только показывает диалог ввода числа, но ещё и возвращает нам Истина в том случае, если пользователь нажал кнопку «ОК» и Ложь, если он отменил ввод, нажав кнопку «Отмена».

Таким образом, более правильным будет такой код:

В переменную Результат (имя могло быть любым) возвращается Истина или Ложь в зависимости от того какую кнопку нажал пользователь («ОК» или «Отмена»).

В переменную Число возвращается число введенное пользователем.

Вопрос

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

Имя команды, которая вызывает этот диалог нам известна — Вопрос.

Теперь давайте посмотрим в синтакс-помощнике какие параметры принимает эта команда:

ТекстВопроса — это сам вопрос в текстовом виде, который увидит пользователь.

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

    • РежимДиалогаВопрос.ДаНет — в диалоге будет всего две кнопки Да и Нет.
    • РежимДиалогаВопрос.ДаНетОтмена — три кнопки Да, Нет и Отмена.
    • РежимДиалогаВопрос.ОкОтмена — две кнопки Ок и Отмена.
    • И другие варианты кнопок.

    Таймаут — этот параметр нам уже знаком.

    КнопкаПоУмолчанию — это кнопка, на которой будет фокус при показе окна. Её значения могут быть такими:

      • КодВозвратаДиалога.Нет
      • КодВозвратаДиалога.Да
      • КодВозвратаДиалога.Отмена
      • И другие кнопки.

      Заголовок — этот параметр нам уже знаком.

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

      Уфф. Как видите, параметров много. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Но необязательно использовать их все. Как следует из синтакс-помощника обязательными к заполнению являются только первые два:

      Вопрос

      Вопрос-то мы задали. Хорошо бы теперь получить ответ — выспался пользователь или нет Из того же синтакс-помощника мы узнаём, что кнопка которая была нажата возвращается в качестве результата вызова команды Вопрос:

      Модальность

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

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

      Таким недостатком не обладают немодальные версии диалогов, но к ним переходить нам ещё рано.

      Модальные окна в 1С 8.3

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

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

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

      Устранение ошибки «Использование в данном режиме модальных окон запрещено» в системе 1С

      Эта разновидность ошибки стала возникать после того, как 1С была полностью переведена на новый интерфейс, относящийся к платформе 1С 8.3 – «Такси». Связано это с тем, что разработчиками в ней была включена возможность работы с окнами, однако, она была реализована без режима модальности.

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

      Затем, в обязательном порядке потребуется сохранить произведенные в конфигурации изменения, после чего и обновить их. Та ошибка, о которой шла речь ранее, возникает, если установлена отметка о недопустимости использования режима модальности. Эта возможность возникла, начиная с платформы версии 8.3.3.721, релиз которой состоялся еще в сентябре 2013-го года. Другими словами, те пользователи системы, которые до настоящего момента по каким-либо причинам все еще продолжают работать с более старыми версиями платформы, могут не отказываться от использования модальности. Что же касается других версий, что бы устранить всякую возможность появления окна с ошибкой, допускается простая установка посредством использования вкладки «Использовать».

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

      Используемые через веб-клиент приложения, как и применяемые в облаке и на iPad (к примеру, «1cfresh.com» и др.), в данном режиме совершенно не функционируют. Все новые разновидности конфигураций использует в процессе своей работы интерфейса только безмодальный режим и ничего другого.

      Модальность и отказ от ее использования

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

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

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

      Хотите получать подобные статьи по четвергам?
      Быть в курсе изменений в законодательстве?
      Подпишитесь на рассылку

      Модальные окна в 1С

      Для разбора работы с модальными окнами в 1С требуется понимание того, чем эти окна отличаются от обычных окон в реализации 1С. Модальные окна в 1С — это такой тип окна, вызываемый в среде 1С, который блокирует остальной интерфейс 1С 8. Зачастую под такими окнами выступают диалоговые окна в 1С либо те формы, в которых продолжение работы не является возможным без его закрытия и возврата результата в окно владелица.

      Модальные окна в 1С широко применялись в обычных формах в системе 1С 8.2, однако со временем развития платформы и перехода на управляемы формы их механика не подходила для корректной работы в тонком либо web клиенте в 1С. Однако потребность в том, что нужно в какой-то момент останавливать возможность работы пользователя осталась.

      По сути, сам администратор 1С 8.3 на конкретном предприятии должен понимать нужно ли ему использовать модальность. Так, например, если в компании ведётся активная доработка системы, при этом не используются актуальные методики написания кода в 1С, а пользователи используют только толстый или тонкий клиент будет достаточно перевести работу режима использования модальности в режим «Использовать». Данную операцию выполнить весьма просто:

      1) Нужно открыть конфигуратор в 1С

      2) Если мы видим дерево конфигурации, то переходим к пункту 3, в противном случае выбираем меню:

      Oткрыть конфигуратор в 1С

      3) Щелкаем правой кнопкой мыши на голове конфигурации и выбираем пункт «Свойства», либо используем сочетание клавиш alt+enter.

      Использование модальности окна в 1С

      4) Режим использования модальности установить в «Использовать».

      2. Объект ОписаниеОповещения. Устранение модальности для web клиента в 1С

      Данный механизм поможет лишь в работе тонкого клиента в 1С, а для web клиента в 1С нужно устранить саму модальность в вызове кодом. Для этого нам понадобится тип ОбработкаОповещения в 1С.

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

      3. Сравнение работы кода в режиме с модальностью окон в 1С и без нее

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

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

      Результат = Вопрос(«Табличная часть услуг будет очищена. Продолжить?”, РежимДиалогаВопрос.ДаНет);

      Если Результат = КодВозвратаДиалога.Нет Тогда

      ИначеЕсли Результат = КодВозвратаДиалога.Да Тогда

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

      Чтобы уйти от данного режима, нужно использовать ОписаниеОповещения:

      Процедура ЗаполнитьТоварыУслуги (Команда)

      Оповещение = Новый ОписаниеОповещения(“ЗаполнитьТоварыУслугиВопросЗавершение”, ЭтотОбъект);

      ТекстВопроса = “Табличная часть услуг будет очищена. Продолжить?”;

      ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);

      Процедура ЗаполнитьТоварыВопросЗавершение(Результат, ДополнительныеПараметры) Экспорт

      Если Результат = КодВозвратаДиалога.Нет Тогда

      ИначеЕсли Результат = КодВозвратаДиалога.Нет Тогда

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *