Интерпретатор 1С языка в NodaLogic

12.03.26

Разработка - Мобильная разработка

Мне нужен был высокопроизводительный язык для фронт-сайда, я его сделал, а потом подумал, а что, если сделать 1С-синтаксис? Вот что из этого вышло. Продолжение статьи https://infostart.ru/1c/articles/2614496/

Для чего создан?

 


*Тут и далее речь пойдет о мобильной платформе NodaLogic, о веб – абзац в конце.

В NodaLogic и клиентская (мобильный и веб-клиент) и серверная логика базируется на Python-обработчиках и все бы хорошо – самый распространённый в мире язык программирования, единый стек на все задачи. Но есть несколько хотелок, о них дальше.


1. Выражения на самом-самом фронте


Допустим, у вас строка списка, в которой есть в данных цена и количество. И я хочу вычислять сумму в этой строке.

Как это делалось «до»: разработчик просто кладет сумму в _data сразу же, как готовит список, в отдельную переменную, например sum. Все. Ее можно забрать из данных через @sum (такой в NL оператор обращения к данным)

Но это громоздко, я хочу просто добавить в разметку функцию

Сумма=Количество*Цена

Почему не привинтить python? Во-первых, отступы (даже в данном примере, возможно, понадобится несколько строк, например, проверить, есть ли реквизиты в данных, а  могут быть условия и циклы) а отступы как соблюдешь в разметке? Нереально.  Во-вторых – производительность. На тысячи строк списка делать вызов питон-движка не очень идея – будет тормозить (проверил).

А на NodaScript (так я его назвал) – пожалуйста. У него высокопроизводительное ядро, и можно не думать о производительности. 

Теперь в элементе разметки можно написать так 

Возврат _data.quantity*_data.price

Вот так это выглядит в разметке, для понимания (этот элемент в NL - просто надпись, в value задается текст надписи либо просто в виде константы, либо через @(взять из данных), теперь добавилось # - выражение на NodaScript)

{"type":"Text","value":"#Если _data.qty!=Неопределено и _data.price!=Неопределено Тогда возврат _data.qty*_data.price  Иначе  возврат  '--' КонецЕсли",
"gravity":"right"}

Можно писать любой код, в том числе циклы, например. Но чаще всего думаю, будет что-то типа тернарного оператора:

#return ?(_date.balance<0,'--',_date.balance)

Да, сразу признаюсь, что ради того, чтобы вписывать в разметку (разметка у меня JSON) и не заморачиваться с экранированием (нечитаемо) строковые константы задаются как в двойных кавычках, так и в одинарных. И в разметке как раз удобно в одинарных, потому что сам элемент уже в двойных.  Это, конечно, не канон, зато удобно в JSON.


2.Скрипты без лишних файлов


Python скрипты позволяют создавать любую логику, но они тащат за собой py-файлы. На каждое событие можно подписать python-методы. Но в целом, для простых вещей эта конструкция может показаться громоздкой

Теперь можно писать просто вот так – событие и его скрипт. Это база для автономных решений-файлов, где данные упакованы вместе с компактной конфой, как Excel с макросами и NS один из шагов этой автономности. *Тут и далее среда разработки nmaker, поэтому цвета разметки не 1С-ные.

 


3.Скрипты в разметке


Помните, как в HTML можно вставлять JavaScript – скрипты? Вот теперь то же самое можно (если хочется) делать прямо в NL-разметки (а NL-разметку в свою очередь теперь не обязательно запускать из Python-скриптов, можно просто в классе прописать) 

 

 


4.Не забываем про 1С-ников


Я провел опрос среди SimpleUI-разработчиков, почему они не переходят на NL? Оказалось, что многие сидят на онлайн обработчиках SimpleUI+1C. Python для них чужероден и непонятен. Но с онлайном теряются плюсы самостоятельных решений. Мне кажется, сейчас это довольно актуально стало? И вот тогда я и сделал скриптовый язык с двумя лексерами – похожий на JS и похожий на 1С. Т.е. можно теперь писать, как привыкли.

 

5. Итог

 

В итоге, на NS, думаю, можно сгрузить все рутинные задачи, связанные с интерфейсом, оставив для Python бизнес-логику, интеграции и что то сложное. Это не обязательная рекомендация, просто возможность. 

 

 

Область действия и устройство


Из предыдущих абзацев понятна область действия, но я бы сформулировал принципы так

  • Скриптовый язык работает всегда с _data конкретного узла (в NodaLogic _data – это все данные узла и ОЗУ и ПЗУ, так сказать). Он может брать из _data и писать в _data. Это его основное назначение.
  • Он может быть вызван как скрипт и как get-функция в возвратом значения. Как get функция он используется для вычисления выражений в разметке, указывается через #<текст скрипта return значение>, оператор # указывает на NodaScript

Из назначения вытекает, что он должен уметь работать с JSON-образными типами (в 1С это Массив и Структура) , логическими условиями, выражениями и т.д. Т.е., простыми словами, он должен уметь добраться до любого значения в _data, что-то с ним сделать, и записать любое значение в _data

Работа с объектами и списками тут, кстати, как в JS или 1С, не как в python.

Исходя из характера такой работы есть builtins для работы со строкам, с датами. Без этого было бы сложно.

И, конечно, есть обращение к UI/UX функциям платформы.

Более подробно можно ознакомиться с инструкцией для 1С-like в русской документации: https://nodalogic-txt-ru.readthedocs.io/ru/latest/nodascript.html, для просто NodaScript -в английской документации: https://nodatxt.readthedocs.io/en/latest/nodascript.html.

Инструкции очень коротки (английская 200 строк), буквально на 1-2 листика влезут, книгу я издавать не планирую. Но даже их можно не читать, а просто скормить в контекст вашей LLM, чтобы она за вас писала. 26й год на дворе как-никак. 

 

Двоемыслие


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

Условия в стиле 1С и скобочные:

 

 

Работа с объектами и массивами с литералами и без:

 

 

Тернарка:

 

 

Про Web-клиент


Веб-клиент играет важную роль в NL, но хотя стек разработки общий, реалии все-таки отличаются от мобильной платформы. Потому что это сервер, логика на python. Но тем не менее сделал порт на JS-движке, т.е. из этого прямо следует, что его место – чисто веб-страница, там он живет. Это быстро - не гоняются данные туда-сюда.  Там есть _data узла в форме, из нее можно что-то взять, обработать. Немного более ограниченная функция, чем на Android - пока нет  вызовов типа onClick в разметке - есть #-выражения и NodaScript через события. Сейчас он в текущем релизе.  

 

Ссылки


Телеграмм канал проекта: https://t.me/thinknodes_ru

GitHub, чтобы развернуть локально (конструктор+сервер+веб-клиенты): https://github.com/dvdocumentation/nodalogic

Облако, чтобы попробовать сразу (конструктор+сервер+веб-клиенты): https://nmaker.pw/

Примеры (традиционно, так себе) в GitHub в Samples, сама NodaLogic живет там же.

Приложение в GooglePlay (мобильная платформа): https://play.google.com/store/apps/details?id=com.dv.noda и RuStore: https://www.rustore.ru/catalog/app/com.dv.noda

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Сканер штрих-кода Терминал сбора данных Мобильная разработка Монитор заказов Оптовая торговля Розничная торговля Ценообразование, анализ цен Программист Пользователь 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Простой мобильный ТСД (терминал сбора данных) сканер для 1С для смартфонов на iOS и Android, не требующий сложных настроек и установки дополнительных программ. Обмен между Вашей 1С и мобильным приложением осуществляется через облачный сервис и расширение конфигурации. Работает с конфигурациями УТ 11, ERP, КА2, Розница 2, Розница 3, УНФ 1.6, УНФ 3.0. Полнофункциональный демо-доступ для своей конфигурации можно запросить в настройках мобильного приложения - все необходимое придет на почту автоматически.

3050 руб.

22.04.2019    116238    697    205    

368

Мобильная разработка Сканер штрих-кода Терминал сбора данных 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Сбор заказов, инвентаризация, проверка ценников, просмотр полной информации об остатках и ценах со смартфона Онлайн - все это содержит в себе решение 1С "Штрихкод-информер" (штрих-код чекер). Отправка данных со смартфона выполняется либо напрямую в открытую форму документа, отсканировав QR-код, либо в общую корзину учетной системы, не подходя к компьютеру. Кассир или оператор сможет просмотреть список присланных данных и загрузить в любую форму, поддерживающую работу с ТСД. Для работы с мобильным приложением требуется опубликовать HTTP-сервис из поставляемого расширения.

3050 руб.

03.12.2018    68284    230    106    

186

Мобильная разработка Мессенджеры и боты 1С:Предприятие 8 Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13420 руб.

27.12.2021    51132    129    175    

226

Мобильная разработка Программист 1С 8.3 1С:Комплексная автоматизация 2.х 1С:КА Управленческий учет Абонемент ($m)

В этой статье простейший документ - ориентированный пример складского учета на клиент-серверной платформе NodaLogic с автономными мобильными рабочими местами. Это чисто скелетный пример как можно вынести часть учета во внешний контур. И расширение - модуль связи с 1С. Тестировалось на платформе 1С:Предприятие 8.3 (8.3.27.1326), 1С:Комплексная автоматизация 2 (2.4.8.63).

1 стартмани

13.02.2026    1395    informa1555    4    

22

Мобильная разработка 1С:Предприятие 8 1С:Управление торговлей 11 Оптовая торговля, дистрибуция, логистика Россия Платные (руб)

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

19000 руб.

24.06.2025    2358    1    0    

2

Мобильная разработка Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Абонемент ($m)

Товары (либо другие учетные объекты) могут быть промаркированы штрихкодами либо быть без штрихкодов, но с число-буквенным обозначением (артикулом, VIN-номером и т.д.). И та, и другая ситуация не проблема для SimpleUI. Но что делать, если нет ни того, ни другого? Вообще никакой маркировки. Как можно максимально ускорить работу с таким объектами? В статье показываю новые фичи релиза и готовые для встраивания поисковые комбайны на все случаи жизни. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

1 стартмани

14.04.2025    3115    7    informa1555    0    

16

Мобильная разработка Программист 1С:Предприятие 8 Абонемент ($m)

В Simple появился еще один онлайн-режим, не через REST-API, а через веб-сокеты. Показываю, что это дает, ради чего было сделано. А также два чисто онлайновых примера с такими обработчиками еще и с использованием новой ActiveCV 2.0. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

1 стартмани

07.02.2025    6081    informa1555    3    

28
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 1055 12.03.26 09:42 Сейчас в теме
Вы делаете что-то очень интересное, но не пойму что. Можете прояснить что это такое, где применяется и какие задачи решает?
3. informa1555 2810 12.03.26 10:11 Сейчас в теме
(1) Это клиент-серверная платформа NodaLogic с мобильной платформой для автономных решений, ориентированная на ИИ-алгоритмы. Задачи решает такие же как 1С в тех же областях + упор на моделирующие системы (цифровые двойники). Русская документация тут https://nodalogic-txt-ru.readthedocs.io/ru/latest/ + возможно телега даст больше ясности. Основная идея в том что конечные решения вайбкодятся в виде простых алгоритмов (т.е. бизнес получает решение, сделанное под него, а не коробку) в которых (за счет упрощения семантики) просто разобраться и поддерживать. Эта платформа - замена SimpleUI только уже не для мобильных решений, а для полноценных решений.
2. Darklight 37 12.03.26 10:09 Сейчас в теме
Лет 20 назад я смотрел на ЯП 1С Предприятие 8 как на манну небесную - после 1С 7.7, Delphi, C++, C# - 8-я платформа для меня это выглядела почти как шедевр! Правда спустя лет 6 я всё же стал больше любить C#, который изначально на дух не переносил как порождение чудища C++ -которого я ненавидел всеми фибрами своей души...
Лет 10 назад я рьяно думал, что синтаксис языка 1С надо "срочно" улучшать...
Несколько позже чётко уверен - что улучшать синтаксис ЯП 1С не нужно - его просто надо списать в утиль!
Но сейчас, смотря на "альтернативу" в лице синтаксиса языка 1С Исполнитель я думаю - а может и не надо ЯП 1С в утиль... может всё-таки улучшим старое...

Лет 10-20 назад я активно хотел изобретать новые эффективные ЯП!
А сейчас... склоняюсь к том, что для прикладных систем создавать свои проприетарные ЯП - дело не благородное... это только палки в колёса! Лучше взять за базу любой из существующих топовых ЯП, который будет эффективен в прикладной среде! И далее... ну что-то можно сократить (для упрощения применения; потом, если что, можно вернуть), что-то довнести, или даже изменить (у каждого ЯП есть недостатки, с какими-то можно мериться, а какие-то стоит улучшить) - главное в этом всё не увлекаться, по крайне мере в начале!
И всё - можно применять в своей прикладной среде - и сообщество программистов вам скажет большое спасибо, что позволило им применят то, что популярно, чему они готовы учиться и по чему полно материалов в доступе и на/с чего не сложно переходить на другие платформы!

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

Kotlin открытый ЯП - который легко транслируется хоть в Java, хоть в JavaScript, хоть в Native (в .NET в базе не умеет - но это исправимо - тоже лично пробовал). Поэтому, какой бы не была исполнительная платформа прикладного решения, её прикладной код с ЯП а-ля Kotlin можно легко транслировать в код этой исполнительной платформы! Что даёт и эффективность исполнения/отладки, и эффективность интеграции, в т.ч. с подключением внешних библиотек и их интеграции с прикладным кодом.

Вон, даже такой гигант как Гугл в своё время понял - что нефиг изобретать проприетарные ЯП - когда можно взят готовый Kotlin и сразу перетащить в свой лагерь сотни тысяч разработчиков, и ненужно особо вкладываться в развитие этого ЯП - за это отвечает другая компания!
8. starik-2005 3213 12.03.26 18:27 Сейчас в теме
(2)
Вон, даже такой гигант как Гугл в своё время понял - что нефиг изобретать проприетарные ЯП
В итоге изобрел ГО.
9. Darklight 37 13.03.26 09:54 Сейчас в теме
(8) Важно понимать:

ЯП Go представлен в 2009 году
ЯП Kotlin представлен в 2011 году
ЯП Kotlin был объявлен официальным основным языком для платформы Android 2017 году (и позже появилась Android Studio - как оф. IDE для разработки под Android; до неё были лишь надстройки над Eclips и позже - IDEA)
До ЯП Kotlin на Android были в основном ЯП Java и С/С++ (в силу применения в платформе движка Dalvik на основе JVM) но Google признала Kotlin более продвинутым ЯП, чем Java (ну и тому поспособствовали лицензионные споры с Oracle за Java)
ЯП Kotlin native (кроссплатформенный) представлен 2021 году
Только Kotlin Native формально является прямым конкурентом для Go по технологическому стеку - хотя по функциональному стеку они как раз плохо сочетаемы!

Kotlin (jvm) vs Go - на рынке web-серверных backend решений Kotlin как то не стал сильно бороться за лидерство, даже в противоборстве c Java - безусловный лидер в этом секторе. А, вот Python и Go решили побороться с Java и JavaScript - но это, скорее, уже маркетинг и гордость (с предубеждением), особенно со стороны Google - здесь нет потребности в совместимости с какой-то исполнительной платформой (как на Android с Dalvik) - поэтому Google решил-таки протолкнуть свой Go в серверную среду.
Всё-таки, ЯП Go тут начал свой путь задолго до Kotlin - и имел большой блат и финансирование со стороны Google. И специально затачивался под клиент-серверное взаимодействие, без внешних зависимостей от сторонник исполнительных платформ.

Kotlin же - не имеет широкого стека технологий именно под клиент-серверное взаимодействие! И зависит от сторонних платформ - как минимум от среды исполнения JVM (Native появился лишь недавно и сейчас совсем не ориентирован на клиент-серверное взаимодействие).
Так что, в backend'е - превосходство Go над Kotlin чисто историческое!

Но лично мне ЯП Go категорически не нравится. И я такой не один - Go с трудом развивается за пределами некоторого, сазу занятого, сектора backend стека, ему даже с Java/JavaScript там трудно бороться. А там ещё и Python наседает...

А, вот у Kotlin есть преимущество - т.к. как раз он может легко сосуществовать вместе с Java в одном стеке. Но пока он в этом направлении практически не развивается - так что тут ещё поживём, увидим, кто кого.
Но ресурсы и влияние у Google не сравнимо больше, чем у Jet Brains
10. starik-2005 3213 13.03.26 10:02 Сейчас в теме
(9)
Но ресурсы и влияние у Google не сравнимо больше, чем у Jet Brains
Влияние на собственную платформу на JVM?
На Го, кстати, переписан последний тайпскрипт - на тему конкуренции с JS, где TS его давно вытеснил. Не стоит путать инструменты для создания языков с языками для создания веселых картинок.
11. Darklight 37 13.03.26 10:30 Сейчас в теме
(10)
Влияние на собственную платформу на JVM?

Нет, речь про рынок backend решений, в частности для WEB-сектора.

На Го, кстати, переписан последний тайпскрипт - на тему конкуренции с JS, где TS его давно вытеснил

Я не спец по фронтэнду. Для меня это новость. Но, это, скорее, политика, ну и, если сравнить JS и Go в области runtime инструментариев - то Go, наверное поинтереснее будет - просто из-за скорости - а тут это важно!
Kotlin Native - тут пока ещё слабоват, и, как я уже сказал, не рвётся в backend (

Более того, во frontend сам Kotlin является прямым конкурентом для TypeScript - так что тут это 100% политика!
А в backend Kotlin прямой конкурент для MS .NET (c Java у них пока симбиоз) - так что тут тоже это 100% политика!
Микрософт свою игру ведёт...

Но спор дальше считаю бессмысленным.
Это всё - либо политика либо дело вкуса, либо ещё молодость технологий со стороны Kotlin Native.
Лично мне, чисто синтаксически больше нравится ЯП Kotlin - но платформу предпочитаю .NET, а некоторые фишки интересны у Python (но в целом он мне не нравится синтаксически, да и не типизированный он) и у Swift (он тоже больше не нравится). Но о вкусах не спорят... хотя... нет в ЯП как раз очень даже спорят ;-)

А вообще - я за новые ЯП 5-го поколения с ИИ в базе всей модели программирования! За ними будущее!
Но некоторые актуальные ЯП 3+ поколения вполне могут занять нишу промежуточных языков - между ЯП 5-го поколения и исполнительной платформой (и её байткодом) - чтобы эффективно интегрироваться в разные стеки технологий. ЯП 5-го поколения будут, через LLVM генерировать программы на ЯП 3+ поколения - и далее уже более классическая компиляция/интерпретация - в зависимости от стека, в т.ч. с LVM и IR lang.
А на ЯП 3+ поколения для программ 5-го поколения можно удобно писать какие-то специализированные библиотеки и даже делать прямые вставки блоков кода (который, к слову, так же может генерироваться ИИ, но в режиме IDE, для дальнейшего анализа/доработки программистом)
4. chesnokov-a-v 100 12.03.26 11:12 Сейчас в теме
Добрый день. Я ошибаюсь или тут в условии не хватает "НЕ"?
{"type":"Text","value":"#Если _data.qty!=Неопределено и _data.price!=Неопределено Тогда возврат _data.qty*_data.price Иначе возврат '--' КонецЕсли",
"gravity":"right"
7. informa1555 2810 12.03.26 11:44 Сейчас в теме
(4) "!=" - это "<>" )) Это я упустил да... Но "<>" мне прям всегда казался диким по сравнению с другими ЯП. "=" вместо "==" я сделал, хотя оператор присваивания в условии..., но вот с больше/меньше чет я не обратил внимания. Ну пока так.
5. chesnokov-a-v 100 12.03.26 11:15 Сейчас в теме
Пора уже выпустить какие-нибудь платные обучающие курсы для 1С-ников. А то я, например, уже потерялся во всех новых возможностях. А желание переписать код с SimpleUI есть.
6. informa1555 2810 12.03.26 11:41 Сейчас в теме
(5) Сейчас период интенсивного развития, доки/примеры как обычно немного запаздывают, LLM-ная часть - то же отстает, но подтяну. Насчет курса... нуу подумаю конечно. В идеале то конечно чтобы LLM делал да и все. Уж функционал симпла то...
Для отправки сообщения требуется регистрация/авторизация