1с вопрос да нет управляемые формы
Войдите как ученик, чтобы получить доступ к материалам школы
Внутренний язык программирования 1С 8.3 для начинающих программистов: использование диалогов в 1С
Автор уроков и преподаватель школы: Владимир Милькин
Давайте определимся, что же такое диалог? Вызов команды Сообщить является диалогом? А вызов команды ВвестиЧисло? А вызов ОткрытьЗначение?
Итак, диалог - это прежде всего элемент графического интерфейса , окно . А следовательно вызов Сообщить - диалогом не является, так как у него нет своего отдельного окна.
Диалог - это не просто окно. Это окно, которое открывается пользователю с целью вывода информации и (или) получения ответа.
Для того чтобы показать какой-либо диалог необходимо вызвать команду соответствующую этому диалогу и передать ей необходимые параметры. Команда - это обычная процедура или функция, только написанная не нами, а программистами фирмы 1С. Мы не можем менять эти команды, мы можем их только вызывать.
Предупреждение
Отличным примером диалога является вывод предупреждения пользователю:
Что мы видим? Вызов команды Предупреждение, в которую в качестве параметра передаётся строка "Осторожно".
Когда компьютер дойдёт до строчки, в которой вызывается эта команда, пользователю отобразится диалог предупреждения. И до тех пор, пока пользователь не закроет этот диалог, компьютер будет ожидать на этой же строчке. Только после закрытия диалога - выполнение программы продолжится и начнётся выполнение строки, следующей за вызовом диалога.
К примеру, пусть у нас есть такой код:
Как он будет выполняться?
В начале компьютер дойдёт до строчки №1 и выполнит команду Предупреждение с параметром "1". В этот момент пользователю покажется диалоговое окно с текстом "1", а компьютер замрёт на этой строчке и будет ожидать, пока пользователь закроет диалог. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
После закрытия диалога компьютер перейдёт к выполнению строчки №2 и выполнит команду Предупреждение уже с другим параметром "2". Пользователю снова покажется диалоговое окно, но уже с текстом "2", а компьютер замрёт уже на второй строчке и будет ожидать, пока пользователь закроет диалог.
Затем компьютер перейдёт к третьей строчке. Ну и так далее.
У команды Предупреждение параметр, отвечающий за текст, который выводится - не единственный. Есть ещё два дополнительных параметра:
Таймаут - означает количество секунд, через которое диалог закроется сам, если этого не сделает пользователь.
Заголовок - подменяет стандартный заголовок "1С:Предприятие" на строку пользователя.
К примеру, такой код:
покажет диалог с текстом "Осторожно." и заголовком "Внимание!", а также закроется через 5 секунд, если пользователь не сделает этого раньше:
А что если мы хотим задать только текст и заголовок окна, а таймаут не задавать?
Во-первых, мы можем передать в качестве таймаута ноль:
А во-вторых, мы можем просто оставить пустое место вместо параметра и система сама поймёт, что нужно оставить его значение по умолчанию:
Для того, чтобы узнавать обо всех возможных параметрах встроенных команд 1С - пользуйтесь синтакс-помощником так, как это описано в одном из предыдущих уроков (ссылка).
Ввод числа
Некоторые диалоги не только выводят какую-то информацию от нас пользователю, но и наоборот возвращают некий результат взаимодействия с пользователем. Примером такого диалога является ввод числа.
К примеру, напишем:
Зачем мы передаём в команду параметр Число? Во-первых, для того, чтобы отобразить начальное значение ввода в диалоге. А, во-вторых, чтобы вернуть в эту переменную значение, которое ввёл пользователь. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Но что если пользователь отказался от ввода и нажал кнопку "Отмена"? Как об этом узнать? Оказывается, функция ВвестиЧисло не только показывает диалог ввода числа, но ещё и возвращает нам Истина в том случае, если пользователь нажал кнопку "ОК" и Ложь, если он отменил ввод, нажав кнопку "Отмена".
Таким образом, более правильным будет такой код:
В переменную Результат (имя могло быть любым) возвращается Истина или Ложь в зависимости от того какую кнопку нажал пользователь ("ОК" или "Отмена").
В переменную Число возвращается число введенное пользователем.
Вопрос
Заключительным диалогом, который мы рассмотрим, будет является диалог вопроса пользователю.
Имя команды, которая вызывает этот диалог нам известна - Вопрос.
Теперь давайте посмотрим в синтакс-помощнике какие параметры принимает эта команда:
ТекстВопроса - это сам вопрос в текстовом виде, который увидит пользователь.
Кнопки - это одно из предопределенных значений, которые также можно посмотреть в синтакс-помощнике. Например, если передать в этот параметр:
- РежимДиалогаВопрос.ДаНет - в диалоге будет всего две кнопки Да и Нет.
- РежимДиалогаВопрос.ДаНетОтмена - три кнопки Да, Нет и Отмена.
- РежимДиалогаВопрос.ОкОтмена - две кнопки Ок и Отмена.
- И другие варианты кнопок.
- КодВозвратаДиалога.Нет
- КодВозвратаДиалога.Да
- КодВозвратаДиалога.Отмена
- И другие кнопки.
Таймаут - этот параметр нам уже знаком.
КнопкаПоУмолчанию - это кнопка, на которой будет фокус при показе окна. Её значения могут быть такими:
Заголовок - этот параметр нам уже знаком.
КнопкаТаймаута - если задать значение этой кнопки и параметр Таймаут, то именно на ней будет отображаться количество оставшихся секунд до закрытия диалога. У неё могут быть такие же значения как и у параметра КнопкаПоУмолчанию.
Уфф. Как видите, параметров много. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Но необязательно использовать их все. Как следует из синтакс-помощника обязательными к заполнению являются только первые два:
Вопрос-то мы задали. Хорошо бы теперь получить ответ - выспался пользователь или нет Из того же синтакс-помощника мы узнаём, что кнопка которая была нажата возвращается в качестве результата вызова команды Вопрос:
Модальность
Все примеры диалогов, которые мы рассмотрели - являются модальными, потому что компьютер, показывая диалог, замирает на той же строчке и не идёт дальше, пока диалог не закроется.
Ещё можно сказать, что когда мы показываем модальный диалог - пользователь может работать только с этим диалогом. Работа со всей остальной частью системы блокируется, пока не закроется диалог.
Таким недостатком не обладают немодальные версии диалогов, но к ним переходить нам ещё рано.
Читайте также: