Последние сообщения

#21
   Из нереализованных идей: считывать из окна 1С главное меню, окна (и здесь реализация через ВК очень помогает). Отправлять изменения на клиента(ов) - реализация кроссплатформенная и красочная. События с клиента передавать обратно в 1С. На выходе получаем тонкий клиент 7.7. Ядро 1С работает под виндой/эмуляцией на сервере, клиенты хоть на андроиде. Нью-Васюки становятся шахматной столицей мира.

   Если вдруг дойдет до создания альтернативного ядра 1С - оно просто займет нужное место в этой архитектуре.
#22
Если жто всё доведено до ума и рабо о способно без особых глюков - это хорошее дело
#23
 "флаг "Пришла команда".
- а откуда ВК этот флаг видит?
#24
Цитата: Злоп от 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;
#25
А ВК постоянно держит связь с сервером приложений или общение с сервером приложений только исключительно через файл отображения?
#26
   Журнал работы киоска для примера. Команды с клиента в фигурных скобках, ответ в квадратных. Сначала устанавливаются переменные (они же параметры) сессии. Далее прописывается путь внешней обработки с логикой работы киоска. через функцию глобального модуля глВКВызов достаются внутренние функции обработки (использована процедура ПриПовторномОткрытии). Точность журнала 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
#27
Цитата: Злоп от 18 мая 2024, 15:41"5. Результат выполнения возвращается в отображаемый файл."
- в отображаемый файл результат кладёт ВК или 1С? (Думаю что ВК).
т.е. ВК читает из файла "запрос", типа
"ПолучитьАктивнуюНоменклатуру()",
передаёт на исполнение, 1с исполняет типа
  ...
  Возврат ТЗноменклатура;
Конецфункции // ПолучитьАктивнуюНоменклатуиу

И полученную ТЗ кладёт в отображаемый файл?

Да, это работа ВК, 1С ведь ничего не знает про отображаемые файлы. Команд два типа, EvalExpr возвращает вычисленное выражение, ExecBatch успешность выполнения. Результат вызова ВК укладывает в файл и ставит флаг "Ответ готов".

   Однако, на стороне ВК таблица значений уже не совсем таблица значений. Сейчас лучше передавать базовые типы.
#28
  Это не файл в традиционном понимании. Физически на диске его нет, он в памяти - File mapping, winapi. Основные потери времени в сети. Сама проверка события в цикле с небольшой задержкой, чтобы процессор не грузить. Пробовал через сообщения винды реализовать, но сложно отлавливать их на стороне 1С. На сервере под это сейчас отдельная go-рутина создается (как бы поток, но дешевле).
  По скорости запрос-ответ по факту все прозрачно, на быстрых операциях на киоске нет ощущения, что он задумывается. Если на стороне 1С тяжелый запрос - там да, приходится выводить окно ожидания.
  ВК на стороне 1С получилась в ходе эволюции: найдены были два пути выполнения кода, через OLE и через ВК. Первоначально была попытка запуска 1С через OLE, но таким сложно управлять. При запуске процесса есть много информации о нем, возможность управление через winapi. А из ВК есть доступ интересным интерфейсам. Там же, в ВК сделан клиент TCP и можно интегрироваться с разными серверами приложений в рамках сети.
  Плюс OLE в том, что не нужен файл для передачи команд и простота реализации на стороне 1С - не нужна даже обработка вспомогательная и ее автозапуск. Однако, был выбран путь на универсальность, для использования разных приложений. И когда начали переходить на 8-ку она взлетела с минимальными доработками. Но сложность закрытия тогда поставила на этом направлении крест. Еще были только индивидуальные экземпляры, при дисконнектах они оставались. После закрытия сервера продолжали висеть.
#29
"5. Результат выполнения возвращается в отображаемый файл."
- в отображаемый файл результат кладёт ВК или 1С? (Думаю что ВК).
т.е. ВК читает из файла "запрос", типа
"ПолучитьАктивнуюНоменклатуру()",
передаёт на исполнение, 1с исполняет типа
  ...
  Возврат ТЗноменклатура;
Конецфункции // ПолучитьАктивнуюНоменклатуиу

И полученную ТЗ кладёт в отображаемый файл?
#30
Цитата: Djelf от 18 мая 2024, 13:03Злоп, ну зайди на гитхаб уже, там на первой странице все расписано достаточно понятно.
Я там как говорится "узнал всё буквы, но не смог прочитать слово" ;-)