Модальный режим окна в 1С

Содержание
  1. 1.      Где можно увидеть текст сообщения о том, что использование модальных окон запрещено и что это значит?
  2. 2. Изменение настройки использования модального режима окна в конфигураторе
  3. 3.      Изменение программного кода для открытия модального окна
  4. Правильное решение задачи
  5. Открыть значение модально для интерактивной работы с ним в 1с 8
  6. Практические примеры
  7. Горячие, или быстрые кнопки для пользователя 1С 8.3
  8. Полный список проблемных методов
  9. Очистить служебные сообщения и вывести предупреждающий сигнал
  10. Решения:
  11. Пример кода:
  12. Инструкция по исправлению ошибки для обычных пользователей
  13. Применимость
  14. Отказ от использования модальных окон в платформе 1С:Предприятие 8.3
  15. Общие принципы при переходе на асинхронную модель построения бизнес-логики
  16. Проблемы поддержки модальных окон в среде Интернет
  17. Несколько терминов и определений
  18. Быстрое исправление проблемы
  19. Новые асинхронные средства платформы для взаимодействия с пользователем
  20. Особенности реализации асинхронной бизнес-логики
  21. Обработка прерывания операции от пользователя (нажатие Break)
  22. Типовые сценарии при переходе на асинхронную модель
  23. Вопрос пользователю в команде формы
  24. Вопрос пользователю при закрытии формы

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

Обычно текст «Использование модальных окон в этом режиме запрещено» можно рассматривать как часть ошибки программы при работе в пользовательском интерфейсе на последних версиях платформы 1С.

1С быстро продвигается в Интернете. А WEB, в свою очередь, имеет свои ограничения и прикладные аспекты, требующие уважения. Так в Интернете при работе в браузере надоедливая реклама плотно блокируется во всплывающих окнах. Разработчики браузеров знакомы с этим методом работы с пользователями, поэтому в подавляющем большинстве настроек браузера всплывающие окна по умолчанию отключены. Кроме того, некоторые браузеры вообще не поддерживают всплывающие окна.

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

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

Начиная с версии 8.3.3.721 (06.09.2013), настройка была доступна через конфигуратор «Режим использования». Значение по умолчанию для этого параметра — «Не использовать». Этот шаг информирует разработчиков 1С: Предприятия Прикладные решения о том, что программа не везде будет вести себя корректно и необходимо обеспечить ее корректное поведение не только для работы в интерфейсе 1С, но и в других местах их потенциального использования для открытия окон модальный.

То есть программная ошибка в данном случае является предупреждением. А предупреждения всегда оставляют выбор. Поэтому варианты ответа на контекст «Использование модальных окон в этом режиме запрещено» могут быть следующими:

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

2. Если предполагается использование решения, примененного в WEB-интерфейсе, стоит пересмотреть подход к написанию программного кода с учетом ограничений браузеров, указанных выше.

2. Изменение настройки использования модального режима окна в конфигураторе

Чтобы исключить появление ошибки программы 1С о модальном оконном режиме, если написанная программа не предназначена для использования в WEB, достаточно установить значение «Использовать» или «Использовать с предупреждениями» в поле «Как использовать модальность».

Вы можете найти этот параметр в свойствах конфигурации в разделе «Совместимость» (щелкните правой кнопкой мыши «Корень» конфигурации -> Свойства -> Раздел последних свойств.

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

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

Как пользоваться режимом

Как использовать режим — Использование с предупреждениями

3.      Изменение программного кода для открытия модального окна

Есть несколько способов исключить режим из конфигурации разработки. Между ними:

1. Управление конфигурацией -> Логическое управление -> Расширенное управление -> Режим поиска использования (для ручного исправления);

2. Рефакторинг -> Модальные вызовы -> Найти вызовы модальных модулей (проверьте конкретный модуль на предмет ручного исправления);

3. Конфигурация -> Рефакторинг -> Анализ модальных вызовов конфигурации (проверка всей конфигурации с анализом возможности автоматического исправления).

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

модальные методы и их немодальные аналоги

Правильное решение задачи

Правильный способ решить эту проблему — изменить конфигурацию или внешнюю обработку в соответствии с новыми требованиями.

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

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

Например:

  • Предупреждение — показать предупреждение;
  • Вопрос — ShowQuestion (подробно — вопросы с асинхронным вызовом);
  • Вставить номер — Показать номер вставки.

При этом появился специализированный объект: Описание уведомления.

Пример замены:

Строка = «»; EnterString (String, «Введите строковое значение») Отчет («Вы ввели» + String);

Его необходимо заменить на:

Строка = «»; AlertDescription = NewAlertDescription («TestStringInput», ThisForm); ShowStringInput (AlertDescription, String, «Вставить строковое значение”);

Заодно добавьте аналогичную процедуру на клиенте, которая будет работать при вводе значения пользователем:

& OnClientProcedure TestInputString (ReceivedValue, PassedParameters) ExportInform («Вы ввели» + String); Конец процедуры

Таким же образом открываются формы, которые развиваются внутри конфигурации. Просто замените метод «OpenFormModal» на «OpenForm», указав описание уведомления и новую процедуру, необходимую для него.

Чтобы закрыть доступ к форме, вызываемой открывающейся формой, просто укажите в свойстве «WindowOpening Mode» значение «Заблокировать окно владельца» в свойстве формы»:

окно владельца блока

Если вы только начинаете изучать кодирование в 1С, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — новые видео выкладываются регулярно):

К сожалению, мы не можем физически всех проконсультировать бесплатно, но наша команда будет рада предоставить услуги по внедрению и сопровождению 1С. Более подробно о наших услугах можно узнать на странице «Услуги 1С» или просто позвонить по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Открыть значение модально для интерактивной работы с ним в 1с 8

Открытое значение (48,87);

// откроет элемент каталога с кодом 8

OpenValue (Directories.Nomenclature.FindByCode («8”));

Практические примеры

В качестве практических примеров мы рассмотрим основные приемы работы с блокировкой окон.

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

горячие-клавиши.jpg

Горячие, или быстрые кнопки для пользователя 1С 8.3

Сочетания клавиш для документов

Кнопка по умолчанию (щелкните вместо щелчка) Ctrl + Enter
Выбор поля (альтернатива мышке) F4
Прямое пересечение полей Вкладка
Обратное пересечение полей Shift + Tab

Сочетания клавиш для справочников 1С 8.3

Новый предмет Ins
Новая группа Ctrl + F9
Изменить элемент Shift + Enter
Просмотр элемента или группы Alt + D + R
Копировать элемент или группу F9
Отметить объект / Отменить выбор объекта Принадлежащий
История смысла F5
Найдите в дереве Alt + D + LA
Перейти в другую группу Ctrl + F5
Подчиненный каталог Alt + D + H

Полный список проблемных методов

Модальный метод Немодальный метод
Глобальный контекст
Запрос Показать вопрос
Предупреждение Показать предупреждение
OpenValue Показать значение
Введите дату ShowSendDate
Введите значение ShowEnterValues
EnterString ShowEnterStrings
Введите номер ShowInsertNumbers
Установить внешние компоненты Начинается установка внешних компонентов
Установить расширение Работа с файлами НачатьУстановить расширенияРаботать с файлами
УстановитьExtensionWorksCryptography StartInstallExtensionsWorksCryptography
PlaceFile StartPlaceFile
OpenFormModal OpenForm
DialogEditStandardPeriod
Изменить Показать
КонструкторFormatString
Открыть модальный Показать
ДиалогПрограммаРегулярная работа
Открыть модальный Показать
Диалог выбора персонажа
Выбирать Показать
DialogueSelectColors
Выбирать Показать
Обработка Декодирование Состав Данных
Выберите действие ShowChoiceActions
Список значений
Проверить элементы ShowTelementsLabel
Выбрать объект Показать Выбрать элемент
Управляемый модуль
Выбрать из меню ShowSelectFromMenu
Выбрать из списка ShowSelectFromList
Открыть модальный Открытым

 

Очистить служебные сообщения и вывести предупреждающий сигнал

По индексу = от 1 до 100 циклов

Отчет (Индекс);

Конец цикла;

Уведомление («Удалить все сообщения», 5);

ClearMessage();

Сигнал();

Источник: http://okolokompa.com/katalog/programmistam/1s-predprijatie-8/rabota-s-dialogami-v-1s-8-3-8-2/

Рейтинг (1 оценка, в среднем 5 из 5) Комментарии0Поделиться: Загрузка… Соответствующий контент

Решения:

1. Измените свойство конфигурации

2. Откажитесь от использования таких окон / меню / предупреждений

3. Перепишите другие функции, например, для ошибки из аргумента используйте функцию ShowSelectFromList():

Пример кода:

