Консоль
В информационных технологиях под термином консоль понимается совокупность устройств ввода/вывода, обеспечивающих диалог человека и компьютера. В данной статье используется более упрощенный вариант этого термина. Под термином консоль мы будем понимать символьный интерфейс ввода/вывода, который «1С:Предприятие.Элемент Скрипт» «наследует» у командного интерпретатора операционной системы. Для работы с консол ью предназначен объект глобального контекста Консоль.
Как и любой интерфейс ввода/вывода, консоль предполагает два основных действия: вывести информацию в консоль и получить информацию из консоли. Сделаем небольшое отступление и кратко рассмотрим такое понятие, как стандартные потоки. С точки зрения программы, стандартные потоки — это предопределенные интерфейсы к механизмам операционной системы, позволяющие выполнять три стандартных действия:
- Выводить информацию в консоль, чтобы сообщить пользователю какую-либо информацию о работе программы. Для этого используется стандартный поток вывода
stdout. Вы можете взаимодействовать с потоком вывода с помощью свойстваКонсоль.ПотокВывода. - Получать информацию из консоли. Чтение информации из консоли нужно каждый раз, когда требуется получить какие-либо данные от пользователя: параметр, ответ на вопрос и т. д. Для этого используется стандартный поток ввода
stdin. Вы можете взаимодействоват ь с потоком ввода с помощью свойстваКонсоль.ПотокВвода. - Отображать информацию об ошибках. Когда в исполняемом скрипте возникает ошибка, которая доходит до интерпретатора системы «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 │
└───┴───────────────────┴────────────────┴──────────────────────┴────────────────────┘