Hello, Executor! Познакомимся с языком 1С:Исполнитель и сразу попытаемся его усовершенствовать

Публикация № 1254218

Разработка - Практика программирования

1С:Исполнитель Скрипт Разработка

На прошлой неделе произошел долгожданный громкий релиз в мире 1С: вышла бета версия 1С:Исполнителя. И пусть не оправдались все ожидания после анонса, пусть язык еще сырой, что-то сделать на нем очень интересно. Посмотрим, что это такое, и даже произведем небольшую модернизацию языка (Velocity-pad Costilization).

В прошедшие дни в профильных чатах кипели страсти по поводу нового языка: что это вообще такое, зачем он нужен, зачем было изобретать что-то новое, когда уже есть проверенные скриптовые языки, ведь он не подходит ни 1Сникам, ни админам… Я не буду вступать в эту полемику, я сам пока еще плохо понимаю его нишу, и пригодится ли он мне. Но мне интересно рассмотреть 1С:Исполнителя именно как новый язык: какой у него синтаксис, какие есть фишки. И надеяться, что это перейдет в «старший» язык 1С:Предприятия.

 

Первое знакомство

Все материалы для работы с новым инструментом находятся по адресу https://releases.1c.ru/project/Executor. Там вы найдете:

  • сам дистрибутив языка,
  • отдельную IDE на основе Eclipse по типу EDT,
  • плагин для VS Code (его можно установить и через сам редактор),
  • различную документацию.

Что же сделать, когда все установлено? Конечно же, написать «Hello World»! Вот как он выглядит на двух языках. Я буду везде дальше приводить примеры на русском и английском для сравнения.

 

метод Скрипт()
    Консоль.Записать("Ну, здравствуй, душеприказчик!")
;

 

method Script()
    Console.Write("Well hello executor!")
;

 

Хоть пример и очень короткий, в нем можно увидеть сразу много особенностей Исполнителя:

  1. Здесь это сразу не понятно, но язык регистрозависимый. Ключевые слова должны быть с маленькой буквы, все остальные слова – в CamelCase. Не в том регистре напишете имя переменной, что-либо другое, все, это будет ошибкой. Наверное, подстава для людей, расслабленных 1С и пишущих как бог на душу положит. Я всегда старюсь придерживаться стиля, поэтому каких-то проблем в связи с этим не заметил.
  2. Больше нет процедур и функций, только ключевое слово метод(method). Конечно, разделение по смыслу в языке есть, но об этом позже.
  3. Основным методом, точкой входа в скрипт является метод с именем Скрипт(Script). Если выполнить файл sbsl без допоплнительных параметров, вызовется именно этот метод.
  4. Для вывода используется Консоль.Записать. Я очень давно не работал с консольными языками, поэтому вспомнились школьные, студенческие годы с Basic, Pascal, readln, writeln… Здесь нет интерфейса программы, она запускается в командной строке.
  5. Точка с запятой в конце не просто случайно на следующую строку съехала. В Исполнителе не надо ставить «;» в конце каждой строки. Символ этот служит для завершения блока. Т.е. вместо КонецЕсли, КонецЦикла, все этого, теперь просто «;». Решение, которое взбесило многих после анонса, в том числе и меня. Однако начал непосредственно писать код, и это уже не кажется таким диким. Больше проблем, когда «;» в конце строчки постоянно ставишь. Но если говорить о старшем языке, я бы оставил ключевое слово конец(end), все же солидней как-то.

Запускается скрипт в командной строке, если у вас Java 11, следующим образом:

“%ПапкаИсполнителя%\executor_j11.cmd” –s “%ПапкаСкрипта%\ИмяСкрипта.sbsl” –m ИмяМетода

После имени самого исполнителя пишется имя файла скрипта через s и имя метода через m. Если имя метода не указать, запустится метод с именем Скрипт(Script).

 

Что-нибудь посерьезнее

Но давайте напишем скрипт, который делает хоть что-то осмысленное. И заодно узнаем больше фишек языка. Сделаем функцию, которая по переданному числу и названию предмета на английском, возвращает фразу. Например, передали 5 и «apple», а она в ответ «five apples». Вот код получившегося метода.

 

метод СклонениеСЧислом(Количество: Число, Единственное: Строка, Множественное = "-"): Строка //1

    знч Цифры = ["zero","one","two","three","four","five","six","seven","eight","nine"] //2
    знч СловоЧисла = (Количество < 10 ? Цифры[Количество] : Строка(Количество)) //3
    
    пер СловоПредмета: Строка //4
    если Количество != 1 //5
        СловоПредмета = (Множественное == "-" ? Единственное + "s" : Множественное)
    иначе
        СловоПредмета = Единственное
    ;

    возврат "%СловоЧисла %СловоПредмета" //6
;

 

method DeclensionWithNumber(Count: Number, Singular: String, Plural = "-"): String //1

    val Digits = ["zero","one","two","three","four","five","six","seven","eight","nine"] //2
    val CountWord = (Count < 10 ? Digits[Count] : String(Count)) //3
    
    var ObjectWord: String //4
    if Count != 1 //5
        ObjectWord = (Plural == "-" ? Singular + "s" : Plural)
    else
        ObjectWord = Singular
    ;

    return "%CountWord %ObjectWord" //6
;

 

Разберем строки, отмеченные цифрами:

  1. Объявляем новую функцию с параметрами. Напротив каждого параметра стоит тип. Потому как Исполнитель – это строго типизированный язык. Вот такое вот смелое решение для скриптового языка. Не знаю, как здесь, но в старшем языке это было бы круто сделать, хоть и сложно. После скобок с параметрами тоже указан тип, значит, это функция, она возвращает строку. Третий параметр необязательный, считаем, что если множественное число для предмета не прописано, то просто добавляем «s» к единственному. Однако зачем делать значением «-», а не просто пустую строку, спросите вы? Тут дело в вызове через командную строку. Необходимо передать все параметры в команде вызова, а если написать пустую строку, то это, считай, и параметр не передан. В общем, заморочка, может, что-то доделают в будущих версиях.
  2. Определяем массив цифр. Во-первых, «А чт эт за слв в нчл стрк?» - спросите вы… Теперь каждая переменная должна объявляться с ключевым словом. знч(val) для объектов, которые не будут перезаписываться, пер(var) – в другом случае. Английские названия здесь выглядят приятней. Дальше инициализация массива. Теперь это можно сделать в одну строку, е-ху! Очень удобная классная штука, хочу такую в платформу.
  3. Формируем слово, описывающее число. Здесь я применил тернарный оператор: условие, что если истина, что если ложь. Не совсем привычно после обычного 1Совского, надо пробовать на вкус. Все выражение поместил в скобки для выделения, можно и без них. По смыслу, это если число меньше 10, пишем прописью, иначе просто цифрами.
  4. Здесь я делаю просто объявление строковой переменной для представления самого предмета. Т.к. язык строготипизированный, то и каждая переменная должна иметь тип, что здесь и указывается. В переменных выше это не делалось, т.к. они сразу инициализируются значением, тогда тип можно не указывать. Зачем вообще я просто объявляю переменную, скажу чуть позже.
  5. Вот мы встретились с условным оператором если(if). Отличается он от знакомого нами тем, что слова тогда уже нет, ну и заканчивается тоже той самой «;». Еще изменились условные операторы. Вместо <> пришло !=, вместо = пришло ==. Не знаю, зачем это сделали, но ОК, запомнить можно.
  6. Возвращаем два получившихся слова через пробел. Здесь мы видим, так называемую, интерполяцию строк. Забудьте о всех этих конкатенациях с переменными, о всяких подстановках в шаблон, теперь можно просто вставлять переменные в строки через символ «%»! Круто, отличная тема, очень хочется себе «в продакшн». Так можно обращаться не только к переменным, но целые выражения в строках писать. И вернусь к переменной СловоПредмета. Зачем я вообще ее объявлял, ведь дальше она в обоих ветках условия присваивалась? А здесь мы встречаемся с областью видимости переменных. То, что произошло внутри условия, должно остаться внутри условия! Если объявить переменную где-то внутри блока, она не будет доступна за его рамками. Наверное, правильная вещь, но тоже нам, обычным 1Сникам, не привычная.

Сам вызов функции будет выглядеть так:

 

метод Скрипт()
    Консоль.Записать(СклонениеСЧислом(42, "table"))
    Консоль.Записать(СклонениеСЧислом(5, "mouse", "mice"))
;

 

method Script()
    Console.Write(DeclensionWithNumber(42, "table"))
    Console.Write(DeclensionWithNumber(5, "mouse", "mice"))
;

 

И в консоли мы увидим:

42 tables

five mice

 

А теперь нечто совсем иное

В анонсе Исполнителя на Зазеркалье было рассказано про иерархию типов (т.е. классов), про контракты (т.е. интерфейсы), про множественное наследование… Я обрадовался: «ООП, любимое, пришло в 1С, ну наконец-то, заживем!». По факту все оказалось не так радужно. Иерархия типов есть, но только для использования, из своих типов можно создавать только Структуры и Перечисления, без методов.

И даже нет возможности вызывать методы одного скрипта из другого. Зарезервированы ключевые слова импорт и экспорт, но они сейчас ничего не делают. Но это уж как-то совсем обидно, подумал я, и решил провести небольшую костылизацию, сделать на коленке механизм, который позволит вызывать методы других скриптов. Будет это происходит через вызов Исполнителем самого себя. Итак, вот решение.

 

метод ВызватьМетодСкрипта(ПутьСкрипта: Строка, ИмяМетода = "", Параметры = []): Строка //1

    знч ПутьИсполнителя = "F:\\1C\\Executor\\bin\\executor_j11.cmd" //2
    
    знч Аргументы = новый Массив() //3
    Аргументы.ДобавитьВсе(["-s", "\"%ПутьСкрипта\""]) //4
    если не ИмяМетода.Пусто() //5
        Аргументы.ДобавитьВсе(["-m", ИмяМетода])
    ;
    Аргументы.ДобавитьВсе(Параметры) //6

    пер Результат = ""
    знч Процесс = новый ПроцессОс(ПутьИсполнителя, Аргументы) //7
    Процесс.Запустить()
    пока Истина
        знч Вывод = Процесс.ПотокВывода.ПрочитатьКакТекст() //8
        если Вывод.Пусто()
            прервать
        ;
        Результат += "\н%Вывод" //9
    ;

    возврат Результат.Сократить() //10
;

 

method CallScriptMethod(ScriptPath: String, MethodName = "", Params = []): String //1

    val ExecutorPath = "F:\\1C\\Executor\\bin\\executor_j11.cmd" //2

    val Args = new Array() //3
    Args.AddAll(["-s", "\"%ScriptPath\""]) //4
    if not MethodName.IsEmpty() //5
        Args.AddAll(["-m", MethodName])
    ;
    Args.AddAll(Params) //6

    var Result = ""
    val Process = new OsProcess(ExecutorPath, Args) //7
    Process.Start()
    while True
        val Output = Process.OutputStream.ReadAsText() //8
        if Output.IsEmpty()
            break
        ;
        Result += "\n%Output" //9
    ;

    return Result.Trim() //10
;

 

Посмотрим, что здесь происходит:

  1. Метод принимает в качестве параметров путь вызываемого скрипта, имя метода, если вызывается не метод Скрипт, а также массив параметров, если такие нужны. Последний необязателен, поэтому задан пустым массивом по умолчанию.
  2. В данной строке вам нужно будет написать путь расположения своего Исполнителя. Вообще, можно было заморочиться, и определять его автоматически, т.к. есть методы для работы с переменными среды, а там можно взять PATH и найти там нужную папку, но для первой версии и так сойдет. Кстати, можете заметить, что все слеши в строке двойные. Это потому, что слеш спецсимвол, и так вводится именно он сам.
  3. Инициализируем массив аргументов для вызова Исполнителя.
  4. Добавляем в аргументы параметры вызова нужного скрипта. Здесь используется метод ДобавитьВсе(AddAll), который добавляет к массиву другой массив. Его мы тут же собрали в этой строчке. Удобно, опять же. Еще можно увидеть, что кавычка теперь записывается как \.
  5. И здесь можно порадоваться синтаксису. Переменные даже примитивных типов представляют собой полноценные объекты, у которых есть методы. Поэтому вместо ПустаяСтрока(ИмяМетода) пишется более элегантное ИмяМетода.Пустое(). Или, например, вместо СтрНайти(МояСтрока… теперь МояСтрока.Найти(
  6. Ну и в конце просто докидываем в аргументы массив параметров, а не пробегаемся по каждому в цикле.
  7. В этой строке сама «магия» метода. Мы можем создавать и запускать процессы ОС. Здесь мы запускаем Исполнитель для вызова метода «вложенного» скрипта.
  8. Метод может быть просто процедурой в терминах 1С, выполнить нужные действия без какой-либо обратной связи, но что если нужно получить результат? Для этого написана данная часть кода. Мы можем забирать данные из консоли вызываемого приложения. Т.е. если что-то было выведено в консоль в скрипте или метод возвращает значение, все это попадает сюда. Сам цикл построен немного странно, но это я взял из документации, возможно, стоит будет его переписать.
  9. Будем собирать выводимые значения в результат построчно, если их несколько. Здесь, во-первых, можно увидеть синтаксический сахар в виде +=. Вместо ВотТакаяДлиннаяПеременная = ВотТакаяДлиннаяПеременная + Другая можно писать ВотТакаяДлиннаяПеременная += Другая. Почему-то операцию ++ не ввели, но и это уже очень хорошо. И еще в самой строке можно увидеть символ новой строки. В итоге получается вот такой короткий код добавления новой строки в многострочную переменную.
  10. Возвращаем обрезанную через аналог СокрЛП строку, без лишних пропусков в начале и в конце.

 

Вот так, передав имя скрипта, имя метода, массив параметров, мы вызываем другой скрипт. Но, допустим, для наглядности мы захотим передать параметры не просто массивом, а вместе с именами. Сделаем второй метод.

 

метод ВызватьМетодСкрипта(ПутьСкрипта: Строка, ИмяМетода = "", Параметры = {:}): Строка //1
    
    знч МассивПарам = новый Массив()
    для Парам из Параметры //2
        МассивПарам.Добавить(Парам.Значение)
    ;
    возврат ВызватьМетодСкрипта(ПутьСкрипта, ИмяМетода, МассивПарам) //3
;

 

method CallScriptMethod(ScriptPath: String, MethodName = "", Params = {:}): String //1
    
    val ParamsArray = new Array()
    for Param in Params //2
        ParamsArray.Add(Param.Value)
    ;
    return CallScriptMethod(ScriptPath, MethodName, ParamsArray) //3
;

 

Что у нас здесь:

  1. Во-первых, мы написали метод с точно таким же именем. И это в том же модуле. Как же такое возможно? Это перегрузка методов. Можно объявлять методы с одинаковыми именами, но разными типами или количеством параметров. Что у нас как раз здесь и есть. Последний параметр – это Соответствие, состоящее из пар ключ – значение. Через {:} задается пустое соответствие.
  2. Здесь мы видим обход коллекции для каждого, и добавления в массив значений из соответствия. Т.е. имена переданных параметров и не важны, важен их порядок.
  3. Ну а дальше мы вызываем уже написанный выше метод с массивом параметров.

 

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

 

метод ВызватьМетодСкрипта(
    ПутьСкрипта: Строка,
    ИмяМетода = "",
    Параметр1: Строка|Число|Булево|? = Неопределено, //1
    Параметр2: Строка|Число|Булево|? = Неопределено,
    Параметр3: Строка|Число|Булево|? = Неопределено): Строка
    
    знч МассивПарам = новый Массив()
    если Параметр1 != Неопределено
        МассивПарам.Добавить(Параметр1)
    ;
    если Параметр2 != Неопределено
        МассивПарам.Добавить(Параметр2)
    ;
    если Параметр3 != Неопределено
        МассивПарам.Добавить(Параметр3)
    ;
    возврат ВызватьМетодСкрипта(ПутьСкрипта, ИмяМетода, МассивПарам)
;

 

method CallScriptMethod(
    ScriptPath: String,
    MethodName = "",
    Param1: String|Number|Boolean|? = Undefined, //1
    Param2: String|Number|Boolean|? = Undefined,
    Param3: String|Number|Boolean|? = Undefined): String
    
    val ParamsArray = new Array()
    if Param1 != Undefined
        ParamsArray.Add(Param1)
    ;
    if Param2 != Undefined
        ParamsArray.Add(Param2)
    ;
    if Param3 != Undefined
        ParamsArray.Add(Param3)
    ;
    return CallScriptMethod(ScriptPath, MethodName, ParamsArray)
;

 

В общем, тут мы не увидим уже ничего для нас нового, кроме объявления типов переменных. В вызываемый скрипт мы можем передать значения трех типов: Строка, Число, Булево. Значит параметр является переменной составного типа, что и указывается перечислением типов через черту. Еще в конце указан знак вопроса, что означает, что параметр также может иметь значение Неопределено(Undefined), его мы и присваиваем по умолчанию.

 

И теперь проверим этот механизм. Создадим основной метод.

 

метод Скрипт()
    знч ПутьСкрипта = "F:\\1C\\Executor\\SingularPluralRus.sbsl" //1
    Консоль.Записать("I have " + ВызватьМетодСкрипта(ПутьСкрипта, "СклонениеСЧислом", [4, "apple", "-"])) //2
    знч Параметры = {"Количество": 6, "Единственное": "orange", "Множественное": "-"} //3
    Консоль.Записать("You have " + ВызватьМетодСкрипта(ПутьСкрипта, "СклонениеСЧислом", Параметры))
    Консоль.Записать("He has " + ВызватьМетодСкрипта(ПутьСкрипта, "СклонениеСЧислом", 25, "cherry", "cherries"))
;

 

method Script()
    val ScripthPath = "F:\\1C\\Executor\\SingularPluralEng.sbsl" //1
    Console.Write("I have " + CallScriptMethod(ScripthPath, "DeclensionWithNumber", [4, "apple", "-"])) //2
    val Params = {"Count": 6, "Singular": "orange", "Plural": "-"} //3
    Console.Write("You have " + CallScriptMethod(ScripthPath, "DeclensionWithNumber", Params))
    Console.Write("He has " + CallScriptMethod(ScripthPath, "DeclensionWithNumber", 25, "cherry", "cherries"))
;

 

Попробуем все варианты метода

  1. Сразу сохраним путь используемого скрипта.
  2. Вызываем как обычный метод и складываем результат с заданной строкой.
  3. Так задается соответствие из ключей и значений. Кто работал с JSON, тому будет знакома эта запись (так же, как и для массива).

 

Если выполним этот скрипт, в консоли выведется:

I have four apples

You have six oranges

He has 25 cherries

 

Конечно, данное решение пока далеко от совершенства. Чтобы использовать его, нужно в скрипт, из которого вы будете делать вызовы, вставить эти методы, от одного до трех. Ну, хоть к вызываемым скриптам требований нет. Нормально передаются только примитивные типы, в первую очередь, строки. Если хочется передачи более сложных данных, нужно думать о сериализации.

Расстраивает быстродействие. Вот эти строчки, что были выше, у меня выводятся с интервалом в 1- 2 секунды. Получается, под каждый процесс снова заводится Ява Машина, как-то так, в этой теме я плаваю. Но это отправная точка, а вообще будем надеяться, что в будущих версиях разработчики добавят нормальное взаимодействие скриптов.

 

О языках и средах

Я разрабатывал и в специальной IDE для Исполнителя, и в VS Code с плагином. В обоих средах есть и автодополнение, и контекстная подсказка, с этим все хорошо. Конечно, где-то есть мелкие недочеты, но это особенности беты. В итоге могу сказать, что пока мне больше нравится разрабатывать именно в VSC. Такой скриптовый язык не требует сложной IDE, все необходимое есть в VSC, к тому же он стильный модный и молодежный.

Если говорить про язык, то мне больше понравился код на английском. Он смотрится органичней, нет странных русских сокращений. Ну и не надо переключать раскладку. Хотя, кстати, в IDE об этом позаботились. Чтобы набирать специальные символы типа “[“, “]”, нужно нажать этот символ с зажатой клавишей Alt.

Ну и вот для сравнения скриншоты одного и того же кода в IDE на русском, и в VSC на английском. Мне больше нравится второй вариант. А вам?

 

 

 

Заключение

Хоть я и описал много фишек языка, которые меня порадовали, кое-что интересное не попало в обзор. Например, создание собственных структур данных и перечислений, которые потом можно использовать во всем скрипте. Или типизированные исключения, с возможностью создания собственных типов, для более продвинутой обработки исключений. В общем, очень много чего, что хотелось бы увидеть в языке платформы.

Конечно, язык еще довольно «слаб», у него скудная стандартная библиотека, и вообще область применения туманна, но мне нравится, что 1С создает что-то новое, делает смелые шаги и не дает нам скучать.

Если интересно, добавляйтесь в группу по 1С:Исполнителю в Telegram: https://t.me/executor1c

Репозиторий со скриптами из статьи: https://github.com/KonstantinHeinrich/Call-1C-Executor-Scripts-Methods

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. SpartakM 66 23.06.20 12:04 Сейчас в теме
2-ой лучше, можешь поделиться цветовой схемой?) где то видел..не помню где..
4. CyberCerber 557 23.06.20 12:44 Сейчас в теме
(1) Это SynthWave '84: https://marketplace.visualstudio.com/items?itemName=RobbOwen.synthwave-vscode
Для тех, кто скучает по 80-м, Майами, неоновым закатам, красному Феррари и всем такому :-)
Там еще отдельно glow эффект можно включить
MezhduProchim; SpartakM; +2 Ответить
109. aximo 1591 24.06.20 19:14 Сейчас в теме
(4) а как эту тему поставить? - файл vsix
119. CyberCerber 557 24.06.20 20:42 Сейчас в теме
(109) Да не надо никакого файла. Просто в самом VS Code в поиске плагинов набираете это название и ставите.
2. van_za 88 23.06.20 12:34 Сейчас в теме
Зачем этот язык если есть golang?
Evil Beaver; DmitryKSL; comol; zakiap; Dmitryiv; +5 Ответить
3. Dmitryiv 128 23.06.20 12:42 Сейчас в теме
(2) Вот и у меня тотже вопрос, только шире - зачем? Безотносительного того, что уже есть на рынке.
6. CyberCerber 557 23.06.20 12:47 Сейчас в теме
(3) Если безотносительно, то для автоматизации рутинных операций. Обновлений кучи баз, каких-то проверок и т.д.
56. comol 4321 23.06.20 17:45 Сейчас в теме
(6) Если есть Центр Администрирования...
96. JohnyDeath 297 24.06.20 18:15 Сейчас в теме
(56) в котором всё это на питоне
97. CyberCerber 557 24.06.20 18:16 Сейчас в теме
(96) И сейчас они переводят это с Пайтона на Исполнтиель
112. comol 4321 24.06.20 19:35 Сейчас в теме
(97) Откуда инфа? Официального объявления не было. Искренне надеюсь что маразм до этого не дойдёт.
JohnyDeath; +1 Ответить
122. CyberCerber 557 24.06.20 20:45 Сейчас в теме
(112) В том же официальном чате в Телеге. И еще где-то было, кажется
131. JohnyDeath 297 24.06.20 22:02 Сейчас в теме
(97) надеюсь, что до этого не дойдет )
Остается только одно оправдание: этот язык станет основной V9 и новое поколение программеров будет воспринимать Исполнителя ровно так, как мы сейчас воспринимаем OScript - родной и из консольки.
148. Darklight 22 25.06.20 10:50 Сейчас в теме
(131)100% язык делает для замены Питона в решении 1С Центр администрирования - вот только нафига в скриптомом языке делать статическую типизацию - мне не понятно, но...
А на 90% это проработка возможностей по дальнейшему развитию языка в 1С Предприятие 9
Хотя, я бы даже в 1С Предприятие 9 не стал бы делать статическую типизацию, при всей моей любви к статической типизации против динамической - оставил бы (пока оставил бы) динамическую, но сделал бы возможность указывать (по желанию) типы для переменных, аргументов (и, возможно, даже по желанию для поле классов) - если не указано - то это произвольный тип, если указано - то будет просто статическая проверка).
А а остальном - уверен, что когда язык дорастёт до 1С: Предприятие 9 - то он станет куда мощнее....
153. CyberCerber 557 25.06.20 11:17 Сейчас в теме
(148)
оставил бы (пока оставил бы) динамическую, но сделал бы возможность указывать (по желанию) типы для переменных, аргументов (и, возможно, даже по желанию для поле классов) - если не указано - то это произвольный тип, если указано - то будет просто статическая проверка).