& OnClientProcedureLoadTypeCelectionStart (элемент, данные выбора, стандартная обработка) StandardProcessing = False; ChoiceList = Item.ChoiceList; ChoiceList.Clear (); ChoiceList.Add («Продажа товаров» в «Получение товаров»); ChoiceList.Add («Входящие товары» в «Продажа товаров»); AdditionalParameters = Новая структура; AlertDescription = New AlertDescription («TypeSelectionNotificationProcessing», ThisForm, AdditionalParameters); ShowChoiceFromList (Описание оповещения, ChoiceList, Item); EndProcedure & OnClientProcedureTypeSelectionNotificationProcessing (ChoiceValue, AdditionalParameters) Export // Процедура обработки уведомления должна быть экспортирована, должна иметь как минимум 2 параметраLoadTypeForm = ChoiceValue; Если ChoiceValue = «Продажа товаров» в «Поступление товаров», то Object.LoadType = 1; В противном случае, если ChoiceValue = «Товары получены» в разделе «Продажа товаров», то Object.LoadType = 2; Else EndIf; Конец процедуры

На новых платформах код сообщения об ошибке может выглядеть так: «Использование синхронных методов на клиенте запрещено» (в примере: для диалогового окна «Выбор файла)

Инструкция по исправлению ошибки для обычных пользователей

Шаг 1. Завершите работу:

Шаг 2. Вернитесь в меню загрузки, чтобы начать установку. Выберите пункт меню «Конфигурация»:

Шаг 3. Открываем «Конфигуратор»: на верхней панели находим кнопку «Конфигурация» и в предложенном списке выбираем меню «Открыть конфигурацию»:

Шаг 4. Ставим курсор на конфигурацию и правой кнопкой мыши вызываем контекстное меню, в котором выбираем пункт «Свойства»:

Шаг 5. Откройте модуль «Свойства»:

Шаг 6. Найдите строку «Как использовать» (внизу списка):

По умолчанию в программе 1С 8.3 установлено «Не использовать». Давайте переведем значение «Не использовать» в значение «Использовать»:

Результат:

Если в 1С 8.3 исчезла ошибка «Использование модальных окон в этом режиме запрещено», можно дальше работать. Обычно это так.

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

Как работать в интерфейсе «Такси», как настроить рабочее место «под себя», настроить панель навигации «Избранное», как выполнять полнотекстовый поиск, приемы работы с журналами, кнопка «выбрать» в документах, перенос ссылки на документы, проверка и другие возможности в новом интерфейсе — все это можно найти в нашем видео:

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

В статье рассматривается асинхронная модель построения бизнес-логики, добавленная платформа «1С: Предприятие» версии 8.3. Предоставленная информация актуальна для текущих версий платформы.

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

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

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

Такое поведение может быть обеспечено, например, следующим кодом:

и на клиенте
Процедура Заполнить элементы (команда)
Answer = Question («Табличная часть будет очищена. Продолжить?», DialogueQuestion mode.YesNo);
Если answer = DialogReturnCode. Да, тогда
// алгоритм заполнения
Конец, если ;
Конец процедуры

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

Кроме того, открытие модальных окон путем вызова метода OpenModal () приводит к приостановке выполнения кода и зависанию интерфейса().

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

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

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

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

Для решения этих проблем следует использовать блочные окна вместо модальных. Для пользователя визуально все выглядит одинаково: окно блокирует интерфейс веб-клиента.

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

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

У корневого элемента конфигурации есть свойство «Режим использования модальности», которое определяет, можно ли открывать модальные окна в конфигурации.

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

С этим значением свойства «Режим использования» разрешены только окна блокировки.

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

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

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

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

Код необходимо разделить на две части:

  • открытие окна замка;
  • управление выбором пользователей.

Фрагмент кода в начале статьи необходимо переписать следующим образом:

и на клиенте
Процедура Заполнить элементы (команда)
Alert = New AlertDescription (, ThisObject);
DialogueQuestion Mode Да Нет);
Конец процедуры
и на клиенте
Процедура (результат, дополнительные параметры) Экспорт
Если Результат = DialogReturnCode. Да, тогда
// алгоритм заполнения
Конец, если ;
Конец процедуры

После запуска процедуры ShowQuestion () система не останавливается, ожидая ответа пользователя, выполнение кода продолжается.

Пользователь сможет сделать выбор только после завершения всей процедуры. Это вызовет процедуру экспорта FillProductsQuestionCompletion (). Мы передали его имя конструктору объекта Alert Description.

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

В приведенном выше примере вызываемая процедура находится в модуле управляемой формы, поэтому мы передали thisObject в параметре.

Рассмотрим вызов процедуры, расположенной в общем модуле. Для этого добавьте новый модуль обработки общих предупреждений, установите флаг «Клиент (управляемое приложение)» и оставьте флаг «Глобальные» снятым. Вставьте процедуру FillProductsQuestionCompletion () в этот модуль().

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

и на клиенте
Процедура Заполнить элементы (команда)
Предупреждение = Новое описание предупреждения («FillProductsQuestionCompletion” ,
Обработка уведомлений);
QuestionText = «Раздел таблицы будет удален. Продолжить?” ;
ShowQuestion (Notifica, TextQuestion, DialogueQuestion Mode. Да Нет);
Конец процедуры

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

Для передачи контекста (вспомогательных данных, некоторых параметров, значений переменных) из процедуры, открывающей модальное окно, в процедуру, вызываемую при его закрытии, предоставляется необязательный третий параметр конструктора объекта DescriptionNotifications — AdditionalParameters.

Этот объект (любого типа) будет передан процедуре, описанной в AlertDescription, в качестве последнего параметра.

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

и на клиенте
Процедура Заполнить элементы (команда)
Параметр1 = 0 ;
Параметр2 = 0 ;
ListParameters = Новая структура («Параметр1, Параметр2 ″, Параметр1, Параметр2);
Предупреждение = Описание нового предупреждения («FillProductsQuestionCompletion», ThisObject ,
ListParameters);
ShowQuestion (Предупреждение, «Раздел таблицы будет очищен. Продолжить?” ,
DialogueQuestion Mode Да Нет);
Конец процедуры
и на клиенте
Процедура FillProductsFinishing Question (результат, дополнительные параметры) Экспорт
Если Результат = DialogReturnCode. Да, тогда
// анализируем AdditionalParameters.Parameter1
// анализируем AdditionalParameters.Parameter2
Конец, если ;
Конец процедуры

Если необходимо передать только одно значение, структуру нельзя использовать, но назначьте это значение параметру AdditionalParameters конструктора объекта DescriptionAlerts.

Давайте рассмотрим несколько примеров использования блочных окон.

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

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

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

Таким образом, похоже, что этот код разделен на две процедуры:

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

Проблемы поддержки модальных окон в среде Интернет

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

Эти окна не входят в стандарт веб-разработки, поэтому они поддерживаются не всеми браузерами, с помощью которых пользователь обращается к приложениям 1С».

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

Эти инструменты добавлены в платформу 1С: Предприятие в версии 8.3.3.

Несколько терминов и определений

Далее в статье будут использоваться следующие термины:

  • Модальное окно — это окно, которое блокирует весь интерфейс приложения, а выполнение кода останавливается до тех пор, пока пользователь не получит ответ. Например, окно модальной формы.
  • Модальный метод: метод глобального контекста или объекта платформы при выполнении открывает модальное окно. Например, методы Question (), OpenModal().
  • Окно блокировки: окно, которое блокирует весь интерфейс или его часть, но выполнение кода не останавливается. Например, форма, которая блокирует владельца.

Быстрое исправление проблемы

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

Для этого войдите в систему в режиме, откройте конфигурацию:

В открытой конфигурации вызовите контекстное меню, щелкнув правой кнопкой мыши корень конфигурации и выбрав «Свойства»:

Откроются свойства конфигурации, где в подвале есть интересующее нас свойство — «Использовать режим», выбираем режим «Использовать»:

Затем сохраните и примените изменения, нажав клавишу «F7».

Новые асинхронные средства платформы для взаимодействия с пользователем

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

С этой целью в платформу добавлен новый тип объекта — Alert Description.

У этого объекта есть конструктор со следующими параметрами:

  • Имя процедуры — указывает имя процедуры диспетчера предупреждений, которая будет выполняться после получения ответа от пользователя,
  • Модуль — указывает, в каком модуле находится эта процедура. Этот параметр может быть следующих типов:
    • ManagedForm — процедура находится в модуле управляемой формы,
    • CommonModule: процедура находится в неглобальном общем клиентском модуле,
    • CommandInterface Command — процедура находится в командном модуле.

Чтобы получить значение формы для вышеуказанных объектов, было добавлено общее свойство ThisObject.

  • AdditionalParameters — это значение любого типа, которое будет передано в процедуру обработчика уведомлений при вызове.

Когда система вызывает указанную процедуру, результат выбора пользователя и значение AdditionalParameters передаются ей через параметры. В некоторых случаях результат выбора может отсутствовать (метод ShowWarning ()) или передаваться в нескольких параметрах (метод StartFilePlace()).

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

Группа этих методов различается следующим образом:

  • Их имена начинаются со слова Show или Start, например ShowQuestion () вместо Question (), StartFilePlace () вместо PlaceFile () и так далее,
  • Первый параметр — это объект Alert Description, который указывает процедуру модуля, которая будет выполняться после того, как пользователь сделает выбор в окне блока,
  • Они не возвращают никаких значений, но результат выбора пользователя будет передан в процедуру модуля, описанную объектом Alert Description.

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

  • Добавлено свойство модуля DescriptionCloseNotification, которое указывает процедуру модуля, которая будет вызываться при закрытии. Вы также можете установить это значение с помощью нового параметра метода OpenForm(),
  • Добавлен вариант открытия окна модуля — LockAllInterface, при использовании которого открытый модуль блокирует все окна, а не только родительское окно.

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

Особенности реализации асинхронной бизнес-логики

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

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

Обработка прерывания операции от пользователя (нажатие Break)

CiaoTrue Cycle

// если пользователь нажимает break, чтобы остановить выполнение кода

// не только цикл будет прерван, но и весь поток кода

HandleUserInterrupt();

Конец цикла;

Типовые сценарии при переходе на асинхронную модель

Вопрос пользователю в команде формы

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

Копирование в буфер обмена и процедуру OnClient AddCharacteristic (Command) // Выберите тип featureCharacteristicsType = OpenFormModally («ChartTypeCharacteristics.CharacteristicsTypes.ChoiceForm»); IfCharacteristicType = UndefinedThenReturn; EndIf; // Проверяем наличие. Если DescriptionCharacteristics ()) TypeCharacter)> 0, то Предупреждение (НStr («ru = ‘Функция уже существует!'», «Ru»)); Возвращение; EndIf; // Добавляем тип функции в форму AddCharacteristicOnServer (Characteristic View); Конец процедуры

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

Скопировать в буфер обмена

и на клиенте
Процедура добавления компонентов (команда)
// Выбираем тип объекта
Уведомление = Описание нового уведомления(
«AddCharacteristicCompletion»,
Этот объект);
OpenForm («PlanTypeCharacteristics .TypesCharacteristics .SelectionForm»,
,,,,, Предупреждение, FormWindowOpeningMode.BlockVseInterface);
Конец процедуры

и на клиенте
AddCharacteristicCompletion (ViewCharacteristics, Parameters) Процедура экспорта
Если тип объекта = undefined, тогда
Возвращение;
Конец, если;

// Проверять наличие
Если DescriptionCharacteristics.FindStrings(
Новая структура («TypeCharacteristics», TypeCharacteristics)). Количество ()> 0 Тогда
ShowWarning (, НStr («ru = ‘Функция уже существует!'», «Ru»));
Возвращение;
Конец, если;

// Добавляем тип объекта в форму
AddCharacteristicOnServer (ViewCharacteristics);
Конец процедуры

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

Вопрос пользователю при закрытии формы

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

В этих случаях доступен следующий алгоритм:

  1. Создайте переменную в форме, которая будет хранить ответ пользователя при закрытии,
  2. Если ответ еще не получен (переменная содержит Undefined), то в обработчике BeforeClose нужно показать пользователю окно выбора, например, с помощью метода ShowQuestion () и перестать закрывать форму, установив Reject = Правда,
  3. В процедуре обработчика выбора установите результат выбора в переменную и вызовите метод Close () формы,
  4. Если переменная содержит значение, это означает, что процесс закрытия, запущенный на предыдущем шаге, выполняется, результат выбора пользователя уже получен и обработчик BeforeClose может использовать его значение.

Ниже приведен пример кода, реализующего этот алгоритм:

Скопируйте в буфер обмена и перейдите к клиенту. Ответить перед закрытием; & AtClient Процедура BeforeClose (сбой, стандартная обработка) Если AnswerBeforeClose <> TrueThen Failure = True; Alert = New AlertDescription («BeforeCloseCompletion», ThisObject); ShowQuestion (Уведомление, «Закрыть?», DialogueQuestion Mode.YesNo); EndIfEndProcedure и процедура OnClient BeforeClosingCompletion (результат, параметры) ExportIf Result = DialogueReturnCode.Yes Then AnswerBeforeClose = True; Закрывать (); EndIf; Конец процедуры

Источники

  • https://nn.koderline.ru/expert/programming/article-ispolzovanie-modalnykh-okon-v-dannom-rezhime-zapreshcheno/
  • https://skolkogramm.ru/info/pochemu-voznikaet-oshibka-ispolzovanie-modalnyh-okon-v-dannom-rezhime-zapreshheno
  • https://helpinwork.ru/1s-ispolzovanie-modalnyh-okon-zapreshcheno-chto-delat-esli/
  • https://its.1c.eu/db/content/metod8dev/src/developers/platform/metod/i8105272.htm
  • https://sandyna.ru/socialnye-seti/otkrytie-modalnyh-okon-v-dannom-rezhime-zapreshcheno-chto-delat-esli.html

Оцените статью