1С 8.3 Исполнитель - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Исполнитель

Данные > Примеры кода 1С > 1С 8.3 Исполнитель
1C:Исполнитель - это кроссплатформенный язык сценариев который базируется на встроенном языке разработки 1С:Предприятие (но имеет ряд отличий от него). Является аналогом командного интерпретатора ОС (cmd.exe) и обладает библиотекой времени исполнения, схожей с таковой в системе программ "1С:Предприятие", поддерживая, в том числе, и очень специфические объекты (например, доступ к кластеру серверов 1С). 1C:Исполнитель предназначен для автоматизации и администрирования информационных систем, созданных на платформе 1С:Предприятие.
Характеристики языка:
Является статически типизированным
Поддерживает английский и русский синтаксис
Присутствует иерархия типов
Поддерживаются пользовательские структуры, перечисления и исключения
Нет разделения на функции и процедуры – используется единое ключевое слово "метод". Если метод возвращает значение, на это указывает тип возвращаемого значения в сигнатуре метода
Поддерживается  повторное определение (перегрузка) методов. Перегруженные методы могут отличаться количеством и/или типом параметров и типом возвращаемого значения. Перегруженные методы не могут различаться только типом возвращаемого значения
В многострочных литералах не надо писать «|» в начале каждой новой строки
Нет точки с запятой «;» в конце операторов. В программе каждая инструкция располагается на отдельной строке. Символ ";" является универсальным символом, завершающим группировку инструкций: оператор или метод. ";" является заменой ключевых слов КонецЕсли, КонецЦикла, КонецФункции, КонецПроцедуры.
Объявления исключений, структур и перечислений заканчиваются символом ";"
Поддерживаются многострочные комментарии /*  */
Поддерживается интерполяция строк (возможность сослаться из строки через символ % на переменную или выражение)

Параллельно c 1C:Исполнителем выпускается среда разработки и отладки 1C:Executor IDE (на базе 1С:Enterprise Development Tools). Для работы требуется JRE или JDK v.1.8 (или выше), для среды разработки требуется Liberica JDK (64x).

Существует два варианта поставки (развиваются параллельно):
1С:Исполнитель U (Universal)  – Требует предустановленной Java.
1С:Исполнитель X (eXecutable) – Выпущен в апреле 2021. Работает без Java и для конкретной ОС (Windows, Linux, macOS), используется, когда критично время запуска скриптов и нежелательна установка Java. Реализован на виртуальной машине GraalVM.

Содержание установленного каталога с программой:
/bin - каталог с исполняемыми файлами
  • executor.cmd - утилита для запуска скриптов в Windows
  • executor.sh - утилита для запуска скриптов в Linux или macOS
/config - конфигурационные файлы, необходимые для работы системы
/lib - подгружаемые библиотеки
Командная строка запуска системы 1С:Исполнитель:
executor -s имя файла[-m метод] [-v] [-d номер порта] [--] [параметры сценария]

Параметры командной строки:
-s (source-path) -  имя файла со скриптом(*.sbsl). Является обязательным, только в том случае, если имя запускаемого сценария не является единственным параметром при запуске executor.
-m (method) - имя метода, с вызова которого стартует исполнение скрипта. Если параметр не заполнен, то исполнение скрипта начнется с вызова метода Скрипт (Script).
-v (version) - для получения версии исполнителя скриптов.
-d (debug-port) -  номер порта (диапазон от 0 до 65535, исключая первый и последний номер), который будет использоваться сервером отладки.
--  - признак прекращения разбора аргументов командной строки. Если параметр указан, то будет отключен разбор оставшейся части командной строки и все оставшиеся значения передаются как параметры сценария (разделитель: пробел). Данный параметр так же используется при необходимости передать в качестве значения другого параметра командной строки системы последовательность символов, начинающихся с -.
параметры сценария - в случае, когда после определения именованных параметров в командной строке запуска сценария
остались значения, то они будут переданы в запускаемый сценарий (в качестве параметров).