Да, тоже считаю, что можно сделать такой постепенный переход, когда типизация необязательная, используется для подсказок и стат проверок. Кстати, что-то подобное уже появилось в ЕДТ.
161. Darklight 22 25.06.20 11:50 Сейчас в теме
Кстати, что-то подобное уже появилось в ЕДТ.

Знаю, что появилось - просто реализация очень примитивная!
Синтаксически - указание типов как Переменная : Тип - считаю правильным и удобным - просто аналогично можно было бы сделать это указание не обязательным. К счастью для переменных и аргументов есть вывод типа из значения - это хорошо. И к счастью еть тип "Любой" - это тоже очень хорошо!
Единственное ещё замечание по типам - я был всё-таки для сложных типов ввёл бы литеральную семантику - как-то так
Переменная : 'Число(10,2)|Строка(100,.Фиксированная)|КакойтоМодуль.КакойтоТип|СправочникСсылка.Номенклатура'?;
И да - всё-таки если переменная подразумевает значение "Неопределено" - то я бы не включал "?" как тип - а просто добавлял бы к типу справа - как это делается в других языках программирования - зачем выпендриваться - когда синтаксис уже устоялся.
Ну и операторы тоже нужны:
а = Переменная?.Ссылка; //По идеи тут должна быть хитрая проверка не только на неопределено - но вообще на то, что можно обратиться к полю "Ссылка" (а если его нет в значении составного типа - тогда да - возвращать неопределено).
а = Переменная ?? "Пустое значение"; //А тут проверка на неопределено - если так, присвоится строка "Пустое значение"
а = Переменная?.Ссылка ?? "Пустое значение"; //Комбинированный вариант

ну и вот так тоже хорошо бы объявлять типы (если тип "КакойтоМодуль.КакойтоТип" не подразумевает значение "Неопределено"):

Переменная а : КакойтоМодуль.КакойтоТип?; ||а не так Переменная а : КакойтоМодуль.КакойтоТип|?;
166. CyberCerber 557 25.06.20 12:06 Сейчас в теме
(161)
Знаю, что появилось - просто реализация очень примитивная!

Согласен, но в ЕДТ должен быть тот же язык, что и в Конфигураторе, поэтому они не могли что-то особенно сделать, реализовали через комменты.
178. Darklight 22 25.06.20 12:31 Сейчас в теме
(166)Да даже через комменты можно был сделать куда лучше , мне не нравится примитивизм указания типов в синтаксисе таких комментарив - можно было же там сделать боле мощные и удобные конструкции - это же комментарии - там всё можно!
Например так
//Некий произвольный комментарий
///&Зоголовок("Функция ищет в заданном справочнике элемент по заданному отбору полей")
/// #Параметры
///      а : Строка(100),
///      б : 'Структура(
///           Поле1 : Дата(.ДатаВремя),
///           Поле2 : Число
///           )'
///     Возврат : 'СправочникСсылка.НекийСправочник'
/// #ПараметрыКонец
функция НайтиВСправочнике(а, б)
     возврат Справоники[а].НайтиПоРеквизиту(б);
КонецФункции
Показать
179. comol 4321 25.06.20 12:35 Сейчас в теме
(178) Ну декораторы в EDT и сейчас есть... это несколько упрощает жизнь... только в коде ERP их нет, поэтому упрощает это жизнь только тогда когда разрабатывашь что-то с нуля.
181. Darklight 22 25.06.20 12:55 Сейчас в теме
(179) EDT всё очень примитивно - или я что-то упустил - я выше всё достаточно красиво написал, понятно, точно и удобно в наборе. А что крутого в EDT? звёздочки и черточки?
Был бы красивый и чёткий синтаксис - можно было бы включить его в обязательные требования для 1С Совместимо, а так же по нему можно было бы устроить и автогенерацию документации, и автмоатически подключать в синтаксис-помошник!
185. comol 4321 25.06.20 13:52 Сейчас в теме
(181) можно через собачку тип указать и его EDT будет проверять и подсказки контекстные показывать.
132. JohnyDeath 297 24.06.20 22:04 Сейчас в теме
(56) а вообще вещь еще достаточно сыроватая, чтобы её приправлять сыроватым Исполнителем )
Но с другой стороны прогресс по другому и не заходит. Только через разрушение старого. ;)
5. CyberCerber 557 23.06.20 12:46 Сейчас в теме
(2) А также python, bash, powershell и множетсво других... Как я уже писал, я не могу сказать, какая область применения именно этого языка, мне он интересен, в первую очередь, как развитие платформы.
MezhduProchim; SeiOkami; SpartakM; +3 Ответить
12. SeiOkami 1477 23.06.20 13:50 Сейчас в теме
(5) когда появлялся OneScript, его назначение тоже было довольно смутным... А сейчас и в требованиях в вакансиях видел )
CyberCerber; +1 Ответить
58. comol 4321 23.06.20 17:46 Сейчас в теме
(12) OneScript сразу понятно было назначение, почему же...
65. SeiOkami 1477 23.06.20 18:35 Сейчас в теме
(58) ну примерно такое же и у 1С:Исполнитель
98. comol 4321 24.06.20 18:16 Сейчас в теме
(65) 1C:Исполнитель сможет использовать любой 1С-ник без документации и подготовки?
128. SeiOkami 1477 24.06.20 21:39 Сейчас в теме
(98) нет, как и OneScript

В нём тоже нужно доразбираться. Приходилось идти в телеграмм чат, чтобы задать вопрос.

Пусть OneScript и более схож с классическим 1С, но Исполнитель совершенно не сложный в освоении.
135. comol 4321 25.06.20 01:59 Сейчас в теме
(128) Хз. Ванскрипт я поставил и написал скрипт. Вцелом мне он нафиг не нужен, но было прикольно, особенно когда появились скрипты от сообщества - тогда стал нужен.

Исполнитель я поставил, офигел, посмотрел примеры. Выругался... написал скрипт. Но как бы у меня есть проекты и на python и на .net и на ts... и то показалось "неведомая хрень" а что делать традиционному 1С-нику...
67. CyberCerber 557 23.06.20 18:37 Сейчас в теме
(58) И в чем отличия назначения 1Скрипт от Исполнителя?
73. comol 4321 23.06.20 19:14 Сейчас в теме
(67) Onescript сделан для 1С ников. На нем можно писать код задач администрирования на 1С. Исполнитель сделан хз для кого. На нем код писать не могут ни 1С ники, ни ребята из не 1С мира.

А... Про назначение речь - оно полностью идентичное :)
mirco; JohnyDeath; oldcopy; Evil Beaver; +4 Ответить
84. SeiOkami 1477 24.06.20 11:34 Сейчас в теме
(73)

На нем код писать не могут ни 1С ники, ни ребята из не 1С мира.

Мне кажется, что несложно разобраться для уровня простых скриптов. Я за минут 15 с нуля написал скрипт по очистке кэша пользователей с указанием дней хранения. Он простой, конечно, но и я не работал до этого с новым языком.

Хотя, согласен, OneScript больше подходит для среднестатистического 1Сника. Но тут мы уже видим переосмысление ЯП
comol; CyberCerber; +2 Ответить
99. comol 4321 24.06.20 18:18 Сейчас в теме
(84) Я тоже за 15 минут разобрался... но лучше я это время потрачу на изучение Go, Rust, Haskell и прочей модной хрени. Зачем мне, даже 1С-нику 1С исполнитель? Чем плох Ванскрипт и Центр администрирования. Какую пользу я для себя приобрету выучив этот язык?..
85. CyberCerber 557 24.06.20 12:04 Сейчас в теме
(73) Да, назначение идентичное
Но если говорить именно про развитие языка, то Исполнитель делает больше для него, чем 1Скрипт.
1Скрипт просто повторяет язык 1С, а Исп движется дальше.
100. comol 4321 24.06.20 18:22 Сейчас в теме
(85) Исполнитель это новый язык. Он движется дальше чем Go/Rust/Java/Dart/C#/F#/Haskell/Python?

Чем? Ели для меня 1С-ника надо выучить новый язык какая у меня мотивация выучить именно 1С:Исполнитель? Почему не взять любой другой язык общего назначения?

Тем более - мне же решать задачи администрирования... Тут у 1С нет преимуществ в виде платформы и предметно-ориентированных фишек. Зачем мне как и любому другому 1С-нику учить Исполнитель? Зачем 1С устроили этот "цирк с конями"?
TODD22; rpgshnik; user1035175; +3 Ответить
115. CyberCerber 557 24.06.20 20:38 Сейчас в теме
(100) Я, кажется, что уже в 10-й раз пытаюсь сказать, что пока сам Исполнитель, как 1Скрипт мне не очень интересен, потому что я не занимаюсь задачами администрирования и пока не представляю, где могу у себя применить... Интересно посмотреть, как 1С представляет современное программирование, и что, может, ждеть в обозримом будущем всех 1Сников.
163. zqzq 21 25.06.20 11:52 Сейчас в теме
(100) В анонсе обещали специфические 1С библиотеки
Этот язык сценариев обладает библиотекой времени исполнения, очень схожей с таковой в системе программ "1С:Предприятие", поддерживая, в том числе, и очень специфические объекты (например, доступ к кластеру серверов 1С:Предприятия).


Набросал ради интереса пример из статьи на F#
let DeclensionWithNumber Count Singular Plural =
    let Digits = [|"zero";"one";"two";"three";"four";"five";"six";"seven";"eight";"nine"|]
    let CountWord = if Count < 10 then Digits.[Count] else Count.ToString()
    let ObjectWord =
        if Count <> 1 then 
            if Plural = "" then Singular + "s" else Plural
        else Singular
        
    CountWord + " " + ObjectWord


printfn "%A" (DeclensionWithNumber 42 "table" "")
printfn "%A" (DeclensionWithNumber 5  "mouse" "mice")
Показать

(С параметрами по умолчанию проблема, ну да ладно... Можно выполнить онлайн на https://dotnetfiddle.net/ )

Исходный пример:
method DeclensionWithNumber(Count: Number, Singular: String, Plural = "-"): String //1

    val Digits = ["zero","one","two","three","four","five","six","seven","eight","nine"] //2
    val CountWord = (Count < 10 ? Digits[Count] : String(Count)) //3
    
    var ObjectWord: String //4
    if Count != 1 //5
        ObjectWord = (Plural == "-" ? Singular + "s" : Plural)
    else
        ObjectWord = Singular
    ;

    return "%CountWord %ObjectWord" //6
;

method Script()
    Console.Write(DeclensionWithNumber(42, "table"))
    Console.Write(DeclensionWithNumber(5, "mouse", "mice"))
;
Показать


F# приятнее, т. к. сам вычисляет типы в простых случаях, меньше скобочек и точек с запятой, но от 1С ещё дальше, пожалуй.
170. Perfolenta 188 25.06.20 12:15 Сейчас в теме
(163)
F# приятнее


а как Вам на Перфоленте:
Программа СклонениеСЧислом

    //---------------------------
    Функция СклонениеСЧислом(Количество тип Число, 
                             Единственное тип Строка, 
                             Множественное тип Строка = "-"
                             ) тип Строка
    
        возврат ""
        +?(Количество < 10,
            {"zero","one","two","three","four","five","six","seven","eight","nine"}[Количество],
            Количество)
        +" "
        +?(Количество<>1,
            ?(Множественное = "-",
                Единственное + "s",
                Множественное),
            Единственное)
    	
    КонецФункции	

	//---------------------------
	Процедура Старт
            ВыводСтроки СклонениеСЧислом(42, "table")
            ВыводСтроки СклонениеСЧислом(5, "mouse", "mice")
        
            Пауза
	КонецПроцедуры
	
КонецПрограммы	
Показать


имеет право на жизнь?
184. zqzq 21 25.06.20 13:39 Сейчас в теме
(170) На первый взгляд по примеру Перфолента очень близка к Исполнителю (с учетом измененной логики/ удаления промежуточных переменных). Также оператор "?" тяжело воспринимается.
186. Perfolenta 188 25.06.20 13:57 Сейчас в теме
(184) Перфолента близка к Исполнителю только типизацией... но если я сделаю синонимы некоторых ключевых слов и конец блока с помощью точки с запятой, то можно будет очень похоже на Исполнитель писать... даже сейчас можно писать как по 1С-ному, так и похоже на Исполнитель...
//---- почти по 1С-ному -----------------------
Функция СклонениеСЧислом2(Количество тип Число, 
                         Единственное тип Строка, 
                         Множественное тип Строка = "-"
                         ) тип Строка
    Цифры = СтрРазделить("zero,one,two,three,four,five,six,seven,eight,nine",",");
    СловоЧисла = ?(Количество < 10, Цифры[Количество], Строка(Количество));
    СловоПредмета = "";
    Если Количество <> 1 Тогда
        СловоПредмета = ?(Множественное = "-", Единственное + "s", Множественное);
    Иначе
        СловоПредмета = Единственное;
    КонецЕсли

    Возврат СтрШаблон("%1 %2",СловоЧисла,СловоПредмета);
    
КонецФункции

//---- почти по Исполнительному -----------------------
Функция СклонениеСЧислом3(Количество тип Число, 
                         Единственное тип Строка, 
                         Множественное тип Строка = "-"
                         ) тип Строка
    Конст Цифры = {"zero","one","two","three","four","five","six","seven","eight","nine"}
    Конст СловоЧисла = ?(Количество < 10, Цифры[Количество], Строка(Количество))
    Перем СловоПредмета тип Строка = ""
    Если Количество <> 1
        СловоПредмета = ?(Множественное = "-", Единственное + "s", Множественное)
    Иначе
        СловоПредмета = Единственное
    КонецЕсли

    Возврат $"{СловоЧисла} {СловоПредмета}"
    
КонецФункции    
Показать
193. Perfolenta 188 25.06.20 15:10 Сейчас в теме
(184)
Также оператор "?" тяжело воспринимается.


когда он разбит на три строки с отступами он очень легко воспринимается...
в первой строке условие, во второй выражение Тогда, в третьей выражение Иначе...

?(условие,
        выражениеТогда,
        выражениеИначе
  )


тернарный оператор у?в1:в2 на мой взгляд хуже воспринимается если выражения длинные... особенно когда условное выражение длинное, т.к. при начале чтения выражения еще не знаешь и не видишь, что это будет тернарный оператор...
и при разбитии на три строки немного хуже воспринимается, т.к. условие повисает само по себе, но в целом терпимо...

условие
    ? выражениеТогда
     : выражениеИначе
213. Darklight 22 25.06.20 17:41 Сейчас в теме
(193)Как раз когда выражения длинные тернарный оператор воспринимается луше

Перем а = 
Условие1 
    ? Выражение1
    : Условие2
         ? Выражение2
         : Условие3
               ? Выражение3
               : ВыражениеИначе;


Можно и без иерархии отступов - тоже красиво и понятно

Перем а = 
Условие1
    ? Выражение1
    : Условие2
    ? Выражение2
    : Условие3
    ? Выражение3
    : ВыражениеИначе;


Но лучше - конечно это применять конструкцию паттерн метчинга для сложных условий:

Перем а = 
Подбор
    Условие1 : Выражение1,
    Условие2 : Выражение2,
    Условие3 : Выражение3,
    _ : ВыражениеИначе;
КонецПодбора //ну или иные терминаторы блоков кода
215. Perfolenta 188 25.06.20 17:53 Сейчас в теме
(213)
Как раз когда выражения длинные тернарный оператор воспринимается луше

вы несколько не верно интерпретировали мой комментарий... я имел ввиду, что сильно хуже, кода в одну строку...
а когда в несколько строк, я написал, что НЕМНОГО хуже, но терпимо...
терпимо, если не забывать, что а1 ? б1 : а2 ? б2 : а3 ? б3 : а4 ? б4 : в надо рассматривать справа налево... что само по себе не тривиально при длинных выражениях....

а вот за пример с Подбор/КонецПодбора подумаю... у меня уже есть Выбор/КонецВыбора, но не в функциональной форме...

хотя у меня в перфоленте есть функция
?(условие1,
    выражение1,
    условие2,
    выражение2,
    условие3,
    выражение3,
    выражениеИначе
)
Показать
217. Darklight 22 25.06.20 17:59 Сейчас в теме
(215)Вы говорили про скобочки - я написал, что без них лучше. Вам написали - что нужно правильно форматировать строку - чтобы проблем не было (и скобочку тут только ухудшают форматирование) - вот я и привёл вариант с правильным форматированием для длинны выражений.

А по поводу паттерн метчинга в стиле выражений - подумайте подумайте - это идёт из функциональных языков - и уже есть в C# - но об этом я Вам уже давно тоже говорил!

Тут только для меттчинга нужно хороший русский термин подобрать - вот сегодня мне пришло в голову использовать слово "Подбор" - на мой взгляд и коротко и по существу (хоть как-то ассоциируется со операцией Match), а, вот, слова "Соответствие","Сравнение","Сопоставление" мне не нравится - слишком длинное, как и "Переключение" - вообще странный термин.
218. Perfolenta 188 25.06.20 18:07 Сейчас в теме
(217)
об этом я Вам уже давно тоже говорил

это не Вы давно говорили - это время быстро летит...
я, к сожалению, в этом году болел много, плюс основная работа, поэтому дело развития Перфоленты очень медленно шло...
220. Darklight 22 25.06.20 18:09 Сейчас в теме
(218)Сочувствую и желаю наверстать не перенапрягаясь!
221. Perfolenta 188 25.06.20 18:09 Сейчас в теме
(220) спасибо! буду стараться, очень уж хочется довести до ума...
57. comol 4321 23.06.20 17:46 Сейчас в теме
(5) А в чём связь между платформой и сей поделкой?
66. CyberCerber 557 23.06.20 18:36 Сейчас в теме
(57) Фичи этого языка могут перейти в новую версию платформы. В самом начале статьи пишу.
MezhduProchim; +1 Ответить
101. comol 4321 24.06.20 18:24 Сейчас в теме
(66) Ну от 1С я такого заявления не видел. Это был бы совсем другой вопрос... А пока что это ваши фантазии и тот же старый анекдот "теоретически в платформе 1С будет развитие языка, практически имеем неведомую хрень"
116. CyberCerber 557 24.06.20 20:38 Сейчас в теме
(101) Такое есть в заявлении разработчиков в официальном чате.
123. comol 4321 24.06.20 20:52 Сейчас в теме
(116) Скрин в студию...
Но вообще официально заявление было на партнёрском форуме что эта поделка не относится к платформе 1С, никаких планов на неё нет и интегрировать внутрь 1С не планируется. И это было заявление СГ, которое явно заслуживает большего доверия.

Ну и платформа C++ а тут JVM как и что куда они собрались интегрировать...
127. comol 4321 24.06.20 21:05 Сейчас в теме
(124) Пасиб. Ну "в других технологиях" это скорее про ЦА имелось ввиду... платформа вряд ли. Хотя если так то может и неплохо, просто посыл неправильный
7. Mr.Rm 23.06.20 12:57 Сейчас в теме
(2) Это не golang. Скорее, Ruby + TypeScript. Со странностями
9. CyberCerber 557 23.06.20 13:19 Сейчас в теме
(7) Язык одновременно и похож, и не похож на все остальные, поэтому каждый находит в нем что-то свое. Мне напоминает в чем-то и Kotlin, и Delphi по форматированию.
147. Darklight 22 25.06.20 10:43 Сейчас в теме
(7)На мой взгляд на Kotlin больше походе - кроме наличия ";" вместо "{ }" - что на мой взгляд просто ужасно (но, наверное, лучше, чем в "Старшем языке 1С8". Но если сравнить 1С Исполнитель и Kotlin - Котлин на 3 порядка будет более продуманны, удобным и изящным языком!
152. CyberCerber 557 25.06.20 11:15 Сейчас в теме
(147) Да, уже несколько человек сравнили с Котлином. Эх, вот бы 1С купила Джет Брэйнс или наоборот, и у нас была бы 1С ИДЕЯ на Котлине... :-)
159. Darklight 22 25.06.20 11:38 Сейчас в теме
(152)Я тоже за на 90% - но
2% - это то, что мне в Kotlin совсем не нравится как реализован (например то, что классы по умолчанию запечатаны)
2% - это то, что в Kotlin не реализовано, а есть в других языках (например макросы в Nemerle, AspectJ для Java, или те же составные типы в 1С Исполнителе)
2% - это то, что в каждом новом языке должны быть какие-то новые фишки - которых нет в других языках, например, более продвинутое макропрограммирование в сочетании с контрактным программированием и АОП - хотя - это всё есть у других - но просто можно сделать ещё более глубокую интеграцию, например чтобы можно было делать свои атрибуты к элементам конструкции языка - а потом через отдельные макроскрипты их обрабатывать на уровне препроцессинга кода и вносить в него исправления, ещё до компиляции. Ну или привнести новые фишки по параллельному программирвоанию - это явно будет тренд середины XXI века! Как и в тренде будет машинное обучение и программирование на нечёткой логике - что так же хорошо бы внести в базовые фишки языка!
2% - моего самолюбия говорит о том, что, я могу предложить куда более изящное и мощное семантическое решение, чем все выше названные языки (не просто могу - но и вскоре предложу, правда лишь в теории)
2% - моего патриотизма говорит о том, что всё-таки программировать нужно на русском языке (хотя я с этим очень сопротивляюсь - но всё-равно считаю, что такая возможность должна быть)
162. Perfolenta 188 25.06.20 11:51 Сейчас в теме
(159)
2% - моего самолюбия говорит о том, что, я могу предложить куда более изящное и мощное семантическое решение, чем все выше названные языки (не просто могу - но и вскоре предложу, правда лишь в теории)

Вы уже давненько мне писали, что накатали более 30 страниц текста про это... где-то уже опубликовали или ушло в стол?

2% - моего патриотизма говорит о том, что всё-таки программировать нужно на русском языке

Ещё как нужно! Учу детей и вижу огромную разницу... когда ребенок уже программирует на русском и более-менее выучил базовый английский, тогда учить англоязычный язык программирования с ним одно удовольствие... а вот когда ребенок не зная английского начинает учить "абракадабру" в качестве первого языка программирования, дело идет туго...
сам я тоже очень люблю программировать на русском, хотя более 30 лет программирую на англоязычных языках... выражать мысли на родном языке это на много легче, удобней и приятней...
214. Darklight 22 25.06.20 17:48 Сейчас в теме
(162)
Вы уже давненько мне писали, что накатали более 30 страниц текста про это... где-то уже опубликовали или ушло в стол?

Простите, столько идей у меня, столько статей - пока ещё ждёт своего времени - сначала хотел выпустить другу статью - про общее развитие языка - а тут вышел 1С Исполнитель - и теперь думать о будущем языка 1С стало сложнее!

Но ничего - как-нибудь соберусь с мыслями и после этого шока "1С Исполнитель" - будут и с ним спорить потом :-]

А сейчас заканчиваю статью об общих изменения в языке платформе и организации взаимодействия с обществом для повышения качества кода и решений в целом, навеянное одной из последних статей Ивана Белокаменцева о хаосе в отраслевых конфах. Там текст полностью готов - сейчас довожу до ума оформление примеров - вот это очень трудно мне даётся - и примеры кода содержательные подобрать, и графическое оформление красиво и толково нарисовать!

В общем - та самая статья, о которой Вы спросили, тоже нуждается в графическом оформлении - я сейчас уже сделал аж мини IDE (рыбу) чтобы на ней продемонстрировать примеры. Даже алгоритм раскраски кода забацал! Но не всё там ещё готово - чтобы сделать финальные версии примеров - но я доведу это до конца! Уж очень глобальные темы я там подымаю - нужны качественные примеры демонстрации!

Со вторым вашим абзацем полностью согласен!
216. Perfolenta 188 25.06.20 17:56 Сейчас в теме
(214) ясно, будем ждать... мне с вами всегда интересно общаться...
219. Darklight 22 25.06.20 18:08 Сейчас в теме
(216)Ждите - в новой статье, помимо ООП и Функций высшего порядка, буду говорить о Модулях, Иерархии метаданных, Внедрении зависимостей, АОП, улучшении языка запросов, декларативном и метопрограммировании, уровнях и способах сертифицирования и о многом другом.Там тоже не маленькая статья даже без картинок вышла. Но обсуждаемых с Вами тогда тем (что я тогда отдельную статью налабал) - я тут старался не касаться - как раз, чтобы потом как раз тут статью опубликовать
165. CyberCerber 557 25.06.20 12:04 Сейчас в теме
(159) Ну, идеальных языков не бывает. Но мне Котлин очень понравился
174. Darklight 22 25.06.20 12:21 Сейчас в теме
(165)Согласен, что не бывает - и всегда есть куда расти и что поменять. Плохо то, что 1С предлагает решения никак не советуясь с сообществом!
Вот те же C# и Java - сначала годами прорабатываю фишки с энтузиастами сообщества - а только потом включают их в предварительную спецификацию будущего языка - и то, даже после этого прислушиваются к сообществу и после массового тестирования бетакомпилятора могут внести правки в финальную реализацию! Поэтому некоторые изменении в языках идут к релизу очень и очень долго, порой меняясь до неузнаваимости, или вообще не доходя! А порой - даже после релиза - возникают несовместимые изменения с предыдущими версиями - это очень больно для разработчиков - но всё же лучше - чем тащить в языке неудачные решения и конструкции на десятилетия вперёд! Компании 1С этому бы учиться и учиться ещё! Но она даже на чужих ошибках не учится!
176. comol 4321 25.06.20 12:25 Сейчас в теме
(174) Более того, с удовольствием используют и поддерживают наработки сообщества, включая их в стандартные сборки... хотя не всегда конечно :(.
Этому 1С бы тоже поучиться...
149. Darklight 22 25.06.20 10:54 Сейчас в теме
(7)На мой взгляд на Kotlin больше похоже (как уже написали) - кроме наличия ";" вместо "{ }" - что на мой взгляд просто ужасно (но, наверное, лучше, чем в "Старшем языке 1С8". От TypeScript (а ещё ранее от Scala) 1С Исполнитель унаследовал только одну мощную фишку - возможность делать составные типы - это штука да, очень крутая и редкая в языках программирования, тем более в полностью статических языках (от Scala растёт и общий тип "Любой"). Но если сравнить 1С Исполнитель и Kotlin - Котлин на 3 порядка будет более продуманны, удобным и изящным языком!
180. Darklight 22 25.06.20 12:52 Сейчас в теме
(149)Вот, только ключевое слово "method" для объявления функций не особо популярно в языках программирования - даже не знаю откуда они его взяли - но точно где-то видел - может в Object pascal - хотя, вроде бы там function и pocedure,
Вообще идея правильная - нужно только одно обозначения для подпрограмм - не правильное только название ключевого слова "method" (хотя лет 10-20 назад я бы счёл его правильным и сам предложил бы такой вариант, когда я, как раз, и где-то уже его видел).
Сейчас бы предложил бы остановится на варианте "функциия" (function) - как единого слова для выделения подпрограммы - как более привычное как 1С-никам так и другим программистам.
ну или скоратил бы до "функ" (или оставил оба варианта).
Хотя, в целом считаю более прогрессивном ключевое слово "def" (опр) - но уже более глубокие желания по унификации базы ключевых тегов языка - где через данное ключевое слово можно было бы определять любые источники типов и данных - т.е. и типы так можно было бы ещё определять и переменные, и свойства, и какие-то более продвинутые симантические шаблоны:
опр МойКласс : ПредокКласс //или ОбъектБазовый - для класса "нулевой" иерархии)
{
      опр МойТип: '{ Число, Строка(100), НекийМодуль.НекийДругойТип }' ;
      опр п : Число; //опр можно опустить
      опр с : Число(10,2)  получить { возврат Значение; } установить { Значение = _ + п; };
      опр д: Строка  получить(ф : Строка)  { возврат с.Формат(ф)} установить(ч : строка) { с = Числов.Извлечь(ч) };
      опр МояФункция(а : Число) : неопределено //допускается и (опр а : число)
      {
           опр в() => а + 1; //опр опустить нельзя
           опр б = а + 1; //опр опустить нельзя
           а = а + 2; 
           сообщить(а); //значения переданного источника аргумента а - не меняется
           сообщить(б);
           сообщить(в());
           д = "1"; //при установке свойства первый аргумент обработчика (сеттера) не указывается
           сообщить(с);
           сообщить("0x"+д("ЧГ=");
      }

      опр ш(Атр1, Атр2, Текст) : XMLШаблон = { <Node A1=&Атр1, A2=&Атр2>  &Текст </Node>};
};
Показать
77. lmnlmn 61 23.06.20 20:10 Сейчас в теме
(2) За что ж вы так golang не любите если нашли сходство между субъектом статьи и этим прекрасным языком? ))
151. Darklight 22 25.06.20 10:58 Сейчас в теме
(77)Так себе язык, извращённый (больше, чем Python), с кучей нюансов - не знаю, за что его любить
183. lmnlmn 61 25.06.20 13:02 Сейчас в теме
(151) За возможность писать компактный и ясный код.
190. Darklight 22 25.06.20 14:07 Сейчас в теме
(183)
Побочным эффектом автоматической расстановки точек с запятой компилятором стало то, что не в любом месте программы, где допустим пробел, можно использовать перенос строки. В

За одно вот это уже лютая ненависть - сделано ещё хуже чем Python
Форматирование кода - это святое для его автора (и его совесть) - как ему хочется так и он и должен его располагать (если что - применяя дополнительные разделители аля ";") . Кронечно же в большинстве случае нужно операться на стандарты и рекомендации хорошего тона - но всё же тут всегда могут быть исключения - а в остальных случаях IDE не очень навязчиво должна помотать писать "правильно"! Но не требовать этого!
Сюда же относится кривизна "механизма автоматической расстановки точек с запятой" - который делает это не логично!

Нулевой интерфейс не равен интерфейсу нулевого объекта - это просто жесть - я фигею один nil может быть не равен другому nil - это вообще жесть (не говоря уже о том смо по себе nil\NULL - Это большая ошибка (признанная автором своей самой большой ошибкой) в архитектуре языков прошлого и от неё нужно вообще избавляться в новых языках!

Многопоточность в Go тоже неахти как хорошо реализована (очень сложно сводить концы с концами, хотя интересные фишки безусловно есть)

Нет прививочной обработки ошибок - прям * в каменный век языка Си

Нет лямбда выражений и функций (если я не ошибаюсь)

Нет классического ООП (есть только жалкие потуги его эмулировать, очень извращённые потуги)

Нет обобщённых (джерерик) типов в СТАТИЧЕСКИ типизированном языке, КАРЛ - XXI век!

Нет перегрузки функций в СТАТИЧЕСКИ типизированном языке, КАРЛ - XXI век! Хотя перегрузки появились ещё до конца XX века во многих языках; сюда же можно отнести о отсутствие перегрузки операторов, хотя это, конечно, есть не во всех языках, штука чреватая, но часто очень мощная!

Нет макропрограммирования (хоть рефлексия есть, но нет возможности никак вызывать/эммитить код динамически на лету)

Есть и претензии к реализации встроенных методов и функций встроенных типов - нелогичная логика и приниципиально разное поведение одних и тех же семантических функций в зависимости от реального вызова

И ещё много других нюансов о которых можно почить в критике не википедии и на профильных сайтах! Как по мелочи (требующей привыкания), так и есть весьма раздрожительные, и делающие написание кода новичкам не надёжным, и сложным!
191. Darklight 22 25.06.20 14:46 Сейчас в теме
(190)Язык Ruby куда более интересен и красив синтаксически, особенно если бы имел статически типизируемую реализацию (компилируемую в LLVM, хотя в LLVM он и сейчас умеет компилироваться). Из схожих с Go недостатков - тут только тоже наличие проблем с многопоточным исполнеением кода

Ну а лично я сейчас больше склоняюсь к красоте синтаксиса языка C# (хоть и многое мне там не нравится из пережитков прошлого языка Си, зато современные фишки - просто бомба). Kotlin тоже весьма не плох, но тоже не без греха, с моей точки зрения, Scala - тоже очень крутой язык с точки зрения синтаксических фишек - но всё-таки достаточно сложный - не всё гладко там сделано, хотя базовая идеология великолепна! Nemerle тоже имеет много крутых фишек и мало чем синтаксически отторгает!

Даже Rust - и то синтаксически лучше чем Go - хотя у Rust много своих заморочек!
И даже Python мне кажется вполне синтасически удачным языком - разве что декораторы не очень хорошо реализованы, и управление блоками кода в виде отступов - ну просто убивает меня своим неудобством (есть ещё недостатки, но по мелочи)
195. lmnlmn 61 25.06.20 15:31 Сейчас в теме
(190) "Проблема" точек с запятой существенной не является. Трудно что ли } else { написать?

Приколы с nil в интерфейсах и указателях требуют внимания и понимания равно как и деление на ноль.

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

Ошибки: долой эти исключения с try catch - я за явную обработку ошибок а не перекидывание исключений вверх по стеку вызовов.

Лямбды и замыкания есть.

ООП не нужно. Не убеждайте меня в обратном, пожалуйста. Как в Go сделано мне очень нравиться.

Дженерики впиливают, хоть и с оговорками.

Перегрузка функций - не нужно, хоть и мощно иногда.

Макропрограммирование. Код на лету в компилируемом языке? Полагаете что это проблема языка?

Остальные пункты требуют конкретики, но не думаю что на это стоит тратить время.
196. herfis 365 25.06.20 15:50 Сейчас в теме
(195) Присоединяюсь. Касательно ООП - в golang как раз реализована современная ревизия принципов ООП, реализация которых в с++ и java сейчас многими признается чуть ли не калечащей, а шаблоны GoF - не более чем набором костылей для борьбы с последствиями.
197. Darklight 22 25.06.20 15:57 Сейчас в теме
(195)У всех своё мнение. Вопрос удобства для большинства.
"Проблема" точек с запятой существенной не является. Трудно что ли } else { написать? -

Про это уже написал - считаю любое покушение на свободу форматирования программного кода святотатством - как если бы художника заставляли всегда наносить краске масками только слева на права! Это очень усложняет вхождение в язык и, на мой взгляд, пока программист не будет дрессирован - чревато большими ошибками - а позже всё-равно чревато ошибками но меньше... А дрессировать программистов нужно умеренно - это не роботы - это творцы, их надо холить и лелеять, а не пересаживать с велосипеда с круглыми колёсами на велосипед тетрраидическими колёсами - мол так же по лесницам ездить удонее!

Приколы с nil в интерфейсах и указателях требуют внимания и понимания равно как и деление на ноль

Это не одно и тоже - деление на ноль прививается со средней школы всем и это почти 100% постулат почти везде и во всех языках программирования (есть 1% доля - где есть иное толкование - но даже там смысл не нарушается). А разные пустые значения указателей - это бред, несусвтеный - это даже не квадратные колёса - это колёса со спицами без шин и обода!
Да и вообще - сами эти пустые значения - это зло! Но не равные пустые значения - это просто трансендентное зло - которого попросту нет больше нигде - ни в одном языке больше до такого гадости не долумались (хотя может я не со всеми извращенными языками хорошо знаком).

Ошибки: долой эти исключения с try catch - я за явную обработку ошибок а не перекидывание исключений вверх по стеку вызовов.

Спорить здесь сложно - просто у обоих вариантов есть свои плюсы и минусы - но на, мой взгляд, с точки хрения стабильности - лучше иметь возможность перекидывать ошибку выше по стеку - в надежде, что там будут стоять обработчики исключений (в т.ч. реализующие иную логику обработки, нежели в текущем коде - например иное логирование, причём сами эти обработчики могут являться автовстройкой и изначально вообзе остуствовать в проекте). Ещё - хорошим решением является пометка функций, которые могут выбрасывать необработанные исклбючения специальным атрибутом - и на стадии компиляции проверять - что где-то в иерархии вызова этих функций всё-таки будет блок обработки ошибок - если не будет - не компилировать такой вызов!
Ну и блоки обработки исключений - всё-таки сейчас более привычны программистам, что упрощает освоение языка, и повышает его привлекательность как язык для изучения - не надо рушить мозг!

ООП не нужно. Не убеждайте меня в обратном, пожалуйста. Как в Go сделано мне очень нравиться.

Не будут - знаю, что есть лютые ненавистники ООП (в т.ч. в соотбществе 1С-программистов)! И тем не менее ООП сейчас более популярен в программировании, чем что-либо ещё - что так же повышает привлекательность языка!
И знаю, что многие 1С-программисты давно ждут полноценный ООП в 1С

Макропрограммирование.

Это как раз не динамическое программирование - а статическое - например как макрофункции в Nemerle (шаблоны С++ приводить не буду, чтобы не пугать). Сюдаже можно отнести методологию АОП.
Да даже на декраторах/атрибутах многие языки умудряются выстраивать элементы макропрограммирования.

Код на лету в компилируемом языке? Полагаете что это проблема языка?

Конечно. Например Java и С# могут - ну да - они компилятся в байткод - тут есть свои заморочки. Я просто указал это как недостаток - это очень крутые фишки, которые есть в некоторых других языках. И, кстати, идеологически и исторически очень востребованные в сообществе 1С.

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

Каналы - это да, неплохая задумка - хотя своих нюансов в реализации и тут хватает!
А вот синхронизировать выполнение (речь не о передачи данных через каналы) разных потоков друг с другом - вот это очень сложно - т.е. определять последовательности запуска и завершения потоков относительно друг друга!

Отсутствующая перегрузка функций и операторов требует конкретики?
8. утюгчеловек 12 23.06.20 13:00 Сейчас в теме
ИМХО
Всегда будут консервативные решения, в технологическом ландшафте которых есть только 1С.
И компании, не позволяющие себе держать зоопарк специалистов под зоопарк технологий.

Если по сабжу - то очень ждем dev tools для расширения функционала Executor'a
10. TODD22 19 23.06.20 13:28 Сейчас в теме
(8)
И компании, не позволяющие себе держать зоопарк специалистов под зоопарк технологий.

Только тут приемственности никакой кроме возможности писать на русском. Получаем "зоопарк" только от 1С.
Darklight; comol; pm74; vano-ekt; AnderWonder; +5 Ответить
16. утюгчеловек 12 23.06.20 14:16 Сейчас в теме
Поясни, пожалуйста, свою точку зрения.
Моя позиция состоит в том, что пока для этого требуется только программист 1С и/или пока программист не выходит за рамки возможностей платформы - это профит.
17. CyberCerber 557 23.06.20 14:19 Сейчас в теме
(16) Я могу пояснить. Смысл в том, что язык Исполнителя ближе к другим языкам, чем к 1С. Поэтому все равно прогеру 1С нужно учиться.
Хотя, может, я и писал простейшие скрипты пока, но какой-то стены непонимания у меня не было.
Darklight; TODD22; +2 Ответить
157. Darklight 22 25.06.20 11:25 Сейчас в теме
(17)Добавлю только - что с одной стороны - это правильное решение ориентировать новое поколения языка 1С в сторону других, более современных и популярных языков программирования - многие 1С-ники стонут, что язык 1С очень устарел и в нём очень много пережитков прошлого. А молодёжь на него тоже смотреть не хочет - т.к. есть куда более привлекательные языки программирования, их изучают и в школе и в институте и далее переходит на убожество от 1С мало кто захочет. В этом смысле 1С Исполнитель выглядит очень свежо. Но некоторые вещи, как тот же символ ";" для завершения блоков - скорее отталкивает, чем привлекает. В остальном - 1С Исполнитель ещё очень молод - и будем надеяться, что когда дело дойдёт до переноса его в 1С Предприятие (надо полагать 9) - то в языке будут и классы, и лямбды, и "Linq" и оператор "++" (а может и перегрузка не только методов, но и операторов), появятся и продвинутые аттрибуты, и метопрограммирование.... эх... губу раскатал.... а может и всё-таки появятся "{ }" - как более привычные многим не 1С программистам (но тут уж очень всё тонко и спорно может быть, если бы не популярность Python с его дебильными блоками-отступами - то всё было бы куда проще с выбором).

С другой стороны - да старпёрам 1С переходить на 1С Исполнитель будет очень трудно - и я бы не стал бы так резко менять синтаксис. Именно - использовал бы 1С Исполнитель как переходный язык к более весомой революции в 1С Предпрятие 9. Например, считаю не правильным было делать скриптовый 1С-похожий язык статически типизированным (сделал бы как в Python - только возможность указывать ограничения на типы; а уже в 1С9 - ввёл бы статическую типизацию как в Исполнителе).

Да окончания блоков кода тоже не стал бы уж так резко менять на ";" - сделал бы хоть переходный вариант - оставил бы общее ключевое слово "Конец" (как в большинстве языков где не применяется "{ }"; а уже в 1С9 подумал бы о "{ }" как более универсальном решении - вот как Kotlin - очень круто используется).

Ключевые слова на русском "пер" и "знч" всё-таки пока оставил бы как "Перем" и "Знач" - в остальном тут всё очень не однозначно - с одной стороны, наверное да - область видимость только внутри блока кода - это более правильно, с другой - 1С-никам это не удобно. Наверное для Исполнителя оствил бы как в бейсике - общую область видимости. Но то, что объявлять локальные переменные нужно через ключевое слово - считаю АБСОЛЮТНО верным решением - от этого действительно станет намного лучше


А в остальном - язык будет равзиваться дальше - там видно будет - надеюсь на появление полноценного ООП с классами, интерфейсами (в т.ч. с частичной реализацией) и частями функционального программирования (а в идеале ещё и с АОП - но это уже в 1С Предприятие 9 нужно будет, чем в скриптовом языке), и конечо же, на нормальную реализацию поддержки библиотек и пакетов скриптов
CyberCerber; +1 Ответить
164. CyberCerber 557 25.06.20 12:03 Сейчас в теме
(157) Отличный коммент, прям подпишусь почти под каждым словом. Даже хочу кинуть его в чат с разработчиками.
167. Darklight 22 25.06.20 12:14 Сейчас в теме
(164)Рад что понравилось. Против репоста не возражаю.
Сам параллельно готовлю много статей на тему изменений языка 1С - как подготовлю - начну выкладывать здесь
203. user1389464 25.06.20 16:31 Сейчас в теме
(157) Вы когда попробуете набирать код на русском, а для { } каждый раз переключать раскладку, тогда и поймете, почему они решили использовать ; :)
224. Darklight 22 25.06.20 19:09 Сейчас в теме
(203)ну для "[ ]" в том же 1С Вы же переключаете, или для "< >" или для "&".
Я уже давно предлагал несколько изящных альтернативных решений этой проблемы. Вот 1С тоже предложили один из моих вариантов для набора "[ ]" - набирать их с "ALT+" - это вкесьма удобно и быстро привыкаешь. Ведь те же "{ }" в других языках набирают же через "SHIFT+" и ничего - не жалуются!
Вот только "{ }" и "[ ]" - на одних клавишах - если делать блоки кода через "{ }" - то лучше уж их делать через "ALT+", чем "[ ]" - а их уже через "ALT+SHIFT+" - т.к. кужны они крайне редко (и чем реже - тем лучше) - хотя это и несколько ломает восприятие классическую раскладку клавиатуры - но привыкнуть быстро можно! ну и IDE - тут тоже может помогать - налету исправляя не правильные смысловые символы на правильные!

Так же 1С отказались и от "&" (применив % как элемент параметра - хотя мне это не нравится).
Так же заменили "<>" на "!=" что набирается без заморочек в русской раскладке.
Но "[ ]" оставили - и сделали удобным их способ набора!

А вот применение "{ }" для определения блоков кода (и блоки кода тут могут быть вообще очень разных форматов, например инициализаторы, или блоки вставки выражений в строки, или блоки XML шаблонов или иных шаблонов, или для создания списков) - куда как более правильное и универсальное.
Иметь явные границы блоков очень полезно - это и визуально удобно - и с практической стороны позволяет выписывать более универсальную и мощную семантику. Например в любой части кода можно взять и объявить блок кода - со своей областью видимости переменных, который не будет пересекаться с другими областями и перемееными.
Или объявлять в блоке кода - алгоритм как значение, которое нужно куда-то присвоить (переменной или аргументу), в т.ч. неявно передать как аргумент предыдущей функции (уже с закрытыми скобками/или вообще без них) как оператору (в Kotlin это очень изящно реализовано);
ещё с такими блоками очень удобно объявлять анонимные функции, описывать спец-методы доступа к свойствам, описывать лямбда функции, не являющиеся выражением (т.е. состоящие из набора инструкций в блоке алгоритма), в т.ч. прямо всё это определять внутри других блоков алгоритмов).

