Если делать альтернативу 1С, то какие брать готовые компоненты?

Автор trdm, 01 апреля 2024, 11:18

« назад - далее »

AlexGM

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

   Если вдруг дойдет до создания альтернативного ядра 1С - оно просто займет нужное место в этой архитектуре.

AlexGM

Цитата: Злоп от 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.

AlexGM

Цитата: Злоп от 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с-клиент

AlexGM

Цитата: Злоп от 19 мая 2024, 00:11... Де-факто стало стандартной как 1с++ и формекс. И хошь хоть на 1с делай 1с-сервер, хоть 1с-клиент
Один экземпляр 1с на сервере, второй на клиенте и связаны по сети через ВК ?

   Использование на клиенте платформы 1С сразу привязывает проект к винде, хотя несколько упрощает задачу. Но это не точно. Тут вопрос с вызовами главного меню - удастся ли перехватить их. Надо привлекать АЛьФ`а.

     

Злоп

Связаны по сети через ВК
- да. Таких ВК есть, но они голый TCP дают, а хотелось бы чтобы кроме этого ещё и более высокоуиоареаая обёртка был может....
А может и не надо это, такая ВК...

AlexGM

Цитата: Злоп от 19 мая 2024, 09:54Связаны по сети через ВК
- да. Таких ВК есть, но они голый TCP дают, а хотелось бы чтобы кроме этого ещё и более высокоуиоареаая обёртка был может....
А может и не надо это, такая ВК...

   Для начала нужно будет как то на сервере запустить экземпляр 1С при запуске клиента. А при разрыве соединения или завершении работы - завершить его на сервере. Чем, собственно, и занимается сервер приложений. Связь ВК_Клиент <-> ВК_Сервер будет по сети. Все данные перепаковываются в строку - json, xml, csv. Это все и реализовано сейчас, не хватает передачи интерфейсной части с сервера клиенту в автоматическом режиме - изначально система предполагалась под информационный киоск и специализированный клиент не на базе 1С.