Как задать вопрос пользователю в обработчике события формы
Перейти к содержимому

Как задать вопрос пользователю в обработчике события формы

  • автор:

Информационные системы / Курсовая_6_семестр / Учебники / Радченко М.Г. 1С- Предприятие 8.3. Практическое пособие разработчика. Примеры и типовые приемы (2013) (1)

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

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

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

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

В режиме «Конфигуратор»

Прежде всего, откроем палитру свойств нашей конфигурации и посмотрим на свойство Режим

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

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

Это значит, что при попытке открытия модального окна в режиме 1С:Предприятие будет получена ошибка.

802 1С:Предприятие 8.3. Практическое пособие разработчика

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

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

имена этих методов начинаются со слов Показать либо Начать ,

например ПоказатьВопрос() вместо Вопрос() , НачатьПомещениеФайла() вместо ПоместитьФайл() и т. п.;

первым параметром в эти методы передается объект ОписаниеОповещения , указывающий на процедуру модуля, которая будет выполнена после того, как пользователь сделает выбор в блокирующем окне;

методы не возвращают значения, вместо этого результат выбора пользователя будет передан в процедуру модуля, описанную объ-

Соответствиемодальныхметодовихнемодальныманалогамприведено в документации «1С:Предприятие 8.3. Руководство разработчика», раздел 7.7.3 «Форма. Различные подходы к модальности. Соответствие методов».

Добавим в модуль формы документа следующий код (листинг 26.7).

Листинг 26.7. Обработчик нажатия кнопки «Подбор» с предварительным вопросом пользователю

&НаКлиенте Процедура ПодборВопрос(Команда)

Оповещение = Новый ОписаниеОповещения(«ПодборЗавершение», ЭтотОбъект); ПоказатьВопрос(Оповещение, «Подобрать номенклатуру в документ?»,

&НаКлиенте Процедура ПодборЗавершение(Результат, Параметры) Экспорт

Занятие 26 80 3

Если Результат = КодВозвратаДиалога.Да Тогда ПараметрыФормы = Новый Структура(«МножественныйВыбор», Истина); ОткрытьФорму(«Справочник.Номенклатура.ФормаВыбора»,

Поясним этот код.

В процедуре ПодборВопрос() сначала создается объект ОписаниеОповещения , в конструкторе которого первым параметром указывается имя процедуры – обработчика оповещения, которая будет выполнена после получения ответа пользователя. А во втором параметре указывается, в каком модуле расположена эта процедура.

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

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

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

Чтобы не путаться, установим новый обработчик для команды Подбор . В палитре свойств этой команды в строке Действие выберем процедуру ПодборВо-

Рис. 26.4. Установка действия для команды «Подбор»

804 1С:Предприятие 8.3. Практическое пособие разработчика

В режиме «1С:Предприятие»

Запустим «1С:Предприятие» в режиме отладки.

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

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

Как задать вопрос пользователю в обработчике события

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

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

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

Изменим текст обработчика команды Подбор следующим образом

Листинг 26.8. Обработчик нажатия кнопки «Подбор»

&НаКлиенте Процедура Подбор(Команда)

ПараметрыФормы = Новый Структура(«МножественныйВыбор», Истина); ОткрытьФорму(«Справочник.Номенклатура.ФормаВыбора», ПараметрыФормы,

Занятие 26 80 5

Затем добавим в обработчик события ОбработкаВыбора таблицы Материалы открытие блокирующего окна с вопросом пользователю

Листинг 26.9. Обработчик события «ОбработкаВыбора» таблицы «Материалы» с предварительным вопросом пользователю

&НаКлиенте Процедура МатериалыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

Если ОтветПередДобавлением <> Истина Тогда СтандартнаяОбработка = Ложь; Оповещение = Новый ОписаниеОповещения(

«ДобавлениеЗавершение», ЭтотОбъект, ВыбранноеЗначение); ПоказатьВопрос(Оповещение, «Добавить номенклатуру в табличную часть?»,

Иначе Для Каждого ВыбранныйЭлемент Из ВыбранноеЗначение Цикл

НоваяСтрока = Объект.Материалы.Добавить(); НоваяСтрока.Материал = ВыбранныйЭлемент;

Поясним этот код.

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

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

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

После этого с помощью немодального метода ПоказатьВопрос() отображается окно с вопросом пользователю. В этот метод

806 1С:Предприятие 8.3. Практическое пособие разработчика

передается объект ОписаниеОповещения , указывающий на экспортную процедуру модуля ( ДобавлениеЗавершение ), которая будет выполнена после того, как пользователь сделает выбор в блокирующем окне.

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

Листинг 26.10. Процедура – обработчик оповещения «ДобавлениеЗавершение()»

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

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

Для Каждого ВыбранныйЭлемент Из СписокНоменклатуры Цикл НоваяСтрока = Объект.Материалы.Добавить(); НоваяСтрока.Материал = ВыбранныйЭлемент;

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

Остается только объявить эту переменную в самом начале модуля формы (листинг 26.11).

Листинг 26.11. Объявление переменной в модуле формы

&НаКлиенте Перем ОтветПередДобавлением;

Занятие 26 80 7

В режиме «1С:Предприятие»

Запустим «1С:Предприятие» в режиме отладки.

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

Проверить код конфигурации на предмет отсутствия модальных методов можно с помощью команды конфигуратора Конфигурация  Проверка конфигурации. В окне параметров проверки нужно устано-

вить флажок Поиск использования модальности .

Ввод на основании

Механизм ввода на основании может быть использован для ввода новых объектов различного типа (документы, справочники, планы видов характеристик и т. д.). Мы рассмотрим этот механизм на примере ввода новых документов как наиболее распространенном.

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

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

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

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

808 1С:Предприятие 8.3. Практическое пособие разработчика

Команда ввода на основании

В режиме «Конфигуратор»

Откроем окно редактирования объекта конфигурации Документ ОказаниеУслуги и добавим новый реквизит документа – ОбъектОсно-

вание с типом СправочникСсылка.Клиенты .

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

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

Нажмем кнопку Редактировать элемент списка над списком Вводится на основании и выберем справочник Клиенты (рис. 26.5).

Рис. 26.5. Определение состава объектов, на основании которых вводится документ

Затем вызовем конструктор ввода на основании и зададим значения реквизитов документа, создаваемого на основании. Для этого воспользуемся кнопкой Заполнить выражения (рис. 26.6).

Занятие 26 80 9

Рис. 26.6. Заполнение значений реквизитов документа, создаваемого на основании

Обратите внимание, что для заполнения реквизита ОбъектОснование конструктор предложил использовать значение ДанныеЗаполнения.Ссылка . В данном случае такая запись будет избыточной, поскольку в качестве основания будет передана ссылка на элемент справочника.

Однако в общем случае событие ОбработкаЗаполнения возникает при создании нового объекта на основании некоторого переданного значения. Совсем не обязательно, что это значение будет иметь тип ссылки.

Согласимся со всем, что предложил конструктор, и нажмем OK .

В модуле документа будет сформирован текст обработчика события

ОбработкаЗаполнения (листинг 26.12).

Листинг 26.12. Обработчик события «ОбработкаЗаполнения»

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) //<<__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ

// Данный фрагмент построен конструктором.

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

Если ТипЗнч(ДанныеЗаполнения) = Тип(«СправочникСсылка.Клиенты») Тогда

Клиент = ДанныеЗаполнения.Ссылка; ОбъектОснование = ДанныеЗаполнения.Ссылка;

810 1С:Предприятие 8.3. Практическое пособие разработчика

Как видите, для каждого типа объекта-основания формируется своя ветка условия Если… , в которой происходит заполнение реквизитов нового документа.

В режиме «1С:Предприятие»

Запустим «1С:Предприятие» в режиме отладки и проверим работу ввода на основании.

Откроем список клиентов. Обратите внимание, что в командной панели формы списка справочника Клиенты появилась команда

Создать на основании .

Выделив нужного клиента и выполнив команду Создать на основании

 Оказание услуги , создадим новый документ Оказание услуги , где в качестве клиента будет выбран выделенный в списке справочника клиент (рис. 26.7).

Рис. 26.7. Создание документа «Оказание услуги» на основании клиента

Введите самостоятельно еще несколько документов на основании какого-либо клиента.

Объекты, введенные на основании

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

Как задать вопрос пользователю в обработчике события формы

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

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

Как задать вопрос пользователю в 1С и обработать ответ

В этой небольшой статье мы рассмотрим три способа, как в 1С показать пользователю вопрос.

В 1С Предприятие есть возможность средствами встроенного языка показать пользователю окно с вопросом и несколькими вариантами ответа, например “Вы уверены, что хотите уничтожить все документы с начала времен?” и ответы “Да, Нет, Я подумаю, Отмена”.

Метод «Вопрос»

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

Но, как всегда, есть нюансы. У этого метода есть несколько необязательных параметров, такие как таймаут, кнопка по умолчанию, заголовок, и кнопка таймаута (на ней будут отображаться оставшиеся секунды до таймаута). Кроме того, помимо системных режимов диалога (“Да/Нет”, “Ок/Отмена” и других), разработчик может задать свой список значений с вариантами ответа на вопрос.

Ну и вишенка на торте. Мало кто знает, а еще меньше тех кто пользуется – вопрос можно задавать в виде форматированной строки. Попробуйте, вдруг вам понравится:)

1С вопрос пользователю

Метод ПоказатьВопрос

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

Кликаем правой кнопкой на методе Вопрос в коде, в контекстном меню выбираем Рефакторинг / Нерекомендуемые синхронные вызовы / Преобразовать вызов. И платформа сама разделит наш метод на ПоказатьВопрос и обработку оповещения.

1С Вопрос - рефакторинг вызова

Разумеется, получившийся код можно и нужно “причесать” – можно вынести описание оповещения в отдельную переменную, добавить дополнительные параметры, убрать ставший лишним код и т.д.

Метод ВопросАсинх

Начиная с версии 8.3.18 в платформе 1С появились новые асинхронные методы, работа с которыми во многом похожа на asinc / await в JavaScript. Мы объявляем метод с ключевым словом Асинх, и в этом методе становится возможным использовать асинхронные методы. Перед вызовом метода ВопросАсинх мы указываем еще одно ключевое слово “Ждать”. Сам по себе метод ВопросАсинх не останавливает выполнение кода, и если не указать “Ждать”, то весь код ниже будет выполнен, и результат может быть не тот, что ожидался. По большому счету, это синтаксический сахар, призванный упростить код и облегчить жизнь разработчику.
Попробуйте убрать ключевое слово “Ждать” и сравните поведение программы ��

В остальном, этот метод имеет все те же параметры, что и метод “Вопрос”, который мы рассмотрели в самом начале.

Ответы

В зависимости от того, как мы задали параметр “Кнопки”, ответы могут быть самые различные. Если использовать РежимДиалогаВопрос, то у ответа тип значения будет КодВозвратаДиалога. Если же указать кнопки в виде списка значений, то в поле Ответ будет содержаться значение, привязанное к соответствующей кнопке. Типы значений в списке кнопок можно задавать самые различные. А следовательно, и логику обработки ответа можно реализовать самую разную, в зависимости от полученного значения и его типа.

УФ. Задать вопрос пользователю при изменение реквизита

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

Если он согласен — значение реквизита меняется и я выполняю ряд других действий. А если нет — то ничего не делаю.

Событие ОбработкаВыбора я думаю мне нужна. Там видно что я выбрал и видно что я изменяю.

В нем я могу отказаться от изменения написав СтандартнаяОбработка = Ложь.

Но мне там надо задать вопрос. И тогда я выйду из контекста этой процедуры.

Видел пример с событием ПриЗакрытие, где задавалась глобальная переменная и в событие проверялось ее значение, а в обработке события вопроса завалось ее значение и писалось Закрыть() чем вызывало событие ПриЗакрытие еще раз.

Я вроде видел где то в типовых кон-ях подобно, но не помню где чтобы поискать

ПоказатьВопрос(Новый ОписаниеОповещения("ОбработкаВыбораЗавершение", ЭтотОбъект),
"Закрывать форму?", РежимДиалогаВопрос.ДаНет)

И все. в эту процедуру он уже не вернется

Вижу такое решение.

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

Но что то мне кажется это не правильно.

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

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

В общем зачем мне все это надо.

Есть реквизит "Вид операции"

Если вид операции №1 то обязательные реквизиты для заполнения одни.
Если другой — другие.

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

Но считаю что пользователь должен быть предупрежден

(5) не очень понял.
1.в событие ОбработкаВыбора сразу написать СтандартнаяОбработка = Ложь
2. Передать выбранное значение в вопросе
3. В обработке результата вопроса написать Объект.МойРевизит = ДопПараметры.ВыбранноеЗначение

(18) И откуда я возьму эти значение других реквизитов, если их вводит пользователь?

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

(20) Ну я готов услышать годную версию как это делается.

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

Если от поставщика то нужно знать номер и дату входящего документа.

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

Предложу такое решение.

В палитре свойств элемента формы есть такие свойства:
"ОтображатьПредупреждениеПриРедактированиии" и "ПредупреждениеПриРедактировании" (см. http://joxi.ru/YmEYJjGhZ4Xebm )

Можно установить эти свойства, а при изменении поля уже безусловно выполнять нужный алгоритм.

В общем сделал так:

&НаКлиенте
Процедура ВидПриемкиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

Если ВыбранноеЗначение <> Объект.ВидПриемки И ВыбранноеЗначение = ПолучитьВидПриемкиШокер() Тогда
ПоказатьВопрос(Новый ОписаниеОповещения("ПередЗакрытиемЗавершение", ЭтотОбъект,ВыбранноеЗначение),
"Данные о входящем документе будут очищены. Продолжить?", РежимДиалогаВопрос.ДаНет);
СтандартнаяОбработка = ЛОЖЬ;
ИначеЕсли ВыбранноеЗначение <> Объект.ВидПриемки Тогда
Элементы.ВходящийНомерДата.Доступность = Истина;

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

Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
Объект.ВидПриемки = ПараметрыЗаписи;
Элементы.ВходящийНомерДата.Доступность = ЛОЖЬ;
Объект.НомерВходящегоДокумента = Неопределено;
Объект.ДатаВходящегоДокумента = Неопределено;
Объект.ДатаПроизводства = Неопределено;
КонецЕсли;

Функция ПолучитьВидПриемкиШокер()
Возврат Перечисления.КА_ВидыПриемки.ИзШокера;
КонецФункции

Как задать вопрос пользователю в обработчике события формы

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

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

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

Перед выполнением какой либо команды лучше спросить у пользователе действительно ли он хочет её выполнить, так же желательно подробней описать что произойдет в результате выполнения. Это в будущем защитить вас от проблем и лишних вопросов со стороны пользователей. Все это можно назвать защитой от дурака, так как например, пользователь вовремя работы с какими либо объектами 1С (Документами, справочниками, обработками и т.д.) может случайно нажать на команду, и если при этом у пользователя не будет запрашиваться подтверждение, данные могут быть изменены либо вообще потеряны. Все это необходимо продумывать на этапе разработки. Задать вопрос пользователю можно с помощью «Вопрос» или «Оповещение». Оба эти варианта мы сегодня рассмотрим, сразу скажу что в первом случае используются модальное открытие окон от которого лучше отказаться.

Как задать вопрос пользователю Да/Нет

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

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

1С Вопрос пользователю

Реализовать это достаточно легко, открываем процедуру и пишем вот такой код. Задаем вопрос пользователю и если он отвечает «Нет» делаем возврат а если «Да» то выполняем очистку ТЧ.

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

Сохраняем и проверяем то что получилось, после нажатия на кнопку «Очистить ТЧ», пользователь увидит сообщение, в котором ему нужно будет подтвердить свои намерения.

Как задать вопрос пользователю Да/Нет

И если он случайно нажал кнопку действие можно будет отменить ну если нет то команда выполниться.

Вопрос пользователю 1С

Но как я уже говорил это вариант реализован с помощью модального окна и его уже не рекомендуется использовать.

Вопрос пользователю с помощью «Оповещение»

Для того чтобы отказаться от модальности придется воспользоваться методом «Оповещение». Необходимо будет создать еще одну процедуру и написать немного больше кода. В первой процедуре мы задаем вопрос получаем на него ответ и передаем его в процедуру которая его обработает.

Тут смотрим что ответил пользователь и обрабатываем ответ.

Вопрос пользователю с помощью "Оповещение"

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

1С Как задать вопрос пользователю перед выполнение команды

Как видите все достаточно просто, более детальную информацию можно прочитать в синтаксис помощнике.

Как задать вопрос пользователю в обработчике события формы

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

  • Как немодально вывести диалог вопроса с заголовком и нужными кнопками
  • Как немодально вывести предупреждение пользователю
  • Как немодально открыть значение для интерактивной работы с ним
  • Как немодально ввести дату от пользователя
  • Как немодально ввести значение определенного типа от пользователя
  • Как немодально ввести строку от пользователя
  • Как немодально ввести число определенного типа от пользователя
  • Как модально вывести диалог вопроса с заголовком и нужными кнопками
  • Как модально обработать прерывание операции от пользователя (нажатие Break)
  • Как модально вывести предупреждение пользователю
  • Как модально открыть значение для интерактивной работы с ним
  • Как очистить служеб. сообщения и вывести предупреждающий сигнал
  • Как указать статус сообщения при выводе
  • Как модально ввести дату от пользователя
  • Как модально ввести значение определенного типа от пользователя
  • Как модально ввести строку от пользователя
  • Как модально ввести число определенного типа от пользователя
  • Скачать и выполнить эти примеры на компьютере

Работа с Диалогами в языке 1С 8.3, 8.2 (в примерах

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Владимир Милькин

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Диалог с пользователем

Если в свойствах конфигурации РежимИспользованияМодальности установлен как “Не использовать”, то конструкция Ответ = Вопрос() приведет к ошибке “Использование модальных окон в данном режиме запрещено“.

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

  1. ВопросАсинх() – более современный асинхронный метод (через “обещание”, доступный с версии платформы 8.3.18)
  1. ПоказатьВопрос() – асинхронный метод (через “обратный вызов”).

Например, при выполнении команды “Заполнить квартальную премию” предупредим пользователя, что табличная часть будет очищена и получим подтверждение на выполнение. Реализуем задачу обоими способами:

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

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