[Новое в платформе] Как правильно закрывать формы и приложение в платформе 1С:Предприятие 8.3.8 (и старше)
Эта статья для программистов 1С – в ней разберем новое ограничение платформы при разработке кода.
При закрытии формы обработки или при закрытии всего приложения достаточно часто используется дополнительный диалог.
В основной массе диалог представляет собой вопрос для подтверждения операции закрытия, но бывают более сложные случаи. Например, при закрытии формы подбора товаров можно запросить у пользователя разрешение на перенос подобранных товаров в документ.
Начиная с версии 8.3.8 разработчики платформы изменили подход, которому должны следовать программисты при решении подобного рода задач.
Коротко о главном…
Сначала коротко обозначим суть изменений. Начиная с версии платформы 8.3.8 необходимо выделять 2 сценария закрытия формы:
Как это повлияло на объем кода?
Кроме этого, изменения платформы серьезно затронули логику программного кода. Теперь в процессе закрытия приложения практически невозможно организовать произвольный сценарий из-за введенных ограничений. В чем суть ограничений?
Фактически теперь в процессе закрытия приложения можно указать только текст вопроса, который увидит пользователь.
Скорее всего, у вас уже возник вопрос: к чему же все эти изменения?
Приведем цитату разработчиков платформы из файла V8Update.htm, содержащего перечень изменений релизов платформы:
Теперь подробнее разъясним суть проблемы.
Раньше при выходе из системы, когда возникала задача открытия диалогов, приходилось писать программный код отдельно для веб-клиента и отдельно для других клиентов. Связано это с тем, что все современные веб-браузеры, если страница не хочет, чтобы ее закрывали, выводят свой диалог. Примеры этих диалогов вы сможете увидеть ниже, в той части статьи, где подробно рассматривается поведение веб-браузеров.
Что же сделали разработчики платформы? Теперь платформа ведет себя так же, как и веб-браузеры: если приложение не хочет, чтобы его закрывали, тогда выводится платформенный диалог. В результате нет необходимости писать код под разные клиенты, так как работает он одинаково, но платой за такую универсальность являются описанные выше ограничения.
При этом даже если мы не предполагаем использование веб-клиента в нашей базе, то это ничего не меняет. Ограничения все равно действуют. В некоторых случаях это может быть неудобным, но с этим придется мириться. В частности, теперь открытие дополнительных обработок при закрытии приложения может вызвать затруднение. Решение подобной задачи мы рассмотрим в конце статьи.
На этом завершаем краткий обзор изменений и переходим к подробному разбору.
Вопрос при закрытии формы
Изменения в коде будем рассматривать в сравнении с тем, как это делалось в предыдущих версиях платформы.
Ранее, когда в процессе закрытия формы возникала необходимость задать вопрос пользователю, использовался следующий программный код:
Если данный код попытаться выполнить на платформе 8.3.8 с отключенным режимом совместимости, тогда возникнет ошибка:
Теперь, начиная с версии платформы 8.3.8, необходимо выделять 2 сценария закрытия формы. Первый вариант – когда пользователь закрывает форму самостоятельно и второй вариант – когда форма закрывается в результате закрытия всего приложения.
Таким образом, код требует модернизации:
Как вы можете заметить, у обработчика ПередЗакрытием появились 2 новых параметра:
Теперь подробнее об изменении в коде. Как вы видите, появилась новая ветка алгоритма, которая выполняется в процессе завершения работы системы.
Обращаем ваше внимание, что никаких диалогов в этом случае не открывается, так как они запрещены. В коде устанавливается только текст предупреждения и обязательно устанавливается флаг Отказ. Как уже отмечалось выше, нельзя программным способом отменить процесс закрытия приложения, поэтому флаг Отказ работает иначе, чем при обычном закрытии формы. Установка флага указывает необходимость отображения предупреждения для пользователя, которое хранится в параметре ТекстПредупреждения.
В толстом и тонком клиенте окно предупреждения будет следующим:
Стоит отметить, что если флаг Отказ сброшен, а ТекстПредупреждения заполнен, тогда система проигнорирует текст и сообщение отображено не будет. Если же флаг Отказ установлен, а параметр ТекстПредупреждения не заполнен, тогда будет отображено системное предупреждение:
Также следует отметить, что количество подобных диалогов может быть любым – по числу закрываемых форм. Кроме того, аналогичный диалог может формироваться в обработчике ПередЗавершениемРаботыСистемы модуля управляемого приложения (этот вариант будет рассмотрен ниже). В итоге, если пользователь хотя бы в одном диалоге нажмет кнопку Продолжить работу, процесс завершения работы будет отменен и на экране останется та форма, в которой была нажата кнопка.
В веб-клиенте диалог будет выглядеть иначе. В веб-браузерах Mozilla Firefox и Google Chrome будет отображен только текст, заданный разработчиками веб-браузера и не будет отображаться текст, установленный в обработчиках событий системы.
Пример диалога для Mozilla Firefox:
Пример диалога для Google Chrome:
В веб-браузере Internet Explorer диалог будет выглядеть иначе. Будет отображен единый диалог, содержащий все сообщения, установленные в обработчиках формы и модуле управляемого приложения:
Стоит отметить, что если в свойствах конфигурации включен режим совместимости с 8.3.7 и более ранними версиями, то данный механизм будет работать в старом варианте.
Таким образом, при отключении режима совместимости следует проанализировать и скорректировать программный код по закрытию форм, так как если код содержит обращения к серверу или код по открытию дополнительных форм, то это будет приводить к ошибкам в процессе завершения работы системы.
Также можно сформулировать небольшую рекомендацию. Если в коде обработчика формы ПередЗакрытием, исполняемом в процессе завершения работы системы, необходимо получать дополнительные данные с сервера, то их следует получить заранее и хранить в данных формы.
Вопрос при закрытии приложения
В данном случае мы не будем приводить программный код, который использовался в предыдущих версиях для отображения вопроса при выходе из системы, так как он достаточно громоздкий. Приведем лишь новый код модуля управляемого приложения, который упростился до минимума:
Теперь для отображения вопроса при выходе из системы достаточно установить текст предупреждения и флаг Отказ равным Истина.
Опять же, в коде запрещены обращения к серверу и открытия дополнительных форм, а также поведение в веб-браузере будет аналогичным тому, что уже было описано выше.
Открытие формы обработки при закрытии приложения
В завершении статьи хотелось бы продемонстрировать прием, который позволяет открыть форму некоторой обработки в процессе завершения работы системы.
Наша задача заключается в том, чтобы отменить процесс закрытия приложения и открыть форму некоторой обработки. Проблема в том, что отменить процесс закрытия или открыть форму мы не можем, так как это запрещено.
Поэтому, для того чтобы отменить закрытие приложения, потребуется использовать предупреждение, а для того чтобы открыть форму, используем обработчик ожидания, который выполнится только в том случае, если пользователь откажется от завершения работы системы.
Используя инструкции препроцессора, мы разделили сценарии закрытия в веб-клиенте и в других видах клиентов. В случае веб-клиента мы не открываем обработку, так как практически во всех веб-браузерах текст нашего предупреждения не отображается. В других видах клиентов будет отображен наш диалог:
Если пользователь нажмет кнопку Продолжить работу, тогда сработает обработчик ожидания и будет открыта форма обработки.
Заключение
Платформа продолжает свое уверенное движение в сторону веб-браузеров, но на этот раз разработчики наложили ограничения на программный код, исполняемый в толстом и тонком клиентах. С одной стороны, это упростило и унифицировало код при закрытии форм, так как теперь нет необходимости писать несколько вариантов кода под каждый клиент, с другой стороны, это ограничило нас в возможностях.
Чтобы освоить разработку интерфейсов и форм в 1С:Предприятие 8.3
на профессиональном уровне, рекомендуем записаться на курс:
Поддержка – 3 месяца. Объем курса – 49 учебных часов.
Об авторе
Автор статьи – Сергей Калинкин
Директор ЦСО «Центр профессионального программирования», г. Казань
PDF-версия статьи для участников группы ВКонтакте
Если Вы еще не вступили в нее – сделайте это сейчас, и в блоке ниже (на этой странице) появятся ссылки на скачивание материалов.
Правильный метод задать вопрос о закрытии формы
При закрытии формы обработки требуется задавать пользователю вопрос, действительно ли нужно закрыть форму. Сейчас это реализовано через обработчик события ПередЗакрытием() и реквизит формы типа Булево – пользователь пробует закрыть форму, обработчик смотрит в переменную, и если она Ложь – отменяет закрытие и задает пользователю вопрос. Если пользователь дает положительный ответ, реквизит формы устанавливается в Истина и форма принудительно закрывается через Закрыть(); в этот раз ПередЗакрытием() видит, что реквизит – Истина, и не блокирует закрытие.
Проблема в том, что эта схема мешает закрытию приложения, если пользователь закрывает не форму обработки отдельно, а все приложение целиком. При этом вызывается то же самое событие ПередЗакрытием(), которое, фактически, всегда отказывается закрывать форму. В итоге форма будет, конечно, закрыта, если пользователь положительно ответит на вопрос, но приложение уже не закроется, т.к. при первом прохождении через ПередЗакрытием() форма отказалась закрываться.
Стандартное поведение форм (например, при изменении данных справочника) более правильное – в них положительный ответ на вопрос о сохранении измененных данных приводит к закрытию приложения. Как добиться такого эффекта самостоятельно?
(5) RocKeR_13, к сожалению, в этой задаче модальные варианты неприемлемы.
(6) dj_serega, оно действительно не критично, но глаз цепляется
(4) SerLeon, (7) herfis – понял. Спасибо!
По поводу модуля управляемого приложения нужно сделать ещё одно замечание. Возможно, вы захотите организовать немодальный диалог с пользователем в обработчике ПередНачаломРаботыСистемы. Так, чтобы до момента ответа пользователя не открывалось главное окно приложения. К сожалению, на момент написания статьи, такой возможности нет. И в этом случае вам придётся выбрать другую логику работы прикладного решения.
Например, в конфигурации есть форма, перед закрытием которой также задаётся вопрос пользователю в немодальном диалоге. Допустим, пользователь модифицировал данные в этой форме и, не сохраняя их, пытается закрыть всё приложение. В результате он ответит что-то в диалоге перед закрытием формы, форма закроется, но приложение останется открытым. Так происходит потому, что в немодальном диалоге перед закрытием формы сначала отменяется стандартная последовательность действий системы (см. пример). А это, в том числе, отменяет и закрытие самого приложения.
Получается, что пока никак не сделать. Хотя может я не в курсе.
Ошибка в ващем сообщеении:
ОписаниеОповещения = Новый ОписаниеОповещения(«ПередЗакрытиемЗавершение», ЭтотОбъект);
// Инициализируется «ОписаниеОповещения «
ПоказатьВопрос(ОписаниеОповещенияОЗавершении, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
// Потом используется»ОписаниеОповещенияОЗавершении»
Сейчас добавили параметр:
Как в форме выбора при закрытии формы отказаться от значения
Так ты ж и получаешь просто выбранный элемент. Вместо этого нужно почитать про возвращаемое значение для модального окна в синтакс-помощнике:
И переделать код на
Вот нашел ранее что писал, думаю этот алгоритм можно и тут применить.
Уже поднималась эта тема.
Текстовое поле имеет тип ДокументСсылка. Справа кнопка выбора позволяет выбрать нужный документ. Если ввести в поле текст значения реквизита. То выдается ошибка:
«В поле введены некорректные данные.Отменить ввод?»
Так и должно быть. С этим все понятно.
Как я хочу сделать:
При окончании ввода по введенному тексту найти запросом нужный документ.
Далее присвоить этому текстовому полю ссылку на найденный документ.
Все работает. Ввожу текст. Документ находится. Поле заполняется:
Док номер такой-то от таког-то числа
Вот только ошибка эта все равно вылазиит.
Отключал
СтандартнаяОбработка = Ложь
В этом случае вообще ничего не заполняется.
——
Если надо кому нашел решение.
Да, всё верно в случае если Ставим СтандартнаяОбработка = Ложь ничего не заполняется. Именно это нам и надо.
1. В вышеописанной процедуре присваиваем значение Глобальной (описанной в модуле этой форме) Переменной.
Например описали:
Перем НайденныйДок;
И присваиваем ей например Номер найденного в запросе документа
2. В процедуре при изменении пишем
Процедура ТабличнаяЧастьДоверенностьПриИзменении(Элемент)
ИщемДокумент=Документы.Доверенность.НайтиПоНомеру(НайденныйДок,ЭтотОбъект.Дата);
Если ИщемДокумент=Документы.Доверенность.ПустаяСсылка() Тогда
Сообщить(«К сожалению не найдена доверенность под Номером «+НайденныйДок);
Иначе
Элемент.Значение=Документы.Доверенность.НайтиПоНомеру(НайденныйДок,ЭтотОбъект.Дата);
КонецЕсли;
КонецПроцедуры;
АйТиБложик
Маленький IT блог с характером 1С.
Для чего свойство «Сохраняемые данные» у реквизита формы
Допустим, стоит задача, необходимо в справочнике хранить дорожную карту в виде графической схемы и её описание в виде табличного документа. Для решения этой задачи необходимо создать в справочнике два реквизита с типом ХранилищеЗначений. В форме элемента справочника создать реквизиты с типами ГрафическаяСхема и ТабличныйДокумент. При открытии формы данные из реквизитов объекта загружаются в реквизиты формы, при записи выполняется обратная операция. Теперь давайте разберемся, нужно ли устанавливать для реквизитов формы свойство «Сохраняемые данные» или нет?
Для эксперимента создадим два реквизита формы с разным состоянием свойства «Сохраняемые данные» (см. рисунок 1):
Рисунок 1. Реквизиты формы |
Рисунок 2. Признак модифицированности у формы |
Формы с установленным признаком модифицированности перед закрытием предупреждают пользователя о возможности потери изменений в данных и предлагают сохранить изменения (см. рисунок 3).
Рисунок 3. Вопрос о сохранении изменений |
Согласитесь, не очень приятно оказаться в ситуации, когда вы изменили данные, которые сохраняются в базу данных, и случайно закрыли форму. Если говорить в контексте задачи, то редактирование обоих реквизитов должно приводить к установке признака модифицированности у формы, что бы изменения в их данных не потерять при закрытии формы без сохранения.
Установим для пользователя на уровне прав только просмотр элементов справочника (см. рисунок 4).
Рисунок 4. Право только просмотра справочника |
В режиме 1С:Предприятие реквизит ДорожнаяКарта не доступен для редактирования в отличии от реквизита ОписаниеДорожнойКарты. Если говорить в контексте задачи, то оба реквизита формы не должны быть доступны для редактирования, так как нет смысла пользователю разрешать редактировать реквизиты формы, если элемент справочника доступен только для просмотра.
Теперь на уровне формы установим только просмотр элементов справочника, для этого в форме элемента в обработчике ПриСозданииНаСервере установим свойство ТолькоПросмотр в значение Истина.
В режиме 1С:Предприятие реквизит ДорожнаяКарта так же не доступен для редактирования в отличии от реквизита ОписаниеДорожнойКарты. Если говорить в контексте задачи, то оба реквизита формы должны быть доступны только для просмотра, так как форма, открытая только для просмотра, не позволит сохранить изменения в их данных.
Свойство «Сохраняемые данные» у реквизита формы следует устанавливать, если его данные сохраняются в базу данных. В рамках нашей задачи нужно для обоих реквизитов формы установить свойство «Сохраняемые данные».
Реквизит с установленным свойством «Сохраняемые данные»:
1С закрыть форму без сохранения
Модифицированность (Modified)
Использование: Чтение и запись.
Описание: Тип: Булево. Признак изменения (модифицированности) данных в форме.
Модифицированность отображается символом (*) в заголовке окна формы.
Истина — изменена.
Похожие FAQ
Еще в этой же категории
Заполнение списка значений в элементе поле выбора на форме 10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип — Произвольный, Использование — Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Как установить параметр динамического списка? 9
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Как обновить динамический список или реквизит на форме клиента? 7
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Форма
Программное создание таблицы значений с условным оформлением 6
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Посмотреть все в категории Работа с Формой (Диалог) и её элементами
Модифицированность (Modified)
Использование: Чтение и запись.
Описание: Тип: Булево. Признак изменения (модифицированности) данных в форме.
Модифицированность отображается символом (*) в заголовке окна формы.
Истина — изменена.
Похожие FAQ
Еще в этой же категории
Заполнение списка значений в элементе поле выбора на форме 10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип — Произвольный, Использование — Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Как установить параметр динамического списка? 9
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Как обновить динамический список или реквизит на форме клиента? 7
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Форма
Программное создание таблицы значений с условным оформлением 6
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Посмотреть все в категории Работа с Формой (Диалог) и её элементами
Эта статья для программистов 1С – в ней разберем новое ограничение платформы при разработке кода.
При закрытии формы обработки или при закрытии всего приложения достаточно часто используется дополнительный диалог.
В основной массе диалог представляет собой вопрос для подтверждения операции закрытия, но бывают более сложные случаи. Например, при закрытии формы подбора товаров можно запросить у пользователя разрешение на перенос подобранных товаров в документ.
Начиная с версии 8.3.8 разработчики платформы изменили подход, которому должны следовать программисты при решении подобного рода задач.
Коротко о главном…
Сначала коротко обозначим суть изменений. Начиная с версии платформы 8.3.8 необходимо выделять 2 сценария закрытия формы:
Как это повлияло на объем кода?
Кроме этого, изменения платформы серьезно затронули логику программного кода. Теперь в процессе закрытия приложения практически невозможно организовать произвольный сценарий из-за введенных ограничений. В чем суть ограничений?
Фактически теперь в процессе закрытия приложения можно указать только текст вопроса, который увидит пользователь.
Скорее всего, у вас уже возник вопрос: к чему же все эти изменения?
Приведем цитату разработчиков платформы из файла V8Update.htm, содержащего перечень изменений релизов платформы:
Теперь подробнее разъясним суть проблемы.
Раньше при выходе из системы, когда возникала задача открытия диалогов, приходилось писать программный код отдельно для веб-клиента и отдельно для других клиентов. Связано это с тем, что все современные веб-браузеры, если страница не хочет, чтобы ее закрывали, выводят свой диалог. Примеры этих диалогов вы сможете увидеть ниже, в той части статьи, где подробно рассматривается поведение веб-браузеров.
Что же сделали разработчики платформы? Теперь платформа ведет себя так же, как и веб-браузеры: если приложение не хочет, чтобы его закрывали, тогда выводится платформенный диалог. В результате нет необходимости писать код под разные клиенты, так как работает он одинаково, но платой за такую универсальность являются описанные выше ограничения.
При этом даже если мы не предполагаем использование веб-клиента в нашей базе, то это ничего не меняет. Ограничения все равно действуют. В некоторых случаях это может быть неудобным, но с этим придется мириться. В частности, теперь открытие дополнительных обработок при закрытии приложения может вызвать затруднение. Решение подобной задачи мы рассмотрим в конце статьи.
На этом завершаем краткий обзор изменений и переходим к подробному разбору.
Вопрос при закрытии формы
Изменения в коде будем рассматривать в сравнении с тем, как это делалось в предыдущих версиях платформы.
Ранее, когда в процессе закрытия формы возникала необходимость задать вопрос пользователю, использовался следующий программный код:
Если данный код попытаться выполнить на платформе 8.3.8 с отключенным режимом совместимости, тогда возникнет ошибка:
Теперь, начиная с версии платформы 8.3.8, необходимо выделять 2 сценария закрытия формы. Первый вариант – когда пользователь закрывает форму самостоятельно и второй вариант – когда форма закрывается в результате закрытия всего приложения.
Таким образом, код требует модернизации:
Как вы можете заметить, у обработчика ПередЗакрытием появились 2 новых параметра:
Теперь подробнее об изменении в коде. Как вы видите, появилась новая ветка алгоритма, которая выполняется в процессе завершения работы системы.
Обращаем ваше внимание, что никаких диалогов в этом случае не открывается, так как они запрещены. В коде устанавливается только текст предупреждения и обязательно устанавливается флаг Отказ. Как уже отмечалось выше, нельзя программным способом отменить процесс закрытия приложения, поэтому флаг Отказ работает иначе, чем при обычном закрытии формы. Установка флага указывает необходимость отображения предупреждения для пользователя, которое хранится в параметре ТекстПредупреждения.
В толстом и тонком клиенте окно предупреждения будет следующим:
Стоит отметить, что если флаг Отказ сброшен, а ТекстПредупреждения заполнен, тогда система проигнорирует текст и сообщение отображено не будет. Если же флаг Отказ установлен, а параметр ТекстПредупреждения не заполнен, тогда будет отображено системное предупреждение:
Также следует отметить, что количество подобных диалогов может быть любым – по числу закрываемых форм. Кроме того, аналогичный диалог может формироваться в обработчике ПередЗавершениемРаботыСистемы модуля управляемого приложения (этот вариант будет рассмотрен ниже). В итоге, если пользователь хотя бы в одном диалоге нажмет кнопку Продолжить работу, процесс завершения работы будет отменен и на экране останется та форма, в которой была нажата кнопка.
В веб-клиенте диалог будет выглядеть иначе. В веб-браузерах Mozilla Firefox и Google Chrome будет отображен только текст, заданный разработчиками веб-браузера и не будет отображаться текст, установленный в обработчиках событий системы.
Пример диалога для Mozilla Firefox:
Пример диалога для Google Chrome:
В веб-браузере Internet Explorer диалог будет выглядеть иначе. Будет отображен единый диалог, содержащий все сообщения, установленные в обработчиках формы и модуле управляемого приложения:
Стоит отметить, что если в свойствах конфигурации включен режим совместимости с 8.3.7 и более ранними версиями, то данный механизм будет работать в старом варианте.
Таким образом, при отключении режима совместимости следует проанализировать и скорректировать программный код по закрытию форм, так как если код содержит обращения к серверу или код по открытию дополнительных форм, то это будет приводить к ошибкам в процессе завершения работы системы.
Также можно сформулировать небольшую рекомендацию. Если в коде обработчика формы ПередЗакрытием, исполняемом в процессе завершения работы системы, необходимо получать дополнительные данные с сервера, то их следует получить заранее и хранить в данных формы.
Вопрос при закрытии приложения
В данном случае мы не будем приводить программный код, который использовался в предыдущих версиях для отображения вопроса при выходе из системы, так как он достаточно громоздкий. Приведем лишь новый код модуля управляемого приложения, который упростился до минимума:
Теперь для отображения вопроса при выходе из системы достаточно установить текст предупреждения и флаг Отказ равным Истина.
Опять же, в коде запрещены обращения к серверу и открытия дополнительных форм, а также поведение в веб-браузере будет аналогичным тому, что уже было описано выше.
Открытие формы обработки при закрытии приложения
В завершении статьи хотелось бы продемонстрировать прием, который позволяет открыть форму некоторой обработки в процессе завершения работы системы.
Наша задача заключается в том, чтобы отменить процесс закрытия приложения и открыть форму некоторой обработки. Проблема в том, что отменить процесс закрытия или открыть форму мы не можем, так как это запрещено.
Поэтому, для того чтобы отменить закрытие приложения, потребуется использовать предупреждение, а для того чтобы открыть форму, используем обработчик ожидания, который выполнится только в том случае, если пользователь откажется от завершения работы системы.
Используя инструкции препроцессора, мы разделили сценарии закрытия в веб-клиенте и в других видах клиентов. В случае веб-клиента мы не открываем обработку, так как практически во всех веб-браузерах текст нашего предупреждения не отображается. В других видах клиентов будет отображен наш диалог:
Если пользователь нажмет кнопку Продолжить работу, тогда сработает обработчик ожидания и будет открыта форма обработки.
Заключение
Платформа продолжает свое уверенное движение в сторону веб-браузеров, но на этот раз разработчики наложили ограничения на программный код, исполняемый в толстом и тонком клиентах. С одной стороны, это упростило и унифицировало код при закрытии форм, так как теперь нет необходимости писать несколько вариантов кода под каждый клиент, с другой стороны, это ограничило нас в возможностях.
Чтобы освоить разработку интерфейсов и форм в 1С:Предприятие 8.3
на профессиональном уровне, рекомендуем записаться на курс:
Поддержка – 3 месяца. Объем курса – 49 учебных часов.
Об авторе
Автор статьи – Сергей Калинкин
Директор ЦСО «Центр профессионального программирования», г. Казань
PDF-версия статьи для участников группы ВКонтакте
Если Вы еще не вступили в нее – сделайте это сейчас, и в блоке ниже (на этой странице) появятся ссылки на скачивание материалов.