Вебинтерфейс для OneScript и 1С

30.06.17

Разработка - OneScript

Пример создания вебинтерфейса для OneScript с использованием библиотеки UfaScript.osb

  Поскольку OneScript является объектно-ориентированным языком программирования (см. статью "Как сделать OneScript объектно-ориентированным" //infostart.ru/public/611221/ ), то для полноценного языка программирования ему не хватало графического интерфейса. Если раньше я предложил технологию объектно-ориентированного программирования на OneScript, то теперь я предлагаю многопользовательский вебинтерфейс для OneScript. Для использования такого интерфейса вам понадобится вебсервер, например, OpenServer и браузер, например, Chrome. Кроме этого потребуется установленный OneScript и библиотека  UfaScript.osb, которую вы можете скачать на GitHab.
    Приведу исходный текст, в котором мы сформируем экспериментальный интерфейс для вебклиента с кнопкой,
затем отловим нажатие кнопки вебклиентом и передадим клиенту клиенту заданный текст (в данном случае 
"Нажата кнопка+").

Перем U, Joomla, КоличОтветов;

Функция ПослатьКнопкуПривет(Кому)
  Div1=U.СоздатьОбъектCSSDiv("Div1","Пример настройки произвольного шаблона. Это Div1");   Div1.ЦветФона="#EB1434";  Div1.Выравнивание=1;
  Div1.ДекорацияТекста=1; Div1.РазмерШрифта=28;
  Div2=U.СоздатьОбъектCSSDiv("Div2","Это Div2");   Div2.ЦветФона="#D7E61A";  Div2.Выравнивание=1;
  Div2.ДекорацияТекста=1; Div2.РазмерШрифта=18;

  Divheader=U.СоздатьОбъектCSSDiv("header",Div1.СтрокаHTML()+"<br/><br/><br/>В данном элементе Div ""header"" мы задали ЦветФона=""#eefdfd"" "+
     "Divheader.ТипШирина=4  4-Это значит, что ширина = ширине родителя, а ширина родителя = 100% ширины экрана.<br/>"+Div2.СтрокаHTML());  
  Divheader.ЦветФона="#eefdfd";  
  Строкаheader=U.Строка_CSSКод(Div1.СтрокаCSS()+Div2.СтрокаCSS())+Divheader.СтрокаДляAjax();
  
  Кнопки = U.СоздатьОбъектHTMLКнопка("Nav");
  КнНачало = Кнопки.СтрокаДляAjax("Кнопка",5,"","PressButton('Кн1');");
   СтрокаКоманд=U.Строка_СформироватьКомандыКлиенту("baza||New||"+Строкаheader+
                                                  "||baza||Insert||<div id=footer>Это подвал</div>||footer||Insert||"+КнНачало);
   U.МассивОтветовКлиентам_Добавить(Кому,СтрокаКоманд);
КонецФункции

Функция ГенераторОтветовКлиентам();
   Для сч=0 По U.МассивАктивныхКлиентов.Количество()-1 Цикл
      Если U.МассивАктивныхКлиентов[сч][6]=0 Тогда 
	     ПослатьКнопкуПривет(U.МассивАктивныхКлиентов[сч][0]); U.МассивАктивныхКлиентов[сч][6]=1;  
      КонецЕсли;
   КонецЦикла;
   Для сч=0 По U.МассивОтложенныхЗапросовОтКлиентов.Количество()-1 Цикл
      М=СтрРазделить(U.МассивОтложенныхЗапросовОтКлиентов[сч],"==>");
	  Если М[3]="Кн1" Тогда U.МассивОтветовКлиентам_Добавить(М[0],U.Строка_СформироватьКомандыКлиенту("footer||Insert||Нажата кнопка+"));
	    U.МассивОтложенныхЗапросовОтКлиентов.Удалить(сч); КонецЕсли;
   КонецЦикла;
КонецФункции

Функция Обработка()  
  Каталог=СтрЗаменить(U.КаталогВременныхФайлов,"/","\");
  Пока Истина Цикл
    U.ОбработчикЗапросов(Каталог);
	//U.ОтладкаСерверТранслятора();
	ГенераторОтветовКлиентам();
	Приостановить(U.ЗадержкаВOneScript);  
  КонецЦикла;   
КонецФункции

Joomla=Ложь;  
U = ЗагрузитьСценарий("UfaScript.osb");  U.БазовыеУстановкиСистемыUfaScript();
U.КаталогВременныхФайлов="C:/tmp/";
U.СтартСерверТранслятора(Ложь,500,500,1000);
Сообщить("Сервер запущен");
Обработка();

   Теперь дам пояснения тексту.
   Начнем с последних строк. Подключаем библиотеку UfaScript.osb, устанавливаем каталог временных файлов "C:/tmp/".
В каталоге временных файлов будут формироваться файлы обмена запросами между PHP-сервером и OneScript. Рекомендуется установить RAMDisk и размещать данный каталог в оперативной памяти, чтоб повысить скорость обмена.
   Далее мы стартуем PHP-сервер, который является транслятором POST-запросов от вебклиента серверу на OneScript.
В результате будет сформирован файл Server.php с нужным php-кодом, который позволит формировать интерфейс у вебклиента
по технологии Ajax (сторонние библиотеки типа jQuery пока не используются). Так же будет сформирован Index.php с нужными JavaScript функциями для запуска со стороны вебклиента. Веб клиент будет слать регулярные пустые запросы серверу с периодичностью, которую мы можем задать сами. Это необходимо для поддержания связи по инициативе сервера, так как PHP-сервер не может сам инициировать запрос к вебклиенту, а может только направить ему ответ на пришедший запрос.
   PHP-сервер, получая регулярные запросы от каждого веб-клиента, которому PHP-сервер присваивает уникальный код
соединения, сам не обрабатывает данные запросы, а транслирует их обработчику в OneScript. Фактически PHP-сервер
формирует файл с текстом запроса, который размещает во временном каталоге (в нашем случае это "C:/tmp/") и ждет
ответ. Ждать ответ для сервера - это ожидать создание заданного файла с ответом в этом же каталоге. Когда OneScript
сформирует файл ответа, записав его во временный каталог, PHP-сервер перешлет текст ответа клиенту. 
    Функция U.СтартСерверТранслятора(Ложь,500,500,1000); имеет необязательные параметры: Ложь - если мы работем без Joomla, следующий параметр = 500 - это полсекунды задержки в OneScript между проверками, есть ли запросы от PHP-сервера, далее параметр = 500 миллисекунд - это задержка в PHP-сервере при регулярной проверке, готов ли ответ от OneScript, последняя величина задержки = 1000 миллисекунд (1 секунда) - это переодичность фонового запроса от клиента к серверу. Если данные параметры не заданы, то берутся значения по-умолчанию. Чем меньше величина задержки, тем быстрее будет обмен данными, но и так же сильнее будет нагрузка на процессор.
    Функция Обработка() запускает бесконечный цикл с заданной задержкой для OneScript. Внутри этого цикла запускается
функция U.ОбработчикЗапросов(Каталог); которая формирует три основных массива для обработки в OneScript:
U.МассивАктивныхКлиентов - список подключившихся вебклиентов к серверу с их уникальными кодами.
U.МассивОтложенныхЗапросовОтКлиентов - список запросов, которых содержится информация о каких-либо действиях вебклиента, например, клиент нажал на определенную кнопку.
U.МассивОтветовКлиентам - массив, в который мы добавляем информацию для пересылки определенному клиенту. Например, передаем объекты, которые размещаются в интефейсе клиента.
    Для работы с перечисленными массивами мы имеем функцию  ГенераторОтветовКлиентам(); , в которой анализируем список подключившихся клиентов, просматривем сообщения от них и посылаем свои сообщения любому вебклиенту. Данная технология обеспечивает ассинхронность запросов, так как пустые ответы клиенту посылаются сразу, если OneScript еще не 
подготовил ответ. OneScript может запустить фоновые процессы на подготовку ответов клиенту (распараллелить задачи не
только на данном сервере, а переслать их другому компьютеру) и послать ответ в следующих запросах, так как пустые запросы у нас проходят регулярно с указанной периодичностью. В данном примере ответ готовится сразу и асинхронность не показана.
    Только что подключившиеся клиенты имеют в колонке 6 ноль (U.МассивАктивныхКлиентов[сч][6]=0). Им мы шлем "привет" с помощью функции ПослатьКнопкуПривет(Кому);  В ней мы создаем Div объекты, настраиваем CSS-код, создаем кнопку, которая запускает JavaScript-функцию PressButton('Кн1'); на стороне клиента при ее нажатии и все это посылаем с указанием, где что разместить данному клиенту. В итоге у клиента через технологию Ajax появляются надписи на разноцветном фоне и кнопка. 
   При нажатии кнопки вебклиентом функция PressButton('Кн1'); пошлет внеочередной запрос серверу. Запрос будет передан в программу OneScript и появится в массиве U.МассивОтложенныхЗапросовОтКлиентов. При этом, пустой ответ клиент получит даже при необработанном запросе. Таким образом, может быть реализована асинхронность, а результат обработки запроса может быть выслан вебклиенту позже в ответе на один из фоновых запросов. Например, если надо подготовить большой объем данных по запросу из базы данных, то запрос можно переслать другому серверу и когда он будет возвращен, отослать вебклиенту.   
   В нашем же примере ответ мы формируем сразу, как информация о нажатой кнопке появилась в массиве U.МассивОтложенныхЗапросовОтКлиентов.
В 

Если М[3]="Кн1" Тогда U.МассивОтветовКлиентам_Добавить(М[0],U.Строка_СформироватьКомандыКлиенту("footer||Insert||Нажата кнопка+"));


Здесь в М[3] появилась строка переданная вебклиентом JS-функцией PressButton('Кн1');  а в М[0] содержится уникальный код вебклиента, который нажал кнопку. В ответ мы послали данному вебклиенту "footer||Insert||Нажата кнопка+". Это сообщение означает, что строку "Нажата кнопка+" надо добавить (Insert) в Div с id=footer.

  Чтоб все это запустить, установите OpenServer и OneScript, скопируйте файл примера и файл библиотеки в каталог сервера, например, в "C:\OpenServer\domains\test", запустите файл примера "oscript priver.os", затем запустите localhost сайт. Когда появится в браузере кнопка, нажмите.
  Таким образом, с помощью библиотеки UfaScript.osb мы обеспечили двухсторонюю связь между вебклиентом и программой на OneScript. Теперь мы можем обеспечить и обмен сообщениями между разными вебклиентами. В следующих экспериментах я сделаю то же самое из программы 1С.


Ссылка на GitHab: https://github.com/andreosh/UfaScript    

Ссылка на видео по данной теме:  

OneScript 1Script UfaScript.osb Вебинтерфейс

См. также

Особенности национального Workflow: Github Actions и OneScript

Групповая разработка (Git, хранилище) OneScript Бесплатно (free)

Сегодня мы посмотрим на Github Actions - встроенный инструментарий Github для автоматизации рабочих процессов. Разберем, что это такое, зачем и причем тут OneScript.

25.03.2024    1182    bayselonarrend    3    

35

TCP прокси-сервер хранилища конфигурации 1С

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) OneScript Платформа 1С v8.3 Бесплатно (free)

Продолжение истории с прокси хранилища, но уже не на HTTP, а на TCP и без падений по памяти веб-сервера. Проверяем комментарии хранилища, вызываем веб-хуки, старты пайплайнов, gitsync по событию помещения версии в хранилище. И все это полностью на знакомом и понятном OneScript.

17.01.2024    2772    kamisov    17    

57

Что такое ОСень? Или как лучшие практики из мира Java прижились в экосистеме OneScript

OneScript Бесплатно (free)

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

21.11.2023    3113    NikitaIvanchenko    16    

46

Библиотека создания клиент-серверных приложений для сценарного языка OneScript

Инструментарий разработчика Работа с интерфейсом OneScript Россия Бесплатно (free)

Представленная библиотека позволяет создать многопоточный TCP сервер, к которому может одновременно подключиться множество TCP клиентов с удаленных компьютеров. Эти клиенты могут вызывать методы скриптов как на сервере, так и на других клиентах. Методы будут выполнены в контексте скрипта на удаленной машине. Возможна передача параметров в метод и получение результата. Для TCP клиента можно создать графический интерфейс с большим набором элементов управления, модальными диалоговыми окнами и с обработкой событий.

31.07.2023    2016    ahyahy    8    

32

Получаем статистику по git-репозиторию в разрезе разработчиков

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) OneScript Бесплатно (free)