Пример простой командной строки: “%ПапкаИсполнителя%\executor_j11.cmd” –s “%ПапкаСкрипта%\ИмяСкрипта.sbsl” –m ИмяМетода
При работе скрипта исполнитель выводит информацию в стандартный поток вывода: stdout.
При наличии ошибок в работе, используется  стандартный поток ошибок: stderr.
Примечание: кодировка выводимой информации зависит от ОС (windows - cp866; linux и macOS - UTF-8)

Результат выполнения скрипта при завершении выводится в виде кода завершения:
  • 0 -  скрипт и исполнитель успешно завершил работу.
  • 255 - завершение работы с ошибкой.
Особенностей языка Исполнитель и отличия от 1С 8.3:
  • Скрипт начинается с метода Скрипт(Script). Это основной метод для запуска скрипта, который стартует, если выполнить файл sbsl без параметров.
  • Отсутствуют процедуры и функций, используется только ключевое слово метод (method).
  • Вместо КонецЕсли, КонецЦикла используется точка с запятой «;» и её теперь не нужно ставить в конце каждой строки, достаточно установить при завершении всего блока.
  • Язык является регистрозависимым. Ключевые слова всегда должны быть с маленькой буквы, все остальные - как и в 1С - в ГорбатомРегистре.
  • Для вывода результата используется Консоль.Записать.
Пример метода Скрипт:
метод Скрипт()
   
Консоль.Записать("Hello World!")
;
Пример объявления переменных:
метод Скрипт()
// Объявление переменных
пер AAA: любой // Неопределено
пер BBB: Строка // Пустая строка
пер CCC: Число // 0
пер DDD: Строка? // Неопределено
пер EEE: Строка|Число = 15 // 15

// Недопустимые значения при объявлении переменных
пер XXX: Строка|Число // Не указано значение инициализации
пер YYY: Строка = [5,7] // Не совпадение с указанным типом
;
Пример показа базовых типов выбранного:
метод Скрипт()
  
ВывестиБазовыеТипы(Тип(Число))
  
ВывестиБазовыеТипы(Тип(Массив))
  
ВывестиБазовыеТипы(Тип(ПотокЗаписи))
  
ВывестиБазовыеТипы(Тип(ИсключениеНедопустимыйАргумент))
;

метод ВывестиБазовыеТипы(Параметр: Тип)
  
Консоль.Записать("Базовые типы для " + Параметр)
  
пер Результат: Множество= ПеречислитьПредков(Параметр)
   для
Элемент из Результат
      Консоль.ЗаписатьСтроковоеПредставление(Элемент)
   ;
;

метод ПеречислитьПредков(Значение: Тип, Предки: Множество= {}): Множество
   для ТекущийБазТип из Значение.БазовыеТипы
      Предки.Добавить(ТекущийБазТип)
     
ПеречислитьПредков(ТекущийБазТип, Предки)
   ;
   возврат
Предки
Пример проверки соответствия типу:
ЭлементНаПроверку это[не] КонтрольныйСписокТипов // Оператор это выполняет проверку: является ли присваиваемым список типов выражения в список типов (справа за оператором)
Пример проверки на указанный тип:
метод Скрипт()
   
ЭтоКоллекция(1)
   
ЭтоКоллекция(новый Массив())
   
ЭтоКоллекция(новый ФиксированныйМассив([]))
   
ЭтоКоллекция(новый Соответствие())
   
ЭтоКоллекция(новый Множество())
;

метод ЭтоКоллекция(Параметр: Объект)
   
Консоль.ЗаписатьСтроковоеПредставление("Тип параметра = " + Параметр.ПолучитьТип())
    если
Параметр это ФиксированнаяКоллекция
        Консоль.Записать("Это фиксированная коллекция")
    иначе
       
Консоль.Записать("Это не фиксированная коллекция")
    ;
;
Пример проверки соответствия типу:
метод Скрипт()
   
пер X: Строка|Число = ""
   
пер Y: Строка|Число|Ууид = 0
   
пер Z: любой
    // Разрешенные операции
   
если X это Строка
    ;
   
Z = Y как Число
    X = Y как Строка|Число
    СкриптСПриведением("строка")
   
