Опубликовано: 19.01.2021

Диалоговые окна

Во встроенном языке 1С версии 7.7 предусмотрено несколько системных функций и процедур, предназначенных для вывода на экран различных диалоговых окон.

Окна для ввода данных

Вывести на экран окно для ввода чисел позволяет функция ВвестиЧисло() (англоязычный синоним — InputNumeric()). Возвращаемым значением данной функции является число:

  • 1 — если в диалоге нажата кнопка «ОК»;
  • 0 — если нажата кнопка «Отмена» или клавиша Esc;
  • −1 (минус единица) — если закончилось время ожидания ответа.

Синтаксис функции:

ВвестиЧисло(<Число>, <Подсказка>, <Длина>, <Точность>, <Таймаут>)

где

  • <Число> — имя переменной, ранее объявленной в программном модуле. В эту переменную при нажатии кнопки «ОК» будет помещено введённое пользователем значение числа;
  • <Подсказка> — текст заголовка окна диалога ввода. Может использоваться в качестве подсказки конечному пользователю;
  • <Длина> — максимальная длина вводимого числа;
  • <Точность> — максимальное количество знаков в числе после десятичной точки;
  • <Таймаут> — числовое выражение, задающее интервал времени ожидания ответа пользователя в секундах. Параметр является необязательным. Если данный параметр опущен или равен 0, то время ожидания бесконечно.

При необходимости переменной, указанной в параметре <Число>, до вызова метода можно присвоить какое-то значение, которое будет предложено пользователю, как значение по умолчанию. Если пользователь изменит предложенное ему значение, но нажмёт кнопку «Отмена», значение переменной не изменится.

Пример использования:

Прем Ном;

Если ВвестиЧисло(Ном, "Введите номер приказа", 5, 0) = 1 Тогда
   ВыбДок = СоздатьОбъект("Документ.Приказ");
   ВыбДок.НайтиПоНомеру(Строка(Ном), Дата(0));
   Если ВыбДок.Выбран() = 1 Тогда
      . . .
   ИначеЕсли;
      . . .
   КонецЕсли;
КонецЕсли;

В результате работы данного кода на экран будет выведено следующее диалоговое окно:

Диалоговое окно для ввода данных

Вывести на экран окно для ввода строк позволяет функция ВвестиСтроку() (англоязычный синоним — InputString()). Возвращаемым значением данной функции является число:

  • 1 — если в диалоге нажата кнопка «ОК»;
  • 0 — если нажата кнопка «Отмена» или клавиша Esc;
  • −1 (минус единица) — если закончилось время ожидания ответа.

Синтаксис функции:

ВвестиСтроку(<Строка>, <Подсказка>, <Длина>, <ПризнакМногострочности>, <Таймаут>)

где

  • <Строка> — имя переменной, ранее объявленной в программном модуле. В эту переменную при нажатии кнопки «ОК» будет помещено введённое пользователем строковое значение;
  • <Подсказка> — текст заголовка окна диалога ввода. Может использоваться в качестве подсказки конечному пользователю;
  • <Длина> — максимальная длина вводимой строки;
  • <ПризнакМногострочности> — числовое выражение. Если равно 0, то будет осуществляться ввод простой строки без разделителей строк; если равно 1, то будет осуществляться ввод многострочного текста с разделителями строк. Параметр является необязательным. Значение по умолчанию 0;
  • <Таймаут> — числовое выражение, задающее интервал времени ожидания ответа пользователя в секундах. Параметр является необязательным. Если данный параметр опущен или равен 0, то время ожидания бесконечно.

При необходимости переменной, указанной в параметре <Строка>, до вызова метода можно присвоить какое-то значение, которое будет предложено пользователю, как значение по умолчанию. Если пользователь изменит предложенное ему значение, но нажмёт кнопку «Отмена», значение переменной не изменится.

Пример использования:

Процедура ВводКодовПродукции()
   Если Продукция.Вид = Перечисление.ВидПродукции.Наша Тогда
      НК = Код;
      Если ВвестиСтроку(НК, "Введите код продукции", 20, 0) = 1 Тогда
         Koд = HK;
      КонецЕсли;
   Иначе
      Код = "";
      Возврат;
   КонецЕсли;
КонецПроцедуры

В результате работы данного кода на экран будет выведено следующее диалоговое окно:

Диалоговое окно для ввода строковых значений

Вывести на экран окно для ввода даты позволяет функция ВвестиДату() (англоязычный синоним — InputDate()). Возвращаемым значением данной функции является число:

  • 1 — если в диалоге нажата кнопка «ОК»;
  • 0 — если нажата кнопка «Отмена» или клавиша Esc;
  • −1 (минус единица) — если закончилось время ожидания ответа.

Синтаксис функции:

ВвестиДату(<Дата>, <Подсказка>, <Таймаут>)

где

  • <Дата> — имя переменной, ранее объявленной в программном модуле. В эту переменную при нажатии кнопки «ОК» будет помещено введённое пользователем значение даты;
  • <Подсказка> — текст заголовка окна диалога ввода. Может использоваться в качестве подсказки конечному пользователю;
  • <Таймаут> — числовое выражение, задающее интервал времени ожидания ответа пользователя в секундах. Параметр является необязательным. Если данный параметр опущен или равен 0, то время ожидания бесконечно.

По умолчанию в окне выводится рабочая дата. При необходимости переменной, указанной в параметре <Дата>, до вызова метода можно присвоить какое-то значение, которое будет предложено пользователю, как значение по умолчанию. Если пользователь изменит предложенное ему значение, но нажмёт кнопку «Отмена», значение переменной не изменится.

Пример использования:

Процедура ВводДатыСсуды()
   ДатаСсуды = ДатаДок + 30;
   Д = ДатаСсуды;
   Если ВвестиДату(Д, "Введите дату ссуды") = 1 Тогда
      ДатаСсуды = Д;
   Иначе
      ДатаСсуды = Дата(0);
      ВидРасчета = ВидРасчета.БеспроцентнаяСсуда;
   КонецЕсли;
КонецПроцедуры

В результате работы данного кода на экран будет выведено следующее диалоговое окно:

Диалоговое окно для ввода даты

Вывести на экран окно для ввода периода позволяет функция ВвестиПериод() (англоязычный синоним — InputPeriod()). Возвращаемым значением данной функции является число:

  • 1 — если в диалоге нажата кнопка «ОК»;
  • 0 — если нажата кнопка «Отмена» или клавиша Esc.

Синтаксис функции:

ВвестиПериод(<НачалоПериода>, <КонецПериода>, <Подсказка>)

где

  • <НачалоПериода> — идентификатор переменной, в которую функция возвращает дату начала периода;
  • <КонецПериода> — идентификатор переменной, в которую функция возвращает дату конца периода;
  • <Подсказка> — строковое выражение, содержащее строку, которая будет выводиться в заголовке окна диалога. Параметр является необязательным. Если не указан, выводится стандартная подсказка.

По умолчанию в окне в качестве периода выводится рабочий день. При необходимости переменным, указанным в параметрах <НачалоПериода> и <КонецПериода>, до вызова метода можно присвоить какие-то иные значения, которые будут предложены пользователю, как значения по умолчанию. Если пользователь изменит предложенные ему значения, но нажмёт кнопку «Отмена», значения переменных не изменятся (то есть останутся те, которые были до вызова метода).

Пример использования:

Дата1 = '01.01.97';
Дата2 = '31.03.97';
Если ВвестиПериод(Дата1, Дата2, "Введите период отчета") <> 1 Тогда
   Возврат 0;
КонецЕсли;

В результате работы данного кода на экран будет выведено следующее диалоговое окно:

Диалоговое окно для ввода периода

Вывести на экран окно для выбора значения перечисления позволяет функция ВвестиПеречисление() (англоязычный синоним — InputEnum()). Возвращаемым значением данной функции является число:

  • 1 — если в диалоге нажата кнопка «ОК»;
  • 0 — если нажата кнопка «Отмена» или клавиша Esc;
  • −1 (минус единица) — если закончилось время ожидания ответа.

Синтаксис функции:

ВвестиПеречисление(<Значение>, <Подсказка>, <Таймаут>)

где

  • <Значение> — имя переменной, ранее объявленной в программном модуле. До вызова метода этой переменной присваивается либо конкретное значение перечисления (которое будет предлагаться пользователю как значение по умолчанию), либо строка — идентификатор этого перечисления. При нажатии кнопки «ОК» в переменную будет помещено выбранное пользователем значение перечисления;
  • <Подсказка> — строковое выражение, содержащее строку, которая будет выводиться в заголовке окна диалога;
  • <Таймаут> — числовое выражение, задающее интервал времени ожидания ответа пользователя в секундах. Параметр является необязательным. Если данный параметр опущен или равен 0, то время ожидания бесконечно.

Пример использования:

ВыбПризн = Перечисление.ТипыСкладов.Оптовый;
Если ВвестиПеречисление(ВыбПризн, "Выберите тип") > 0 Тогда
   . . .
КонецЕсли;

В результате работы данного кода на экран будет выведено следующее диалоговое окно:

Диалоговое окно для выбора значения

Вывести на экран окно для ввода значения заданного типа позволяет функция ВвестиЗначение() (англоязычный синоним — InputValue()). Возвращаемым значением данной функции является число:

  • 1 — если в диалоге нажата кнопка «ОК»;
  • 0 — если нажата кнопка «Отмена» или клавиша Esc.

Синтаксис функции:

ВвестиЗначение(<Значение>, <Подсказка>, <Тип>, <Длина>, <Точность>)

где

  • <Значение> — имя переменной, ранее объявленной в программном модуле. В эту переменную при нажатии кнопки «ОК» будет помещено введённое пользователем значение;
  • <Подсказка> — текст заголовка окна диалога ввода. Может использоваться в качестве подсказки конечному пользователю;
  • <Тип> — строковое выражение — название типа данных, которые требуется ввести. Например: "Строка", "Число", "Справочник.Товары", "Документ.РасходнаяНакладная" и т.п.;
  • <Длина> — максимальная длина вводимого значения. Параметр является необязательным. Используется только для типов данных "Строка" или "Число";
  • <Точность> — максимальное количество цифр после десятичной точки. Параметр является необязательным. Используется только для типа данных "Число".

При необходимости переменной, указанной в параметре <Значение>, до вызова метода можно присвоить какое-то значение, которое будет предложено пользователю, как значение по умолчанию. Если пользователь изменит предложенное ему значение, но нажмёт кнопку «Отмена», значение переменной не изменится.

Пример использования:

Прем Ном;

Если ВвестиЗначение(Ном, "Введите номер приказа", "Число", 5, 0) = 1 Тогда
   ВыбДок = СоздатьОбъект("Документ.Приказ");
   ВыбДок.НайтиПоНомеру(Строка(Ном), Дата(0));
   Если ВыбДок.Выбран() = 1 Тогда
      . . .
   ИначеЕсли;
      . . .
   КонецЕсли;
КонецЕсли;

В результате работы данного кода на экран будет выведено следующее диалоговое окно:

Диалоговое окно для ввода данных

Окна для выбора действий

Для вывода на экран диалогового окна с вопросом о дальнейших действиях используется системная функция Вопрос(). Англоязычный синоним имени функции — DoQueryBox().

Синтаксис функции:

Вопрос(<Подсказка>, <Режим>, <Таймаут>)

где

  • <Подсказка> — строковое выражение — текст вопроса;
  • <Режим> — числовое или строковое выражение, определяющее набор кнопок в окне. Возможные значения:
    • 0 или "ОК" (англ. "OK") — кнопка «ОК»;
    • 1 или "ОК+Отмена" (англ. "OK+Cancel") — кнопки «ОК» и «Отмена»;
    • 2 или "Стоп+Повтор+Пропустить" (англ. "Abort+Retry+Ignore") — кнопки «Стоп», «Повтор» и «Пропустить»;
    • 3 или "Да+Нет+Отмена" (англ. "Yes+No+Cancel") — кнопки «Да», «Нет» и «Отмена»;
    • 4 или "Да+Нет" (англ. "Yes+No") — кнопки «Да» и «Нет»;
    • 5 или "Повтор+Отмена" (англ. "Retry+Cancel") — кнопки «Повтор» и «Отмена»;
  • <Таймаут> — числовое выражение, задающее интервал времени ожидания ответа пользователя в секундах. Параметр является необязательным. Если данный параметр опущен или равен 0, то время ожидания бесконечно.

Если параметр <Режим> имеет числовое значение, возвращаемое значение функции тоже будет числовым; если строковое — строковым. Возможны следующие варианты возвращаемого значения:

  • −1 или Таймаут (англ. Timeout) — закончилось время ожидания ответа;
  • 1 или ОК (англ. OK) — нажата кнопка «ОК»;
  • 2 или Отмена (англ. Cancel) — нажата кнопка «Отмена»;
  • 3 или Стоп (англ. Abort) — нажата кнопка «Стоп»;
  • 4 или Повтор (англ. Retry) — нажата кнопка «Повтор»;
  • 5 или Пропустить (англ. Ignore) — нажата кнопка «Пропустить»;
  • 6 или Да (англ. Yes) — нажата кнопка «Да»;
  • 7 или Нет (англ. No) — нажата кнопка «Нет».

Пример использования:

Если Вопрос("Продолжить формирование отчета?", "Да+Нет") = "Да" Тогда
   . . .
Иначе
   . . .
КонецЕсли;

В результате работы данного кода на экран будут выведено следующее диалоговое окно:

Диалоговое окно

Окна для выдачи сообщений

Вывести на экран окно с каким-либо предупреждением позволяет системная процедура Предупреждение(). Англоязычный синоним имени процедуры — DoMessageBox().

Синтаксис процедуры:

Предупреждение(<Подсказка>, <Таймаут>)

где

  • <Подсказка> — строковое выражение, содержащее выводимый текст;
  • <Таймаут> — числовое выражение, задающее интервал времени ожидания ответа пользователя в секундах. Параметр является необязательным. Если данный параметр опущен или равен 0, то время ожидания бесконечно.

Пример использования:

Предупреждение("Обработка данных закончена!", 5)

В результате работы данного кода на экран будет выведено следующее окно:

Окно предупреждения

Вывести необходимую информацию в окне сообщений (то есть в специальном окне, которое по умолчанию располагается в нижней части главного окна программы)позволяет системная процедура Сообщить(). Англоязычный синоним имени процедуры — Message().

Синтаксис процедуры:

Сообщить(<Подсказка>, <ИмиджМаркера>)

где

  • <Подсказка> — строковое выражение, содержащее текст сообщения;
  • <ИмиджМаркера> — строковое выражение, которое задаёт тип пиктограммы выводимой перед сообщением. Возможные значения: "I", "!", "!!", "!!!", "." (обычное сообщение), "" (без маркера). Параметр является необязательным.

Пример использования:

Сообщить("Оля-ля!", "I");
Сообщить("Оля-ля!", "!");
Сообщить("Оля-ля!", "!!");
Сообщить("Оля-ля!", "!!!");
Сообщить("Оля-ля!", ".");
Сообщить("Оля-ля!", "");

В результате работы данного кода на экран будет выведено следующее окно:

Окно сообщений

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

Пример записи процедуры:

ОчиститьОкноСообщений();

Другие статьи по схожей тематике