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

#11
FormEx / Хотелка: Переместить колонку м...
Последний ответ от sau - 18 мая 2024, 23:59
Можно ли переместить колонку многострочной части, т.е. изменить порядок?
#12
Цитата: AlexGM от 18 мая 2024, 19:51Из нереализованных идей: считывать из окна 1С главное меню, окна (и здесь реализация через ВК очень помогает). Отправлять изменения на клиента(ов) - реализация кроссплатформенная и красочная. События с клиента передавать обратно в 1С. На выходе получаем тонкий клиент 7.7. Ядро 1С работает под виндой/эмуляцией на сервере, клиенты хоть на андроиде. Нью-Васюки становятся шахматной столицей мира.

   Если вдруг дойдет до создания альтернативного ядра 1С - оно просто займет нужное место в этой архитектуре.
.
А по мне встроить в толстую-1с ВК для работы по сети/интернету, чтоб дефак о, тело штатной типа как 1с++ и формекс
#13
FormEx / Хотелка: ПолучитьПоложениеКоло...
Последний ответ от sau - 18 мая 2024, 23:06
Или ПоложениеКолонкиТаблицы сделать функцией с возвращаемым значение
#14
Цитата: Злоп от 18 мая 2024, 19:33Если жто всё доведено до ума и рабо о способно без особых глюков - это хорошее дело
В серверной версии на дельфи, каюсь, глюки имеются. Очень тяжело прикручивал туда HTTP, нужна была реализация метода PUT своя. Там, похоже, и глючит. На Go версии все реализовано на массовых библиотеках без напилинга, тьфу тьфу - ни одного сбоя. Если кто любит Дельфи - могу выложить серверную часть на нем, но для использования, тем более в бою - Go. Тем более они по памяти примерно одно кушают. Что даже странно - сервер на Go 64 битный. Правда, без GUI, но с веб панелью управления.
 
#15
Цитата: Злоп от 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.
#16
   Из нереализованных идей: считывать из окна 1С главное меню, окна (и здесь реализация через ВК очень помогает). Отправлять изменения на клиента(ов) - реализация кроссплатформенная и красочная. События с клиента передавать обратно в 1С. На выходе получаем тонкий клиент 7.7. Ядро 1С работает под виндой/эмуляцией на сервере, клиенты хоть на андроиде. Нью-Васюки становятся шахматной столицей мира.

   Если вдруг дойдет до создания альтернативного ядра 1С - оно просто займет нужное место в этой архитектуре.
#17
Если жто всё доведено до ума и рабо о способно без особых глюков - это хорошее дело
#18
 "флаг "Пришла команда".
- а откуда ВК этот флаг видит?
#19
Цитата: Злоп от 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;
#20
А ВК постоянно держит связь с сервером приложений или общение с сервером приложений только исключительно через файл отображения?