СкриптСПриведением(7)
   
// Запрещенные операции
   
X = Y
    Z = Y как ДатаВремя

метод СкриптСПриведением(Параметр: Объект)
    если
Параметр это Строка // "строка"
       
МетодСтрока(Параметр как Строка)
    иначе если
Параметр это Число // 7
       
МетодЧисло(Параметр как Число)
    иначе если
Параметр это Булево
        МетодБулево(Параметр как Булево)
    иначе
       
// действие для других типов
   
;
;
Пример области видимости имен:
метод Скрипт()
  
пер Z = СкриптВычисление()
;

метод СкриптВычисление(): Число
   пер Y: Число
   Y = 5
  
возврат Y
;
Пример видимости имен с вложенными областями:
метод Скрипт()
   
пер МаркаАвто: Строка
    МаркаАвто = Консоль.СчитатьСтроку("Введите марку автомобиля: ")
   
// Область видимости переменной "МаркаАвто" распространяется до конца скрипта
   
если МаркаАвто == "BMW"
   
пер ДизельныеДвигатели: Массив
    // Видимые переменные: МаркаАвто, ДизельныеДвигатели
   
иначе если МаркаАвто == "Audi"
       
пер БензиновыеДвигатели: Массив
        // Видимые переменные: МаркаАвто, БензиновыеДвигатели
   
иначе
       
область
        пер СписокМарокАвто: Массив
        // Видимые переменные: МаркаАвто, СписокМарокАвто
       
для КонкретнаяМаркаАвто из СписокМарокАвто
            // Видимые переменные: МаркаАвто, СписокМарокАвто, КонкретнаяМаркаАвто
       
;
           
// Видимые переменные: МаркаАвто, СписокМарокАвто
   
;
           
область
            пер СписокКонтактов: Массив
            // Видимые переменные: МаркаАвто, СписокМарокАвто
   
;
           
// Видимые пременные: МаркаАвто
   
;
;
Пример работы с числами:
метод Скрипт()
  
пер pNumb: Число
   pNumb = 75 // целое 10-ое число
  
pNumb = 2.7182818284 // дробное 10-ое число
  
pNumb = 75/15 // выражение с использованием 10-х чисел
  
pNumb = 0x5A3 // 16-ое число
  
pNumb = -0x5A3 // отрицательное 16-ое число
  
pNumb = 0b101 // 2-ое число
;
Пример подключения к системе взаимодействия и показ в консоль первых 20 непрочитанных обсуждений:
метод ТестРаботыССВ()

    
// Адрес сервера для создания приложения (протокол+адрес сервера+порт сервера)
    
пер АдресСервераWSS = "wss://address.ecs:9094?transport=websocket&version=4"

    
// Путь к файлу с хранилищем ключей, содержащему сертификат сервера СВ
    
пер ФайлХранилищаJKS = "C:\\key.jks"

    
// Строка с паролем к хранилищу
    
пер ПарольХранилища = "keyPass"

    
// Строка с паролем к сертификату
    
пер ПарольКлюча = "certPass"

    
// Таймаут операции
    
пер ТаймаутОперации = 10с //10 секунд

     // Уникальный идентификатор пользователя приложения
    
пер ПользовательПриложения = новый Ууид("89eb3eb1-d32e-45ea-a308-a7ua8301by3c")

    
// Строка с именем пользователя приложения
    
пер ИмяПользователя = "Артур"

    
// Строки с полным именем пользователя приложения
    
пер ПолноеИмяПользователя = "Коржан Артур"

    
// Код, который присылает сервер СВ для регистрации нового приложения
    
пер КодАктивации = "9876543210"

    
// Адрес эл. почты для регистрации приложения на сервере СВ
    
пер ПочтовыйАдрес = "artur@1cnik.by"

    
// ИмяПриложения подключаемой информационной базы
    
пер ИмяПриложения = "myApp"

    
// Подключение...
    
СистемаВзаимодействия.Подключиться(АдресСервераWSS, ФайлХранилищаJKS, ПарольХранилища, ПарольКлюча, ТаймаутОперации)

    
// Подготовка ключа...
    
