Главная - Унитазы
1с вопрос да нет управляемые формы. Как использовать показатьвопрос в обработчике формы передзаписью

Задайте вопрос по учету и в течение семи рабочих дней получите ответ аудитора или методиста фирмы "1С".
Задать вопрос можно по адресу: [email protected] или с помощью web-формы .

Условия использования

Принимаются вопросы по темам:

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

Исключения составляют вопросы

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

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

Цена

    Сервис "Отвечает аудитор" включен в пакеты информационно-технологического сопровождения 1С:ИТС уровня ПРОФ.

Дополнительно

Как правильно задать вопрос

  • Укажите название и организационно-правовую форму организации.
  • Укажите регистрационный номер программы, на которую оформлен Договор 1С:ИТС.
  • Опишите хозяйственную ситуацию, которая вызвала вопрос:
    • сформулируйте условия, при которых она возникла;
    • обозначьте действия, которые были совершены;
    • укажите особенности, которые влияют на ответ (режим налогообложения, период совершения операции и т. п.).
  • Четко и грамотно формулируйте свои мысли.
  • Каждый вопрос должен направляться отдельным письмом. При получении письма, которое будет содержать несколько вопросов, не связанных между собой, ответ дается только на первый вопрос.

Форма и условия использования ответа

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

Вступление

Для чего вообще стоит отказываться от модальности и, например, Вопрос заменять на ПоказатьВопрос? Всё дело в том, что больше года назад 1С-ники объявили « войну» модальным окнам. Исключение составляют только те, у кого самописная конфигурация, работа с которой не будет вестись на IPad, в режиме сервиса или с помощью веб-клиента. А если у вас обычная Бухгалтерия 3.0 и вы не собираетесь бухгалтеру давать доступ к базе через IPad, всё равно вам придётся заменить все модальные методы на немодальные, т.к. рано или поздно «Режим использования модальности» станет «Не использовать»!

Что же думает по предлагаемому вопросу специалисты фирмы 1С? Для начала можно посмотреть на тему «Вопрос в обработчике формы ПередЗакрытием»:

Особенность диалога с пользователем в этом (и многих других) обработчиках заключается в том, что в зависимости от реакции пользователя принимается решение: продолжать дальнейшие действия, или отказаться от них. Для этого используется параметр процедуры Отказ. При одном ответе пользователя мы отказываемся от продолжения (Отказ = Истина). При другом ответе пользователя - продолжаем дальнейшие действия.

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

Поэтому мы действуем в два приёма:

В первый раз безусловно отменяем дальнейшие действия (Отказ = Истина) и выводим вопрос пользователю;

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

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

В первый проход её значение равно Ложь, и это значит, что нужно отказаться от закрытия и задать вопрос. Во второй проход её значение равно Истина, и это значит, что вопрос задавать не надо:

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

Этот пример схож с нашей темой и очень часто на него ссылаются в теме «ПоказатьВопрос в обработчике формы ПередЗаписью»:

В обработчике события формы ПередЗаписью также может возникнуть потребность задать вопрос. Как и в предыдущем примере. Однако здесь вопрос так просто не решается. Отличие заключается в следующем.

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

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

Поэтому тут можно предложить три варианта, но все они, к сожалению, обладают недостатками:

* Изменить логику прикладного решения так, чтобы не было диалога с пользователем в этом обработчике. Это не всегда возможно;

* В обработке оповещения с помощью собственной блокирующей формы задавать пользователю развернутый вопрос, предполагающий точное описание дальнейших действий: Отказаться?, Только записать?, Записать и закрыть? Это может выглядеть не очень красиво, ведь пользователь уже нажал "Записать и закрыть", а его опять об этом спрашивают;

* Не использовать стандартные команды формы Записать, "Записать и закрыть". Вместо них создать собственные команды, в которых и выполнять необходимые алгоритмы. Создание собственных команд потребует дополнительных трудозатрат.

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

Дальше предлагают задать вопрос с множеством вариантов: «Отказаться, Только записать, Записать и закрыть». Помимо описанного минуса (пользователь и так уже заранее выбрать вариант, а его тут ещё раз спрашивают) есть ещё: в ПередЗаписью программа могла попасть и из «Отмена проведения». Т.е. надо добавлять ещё кнопку? Мне кажется этот вариант некрасивым.

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

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

1. Сначала нам нужно убрать стандартную команду «Провести и закрыть» из формы и создать свою команду и кнопку.

1.А. Если у вас уже кнопка «Провести и закрыть» не типовая - вам повезло, можете смело приступать к п. 2.

1.Б. Стандартная команда убирается через Свойства формы - Состав команд - Снимаем ненужную команду. Как добавлять команду и кнопку на форму, я не буду описывать, только напомню, что кнопку «Провести и закрыть» необходимо сделать кнопкой по умолчанию.

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

Для начала в обработчике формы «ПриОткрытии» необходимо убрать стандартную кнопку «ПровестиИЗакрыть».

Элементы.ФормаПровестиИЗакрыть.Видимость = Ложь;

Замечание: у пользователя с большими ограничениями к документу в платформе 8.3.7 вообще не появляется кнопка "Провести и закрыть". Поэтому для платформы 8.3.7 корректней писать код:

Если Элементы.Найти("ФормаПровестиИЗакрыть")<>Неопределено Тогда Элементы.ФормаПровестиИЗакрыть.Видимость = Ложь; КонецЕсли;

НоваяКоманда1 = ЭтаФорма.Команды.Добавить("ПровестиИЗакрыть2"); НоваяКоманда1.Действие = "ПровестиИЗакрыть"; НовыйЭлемент = Элементы.Добавить("ФормаПровестиИЗакрыть2" , Тип("КнопкаФормы"), Элементы.ФормаКоманднаяПанель); НовыйЭлемент.Заголовок = "Провести и закрыть"; НовыйЭлемент.ИмяКоманды = НоваяКоманда1.Имя; НовыйЭлемент.КнопкаПоУмолчанию = Истина; Элементы.Переместить(НовыйЭлемент,НовыйЭлемент.Родитель,Элементы.ГруппаКнопкиКоманднойПанели);

Соответственно в этом коде заложены типовые наименования для ФормаДокументаОбщая документа «Поступление (акты, накладные)» (например Элементы.ГруппаКнопкиКоманднойПанели), которые в каждом конкретном случае необходимо будет менять на свои.

&НаКлиенте Процедура ПровестиИЗакрыть(Команда) ПараметрыЗаписи = Новый Структура(); ПараметрыЗаписи.Вставить("РежимЗаписи", ПредопределенноеЗначение("РежимЗаписиДокумента.Проведение")); ПараметрыЗаписи.Вставить("Закрыть", Истина); Если Записать(ПараметрыЗаписи) Тогда Закрыть(); КонецЕсли; КонецПроцедуры

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

3. Допустим, нам надо задавать вопрос не всегда, а только когда документ проведён. Теперь мы в процедуру «ПередЗаписью» добавляем (если эта процедура не существовала - создаём) новый код:

Если Не ПараметрыЗаписи.Свойство("ВопросЗадан") И Объект.Проведен Тогда Отказ = Истина; Оповещение = Новый ОписаниеОповещения("ПоказатьВопросЗавершение", ЭтаФорма, ПараметрыЗаписи); ТекстВопроса = "Данный документ уже проведён. Вы действительно хотите перепровести или отменить проведение документа?"; ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, 20, КодВозвратаДиалога.Нет, КодВозвратаДиалога.Нет); КонецЕсли;

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

После метода ПоказатьВопрос можно ещё написать «Возврат», если у вас есть ещё какой-то код в процедуре «ПередЗаписью», выполняемый после вопроса.

4. Создаём процедуру «ПоказатьВопросЗавершение», в которую программа будет входить, когда пользователь ответит на вопрос (или произошёл таймаут).

&НаКлиенте Процедура ПоказатьВопросЗавершение(Результат, ПараметрыЗаписи) Экспорт Если Результат = КодВозвратаДиалога.Да Тогда ПараметрыЗаписи.Вставить("ВопросЗадан", Истина); Если Записать(ПараметрыЗаписи) И ПараметрыЗаписи.Свойство("Закрыть") Тогда Закрыть(); КонецЕсли; КонецЕсли; КонецПроцедуры

В этой процедуре мы и используем переданное ранее свойство «Закрыть». Если свойства нет, значит, закрывать не надо.

5. Теперь нам надо обработать нажатие «крестика» пользователем. Для этого нам нужна обработчик формы «ПередЗакрытием». Если его нет, то его можно создать на форме «ручками» или программно в обработчике «ПриСозданииНаСервере» :

ЭтаФорма.УстановитьДействие("ПередЗакрытием","ПередЗакрытием");

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

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

Вопрос против ПоказатьВопрос

А как бы мы решили задачу, если бы можно было использовать модальные вызовы? А очень просто, мы бы написали в процедуре «ПередЗаписью» следующий код:

Если Объект.Проведен Тогда ТекстВопроса = "Данный документ уже проведён. Вы действительно хотите перепровести или отменить проведение документа?"; Ответ = Вопрос(ТекстВопроса,РежимДиалогаВопрос.ДаНет,20,КодВозвратаДиалога.Нет,КодВозвратаДиалога.Нет); Если Не Ответ=КодВозвратаДиалога.Да Тогда Отказ = Истина; Возврат; КонецЕсли; КонецЕсли;

И всё! Никаких «заморочек» типа «А что пользователь нажал: Провести или ПровестиИЗакрыть?». И ещё надо будет отработать нажатие крестика в «ПередЗакрытием».

Изначально похожий код я реализовывал у себя в Бухгалтерии предприятия 3.0. Задача заключалась в следующем: при определённом наборе условий (это не одно условие Объект.Проведен, как указано в примере в данной публикации ) из ФормаДокументаОбщая документа ПоступлениеТоваровУслуг спрашивать дополнительно подтверждения его действий. Ниже перечислены нюансы, которые мне не пришлось обходить, т.к. не подпадали под задачу.

В обработчик формы «ПередЗаписью» программа не заходит, если: 1) пользователь нажал на кнопку «Пометить на удаление / снять пометку»; 2) если пользователь нажал на не проведённом документе кнопку «ДТ/КТ». И это не всё: если вы на форме документа создали всё, как я написал, и пользователь из формы списка перепроведёт документ - то никаких вопросов программа ему не задаст. Необходимо все интересующие вас кнопки на форме списка заменять на свои и отслеживать действия пользователя. Ещё у документа может быть не одна форма документа, а несколько (например, документ ПоступлениеТоваровУслуг в БП 3.0, где 3 формы: общая, товары и услуги). В каждой форме документа надо написать много кода…

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

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

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

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

Примеры диалогов:

1 С: Предприятие X

Кафедра Прикладной информатики

іигнчіїїтдиичіїїзіниипчпїтіі

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

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

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

Предупреждение("Осторожно!");

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

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

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

Предупреждение(" 1");

Предупреждение("2");

Предупреждение("3");

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

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

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

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

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

Предупреждение(, , )

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

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

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

Предупреждение("Осторожно.", 5, "Внимание!");

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

Внимание!

Осторожно.

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

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

Предупреждение("Осторожно.", О, "Внимание!");

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

Предупреждение("Осторожно.", "Внимание!");

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

Ввод числа

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

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

ВвестиЧисло(Число);

Введите число

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

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

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

Результат = ВвестиЧисло(Число);

Если Результат = Истина Тогда ОткрытьЗначение("Вы ввели " + Строка(Число));

ОткрытьЗначение("Вы отменили ввод");

КонецЕсли;

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

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

Вопрос

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

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

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

Вопрос(, >)

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

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

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

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

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

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

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

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

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

Вопрос("Вам понятен материал?",

Режим Д и лога Вопрос.Да Н ет);

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

Результат = Вопрос("Вам понятен материал?", РежимДиалогаВо-прос.ДаНет);

Если Результат = КодВозвратаДиалога.Да Тогда ОткрытьЗначение("Какой вы молодец!");

ОткрытьЗначение("Выполните задания еще раз!");

КонецЕсли;

Модальность

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

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

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

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

Напишите программу, которая спрашивает пользователя "Нажмите Да, чтобы вывести числа от 1 до 10, Нет - чтобы вывести числа от 10 до 100, ни в коем случае не нажимайте кнопку Отмена". В диалоге должны быть три кнопки Да, Нет и Отмена.

Если пользователь нажал Да - выводим числа от 1 до 10, Нет - от 10 до 100, Отмена - выводим диалог предупреждения с текстом "Мы же вас предупреждали, что нельзя нажимать отмену!".

Решение

Результат = Вопрос(

"Нажмите Да, чтобы вывести числа от 1 до 10" +

", Нет - чтобы вывести числа 10 до 100, ни в коем" +

"случае не нажимайте кнопку Отмена", РежимДиалогаВопрос. ДаНетОтмена);

Если Результат = КодВозвратаДиалога.Да Тогда Для Шаг = 1 По 10 Цикл Сообщить(Шаг);

КонецЦикла;

ИначеЕсли Результат = КодВозвратаДиалога.Нет Тогда Для Шаг = 10 По 100 Цикл Сообщить(Шаг);

КонецЦикла;

ИначеЕсли Результат = КодВозвратаДиалога.Отмена Тогда ОткрытьЗначение("Мы же вас предупреждали, что нельзя нажимать отмену!");

 


Читайте:



Завершился вывод войск ссср из афганистана

Завершился вывод войск ссср из афганистана

В 1987 году в Афганистане начала осуществляться политика национального примирения, принятая и одобренная на Пленуме ЦК НДПА в декабре 1986 года....

Новое направление: инноватика Сложно ли учиться на инноватике

Новое направление: инноватика Сложно ли учиться на инноватике

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

К чему снится племянница

К чему снится племянница

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

Репейник: толкование сновидения

Репейник: толкование сновидения

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

feed-image RSS