Преимуществ у "{ }" много - и очень много языков, которые используют "{ }" как блоки кода.

А ";" - это очень не читабельно. Ну ввели бы хотя бы слово "Конец" - как часто применяется в второй половины языков, что не применяют "{ }" для разделения блоков кода! Нет - выпендрелись - слизали с Python идею - самую жуткую какая там была - я просто в шоке - как и много других разработчиков на 1С и не только!
226. user1389464 25.06.20 19:16 Сейчас в теме
(224) Просто варианты набора с alt - требуют уже поддержки со стороны IDE, ну или использование сторонней раскладки клавиатуры, например от Чистова была Это не фича языка, это уже плюшка в среде разработки.
Понятно, что в 1С со Снегопатом это давно было сделано, и дальше уже я смотрю пошло, да и в голом блокноте вряд ли кто пишет.
234. Darklight 22 26.06.20 10:37 Сейчас в теме
(226)Конечно требуют, это не проблема (и я не спорю, что это фича языка - просто никто не рассматривает сейчас языки отдельно от IDE). Ну или можно настроить хоткеи в специализированном софте - да хоть в Autohotkey - я - вот так для 1С там настроил кстати замену "БЮ " на "<>" (кстати, наверное надо заменить на "!= " чтобы превращалось в "<> ") и "№№" на "#" ("&" - уже привык набирать по старинке - ALT+38). Можно так и ХЪ настроить на "{ }" - ну а дальше либо либо удалить лишнюю скобочку - либо писать код внутри них. Ну такие комбинации как ALT+Х там тоже настроит легко можно - коли надо. Надо, кстати, для 1С настроить сейчас для "[ ]" хоть и нужно не часто (и ALT+№ в "#", ALT+? в "&").
Естественно - там учитывается - что открыт редактор 1С - только тогда меняет!

Код 1С ещё пишут в Notepad++ VSCode - но там свои расширения для оптимизации есть!


Скажем так, в например для C++ в современных IDE вообще редко когда нужно набирать эти "{ }" через "SHIFT+" - в 90% их проставляет сама IDE автоматически - анализируя семантику места вставки (по клавише ENTER) - в 30-40% таких случаев программист просто удалит лишнюю скобку (обычно оставив открывающую - отдельно вставляемые закрывающие скобки IDE так же сама в 90% случаев ставит корректно). Аналогично умел и СНЕГОПАТ в 1С блоки вставлять

Так что тут никаких проблем вообще нет
18. TODD22 19 23.06.20 14:21 Сейчас в теме
(16)
Моя позиция состоит в том, что пока для этого требуется только программист 1С и/или пока программист не выходит за рамки возможностей платформы - это профит.

Так вроде очевидно что тут от языка встроенного в платформу только возможность писать на русском.
То есть "программист 1С" должен с начало выучить другой язык.

"Исполнитель" это не платформа 1С, язык "Исполнителя" это не язык платформы.
По этому требуется "не только программист 1С", а владеющий языком "исполнителя".
Получается "зоопарк".
24. утюгчеловек 12 23.06.20 14:57 Сейчас в теме
(18)
должен сначала выучить другой язык

Мы друг друга как будто не слышим) Польза в том, что всё нужное остается в платформе. Навскидку ты можешь не ставить Python или Ruby, если их у тебя не было на 1с-ном сервере (и не доказывать службе безопасности что это тебе нужно). И не искать отдельного Golang-программиста с ценником выше среднего 1с-ника.

С одной стороны кажется, что если ты работаешь на винде, то у тебя уже есть PS (для линха - зеркально Bash и Python) и лучше изучить его.
Но если у тебя несколько серверов и разные ОСи, то тебе пришлось бы залезть и в Bash и в PS и упаси господь в Python. Кажется удобным пользоваться одним языком вместо 2-х или 3-х.

Чтобы не казалось, что я огульно выгораживаю Исполнителя, напишу что функциональные возможности Исполнителя пока далеки Go/Python/Ruby/etc, и когда всё "случится" пока не понятно.
CyberCerber; +1 Ответить
25. TODD22 19 23.06.20 15:04 Сейчас в теме
(24)
Польза в том, что всё нужное остается в платформе.


О какой платформе речь? "Исполнитель" это не платформа 1С и это не язык встроенный в платформу 1С.

По этому выучить "Исполнитель" или условный питон всё равно придётся. Это другой язык.

И не искать отдельного Golang-программиста с ценником выше среднего 1с-ника.

Придётся искать 1сника знающего язык "Исполнителя". И не факт что он не попросит ЗП как у голанг программиста.

Тогда проще "односкрипт" взять. Там и библиотек уже напилили достаточно и язык взят из платформы.
oldcopy; awk; Daruma; утюгчеловек; +4 Ответить
26. утюгчеловек 12 23.06.20 15:08 Сейчас в теме
(25)
"Исполнитель" это не платформа 1С и это не язык встроенный в платформу 1С.

Тогда проще "односкрипт" взять. Там и библиотек уже напилили достаточно и язык взят из платформы.

Вот теперь я понял твою точку зрения. В данный момент это справедливо, соглашусь.
27. CyberCerber 557 23.06.20 15:11 Сейчас в теме
(25) Но хоть сейчас Исполнитель и не входит в стандартную поставку (посмотрим, что будет дальше), но он поставялется тем же официальным вендором, и его будет легче согласовать со службами. Думаю, тут в этом ключе приемущества есть.
TODD22; утюгчеловек; +2 Ответить
29. TODD22 19 23.06.20 15:31 Сейчас в теме
(27)Да это весомый аргумент если такие требования. Но обычно в таких организациях уже есть другие языки и платформы.

Как пример у нас в организации то же придётся установку "исполнителя" согласовывать и имя вендора вообще никакой роли не играет. СБшники одинаково не доверяют .net, питону, яве, "исполнителю" и тд.
11. aximo 1591 23.06.20 13:31 Сейчас в теме
не успели "исполнителю" отрезать пуповину, как уже статья )
14. CyberCerber 557 23.06.20 14:12 Сейчас в теме
(11) Тю, да я торможу еще... Андрей Овсянкин выпустил получасовое видео еще в субботу
19. -vito- 478 23.06.20 14:25 Сейчас в теме
(14) А где видео от Овсянкина? Можете ссылочку опубликовать? Что-то я сходу не нашел.
20. CyberCerber 557 23.06.20 14:31 Сейчас в теме
28. -vito- 478 23.06.20 15:26 Сейчас в теме
(20) Спасибо! Не знал об этом канале.
13. MikhailDr 23.06.20 13:59 Сейчас в теме
Вот и думай 1Script смотреть изучать или Исполнителя.
Оставьте свое сообщение

См. также

3 онлайн-курса по 1С-программированию: обмен данными, расчетные задачи и бухгалтерские задачи с 12 мая по 8 июля 2020 г. Промо

Практика программирования v8 Бесплатно (free)

Пакет из 3-х курсов по 1С-программированию. Основная цель - сформировать у слушателей практические навыки, связанные с реализацией задач обмена для прикладных решений, работающих на платформе “1С:Предприятие”, а также с разработкой прикладных решений, предназначенных для автоматизации расчета заработной платы и задач бухгалтерского учета.

22.04.2020    4416    23    Infostart    2    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    18521    0    ids79    26    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    18027    0    John_d    22    

Последовательности событий. Шпаргалка

Практика программирования v8 Россия Бесплатно (free)

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    13071    0    kuzyara    33    

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    35331    0    unichkin    45    

30 задач. Странных и не очень

Практика программирования v8 Бесплатно (free)

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    14445    0    YPermitin    72    

Как передать IP адрес, который вызвал HTTP запрос в 1C (для веб-сервера Apache)

Практика программирования v8 Бесплатно (free)

Столкнулся с задачей получения IP адреса, который вызывает http сервис 1С. Итак, решение:

22.11.2019    6514    0    Sibars    19    

Таблица значений. Нюансы

Практика программирования v8 Бесплатно (free)

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019    27838    0    Yashazz    45    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    27720    0    tormozit    100    

[Шпаргалка] Программное создание элементов формы

Практика программирования Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Программное создание практически всех популярных элементов формы.

06.09.2019    38912    0    rpgshnik    62    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    40997    0    ids79    52    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    24078    0    YPermitin    24    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.

20.09.2012    75241    0    tormozit    129    

Три костыля. Сказ про фокусы в коде

Практика программирования v8 Бесплатно (free)

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    22913    0    YPermitin    80    

Отслеживание выполнения фонового задания

Практика программирования Универсальные функции Разработка v8 1cv8.cf Бесплатно (free)

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    27882    0    ids79    16    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    63639    0    ids79    40    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    46138    0    tormozit    38    

Фоновое выполнение кода в 1С - это просто

Практика программирования v8 1cv8.cf Бесплатно (free)

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

02.08.2019    28860    0    avalakh    21    

Разбираемся с параметрами редактирования СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Связь по типу, Параметры выбора, Связи параметров выбора

31.07.2019    19358    0    json    12    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    47865    0    ids79    11    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    42106    0    tormozit    74    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    31080    0    ids79    27    

Регистры сведений. За кулисами

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    23560    0    YPermitin    13    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования Разработка v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    17558    0    SeiOkami    50    

Выгрузка документа по условию Промо

Практика программирования Разработка v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    15282    0    m-rv    2    

Работа с настройками системы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Варианты отчетов, работа с настройками вариантов: структура группировок, поля отчета, отборы, сортировка, условное оформление, другие настройки, настройки отображения диаграмм.

02.07.2019    37797    0    ids79    10    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    45410    0    ids79    20    

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Практика программирования Производительность и оптимизация (HighLoad) v8 v8::Запросы Бесплатно (free)

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    22691    0    dmurk    144    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

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

16.04.2019    18976    0    m-rv    17    

Регистры накопления. Структура хранения в базе данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    38024    0    YPermitin    30    

Выполнение внешней обработки в фоновом задании

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    26253    0    Eret1k    23    

О расширениях замолвите слово...

Практика программирования Разработка v8 Бесплатно (free)

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    31713    0    ellavs    126    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    28652    0    m-rv    21    

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

Практика программирования v8 Бесплатно (free)

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    25123    0    ellavs    88    

Трюки с внешними источниками данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    28562    0    YPermitin    53    

Разработка и сценарное тестирование с Vanessa-ADD. Отчетность Allure. Автоматизация запуска сценариев

Практика программирования Vanessa Automation v8 Россия Бесплатно (free)

Формируем отчетность о результатах выполнения сценариев. Автоматизируем запуск.

26.02.2019    19917    0    Vladimir Litvinenko    27    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Вариант решения задач с проведением по типовым регистрам нетиповыми регистраторами. Зачем - чтобы при сравнении конфигурации не обращать внимание на свойства регистров и исключить вероятность допущения горькой оплошности при обновлении информационных баз, заменив типы регистраторов основной конфигурации типами конфигурации поставщика. Для программных продуктов, имеющих в своем составе метаданных документ "Корректировка регистров"("Корректировка записей регистров").

05.12.2017    26697    0    itriot11    34    

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

Практика программирования БСП (Библиотека стандартных подсистем) Роли и права v8 v8::Права Бесплатно (free)

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    34149    0    ids79    9    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    73152    0    Serginio    108    

EnterpriseData – часть 2. Процесс выгрузки данных

Практика программирования Обмен через XML v8 v8::УФ Россия Бесплатно (free)

Основные этапы выгрузки данных через ED, обработчики событий выгрузки, правила обработки данных, правила конвертации объектов, конвертация свойств первого и второго этапов, процедуры БСП, используемые при выгрузке данных, структура «КомпонентыОбмена».

26.12.2018    24479    0    ids79    31    

Новый подход к обмену данными EnterpriseData

Практика программирования Обмен через XML v8 v8::УФ Россия Бесплатно (free)

Хочу предложить Вашему вниманию цикл статей, посвященных обмену данными через универсальный формат (EnterpriseData или ED).

14.12.2018    37479    0    ids79    72    

EnterpriseData - пример доработки правил конвертации без использования КД 3.0 в расширении конфигурации

Практика программирования Обмен через XML v8 v8::УФ БП3.0 УТ11 Россия Бесплатно (free)

В статье подробно описан реальный пример доработки обмена данными через EnterpriseData (универсальный формат обмена) между конфигурациями УТ 11.4 и Бухгалтерия 3.0

16.11.2018    33915    0    ids79    32    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    32139    0    ids79    40    

Программное заполнение пользовательских параметров и отборов СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Публикация представляет из себя краткие примеры того, как можно заполнять параметры СКД программно так, чтобы все параметры и отборы были доступны в быстрых настройках и в обычных (типовых) настройках параметров и отборов СКД.

13.11.2018    40786    0    Unk92    21    

Произвольный код в фоновом режиме

Практика программирования v8 1cv8.cf Бесплатно (free)

Задача: реализовать выполнение произвольного кода в фоновом режиме без изменения конфигурации, т.е. во внешней обработке.

03.09.2018    25481    0    nikita0832    42    

Тестер: частые вопросы Промо

Практика программирования v8 Бесплатно (free)

Ошибкам бой - тесты норма жизни!

25.07.2018    27354    0    grumagargler    26