пер Ключи = новый КлючиПриложения()

    
// Создание приложения...
    
пер ПарПриложенияСВ = СистемаВзаимодействия.СоздатьПриложение(Ключи, ПользовательПриложения, ИмяПользователя, ПолноеИмяПользователя, КодАктивации, ПочтовыйАдрес, ИмяПриложения)

    
// Ответ сервера...
    
пер ИдентификаторПриложенияСВ: Ууид = ПарПриложенияСВ.ИдентификаторПриложения
     пер ОткрытыйКлючПриложенияСВ: Строка = ПарПриложенияСВ.ОткрытыйКлюч

     // Сохранение параметров приложения (для последующего использования)
    
Консоль.Записать(Ключи.ОткрытыйКлюч.ВСтроку())
    
Консоль.Записать(Ключи.ЗакрытыйКлюч.ВСтроку())
    
Консоль.Записать(ИдентификаторПриложенияСВ.ВСтроку())
    
Консоль.Записать(ОткрытыйКлючПриложенияСВ.ВСтроку())

    
// Аутентификация...
    
пер ИдПользователяСВ = СистемаВзаимодействия.Войти(Ключи, ПользовательПриложенияИмяПользователя, ПолноеИмяПользователя, ПарПриложенияСВ)

    
// Работа с системой взаимодействия...
     // Получение первых 20-ти непрочитанных обсуждений и вывод в консоль
    
попытка

        
// Получение непрочитанных обсуждений
        
пер МассивИДНепрочитанныхОбсуждений СистемаВзаимодействия.ПолучитьНепрочитанныеОбсуждения(, 20)

        
// Получение непрочитанных обсужденийкаждого непрочитанного обсуждения (в хронологическом порядке)
        
для ИДНепрочитОбсуждения из МассивИДНепрочитанныхОбсуждений
              Консоль.Записать("Обсуждение № " + ИДНепрочитОбсуждения.Формат)

            
пер МассивНовыхСообщений = СистемаВзаимодействия.ПолучитьНепрочитанныеСообщения(ИДНепрочитОбсуждения)

             для
Сообщение из МассивНовыхСообщений
                 Консоль.Записать("Сообщение # " + Сообщение.Идентификатор + " : " + Сообщение.Текст)
            
// Установка прочитанного сообщения как последнее прочитанное
            
СистемаВзаимодействия.УстановитьПоследнееПрочитанноеСообщение(ИДНепрочитОбсуждения, Сообщение.Идентификатор)
             ;
         ;
    
поймать Искл : ИсключениеСистемыВзаимодействия
         Консоль.ЗаписатьОшибку("Ошибка системы взаимодействия: " + Искл)
     ;
    
// Отключение...
    
СистемаВзаимодействия.Отключиться()
 ;

Вступайте в официальную группу 1c:Executor: https://t.me/e1c_executor
Рекомендую к просмотру: Обзор 1С: Исполнитель
Рекомендую к просмотру: Вводный урок по 1С: Исполнитель
3
комментарии
HRom
29 ноя 2021
Добрый день,
подскажите как в 1С:Исполнителе отправить https-запрос с использованием авторизации по Сертификату.

Во встроенном языке 1С это такой код:
ssl = Новый ЗащищенноеСоединениеOpenSSL(
Неопределено,
Неопределено);
Соединение = Новый HTTPСоединение("xxxx",,,,,,ssl);


в исполнителе:
метод Скрипт()
пер МойКлиент = КлиентHttp.СБазовымUrl("https://xxxx")
пер Запрос = МойКлиент.ЗапросGet("/api/v1/yyyyyy")
Запрос.Выполнить()
;


возвращает:
Unknown input/output error: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Сергей
27 окт 2020
Там еще будет куча ошибок. Вот когда устранят, тогда и скачаем
off
27 окт 2020
Кстати вчера вышел 1С:Исполнитель 2020.2.2
____________________
Copyright©, «Программист 1С в г.Минске», 02.06.2020 (upd. 08.10.2021)
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому