Я тут просматривал quickjs (https://bellard.org/quickjs/). В принципе вешь годная, много лишнего, но можно и поотсекать.
Само собой "слегка" русифициировать.
Qt-шники к нему присматриваются. Есть задел под дебугер.
Есть модули и прочее.
Что думаете?
Я не в теме, но сначала порешать какой движок БД, транзакции, блокировки и многопользовательский режим...?
По мне так внешний вид 77 вполне устраивает, если туда хорошее автомасштабирование форм и типа подобноее - то мне норм ;-) Делать второй снеговик по сложности языка, и прочей хрени - как-то мне представляется малоперспективным
> Если делать альтернативу 1С, то какие брать готовые компоненты?
Для меня так самый важный вопрос - "Какой движок будет использован для хранения данных?".
Цитата: Forum123 от 01 апреля 2024, 14:24Для меня так самый важный вопрос - "Какой движок будет использован для хранения данных?".
Для клиент-серверных баз ИМХО PostgreSQL, для мелких баз можно и SQLite (хотя SQLite может работать с очень большими базами), в локальном/терминальном режиме (ни в коем случае не в сетевом, возможно повреждение базы) потому что диалект SQLite в большей степени соответствует PostgreSQL, чем остальным диалектам SQL.
Если не выпендриваться с запросами, будет работать без изменений и там и сям.
SQLite будет быстрее PostgreSQL в таком сценарии использования.
Свой движок файловой базы данных изобретать, как это сделала 1С в 8ке, это немыслимый хардкор.
Цитата: Djelf от 01 апреля 2024, 14:38SQLite будет быстрее PostgreSQL в таком сценарии использования.
Вы профи по SQLite.
Годится ли она для многопользовательской работы, есть ли в ней недостатки. ...?
Какую функциональность невозможно реализовать на SQLite, которая имеется в 1С 7.7 или 1С 8.x?
Цитата: Djelf от 01 апреля 2024, 14:38Для клиент-серверных баз ИМХО PostgreSQL, для мелких баз можно и SQLite (
Это суждение навеяло мысль.
Лучше PostgreSQL использовать.
Первоочередные задачи:
- разработать архитектуру хранения метаданных и реализовать;
- аналогично для данных;
- GUI для работы с метаданными и данными.
Цитата: Forum123 от 01 апреля 2024, 14:58Первоочередные задачи:
Тем кто откажется разрабатывать 1С 7.8 - отключим газ.
ИМХО вполне реально скопом (человек пять) разработать а-ля 1С 7.7.
Предлагаю использовать harbour.
В нём реализовано API, которое позволяет работать с любыми источниками данных.
Для Postgress без проблем можно разработать API для движка.
Виртуальная машина имеется и весьма эффективна.
Вот с чем нужно будет повозить так это разработка API для индексов.
В harbour API есть, но ИМХО не годится для а-ля 1С.
Цитата: Forum123 от 01 апреля 2024, 15:41Предлагаю использовать harbour.
API Harbour использовал и с его core знаком.
Помогу.
Кстати ЯП один и тот же для всех источников данных и можно одновременно использовать сколько угодно источников данных.
Проект десятилетиями тестировался.
Без проблем можно API разработать и для нынешей 1С 7.7.
Почему не сделал?
Потому что ныне разрабатываемое API годится для любого типа задач и много функциональней чем любая СУБД.
Для разработки а-ля 1С harbour годится.
Цитата: Forum123 от 01 апреля 2024, 15:55Для разработки а-ля 1С harbour годится.
Ой, соврал.
Для разработки хорошего клиента к серверу всё же больше годится.
Хотя если потрудиться (разработать прокси сервер), то будет намного больше производителен.
Цитата: Djelf от 01 апреля 2024, 14:381. Для клиент-серверных баз ИМХО PostgreSQL,
2. для мелких баз можно и SQLite (хотя SQLite может работать с очень большими базами), в локальном/терминальном режиме (ни в коем случае не в сетевом, возможно повреждение базы) потому что диалект SQLite в большей степени соответствует PostgreSQL, чем остальным диалектам SQL.
3. Если не выпендриваться с запросами, будет работать без изменений и там и сям.
SQLite будет быстрее PostgreSQL в таком сценарии использования.
1. а с какого релиза начинать и какую сборку использовать?
2. А можно и не париться и взять тот же codebase, добавив драйвер SQlite для запросов. по типу 1sqlite. и получится у нас нормармальные скульные запросы к БД.
Цитата: trdm от 01 апреля 2024, 19:432. А можно и не париться и взять тот же codebase, добавив драйвер SQlite для запросов. по типу 1sqlite. и получится у нас нормармальные скульные запросы к БД.
Не для спора.
Harbour по существу а-ля Foxpro 2.6 и core не хуже codebase.
В ЯП harbour и ООП имеется, замыкание, даже сишный код в исходники добавлять можно.
Кстати API 1C 7.7 не сложно разработать.
Это обсуждение возможности разработки а-ля 1С.
Ждём новых предложений форумчан.
Вообщем то а-ля 1С можно скопом разработать.
Пусть Альф за главного будет.
Его задача - разработка GUI.
Профи на форуме много ...
Цитата: Forum123 от 01 апреля 2024, 19:52Пусть Альф за главного будет.
угу. и ваще пусть все нарисует, а мы затестим.
тут каждый подписывается за себя сам.
я вообще конкретный совет испросил.
Цитата: Злоп от 01 апреля 2024, 13:59По мне так внешний вид 77 вполне устраивает, если туда хорошее автомасштабирование форм и типа подобноее - то мне норм ;-) Делать второй снеговик по сложности языка, и прочей хрени - как-то мне представляется малоперспективным
ну да. 8 конечно хорошо, но некоторые места я так и не понял.
к примеру в модуле объектов документ:
Движения.регистрТакойто.Записывать = Истина:
запись = Движения.регистрТакойто.Добавить();
запись.отрибут = значение;
....
и в какой момент это добавляется?
не проще слелать запись.Записать();
Я не могу сказать какие камни встретятся на пути, sqlite за последние 10 лет невероятно мощьно бустанулось, в частности была исправлена ее многолетняя фишка - отсутствие right join и т.д. и т.п.
А размер dll то почти и не вырос! Меньше метра, это фантастика для SQL базы.
Некоторые казусы видимо придется исправлять наступанием на швабру, причем не один раз.
Формат базы стабильный, API не меняется, т.е. движок можно обновлять еще очень долго, без особых проблем, просто заменой одной dll.
Мое основное участие - попкорн и кола, так как далек от настоящего программирования ;-)
Потестить/поюзать, что-то пописать типа прикладных конф может даже.
Но как создание очередного "убивца 1С" - прикладные конфы ГДЕ? КТО? в противном случае - это так, хобби... поиграться... (типа как я WMS на клюшках пишу когда желание есть... а его все меньше, ибо потребителей нет...)
Цитата: Djelf от 01 апреля 2024, 22:14Я не могу сказать какие камни встретятся на пути, sqlite за последние 10 лет невероятно мощьно бустанулось, в частности была исправлена ее многолетняя фишка - отсутствие right join и т.д. и т.п.
Всё в наших руках!
Нужна будет в SQLite новая функциональность.
Добавим!
Цитата: Злоп от 02 апреля 2024, 01:19Потестить/поюзать, что-то пописать типа прикладных конф может даже.
Вот тут то Вас и задействуем.
Напишите новые прикладные конфигурации для новой а-ля 1С.
> Если делать альтернативу 1С, то какие брать готовые компоненты?
Все те, которые использует фирма 1С в восьмёрке.
Для этого нужно просто посмотреть названия dll.
А я могу от души покритиковать проект.
Семерка была революцией мирового уровня в далеком 98-м году, а восьмерка - посредственный и тупиковый вариант ее эволюционного развития.
Нужна очередная революция, и она могла быть уже реализована в проекте gpl2c, но что-то пошло не так.
Цитата: item от 02 апреля 2024, 08:44А я могу от души покритиковать проект.
Семерка была революцией мирового уровня в далеком 98-м году, а восьмерка - посредственный и тупиковый вариант ее эволюционного развития.
Нужна очередная революция, и она могла быть уже реализована в проекте gpl2c, но что-то пошло не так.
Отсутствие финансового интереса.
Цитата: item от 02 апреля 2024, 08:44Нужна очередная революция, и она могла быть уже реализована в проекте gpl2c, но что-то пошло не так.
дык там же MFC использовалась. А она в win only.
ну и +
Цитата: АЛьФ от 02 апреля 2024, 09:17Отсутствие финансового интереса.
а в принципе у каждого програмиста есть задачи для которых нужна чиломолотилка с БД. та же напоминалка, ведение домашней бухии и проч.
Цитата: АЛьФ от 02 апреля 2024, 09:17Отсутствие финансового интереса.
А я то подозревал, что ребят подкупил Нуралиев. )
Двадцать лет уже прошло с первых реализаций, между прочим.
Цитата: item от 02 апреля 2024, 08:44Нужна очередная революция, и она могла быть уже реализована в проекте gpl2c, но что-то пошло не так.
что революционного должно быть сделано?
Цитата: trdm от 02 апреля 2024, 09:28дык там же MFC использовалась. А она в win only.
ну и +
Это существенно.
Предлагаю написать сначала свою винду.
Цитата: trdm от 02 апреля 2024, 09:35что революционного должно быть сделано?
ООСУБД, если коротко.
1С начал движение в эту сторону, прикрутив в очередном релизе 8.3 пользовательские типы данных, но пока это курам на смех.
Вложенные и наследуемые структуры, таблицы и формы.
Цитата: item от 02 апреля 2024, 09:39Предлагаю написать сначала свою винду.
ReactOS уже есть.
В ней даже восьмёрка работает.
Если не ошибаюсь, то семёрка не работает.
При желании можно эту проблему устранить.
Да и wine имеется.
Цитата: Forum123 от 02 апреля 2024, 09:48ReactOS уже есть.
В ней даже восьмёрка работает.
Если не ошибаюсь, то семёрка не работает.
При желании можно эту проблему устранить.
Нужно устранить.
Это не праздный вопрос в нынешние времена.
Цитата: item от 02 апреля 2024, 10:00Нужно устранить.
Это не праздный вопрос в нынешние времена.
Даже лет десять назад в wine без проблем работала семёрка.
Импортозамещение!
Цитата: Forum123 от 02 апреля 2024, 10:04Даже лет десять назад в wine без проблем работала семёрка.
Импортозамещение!
Признаюсь честно, вообще не знал до сего дня, что подобные проекты существуют.
Конкурировать с 1С нет смысла. Был бы смысл перевести все еще использующих 7.7 на какую-то новую общую систему. Но остались явно не типовые решения, которые обросли прямыми запросами, классами 1С++ и разнообразными визуальными фишками. Все это просто нереально перенести в новую систему. Да и незачем. Новая система должна базироваться на новых принципах, которые позволят ей развиваться долгие годы. Т.е. переход с 7.7 равнозначен внедрению новой системы. А кто будет платить за неизвестную систему с непонятным уровнем поддержки, если есть восьмерка от 1С?
И все же пара слов как мне видится система, которая могла бы быть интересной.
1. Система, конечно же, должна быть кроссплатформенной.
2. Система должна быть выполнена слоями, как 2С. Слои примерно такие:
- базовый слой, содержащий базовые объекты, функционал работы с БД, реализующий загрузку всех модулей
- слой скомпилированных в сторонней среде разработки библиотек-модулей, реализующих прикладные объекты (модули, визуальные представления, хранимые в базе объекты и т.д.)
- слой системных процедур на встроенном языке, объекты, которые очень редко меняются и\или служат базой для прикладных объектов, тут появляется конфигуратор
- слой прикладного решения, реализующий бизнес-логику прикладного решения
- слой собственно работы пользователя с прикладным решением
3. Хранение конфигурационной информации вместе с данными, как это реализовано в V8, считаю правильным, упрощающим резервное копирование и развертывание.
4. Система должна в базе содержать задел на клиент-серверную архитектуру, но не заставлять прикладного программиста морочиться всеми этими клиент-серверными заморочками, по максимум скрывая это. На предпоследнем уровне программисту должно быть вообще без разницы что там внутри и как реализовано, он работает, как локально.
5. Формат БД должен быть один, но реализация нулевого слоя должна позволять в случае чего перевести систему на другой формат БД, заменив реализацию базовых объектов работы с БД, чтобы на верхних слоях это было незаметно.
Как-то так...
Цитата: АЛьФ от 02 апреля 2024, 10:184. Система должна в базе содержать задел на клиент-серверную архитектуру, но не заставлять прикладного программиста морочиться всеми этими клиент-серверными заморочками, по максимум скрывая это. На предпоследнем уровне программисту должно быть вообще без разницы что там внутри и как реализовано, он работает, как локально.
Ты же в курсе как это сложно сделать?
Цитата: АЛьФ от 02 апреля 2024, 10:18Конкурировать с 1С нет смысла...
Подпишусь под каждым пунктом, даже если некоторые недоступны для моего понимания.
Как чисто 1С-ник, далекий от win-api и прочего, даже я уверен, что отделение метаданных от данных - это ошибка, или лень разработчиков раскладывать по таблицам формы и картинки из конфигуратора.
Что касается слоя прикладного решения, базовых объектов, есть ряд целый ошибок в идеологии 77, перешедших затем в восьмерку, и уж точно не следует их повторять.
Цитата: trdm от 02 апреля 2024, 10:26Цитата: АЛьФ от 02 апреля 2024, 10:184. Система должна в базе содержать задел на клиент-серверную архитектуру, но не заставлять прикладного программиста морочиться всеми этими клиент-серверными заморочками, по максимум скрывая это. На предпоследнем уровне программисту должно быть вообще без разницы что там внутри и как реализовано, он работает, как локально.
Ты же в курсе как это сложно сделать?
Компания аргументирует внедрение управляемых форм как средство для оптимизации сетевого трафика, но в это верится с трудом, учитывая что пропускная способность каналов растет быстрее, чем платформа.
Нынче на этих каналах можно работать в файловой версии 77, как в локальной сети.
Имхо это связано с общей концепцией развития, движением в строну браузеров и мобильных приложений.
А оптимизация трафика достигается в первую очередь конфигурацией, пониманием специалистов, что в разные коробки желтого цвета, в локальные и сетевые версии, нельзя закладывать одну и ту же типовую конфигурацию.
Чего стоят только справочники Сотрудники, Номенклатура и ОсновныеСредства, с вынесенными на форму всеми подряд реквизитами с птичками, "для удобства пользователя". (это я про 77)
Цитата: trdm от 02 апреля 2024, 10:26Цитата: АЛьФ от 02 апреля 2024, 10:184. Система должна в базе содержать задел на клиент-серверную архитектуру, но не заставлять прикладного программиста морочиться всеми этими клиент-серверными заморочками, по максимум скрывая это. На предпоследнем уровне программисту должно быть вообще без разницы что там внутри и как реализовано, он работает, как локально.
Ты же в курсе как это сложно сделать?
Конечно. Все остальное из перечисленного не проще.
Клиент-сервер не так сложно, как кажется. Служба на сервере принимает запрос клиента, запускает экземпляр приложения на сервере (при необходимости), передает в приложение команду, после обработки отправляет клиенту ответ.
Это работает даже с обычной 1С 7.7, обмен между сервером и 1С через внешнюю компоненту, выполнение команд через ExecBatch и EvalExpr. Приходится, правда, дописывать в конфигурацию запуск обработки для подключения ВК.
Сейчас ВК написана на Delphi 7, сервер на Go. Если интересно, поделюсь и расскажу подробнее.
на каждое обращение от клиента запускать экземпляр приложения... не сильно быстро будет, когда запросов много будет. на сервере экземпляр прилоджения же должен быть постоянно запущен?
Есть два варианта работы с экземплярами приложений: индивидуальный на каждого клиента и общие сессии. Первоначально создавалось именно под индивидуальный режим. Но в ходе эксплуатации были проблемы с требованием переиндексации от 1С - если нет запущенного экземпляра и имел место хоть один аварийный выход - будет спрашивать монопольную переиндексацию базы для файлового варианта. Поэтому решено было запускать один экземпляр на старте всегда. Даже когда-то была логика проверки и переиндексации на старте. Все это было для работы клиентов информационных киосков. Потом возникли задачи по перетаскиванию документов между базами, и естественно, пауза на запуск приложения там была лишняя, да и дороговато дергать на каждый перенос запуск/остановку. Взор упал на тот экземпляр, защищавший от переиндексации, он был торжественно назван общей сессией, в файл конфигурации введены параметры управления пулом общих сессий, добавлены команды блокировки экземпляра общей сессии.
К сожалению, при первом переходе с D7 на D10 и обратно часть функционала была утеряна. Далее были еще потери при переходе на Go. Но чего пощупать осталось: и киоски и переносы документов работают, на общей сессии реализованы регламентные задания. Сервер работает по телнету и через HTTP запросы, можно быстро допилить websocket-ы.
Адская штука, этот костыль, это всем костылей КОСТЫЛЬ!
УРБД не? Вы же телепортацию сделали...
А перетаскивание из одной базы в другую документа мышкой уже сделали?
ИМХО, Готовтесь...
Советую 1Cdllrun https://infostart.ru/1c/tools/14356/
Цитата: Djelf от 17 мая 2024, 14:48Адская штука, этот костыль, это всем костылей КОСТЫЛЬ!
УРБД не? Вы же телепортацию сделали...
А перетаскивание из одной базы в другую документа мышкой уже сделали?
ИМХО, Готовтесь...
Советую 1Cdllrun https://infostart.ru/1c/tools/14356/
УРБД не то, на киоске клиент вообще не имеет отношения к 1С, сейчас он писан на D7 работает по TCP, главный на весь экран и за него не пробиться. Сервер 1С предприятия тоже обращается к серверу приложений - через HTTP запросы.
1Cdllrun, там же просто про доступ к базе ? А здесь выполнение кода 1С средствами самой 1С.
Все это начало разрабатываться и обкатываться в 2010 году, сейчас работает 24/7. Вполне успешно управляет как 1С 7.7, так и 8.3. Собственно, нет особенных ограничений по приложениям - можно запускать и Excel. Обмен с приложением сделан на отображаемых файлах - реализовать его на VBA и можно делать тонкий клиент экселя.
Один сервер приложений запущен на сервере с базой бухучета на 7.7. Пользователь системы производственного учета (другой сервер) в документе нажимает кнопку "Перенос". Видит сообщение, что создан документ в бухгалтерии с номером таким то. Телепортация ?
Цитата: AlexGM от 17 мая 2024, 15:251Cdllrun, там же просто про доступ к базе ? А здесь выполнение кода 1С средствами самой 1С.
Там прямой доступ к базе. Этим оно и круче и быстрее.
Лет 10 назад делал такое, промежуточная транзитная база с подключением по OLE к источнику и приемнику. В код лезть обоих баз не дали, ну и чё?
Отсюда, туда, оттуда сюда, причем мгновенно, чем не телепортация?
Это было не сильно сложно...
Цитата: Djelf от 17 мая 2024, 15:37Цитата: AlexGM от 17 мая 2024, 15:251Cdllrun, там же просто про доступ к базе ? А здесь выполнение кода 1С средствами самой 1С.
Там прямой доступ к базе. Этим оно и круче и быстрее.
Лет 10 назад делал такое, промежуточная транзитная база с подключением по OLE к источнику и приемнику. В код лезть обоих баз не дали, ну и чё?
Отсюда, туда, оттуда сюда, причем мгновенно, чем не телепортация?
Это было не сильно сложно...
Это если базы на одном сервере. А если на разных ? А киоски в цехе на DSL канале. Цель была минимизировать трафик, отрабатывать отключения/переподключения киосков. Первый вариант был на OLE, не удавалось завершать нормально сеанс при отключении, сейчас используется запуск приложения, при нештатной ситуации убийство процесса.
Используются запросы, проведение документов, как их отработает 1Cdllrun ? Сервер приложений отрабатывает, как заложено штатно. Для меня это важнее, чем скорость. Хотя, если 1Cdllrun использует штатные вызовы, принципиального выигрыша не будет, только риск использования прокладки.
Тогда это совсем другое решение, оно немного похожее на решение от Wirth, у него тоже на DSL работало как на LAN.
Но архитектура решения у него была видимо покруче.
Не буду больше спорить - не щупал.
Выложил проект на гитхаб, вдруг кому поможет.
https://github.com/999Alex/SrvApp2 (https://github.com/999Alex/SrvApp2)
Цитата: AlexGM от 17 мая 2024, 19:51Выложил проект на гитхаб, вдруг кому поможет.
https://github.com/999Alex/SrvApp2 (https://github.com/999Alex/SrvApp2)
Мутно мне как-то.
Для чего это? Как жто?
Можно постучаться на сервер, этот "сервер приложений" запустит на сервере сеанс 1с, и можно через сервер приложений "посылать" Команды для сеанса 1с и сервер приложений вернёт результат выполнения команды 1с-кой?
Цитата: Злоп от 17 мая 2024, 21:21Цитата: AlexGM от 17 мая 2024, 19:51Выложил проект на гитхаб, вдруг кому поможет.
https://github.com/999Alex/SrvApp2 (https://github.com/999Alex/SrvApp2)
Мутно мне как-то.
Для чего это? Как жто?
Можно постучаться на сервер, этот "сервер приложений" запустит на сервере сеанс 1с, и можно через сервер приложений "посылать" Команды для сеанса 1с и сервер приложений вернёт результат выполнения команды 1с-кой?
Это аналог rpchost в 8-ке. По сути делает из 7.7 трехзвенное приложение. Код, выполняемый 1С может идти напрямую с клиента или находится в конфигурации/внешней обработке. У киосков ограниченный набор функций, их удобнее прописать во внешней обработке, обслуживающей взаимодействие сервера приложений и 1С.
На киоске считали штрихкод - идет вызов функции "ОбработатьШК("20000001")" - на сервере 1С все отрабатывает и отправляет клиенту ответ с измененными полями - клиент обновляет интерфейс. Вся тяжелая работа с БД и вычисления - на сервере, клиент работает в основном с отображением информации.
Цитата: AlexGM от 18 мая 2024, 05:21На киоске считали штрихкод - идет вызов функции "ОбработатьШК("20000001")" - на сервере 1С все отрабатывает и отправляет клиенту ответ с измененными полями - клиент обновляет интерфейс. Вся тяжелая работа с БД и вычисления - на сервере, клиент работает в основном с отображением информации.
Типа:
На клиенте формируется текстовый запрос
"ОбработатьШК("20000001")", передаётся на "сервер приложений", сервер приложений по ОЛЕ (?) выполняет это код в сессии 1С, получает результат и отдаёт клиенту...
Типа так?
Злоп, ну зайди на гитхаб уже, там на первой странице все расписано достаточно понятно.
Подробнее механизм выглядит так:
1. С клиента на сервер уходит команда, которая будет исполнятся в 1С.
2. Сервер передает команду в отображаемый файл, предварительно проверив, запущена ли 1С.
3. На стороне 1С запущена внешняя компонента, считывающая команду из отображаемого файла.
4.1 Если 1С 7.7, внешняя компонента передает команду на выполнение через EvalExr или ExecBath - похоже, но не OLE. Доступны функции, процедуры, переменные глобального модуля.
4.2 Если 1С 8.3, на выполнение команда передается чуть иначе - в обслуживающей обработке вызываются функции EvalExp и ExecBatch соответственно, могут быть другие названия - сохранены для единообразия. В этих функциях команда выполняется через функции "Вычислить" и "Выполнить". Доступны функции, процедуры, переменные обработки.
5. Результат выполнения возвращается в отображаемый файл.
6. Сервер видит ответ в отображаемом файле и передает его клиенту.
Позднее на гите дополню описание, есть вариант работы клиента через HTTP+JSON, выложу обработку для работы с 1С 8.3.
3. "На стороне 1С запущена внешняя компонента, считывающая команду из отображаемого файла"
- компонента считывает по факту появления/изменения файла?
Если не брать в расчёт быстродействие самого вычисления в 1с на сервере - запрос-ответ быстро проходит?
4.1 а почему понадобилась прокладка в виде ВК на стороне 1с-на-сервере именно в части передачи на выполнение в ту же самую 1с? Просто интересно...
Цитата: Djelf от 18 мая 2024, 13:03Злоп, ну зайди на гитхаб уже, там на первой странице все расписано достаточно понятно.
Я там как говорится "узнал всё буквы, но не смог прочитать слово" ;-)
"5. Результат выполнения возвращается в отображаемый файл."
- в отображаемый файл результат кладёт ВК или 1С? (Думаю что ВК).
т.е. ВК читает из файла "запрос", типа
"ПолучитьАктивнуюНоменклатуру()",
передаёт на исполнение, 1с исполняет типа
...
Возврат ТЗноменклатура;
Конецфункции // ПолучитьАктивнуюНоменклатуиу
И полученную ТЗ кладёт в отображаемый файл?
Это не файл в традиционном понимании. Физически на диске его нет, он в памяти - File mapping, winapi. Основные потери времени в сети. Сама проверка события в цикле с небольшой задержкой, чтобы процессор не грузить. Пробовал через сообщения винды реализовать, но сложно отлавливать их на стороне 1С. На сервере под это сейчас отдельная go-рутина создается (как бы поток, но дешевле).
По скорости запрос-ответ по факту все прозрачно, на быстрых операциях на киоске нет ощущения, что он задумывается. Если на стороне 1С тяжелый запрос - там да, приходится выводить окно ожидания.
ВК на стороне 1С получилась в ходе эволюции: найдены были два пути выполнения кода, через OLE и через ВК. Первоначально была попытка запуска 1С через OLE, но таким сложно управлять. При запуске процесса есть много информации о нем, возможность управление через winapi. А из ВК есть доступ интересным интерфейсам. Там же, в ВК сделан клиент TCP и можно интегрироваться с разными серверами приложений в рамках сети.
Плюс OLE в том, что не нужен файл для передачи команд и простота реализации на стороне 1С - не нужна даже обработка вспомогательная и ее автозапуск. Однако, был выбран путь на универсальность, для использования разных приложений. И когда начали переходить на 8-ку она взлетела с минимальными доработками. Но сложность закрытия тогда поставила на этом направлении крест. Еще были только индивидуальные экземпляры, при дисконнектах они оставались. После закрытия сервера продолжали висеть.
Цитата: Злоп от 18 мая 2024, 15:41"5. Результат выполнения возвращается в отображаемый файл."
- в отображаемый файл результат кладёт ВК или 1С? (Думаю что ВК).
т.е. ВК читает из файла "запрос", типа
"ПолучитьАктивнуюНоменклатуру()",
передаёт на исполнение, 1с исполняет типа
...
Возврат ТЗноменклатура;
Конецфункции // ПолучитьАктивнуюНоменклатуиу
И полученную ТЗ кладёт в отображаемый файл?
Да, это работа ВК, 1С ведь ничего не знает про отображаемые файлы. Команд два типа, EvalExpr возвращает вычисленное выражение, ExecBatch успешность выполнения. Результат вызова ВК укладывает в файл и ставит флаг "Ответ готов".
Однако, на стороне ВК таблица значений уже не совсем таблица значений. Сейчас лучше передавать базовые типы.
Журнал работы киоска для примера. Команды с клиента в фигурных скобках, ответ в квадратных. Сначала устанавливаются переменные (они же параметры) сессии. Далее прописывается путь внешней обработки с логикой работы киоска. через функцию глобального модуля глВКВызов достаются внутренние функции обработки (использована процедура ПриПовторномОткрытии). Точность журнала 1 сек, все ответы идут в ее пределах.
06:22:08> {Set Version 14/10/2021}
06:22:08> [200]
06:22:08> {Set CodePage 1}
06:22:08> [200]
06:22:08> {Set Timeout 60}
06:22:08> [200]
06:22:08> {Set UserIndex 6}
06:22:08> [200]
06:22:12> {EB глВК_ОбработкаТип=1; глВК_Обработка=КаталогИБ()+"Служебная\Автозапуск\"+НазваниеНабораПрав()}
06:22:12> [250]
06:22:12> {EE глВКВызов("250")}
06:22:12> [250] 250250
Строка ЕИ шт␁
08:23:31> {EE глВКВызов("АнализШК(""2180000014882"")")}
08:23:31> [250] 2500
Строка ПРЕДЪЯВЛЕНОЗАМЕСЯЦ 68,360 н/ч␁Строка НЕПРИНЯТОЗАМЕСЯЦ 15,990 н/ч␁Строка РАБОЧИЙ ␁
08:23:33> {EE глВКВызов("АнализШК(""2280003721210"")")}
08:23:33> [250] 250
Таблица ВЫПОЛНЕНИЕ ␁Строка ИТК 0␁Строка ИТВ 0␁Строка ПОЗИЦИЯ ␁Строка ПАРТИЯ 00␁Строка ОТДЕЛЕНИЕ ␁Строка ЧЕРТЕЖ ␁Строка ОШИБКА ␁
08:23:42> {EE глВКВызов("ПоискОперации(""010"")")}
08:23:42> [250] 2501
Таблица ВЫПОЛНЕНИЕ ␁Строка ВРЕМЯОП 0.02␁Строка МОЖНОПРИНЯТЬ 24␁Строка НОРМА многостан.␁Строка СОДЕРЖАНИЕ Разряд работ:4; Время Тшк: 0.02
Слесарная␁Строка КОЛИЧЕСТВО 24␁
08:23:45> {EE глВКВызов("Принять(24)", 1)}
08:23:45> [250] 2501
Строка КОЛИЧЕСТВО ␁
08:23:51> {EE глВКВызов("ПоискОперации(""020"")")}
08:23:51> [250] 2501
Таблица ВЫПОЛНЕНИЕ ␁Строка ВРЕМЯОП 0.2␁Строка СОДЕРЖАНИЕ Разряд работ:5; Время Тшк: 0.2
Фрезерная␁Строка КОЛИЧЕСТВО 24␁
08:23:52> {EE глВКВызов("Принять(24)", 1)}
08:23:52> [250] 2501
Строка КОЛИЧЕСТВО ␁
08:23:59> {EE глВКВызов("ПоискОперации(""030"")")}
08:23:59> [250] 2501
Таблица ВЫПОЛНЕНИЕ ␁Строка КОЛИЧЕСТВО 24␁
08:24:00> {EE глВКВызов("Принять(24)", 1)}
08:24:00> [250] 2501
Строка КОЛИЧЕСТВО ␁
08:24:10> {EE глВКВызов("ПоискОперации(""040"")")}
08:24:10> [250] 2501
Таблица ВЫПОЛНЕНИЕ ␁Строка ВРЕМЯОП 0.15␁Строка СОДЕРЖАНИЕ Разряд работ:5; Время Тшк: 0.15
Фрезерная␁Строка КОЛИЧЕСТВО 24␁
08:24:11> {EE глВКВызов("Принять(24)", 1)}
08:24:11> [250] 2501
Строка КОЛИЧЕСТВО ␁
08:24:20> {EE глВКВызов("ПоискОперации(""050"")")}
08:24:20> [250] 2501
Таблица ВЫПОЛНЕНИЕ ␁Строка КОЛИЧЕСТВО 24␁
08:24:21> {EE глВКВызов("Принять(24)", 1)}
08:24:21> [250] 2501
Строка КОЛИЧЕСТВО ␁
08:24:40> {EE глВКВызов("АнализШК(""2180000014882"")")}
08:24:40> [250] 2500
Строка ПРЕДЪЯВЛЕНОЗАМЕСЯЦ 85,640 н/ч␁Строка НЕПРИНЯТОЗАМЕСЯЦ 33,270 н/ч␁
08:24:42> {EE глВКВызов("Выход()")}
08:24:42> [250] 250
Строка ПРЕДЪЯВЛЕНОЗАМЕСЯЦ ␁Строка НЕПРИНЯТОЗАМЕСЯЦ ␁Строка РАБОЧИЙ ␁Строка ВЫПОЛНЕНИЕ ␁Строка ИТК ␁Строка ИТВ ␁Строка ПОЗИЦИЯ ␁Строка ПАРТИЯ ␁Строка ЧЕРТЕЖ ␁Строка ВРЕМЯОП ␁Строка МОЖНОПРИНЯТЬ ␁Строка НОРМА ␁Строка СОДЕРЖАНИЕ ␁
08:24:43> {EE глВКВызов("Выход()")}
08:24:43> [250] 250
А ВК постоянно держит связь с сервером приложений или общение с сервером приложений только исключительно через файл отображения?
Цитата: Злоп от 18 мая 2024, 16:45А ВК постоянно держит связь с сервером приложений или общение с сервером приложений только исключительно через файл отображения?
ВК то не подозревает ни о чем, особенно о сервере приложений. Для нее главное - отображаемый файл и флаг "Пришла команда". Отработать команду (вызывать функцию соответствующую с параметрами) и положить результат обратно. Кусок кода из ВК, обращение к 1С для выполнения команды:
if lCmd='ec' then begin
try
Result_EC:='';
lVal:='';
lRes:='250';
pEvent._AddRef;
pEvent.ExternalEvent('TLNExt5', 'Command', lParam);
except
on E: Exception do begin
lVal:=E.Message;
lRes:='300';
end;
end;
end;
if lCmd='eb' then begin
v77:=pConnect.AppDispatch;
IDispatch(v77)._AddRef;
lVal:='';
lRes:='250';
try
lr:=v77.ExecuteBatch(lParam);
if lr=0 then begin
lVal:='';
lRes:='301';
end;
except
on E: Exception do begin
lVal:=E.Message;
lRes:='300';
end;
end;
end;
if lCmd='ee' then begin
v77:=pConnect.AppDispatch;
IDispatch(v77)._AddRef;
lVal:='';
lRes:='250';
try
lVal:=v77.EvalExpr(lParam);
except
on E: Exception do begin
lVal:=E.Message;
lRes:='301';
end;
end;
end;
По первой строке видно, что есть еще команда "EC", генерирующая в 1С внешнее событие. Работы по этому направлению кажутся перспективными, но логика не реализована дальше. Событие в 1С приходит, но нужно отправить ответ - в отличие от EE и EB здесь асинхронный механизм.
Интерфейс pConnect ВК получает от 1С при создании. Из него возможно обращение к некоторым интерфейсам 1С, окно сообщений, управление окнами (можно создать свое), управление строкой статуса, расширение встроенного языка.
Для сравнения, тот же участок для 8-ки. В ней можно передать в ВК ссылку на саму внешнюю обработку (F1C) и вызывать функции этой обработки напрямую:
if lCmd='ee' then begin
try
lVal:=F1C.EvalExpr(lParam);
except
on E: Exception do begin
lVal:='301'+#9+E.Message;
end;
end;
end;
if lCmd='ec' then begin
try
lVal:=F1C.ExecCmd(lParam);
except
on E: Exception do begin
lVal:='301'+#9+E.Message;
end;
end;
end;
if lCmd='eb' then begin
try
lVal:=F1C.ExecBatch(lParam);
except
on E: Exception do begin
lVal:='301'+#9+E.Message;
end;
end;
end;
"флаг "Пришла команда".
- а откуда ВК этот флаг видит?
Если жто всё доведено до ума и рабо о способно без особых глюков - это хорошее дело
Из нереализованных идей: считывать из окна 1С главное меню, окна (и здесь реализация через ВК очень помогает). Отправлять изменения на клиента(ов) - реализация кроссплатформенная и красочная. События с клиента передавать обратно в 1С. На выходе получаем тонкий клиент 7.7. Ядро 1С работает под виндой/эмуляцией на сервере, клиенты хоть на андроиде. Нью-Васюки становятся шахматной столицей мира.
Если вдруг дойдет до создания альтернативного ядра 1С - оно просто займет нужное место в этой архитектуре.
Цитата: Злоп от 18 мая 2024, 19:28"флаг "Пришла команда".
- а откуда ВК этот флаг видит?
Отображаемый файл по сути своей кусок памяти с адресом и доступный нескольким процессам. Работа идет через структуру:
type Pack struct {
Cmd string //11
Reply string //4
Len uint //4
Data *[]byte
}
Первыми заполняются данные, их длина, код ответа. А когда все готово - первые 11 символов, Cmd. Это и есть тот флаг.
func (fm *FileMap) Write(ACmd string, AReply string, AData string) error {
// запишем длину данных
lLen := int32(len(AData))
sl := unsafe.Slice(&lLen, 4)
lenBuff := *(*[]byte)(unsafe.Pointer(&sl))
copy(fm.Buff[15:], lenBuff) //Len
// запишем данные
copy(fm.Buff[19:], []byte(AData)) //Cmd
// запишем команду последней, когда пакет готов
lCmd := make([]byte, 11)
copy(lCmd, ACmd[:])
copy(fm.Buff[0:], lCmd) //Cmd
return nil
}
Начало работы с 1С:
lFM.Write("INIT", "", "")
PI := winapi.StartApplication(am.CommandLine + " /ID" + am.Token)
_, err = lFM.WaitFor("ANSWER", 5)
if err != nil {
return err
}
am.Handle = PI.Process
lFM.Write("READY", "", "")
- в начале записывается Cmd="INIT";
- запускается приложение (1С), оно должно открыть отображаемый файл и записать Cmd="ANSWER";
- сервер ожидает появление в файле Cmd="ANSWER";
- если все прошло хорошо, в команду пишем "READY" (приложение успокаивается, его хорошо встретили);
- при поступлении команды для 1С с клиента в файле Cmd="QUERY";
- после отработки 1С кода Cmd="ANSWER";
- сервер принял ответ Cmd="READY".
Вообще, READY тут сейчас лишний, это была задумка под асинхрон с EC.
Цитата: Злоп от 18 мая 2024, 19:33Если жто всё доведено до ума и рабо о способно без особых глюков - это хорошее дело
В серверной версии на дельфи, каюсь, глюки имеются. Очень тяжело прикручивал туда HTTP, нужна была реализация метода PUT своя. Там, похоже, и глючит. На Go версии все реализовано на массовых библиотеках без напилинга, тьфу тьфу - ни одного сбоя. Если кто любит Дельфи - могу выложить серверную часть на нем, но для использования, тем более в бою - Go. Тем более они по памяти примерно одно кушают. Что даже странно - сервер на Go 64 битный. Правда, без GUI, но с веб панелью управления.
Цитата: AlexGM от 18 мая 2024, 19:51Из нереализованных идей: считывать из окна 1С главное меню, окна (и здесь реализация через ВК очень помогает). Отправлять изменения на клиента(ов) - реализация кроссплатформенная и красочная. События с клиента передавать обратно в 1С. На выходе получаем тонкий клиент 7.7. Ядро 1С работает под виндой/эмуляцией на сервере, клиенты хоть на андроиде. Нью-Васюки становятся шахматной столицей мира.
Если вдруг дойдет до создания альтернативного ядра 1С - оно просто займет нужное место в этой архитектуре.
.
А по мне встроить в толстую-1с ВК для работы по сети/интернету, чтоб дефак о, тело штатной типа как 1с++ и формекс
... Де-факто стало стандартной как 1с++ и формекс. И хошь хоть на 1с делай 1с-сервер, хоть 1с-клиент
Цитата: Злоп от 19 мая 2024, 00:11... Де-факто стало стандартной как 1с++ и формекс. И хошь хоть на 1с делай 1с-сервер, хоть 1с-клиент
Один экземпляр 1с на сервере, второй на клиенте и связаны по сети через ВК ?
Использование на клиенте платформы 1С сразу привязывает проект к винде, хотя несколько упрощает задачу. Но это не точно. Тут вопрос с вызовами главного меню - удастся ли перехватить их. Надо привлекать АЛьФ`а.
Связаны по сети через ВК
- да. Таких ВК есть, но они голый TCP дают, а хотелось бы чтобы кроме этого ещё и более высокоуиоареаая обёртка был может....
А может и не надо это, такая ВК...
Цитата: Злоп от 19 мая 2024, 09:54Связаны по сети через ВК
- да. Таких ВК есть, но они голый TCP дают, а хотелось бы чтобы кроме этого ещё и более высокоуиоареаая обёртка был может....
А может и не надо это, такая ВК...
Для начала нужно будет как то на сервере запустить экземпляр 1С при запуске клиента. А при разрыве соединения или завершении работы - завершить его на сервере. Чем, собственно, и занимается сервер приложений. Связь ВК_Клиент <-> ВК_Сервер будет по сети. Все данные перепаковываются в строку - json, xml, csv. Это все и реализовано сейчас, не хватает передачи интерфейсной части с сервера клиенту в автоматическом режиме - изначально система предполагалась под информационный киоск и специализированный клиент не на базе 1С.