|
Обмен данными между 1С и java | ☑ | ||
---|---|---|---|---|
0
Garykom
гуру
18.12.15
✎
19:02
|
Нужно передавать двумерные массивы (в строках ячейки).
Каким образом это лучше сделать и было относительно быстро? Под любые платформы 1С начиная с 7.7 и в т.ч. 8.3 под linux (ComSafeArray отпадает). Еще как то минимизировать затраты на сериализацию/десериализацию. |
|||
1
Garykom
гуру
18.12.15
✎
19:05
|
(0) *Нужно передавать двумерные массивы (в ячейках строки)
|
|||
2
trdm
18.12.15
✎
19:07
|
А данные то какого типа?
Может через файл? SQLite с транзакцией? |
|||
3
Garykom
гуру
18.12.15
✎
19:09
|
(2) данные типа "лист ексель" с разными строками/числовыми/даты в ячейках
строки до 300 символов, в среднем 50-100 |
|||
4
Garykom
гуру
18.12.15
✎
19:09
|
(3)+ количество строк возможно до 10-20к, количество колонок до 100
|
|||
5
Necessitudo
18.12.15
✎
19:12
|
Ну web-сервис конечно
|
|||
6
Garykom
гуру
18.12.15
✎
19:12
|
(2) да через файл простейшее, но "не красиво"
использовать любую внешнюю БД (к которой имеет доступ и 1С и java) можно, но затраты на сериализацию |
|||
7
mehfk
18.12.15
✎
19:13
|
json
|
|||
8
Garykom
гуру
18.12.15
✎
19:13
|
(5) советую попробовать из 1С 7.7 послать на веб сервис "большую табличку"
|
|||
9
trdm
18.12.15
✎
19:13
|
(6) Тогда только сетевые технологии. Сокеты к примеру.
Даже в 7-ке была компонента. |
|||
10
Garykom
гуру
18.12.15
✎
19:14
|
(7) это как бы формат, как в этот формат туды/сюды и потом обернуть (во что) и тоже туды/сюды?
|
|||
11
Garykom
гуру
18.12.15
✎
19:14
|
(9) да думал, даже делал 1С 7.7 - C#
через netainet или как то так, но сериализация будь она неладна |
|||
12
Garykom
гуру
18.12.15
✎
19:16
|
т.е. если бы как то массив/таблицу значений 1С можно было очень шустро в строку длинную сконвертить и потом назад
|
|||
13
trdm
18.12.15
✎
19:16
|
Разделяемая память :))))
https://ru.wikipedia.org/wiki/Разделяемая_память http://doc.qt.io/qt-4.8/qsharedmemory.html На винде можно в актив-ха завернуть и пользоваться )))))) |
|||
14
Garykom
гуру
18.12.15
✎
19:17
|
(13) проблема в java ((
какую то промежутку на чем то? |
|||
15
Garykom
гуру
18.12.15
✎
19:23
|
ладно сначала попробую поиграться с ЗначениеВСтрокуВнутр(Массив) и посмотрю
|
|||
16
Garykom
гуру
18.12.15
✎
19:34
|
Кинуть кто нибудь на разбор/описание внутреннего формата псоле ЗначениеВСтрокуВнутр(ТаблицаЗначений) ссылку может?
|
|||
17
Лефмихалыч
18.12.15
✎
19:58
|
xml или json
зачем изобретать велосипеды? |
|||
18
EvgeniuXP
18.12.15
✎
20:28
|
7.7 не может длинные xml строку передать/принять - там ограничение самой переменной Знач Строка...
|
|||
19
EvgeniuXP
18.12.15
✎
20:29
|
Мобильные приложения (Гилев) смотри там ТЗ кидают в хмл - аналогично делать можно и на 7.7, или вручную - шаблон будет можно и вручную - не помню уже, давно делал.
|
|||
20
EvgeniuXP
18.12.15
✎
20:30
|
в бесплатных было рассказано подробно.
|
|||
21
Garykom
гуру
18.12.15
✎
21:11
|
(18) да про это в курсе, ну значит будем медленно и печально ))
|
|||
22
Serginio1
18.12.15
✎
21:21
|
(8) Сожми зипом. Я в своих обменах сжимаю данные. И 1С при обменах тоже использует ХранилищеЗначения со сжатием
|
|||
23
Serginio1
18.12.15
✎
21:25
|
Кстати если на одной машине то пайпы самое то. Тоже использовал. Удобно NetNamedPipeBinding
http://dotnetmentors.com/wcf-by-example-on-netnamedpipebinding.aspx |
|||
24
Garykom
гуру
18.12.15
✎
21:28
|
(22) проблема не zip'ах а в сериализации долгой, этож циклы по колонкам/строкам
|
|||
25
Garykom
гуру
18.12.15
✎
21:30
|
(24)+ хотелось бы просто отдать куда указатель на область памяти )) с длиной, и пусть там оно само читает и разбирает
ну или какой то быстрый способ преобразовать ТЗ в файл к примеру |
|||
26
Serginio1
18.12.15
✎
21:40
|
Если на компилируемом языке то все быстро.
Просто ты хочешь универсальности, а она всегда будет уступать специализации. Кстати а на 7.7 какой нафиг линукс. Линукс это ССЗБ. |
|||
27
Garykom
гуру
18.12.15
✎
21:49
|
(26) для 7.7 можно без linux ))
|
|||
28
Serginio1
18.12.15
✎
21:59
|
Ну тогда ВК или Automation объект (IDispatch).
На семерке в параметрах Com объекта 1С овские объекты не передать. Но можно использовать ВК обертку http://catalog.mista.ru/public/345658/ Кроме того можно использовать диспинтерфейсы 1С объектов. DispId у них не меняются. Ну сериализуешь в то, что удобнее. Например protobuf http://habrahabr.ru/post/119503/ |
|||
29
Garykom
гуру
18.12.15
✎
22:02
|
(28) разные ВК придется делать под разные платформы
|
|||
30
Serginio1
18.12.15
✎
22:46
|
(29) Ну и ТаблицыЗначений разные. Еще раз необязательно ВК делать. Достаточно Automation объект
|
|||
31
EugeniaK
18.12.15
✎
23:51
|
(0) JSON или XML
Строкой или файлом в зависимости от объема. |
|||
32
trdm
19.12.15
✎
19:06
|
может стоит выдергуть из 2С алгоритмы сериализации/десериализации?
|
|||
33
Garykom
гуру
19.12.15
✎
19:27
|
(32) оно уже давно того и даже ссылки не пашут
да и не факт что в 8.Х тоже самое |
|||
35
trdm
19.12.15
✎
20:03
|
(33) Все на месте.
void CValue::SaveToString(CString &Str) { switch(nType) { case TYPE_NUMBER: { NUMBER f=GetNumber(); if(f==int(f)) Str.Format("{1/%d}",int(f)); else Str.Format("{1/%f}",f); return; } case TYPE_STRING: Str=GetString(); ReplaceBySave(Str); Str=CString("{2/")+Str+"}"; return; case TYPE_DATE: Str.Format("{3/%d}",GetDate()); return; case TYPE_REFFER: pRef->SaveToString(Str); return; break; }; Str="{0/0}"; } void CValue::LoadFromString(CString &Str) { Reset(); if(Str.GetLength()==0) return; if(Str.GetAt(0)!='{') return; int nIndex1=Str.Find("/"); if(nIndex1>1) { CString csType=Str.Mid(1,nIndex1-1); int nDataType=atoi(csType); if(nDataType==0&&nIndex1>2) { CValue::CreateObject(csType); pRef->LoadFromString(Str); return; } nType=nDataType; int nIndex2=Str.Find("}"); CString csValue=Str.Mid(nIndex1+1,nIndex2-nIndex1-1); switch(nType) { case TYPE_NUMBER: fData=atof(csValue); return; case TYPE_STRING: sData=csValue; ReplaceByLoad(sData); return; case TYPE_DATE: dData=atoi(csValue); return; case TYPE_ARRAY: { CValue::CreateObject("Массив"); pRef->LoadFromString(Str); return; } default: nType=TYPE_EMPTY; }; } } |
|||
36
trdm
19.12.15
✎
20:09
|
||||
37
mikeA
19.12.15
✎
21:16
|
(0) как там в 7.7 хз, в 8.3 можно попробовать вместо таблицы значений использовать массив структур и его целиком сериализовать через ЗаписьJSON
тз= Новый Массив; тз.Добавить(Новый Структура("х,хх", 1, "2")); ЗаписьJSON= Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON, тз); Сообщить(ЗаписьJSON.Закрыть()); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |