Перейти к основному содержимому

Консоль

В информационных технологиях под термином консоль понимается совокупность устройств ввода/вывода, обеспечивающих диалог человека и компьютера. В данной статье используется более упрощенный вариант этого термина. Под термином консоль мы будем понимать символьный интерфейс ввода/вывода, который «1С:Предприятие.Элемент Скрипт» «наследует» у командного интерпретатора операционной системы. Для работы с консолью предназначен объект глобального контекста Консоль.

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

  1. Выводить информацию в консоль, чтобы сообщить пользователю какую-либо информацию о работе программы. Для этого используется стандартный поток вывода stdout. Вы можете взаимодействовать с потоком вывода с помощью свойства Консоль.ПотокВывода.
  2. Получать информацию из консоли. Чтение информации из консоли нужно каждый раз, когда требуется получить какие-либо данные от пользователя: параметр, ответ на вопрос и т. д. Для этого используется стандартный поток ввода stdin. Вы можете взаимодействовать с потоком ввода с помощью свойства Консоль.ПотокВвода.
  3. Отображать информацию об ошибках. Когда в исполняемом скрипте возникает ошибка, которая доходит до интерпретатора системы «1С:Предприятие.Элемент Скрипт», то информация о ней выводится в стандартный поток вывода информации об ошибках и прочих диагностических сообщений — stderr. Если во время работы сценарий обнаруживает ошибку, информация об этом также должна выводиться в стандартный поток сообщений об ошибках. Вы можете взаимодействовать с потоком ошибок с помощью свойства Консоль.ПотокОшибок.

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

Взаимодействие с пользователем

Чтобы сообщить пользователю какую-либо информацию, используйте методы, имя которых начинается с префикса Записать:

  • Записать() — выводит в стандартный поток вывода строковое представление объекта, указанного в качестве параметра;
  • ЗаписатьОшибку() — выводит сообщение об ошибке в стандартный поток сообщений об ошибках;
  • ЗаписатьТаблицу() — позволяет вывести коллекцию экземпляров структур и других типов в виде таблицы. С помощью параметров метода вы можете настроить отображение таблицы: вывести порядковый номер строки, отобразить строку заголовков, задать выравнивание по горизонтали для содержимого колонок таблицы.

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

  • СчитатьСимвол() — получает от пользователя один символ.
  • СчитатьСтроку() — получает от пользователя несколько символов (строку).
  • СчитатьЧисло() — получает от пользователя числовое значение. Формат ввода определяется локалью, которую использует консоль.
  • СчитатьБулево() — запрашивает у пользователя значения типа Булево. Фактически пользователю предлагается ввести какое-либо из значений: Истина, Ложь, True, False (при вводе учитывается регистр).
  • СчитатьПароль() — считывает и возвращает из входящего потока пароль типа Строка. При вводе символов вывод в консоль не осуществляется.

В версии «1С:Предприятие.Элемент Скрипт»-X для Windows для отображения символов в консоли используется кодировка Windows-1251 (cp1251). В остальных версиях используется UTF-8.

Пример работы с консолью

Вычисление квадрата числа
метод ВычислитьКвадратЧисла(Ввод: Строка)
попытка
пер ЧислоИзСтроки = новый Число(Ввод)
Консоль.Записать(Ввод + "^2 = " + ЧислоИзСтроки ** 2)
поймать Исключение: ИсключениеНедопустимыйФормат
Консоль.Записать("Ошибка ввода. " + Исключение.Описание)
;
;

метод Скрипт()
пер Ввод = Консоль.СчитатьСтроку("Введите число: ")
ВычислитьКвадратЧисла(Ввод)
;

Пример работы с потоками

Запись ввода пользователя в файл
метод Скрипт()
Консоль.Записать("Введите ваше полное имя:")
// Окончанием ввода считается EOF.
// Способ передачи EOF зависит от используемой консоли и среды выполнения.
пер Имя = Консоль.ПотокВвода.ПрочитатьКакБайты()

попытка
пер Пользователи = новый Файл("C:\\data\\users.txt")
исп ПотокЗаписи = Пользователи.ОткрытьПотокЗаписи(ЗаписатьВКонец = Истина)
ПотокЗаписи.Записать(Имя)
поймать ИсключениеЗаписи: Исключение
Консоль.ПотокОшибок.Записать("При записи в файл произошла ошибка. " + ИсключениеЗаписи.Описание)
;
;

Пример вывода данных в консоль в виде таблицы

Вывод информации о сотрудниках
структура СотрудникОрганизации
пер Имя: Строка
пер Должность: Строка
пер Отдел: Строка
пер Стаж: Число
;

метод ВывестиДанныеОСотрудниках()
знч Сотрудники = новый Массив<СотрудникОрганизации>()
Сотрудники.Добавить(новый СотрудникОрганизации("Алексеев Иван", "Менеджер", "Реклама и продажи", 5))
Сотрудники.Добавить(новый СотрудникОрганизации("Антонова Елена", "QA-инженер", "Тестирование", 3))
Сотрудники.Добавить(новый СотрудникОрганизации("Соколов Петр", "1С-программист", "Разработка", 8))
Сотрудники.Добавить(новый СотрудникОрганизации("Кузнецов Егор", "Фронтенд-разработчик", "Разработка", 5))

знч ЗаголовкиКолонок = ["Отдел", "Сотрудник", "Должность", "Стаж в организации"]

Консоль.ЗаписатьТаблицу<СотрудникОрганизации>(Строки = Сотрудники,
ВыводитьЗаголовки = Истина,
Заголовки = ЗаголовкиКолонок,
ВыводитьНумерацию = Истина,
ВыравниваниеСтрок = ВыравниваниеСтолбцаТаблицыКонсоли.Начало,
ВыравниваниеЧисел = ВыравниваниеСтолбцаТаблицыКонсоли.Центр)
;

В результате выполнения примера в консоль будет выведена таблица вида:

┌───┬───────────────────┬────────────────┬──────────────────────┬────────────────────┐
│ │ Отдел │ Сотрудник │ Должность │ Стаж в организации │
├───┼───────────────────┼────────────────┼──────────────────────┼────────────────────┤
│ 1 │ Реклама и продажи │ Алексеев Иван │ Менеджер │ 5 │
│ 2 │ Тестирование │ Антонова Елена │ QA-инженер │ 3 │
│ 3 │ Разработка │ Соколов Петр │ 1С-программист │ 8 │
│ 4 │ Разработка │ Кузнецов Егор │ Фронтенд-разработчик │ 5 │
└───┴───────────────────┴────────────────┴──────────────────────┴────────────────────┘