Вопрос в 1С 8.3 — отказываемся от модальности в управляемых формах с помощью асинхронных вызовов
Когда появилась возможность публиковать 1С в интернете или устанавливать платформу 1С 8.3 на мобильные приложения, возникла проблема с модальными окнами.
Дело в том, что в мобильных приложениях (web интерфейсах) они не открываются вообще, а на настольных компьютерах в браузере они воспринимаются как всплывающие окна, и чаще всего заблокированы пользователем.
Какое-то время фирма 1С боролась с таким положением вещей и даже разработала сложный и ненадежный механизм для модальных окон. Но, например, на iPhone он до сих пор не работает (из источников на сайте 1С).
В связи с этим, фирма 1С решила вообще отказаться от модальных окон. Точнее, пока оставили такую возможность, но и появилась настройка, запрещающая полностью использовать модальность. В 1С 8.3 появилась возможность производить асинхронный вызов модальных окон.
Эту настройку можно найти в свойствах конфигурации.
Заходим в Конфигуратор, нажимаем правой кнопкой мышки на самую первую строчку и выбираем «Свойства». У кого все свойства не уместились на экране, прокручиваем до самого низа:
На данный момент существует три режима применения модальных окон:
- Использовать — позволяет использовать модальные окна в полной мере;
- Использовать с предупреждением — так же позволит появиться модальному окну, но выйдет предупреждение, что модальные окна использовать запрещено!;
- Не использовать — полностью исключает использование модальных окон.
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Теперь разберемся, как оформить новый функционал программно.
Задаем вопрос в 1С Предприятие 8.3
Начну с того, что нужно будет делать две процедуры. Первая, где задается сам вопрос, вторая, где он обрабатывается.
Я сразу напишу пример, а в комментариях будут пояснения. Так проще и наглядней:
&НаКлиенте Процедура ЗадатьВопрос(Команда) Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопрос", ЭтотОбъект); // Прописываем название процедуры-обработчика. ПоказатьВопрос(Оповещение, "Сегодня хорошая погода?", // вместо привычного "Вопрос", теперь "ПоказатьВопрос" РежимДиалогаВопрос.ДаНетОтмена, 0, // задержка (секунды). необязательно КодВозвратаДиалога.Да, // задает кнопку по умолчанию. необязательно "Демонстрируем немодальные окна." // устанавливаем заголовок. необязательно ); КонецПроцедуры &НаКлиенте Процедура ПослеОтветаНаВопрос(Результат, Параметры) Экспорт // здесь, думаю, комментировать нечего Если Результат = КодВозвратаДиалога.Да Тогда Сообщить("Приятного отдыха на свежем воздухе!"); Иначе Сообщить("Оставайтесь дома!"); КонецЕсли; КонецПроцедуры
На этом все, приятного программирования!
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Мила:
Добрый вечер. Подскажите пожалуйста нет ли у вас готовой конфигурации по созданию тестирования людей для примера, написанной на управляемых формах?
Кирилл:
Здравствуйте!
Нет, на управляемых формах, к сожалению, нет.
iKai:
Если мне надо вставить вопрос в процедуру ПередЗаписью то куда передавать оповещение? Писать свою процедуру которая запишет (проведет) и закроет окно формы как-то не айс.
Pavel:
ПередЗаписью есть и в формах объектов, там доступен клиентский контекст и можно отправлять вопросы и оповещения.
Татьяна:
Здравствуйте! Только начинаем работать в 1с комплексная автоматизация 2.0. При создании штатного расписания вводим оклад, районный коэффициент рассчитывается автоматически, а Северная надбавка не считается. Даже если внести сумму северной надбавки вручную, она не включается в фонд оплаты труда. В настройках учёта зарплаты поставили галочку «включать в фот», территориальные условия тоже занесли. В чем может быть дело? Заранее спасибо за ответ.
Vitalas:
Зачем две процедуры на клиенте?!
&НаКлиенте
Процедура ЗадатьВопрос(Команда)
Ответ = Вопрос(«Сегодня хорошая погода?»,РежимДиалогаВопрос.ДаНет,0,КодВозвратаДиалога.Да,»Демонстрируем немодальные окна»);
Если Ответ = КодВозвратаДиалога.Да Тогда
Сообщить(«Приятного отдыха на свежем воздухе!»);
иначе
Сообщить(«Оставайтесь дома!»);
КонецЕсли;
КонецПроцедуры
VoVovanych:
Вопрос открывает МОДАЛЬНОЕ ОКНО, а в примере описано решение БЕЗ МОДАЛЬНЫХ окон. И пояснение почему модальные использовать не надо
Алексей:
Скажите, а почему вторая процедура должна быть Экспортная ?
Евгений:
по причине:
Не найден экспортируемый метод: ПослеОтветаНаВопрос
Аноним:
Нужен показатьвопрос 1с 8.3 примеры
DSP:
А как при ответе, скажем, «да», продолжить выполнение кода. Например, мы задаем вопрос в поцедуре ПередЗаписью() и если юзер уверен в своих действиях, продолжаем штатную запись?
Сергей:
не получится так. Пока вопрос показывается на экране, процедура ПередЗаписью выполняется дальше, не ожидая ответа