Итак! Представим, что наступил момент, когда разработка через исходный код реализована на предприятии в полном объеме. Мы разрабатываем в EDT или конфигураторе (но выгружаем конфигурацию в исходный код), версионируем внешние отчеты и обработки и расширения, собираем релизы, проверяем код статическим анализом, в разработке царит гармония и мир. Красота! Но менеджерам этого мало, всегда хочется чего-то еще, и вот мне прилетает задача - дай статистику по вкладу в код каждого разработчика.

13.03.2023    3622    ardn    3    

27

Прокси хранилища 1С (IIS, OneScript)

Групповая разработка (Git, хранилище) OneScript DevOps и автоматизация разработки Платформа 1С v8.3 Россия Бесплатно (free)

Избавляемся от версионной зависимости, проверяем комментарии, вызываем веб-хуки, делаем красивые пути. И все это на привычном IIS и понятном OneScript.

08.12.2022    8036    kamisov    57    

95

OneScript на страже порядка на сервере тестовых баз данных

Администрирование СУБД OneScript Бесплатно (free)

Наводим порядок на сервере тестовых баз с помощью любимого инструмента - OneScript. Находим заброшенные базы на сервере MS SQL, определяем кандидатов на удаление.

14.06.2022    4255    ardn    23    

37

Идем в Serverless с кодом 1С

Облачные сервисы, хостинг OneScript Россия Абонемент ($m)

Запускаем код OneScript в Serverless Container Яндекса.

1 стартмани

29.04.2022    3697    1    papami    2    

9
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Region102 30.06.17 16:17 Сейчас в теме
Мне кажется все таки, что мухи отдельно, котлеты отдельно. Для своего корпоративного сайта сейчас буду реализовывать следующую схему. Сайт на Laravel (PHP, JS, bootstrap) - база данных MySQL (для согласованности будет реализован механизм плана обмена) - база 1С фоновыми заданиями через REST API сайта обменивается информацией с MySQL.
2. andreosh 103 30.06.17 22:22 Сейчас в теме
(1) Нормальный вариант. Но у меня задача OneScript обеспечить графинтерфейсом, а сделать тоже самое для 1С - это побочная задача. 1С уже имеет интерфейс, но может пригодится возможность дополнять интерфейс, например, в Joomla. Пользователь регистрируется и получает доступ к определенным данным из 1С.
3. li5enok 01.07.17 20:39 Сейчас в теме
Идея годная, нужно развивать. Но форматирование кода ужасно.
4. andreosh 103 02.07.17 10:51 Сейчас в теме
(3) Согласен на счет форматирования, но я работаю в одиночку и мне так удобнее, чтоб видеть максимум кода на экране.
5. stilet 50 06.07.17 20:09 Сейчас в теме
Интересно под Linux будет работать?
6. andreosh 103 11.07.17 07:52 Сейчас в теме
(5) Должно работать под Linux. У меня на ютубе (канал Андрей Ош) показано, как OneScript поставить на Ubuntu. Если раньше меня попробуете, то сообщите.
7. bulpi 215 11.03.18 14:27 Сейчас в теме
Возможно, стоит дописать инструкцию на предмет того, как запустить это под IIS.
Оставьте свое сообщение