|
v8sqlite - нативная ВК для работы из 1С c базами sqlite | ☑ | ||
---|---|---|---|---|
0
orefkov
05.10.22
✎
19:18
|
Хороший человек попросил сделать, пока неделю болел короной - выдалось время, собственно сделал сабж.
Решил поделится с народом, может и пригодится кому. https://github.com/orefkov/v8sqlite Нативная внешняя компонента для 1С 8 для работы с базами данных sqlite. Позволяет выполнять запросы к базам данных sqlite и получать их результаты в виде ТаблицыЗначений или массива массивов. Поддерживает работу в: Windows x86 Windows x64 Linux x64 Кто сможет, потестите под линуксом, пожалуйста, тестовая обработка в комплекте. |
|||
1
CepeLLlka
05.10.22
✎
19:27
|
Лайк! Подписка! Колокольчик! Спасибо!
|
|||
2
H A D G E H O G s
05.10.22
✎
19:34
|
Как ТаблицуЗначений конструируешь и возвращаешь в Native режиме?
|
|||
3
orefkov
05.10.22
✎
19:42
|
(2)
ЗначениеИзСтрокиВнутр Под тонким клиентом - JSON + XDTO - массив массивов. |
|||
4
orefkov
05.10.22
✎
19:48
|
||||
5
H A D G E H O G s
05.10.22
✎
19:55
|
(3) уже на стороне 1С? Компонента возвращает строку? Свой сериализатор -аналог 1с-ого на стороне компоненты?
|
|||
6
orefkov
05.10.22
✎
20:16
|
(5)
Да. ВК возвращает строку, из которой уже на стороне 1С можно воссоздать объект. На стороне ВК два вида сериализаторов - либо в ТЗ, либо в JSON. https://github.com/orefkov/v8sqlite/blob/master/src/v8sqlite_addin.cpp#L173 |
|||
7
mistеr
05.10.22
✎
20:19
|
(0) Спасибо! Пригодится однозначно.
|
|||
8
mistеr
05.10.22
✎
20:20
|
(6) Режима выборки/курсора нет? Жаль, значит, как и с запросами 1С, нужно быть осторожным с большими выборками.
|
|||
9
orefkov
05.10.22
✎
20:25
|
(8)
Я решил его не делать. Боле-менее серьёзные запросы всё-равно обычно sqlite'у приходится предварительно в памяти крутить - вытащить, агрегировать, сортировать и т.п, там уж лучше тогда результат весь выкачать и отпустить промежуточные данные с миром на покой. Редко когда просто по таблице нужно пройтись - и то тогда проще лимитом порционно выбирать. |
|||
10
H A D G E H O G s
05.10.22
✎
20:26
|
(6) ясно. Когда то я тоже ходил таким путем, а потом забил на линукс.
|
|||
11
mistеr
05.10.22
✎
20:29
|
(9) Это нужно при импорте данных. А подходящего ключа для лимита может и не быть.
|
|||
12
orefkov
05.10.22
✎
20:37
|
(11)
>> А подходящего ключа для лимита может и не быть В sqlite так не бывает. У любой таблицы обязательно будет либо rowid, либо если таблица создавалась "without rowd" - то первичный ключ. |
|||
13
orefkov
05.10.22
✎
20:39
|
(10)
"Когда то и меня вела дорога приключений. А потом мне прострелили колено" (С) |
|||
14
Garykom
гуру
05.10.22
✎
21:14
|
(0) прикольно но совершенно ненужно
проще json через HTTPСоединение в отправлять в микросервис и ответ в json же получать или вариант с ЗапуститьПриложение()/ВыполнитьКоманду() с параметрами |
|||
15
Garykom
гуру
05.10.22
✎
21:15
|
Мое мнение ВК в 1С остались нужны только в случае если винда быстрая передача больших массивов значений
Через COMSafeArray для COM ВК |
|||
16
Garykom
гуру
05.10.22
✎
21:17
|
(15)+ Ну или что более частый вариант это ОбработкаВнешнегоСобытия()
Когда надо чтобы нечто внешнее дернуло 1С и нельзя заюзать http-сервис в 1С |
|||
17
ДедМорроз
05.10.22
✎
22:39
|
Вк нужны на клиенте,особенно web,когда дернуть что-то по http можно только на сервере.
Опять же,на сервере от ВК больше вреда,чем пользы,т.к.нужно очень аккуратно работать с памятью. Кроме того,если строка,то ЗапуститьПриложение с результатом в файл ничуть не хуже. |
|||
18
orefkov
05.10.22
✎
23:02
|
(14)
Есть микросервис по выполнению запросов к sqlite базам? |
|||
19
orefkov
05.10.22
✎
23:03
|
(17)
Ну мы же профессионалы - просто достанем и померяем :) Бенчмарки есть? |
|||
20
orefkov
05.10.22
✎
23:04
|
+(19)
Это к "Кроме того,если строка,то ЗапуститьПриложение с результатом в файл ничуть не хуже." |
|||
21
Garykom
гуру
05.10.22
✎
23:11
|
(18) есть к postgresql
package main
допилить для sqlite меньше пары часов |
|||
22
Garykom
гуру
05.10.22
✎
23:12
|
(21)+ просто добавить https://github.com/mattn/go-sqlite3
и поправить строку подключения |
|||
23
Garykom
гуру
05.10.22
✎
23:14
|
(21) хотя уточню это консольная утилита
на микросервис это переделывается банально на Go изначально он и был, но консольная оказалось удобней в использовании в связке с 1С |
|||
24
PitNN
28.10.22
✎
12:04
|
(23) Признаюсь, я далёк от Go и прошу объяснить как этим пользоваться для получения/записи данных из 1С
|
|||
25
Serginio1
28.10.22
✎
12:16
|
(23) вот же любители микросервисов. А что реально используешь для транспорта что Web сервер ,gRPC,WebSocket, пайпы,TCP/IP ?
|
|||
26
Garykom
гуру
28.10.22
✎
12:34
|
||||
27
Garykom
гуру
28.10.22
✎
12:38
|
(26)+
В request.json пишутся параметры подключения и текст sql запроса { "server":"", "port":"", "database":"", "user":"", "password":"", "query":"SELECT * FROM public" } Далее смотри run.bat Банальный запуск утилиты с двумя аргументами 1-й файл параметров, 2-й куда результат запроса сохранить в формате json "psql.exe request.json result.json" Чтобы пересобрать (у меня версия под win64 выложена psql.exe) из main.go уже сам ищи мануалы "golang быстрый старт" |
|||
28
Garykom
гуру
28.10.22
✎
12:39
|
(25) какого транспорта и куда?
|
|||
29
Serginio1
28.10.22
✎
12:40
|
А по человечески сказать? Я понимаю, что ты фанат Go, я конечно имею предсталение о нем, но нет желания копаться.
Я так понимаю HTTP сервис? и обмен Json. Ибо это понимает 1С. ВК хорошь тем, что нет межпроцессного взаимодействия. sqlite выполняется внутри процесса 1С. Пэтому я бы выбрал вариант orefkov. |
|||
30
Serginio1
28.10.22
✎
12:43
|
29+ Еще и запуск приложения и потери на запуске. Обычно приходится кучу запросов делать
|
|||
31
Garykom
гуру
28.10.22
✎
12:44
|
(29) в данном случае в (26) это простая консольная утилита
удобно в макет 1С засунуть и при необходимости сохранить в темп и выполнить через ЗапуститьПриложение()/ВыполнитьКоманду() с параметрами в случае если фреш или нельзя писать/запускать бинарники на сервере 1С - поднимается внешний сервис, вариант с ним у меня где то валяется, там не сильно сложней и да тогда тоже самое но 1С стучится через HTTPСоединение, передавая такой же request.json в ответ получает или сразу result.json или номер задания, по которому можно стучаться периодически пока результат не вернется долгого запроса |
|||
32
Garykom
гуру
28.10.22
✎
12:45
|
(30) не издевайся а?
там никаких потерь нет по сути в случае микросервиса несложно переделать на пул и поддержание коннекта к sql |
|||
33
Serginio1
28.10.22
✎
12:52
|
(32) Опять же потери на межпроцессное взаимодействие.
Ну и проблема конечно в том, что 1С не хочет, что бы ВК могла возвращать объект ВК как в COM. И вообще застопорила развитие ВК. А так бы используй .Net Core в 1С и проблем бы и не было. Они COM сдля безопасности сделали в отдельном процессе. Сделайте и для ВК. И нет проблем. А так приходится либо сериализовать-десериализовать, либо создавать вручную создавать ВК на объект https://infostart.ru/1c/articles/534901/ |
|||
34
Garykom
гуру
28.10.22
✎
12:54
|
(33) забудь уже про 1С 8 - https://v8.1c.ru/platforma/1s-predpriyatie-element/ на подходе
|
|||
35
Serginio1
28.10.22
✎
12:57
|
(34) Честно, я уже давно про 1С забыл. Просто много в неё вложил времени и труда. Но вам удачи!
|
|||
36
Кирпич
28.10.22
✎
12:58
|
(0)Было бы неплохо, если бы так работало еще:
|
|||
37
Serginio1
28.10.22
✎
12:58
|
35+ Ну и здоровья. И без осложнений после короны!
|
|||
38
Garykom
гуру
28.10.22
✎
12:59
|
(35) А как же показать сначала аналог (21) на C#/.Net?
|
|||
39
Garykom
гуру
28.10.22
✎
13:01
|
(38)+ и чтобы кроссплатформенно даже на роутерах и смартфонах запускалось
и чтобы не требовало .Net тянуть )) |
|||
40
Serginio1
28.10.22
✎
13:03
|
(38) Для .Net ВК https://infostart.ru/1c/articles/544232/
А для COM просто берешь SQLiteConnection и вперед! https://stackoverflow.com/questions/26020/what-is-the-best-way-to-connect-and-use-a-sqlite-database-from-c-sharp |
|||
41
Garykom
гуру
28.10.22
✎
13:05
|
(40) там у тебя только есть "SQL запрос к MS SQL"
Как к PostgreSQL ? |
|||
42
Serginio1
28.10.22
✎
13:05
|
(39) Ну тут либо универсальность, либо под каждую хотелку отдельную ВК
|
|||
43
Serginio1
28.10.22
✎
13:07
|
(41) Да к .Net ко всем базам есть коннекторы https://metanit.com/sharp/entityframeworkcore/7.1.php?ysclid=l9sbwtrwd730427497
|
|||
44
Garykom
гуру
28.10.22
✎
13:07
|
(42) ну через ВК прокладку на C++ я смог dll либы на Go заюзать из 1С
|
|||
45
Garykom
гуру
28.10.22
✎
13:09
|
(43) Надеюсь ты понимаешь что в этом случае Go намного проще и удобней чем C#?
Не надо кучу всего ставить, только https://go.dev/dl/ и все Дальше хоть в блокноте код и: go mod init "имямодуляпридумать" go get go build |
|||
46
Serginio1
28.10.22
✎
13:09
|
(44) Ну вот основное слово мог. Сделай может, кто и будет использовать. Во всяком случае человеку не надо каждый раз писать ВК. Достаточно dll
|
|||
47
Garykom
гуру
28.10.22
✎
13:11
|
(46) Хрен там. Я пробовал несколько раз и понял что оно дико неудобно "Ъ" юзать!
Кто C#/.Net уже знает тому проще свою утилиту или сервис наваять А кто не знает хрен что напишет |
|||
48
Serginio1
28.10.22
✎
13:11
|
(45) Не не понимаю. В Go есть Linq?
|
|||
49
Kassern
28.10.22
✎
13:11
|
(45) (46) Может хватит уже этих холиваров бесполезных?
|
|||
50
Garykom
гуру
28.10.22
✎
13:12
|
(48) не нужен
если кому нужен может сам написать )) |
|||
51
Serginio1
28.10.22
✎
13:12
|
(47) А вот в ком нет никакого Ъ. Но и им мало кто пользуется. А уж Go и подавно!
|
|||
52
Serginio1
28.10.22
✎
13:14
|
(50) Поверь нужен! Это и работа с БД и со списками. Ты в своем GO увяз. А C# развивается с огромной скоростью.
Ладно. Удачи вам в 1С. Влез я тут зря. |
|||
53
Garykom
гуру
28.10.22
✎
13:18
|
(52) Хм. Моя C# знать и работать еще с 2005 году. И знать Go.
Ты же тоже Go после C# попробовал да? Или все же "увяз" :) |
|||
54
Serginio1
28.10.22
✎
14:43
|
(53) Ну после ухода из 1С мне GO по работе ну ни разу не пригодился. Да и в общем то и особо и другие. (TypeScript )
А работы очень много. То есть смотрю, на новшества но не более. А для 1С как раз .Net удобен через его IReflect использовать нетовские классы через COM. А C# в 2005 и сейчас это небо и земля! |
|||
55
Djelf
28.10.22
✎
14:46
|
(42) Работает такое на Golang, и сервис один и на MSSql и на Oracle, ключ апи кидаешь, определяешь sql провайдера, а оно там само разберется куда и зачем.
Хорошо и давно так работает. Нареканий нет. (48) Почему нет? Есть, вот оно: https://github.com/ahmetb/go-linq Но возможно чуток не соответствет по синтаксису с C# На golang очень просто что-то такое замутить, причем работать будет даже "на коте", а на C# это пока не так. |
|||
56
Serginio1
28.10.22
✎
14:59
|
(55) Ну в свое время .Net Native создавался для Windows Mobile. Суть нативный код со сборкой мусора. Сейчас развитие получает Native AOT https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/
|
|||
57
Garykom
гуру
28.10.22
✎
15:15
|
(54) >А C# в 2005 и сейчас это небо и земля!
Особо ничего не поменялось только кучи сахара насыпали во все щели |
|||
58
Serginio1
28.10.22
✎
15:53
|
(57) Ну не надо про сахар. Сахпр тоже важен. Тот же async/awaite, yield , ref поля внутри ref struct, span,function pointers, Source Generator, Roslyn, pattern matching, generic math https://devblogs.microsoft.com/dotnet/dotnet-7-generic-math/
итд Посмотреть все изменения по версиям можно здесь https://learn.microsoft.com/ru-ru/dotnet/csharp/whats-new/csharp-11 Не надо говорить того, чего не знаешь. Реально идет развитие в сторону натива, функциональщины и упрощения программирования, хотя язык и усложняется, но многое позволяет решать многие задачи проще. Я отнюдь не агитирую ни за какие языки, но я никогда ни какой язык не хаял. У каждого есть свои достоинства и недостатки. Каждый выбирает под свои задачи. |
|||
59
Garykom
гуру
28.10.22
✎
16:52
|
(58) Когда разобраться в такой же по функционалу программе требуется много больше времени - это не проще решать задачи а сложней.
|
|||
60
Kassern
28.10.22
✎
16:54
|
(59) Вот и питонисты так считают, у вас сложно и не понятно, а там все легко и просто)) Это разве делает язык лучше, хуже? У каждого есть свое предназначение.
|
|||
61
Kassern
28.10.22
✎
16:55
|
Ассемблер тоже может показаться сложным и не понятным для неокрепших умов поколения го и питона. Но все равно, его используют, так как понимают, что в данных узких местах не получится получить вменяемую производительность на современных языках.
|
|||
62
Garykom
гуру
28.10.22
✎
17:05
|
(61) Уже почти не используют.
Даже под микроконтроллеры давно на C пишут. Или на TinyGo. |
|||
63
Garykom
гуру
28.10.22
✎
17:05
|
(62)+ Сейчас еще Rust продвигают.
|
|||
64
Kassern
28.10.22
✎
17:07
|
(62) В игровых движках вполне себе используют, там где нужна максимальная производительность.
|
|||
65
Garykom
гуру
28.10.22
✎
17:47
|
(64) Хочу огорчить
Уже давным давно прошли те времена когда в 512Кб RAM пытались все засунуть Сейчас этим совершенно не парятся еще и DRM систему типа Denuvo поверх навернуть и играйте как хотите |
|||
66
Garykom
гуру
28.10.22
✎
17:53
|
Странно.
Почему не разбирающиеся в теме пытаются какие то как минимум устаревшие если не совершенно ошибочные утверждения писать? Тот же сахар да это супер когда пишем новый код да еще и с нуля, быстрей писать и код компактней. Только вот доработка и поддержка подобного кода превращается в ахтунг. Это как в 1С когда через операцию ?(Условие, ЗначениеЕслиИстинно, ЗначениеЕслиЛожно) несколько вложенных нахреначат так что в десяток строк итоге и ипитесь как хотите. |
|||
67
Kassern
28.10.22
✎
18:01
|
(66) "Почему не разбирающиеся в теме пытаются какие то как минимум устаревшие если не совершенно ошибочные утверждения писать" - о чем речь? Или вы хотите сказать, что сейчас вставок ассемблерных не используют для получения приемлемого быстродействия?
|
|||
68
Garykom
гуру
28.10.22
✎
18:02
|
Возвращаясь к теме темы.
Имхо на данный момент если можно в 1С не использовать ВК - значит надо отказаться от них! Потому что старые COM ВК это проблемы на других ОС. Новые Native API ВК это аналогично проблемы обратной совместимости. Да да на разных версиях платформы 1С 8.3 бывают глюки с одной ВК, неоднократно сталкивался и когда свои ВК писал и чужие юзал. Ну и тормознутость с глючностью при использовании ВК с неожиданными падениями. Так что по сути если не требуется ОбработкаВнешнегоСобытия на клиенте то ВК не нужны! Все прочее можно или через ЗапуститьПриложение()/ВыполнитьКоманду() или дергать внешний сервис через HTTPСоединение. |
|||
69
Garykom
гуру
28.10.22
✎
18:06
|
(67) Не используют вручную.
Компиляторы сами создают машинный код часто лучше чем человек вручную вставки напишет. Ты в тонкостях архитектуры разных процов хоть чуть чуть то шаришь? В курсе про IA-32 и отличие от https://ru.wikipedia.org/wiki/X86-64 ? А про разные SSE и прочие AVX? А если код потребуется портировать на ARM или еще что? Или просто разные Win/Lin/macOS/Android/iOS и т.д.? Короче не используют ассемблер, кроме как при разработке компиляторов или интерпретаторов. |
|||
70
Garykom
гуру
28.10.22
✎
18:09
|
(69)+ Это примерно как в реальной работе прикладного программиста практически не используют уже никакие ручные алгоритмы сортировок!
Кроме дефолтного Коллекция.Сортировать() или List.Sort() |
|||
71
Garykom
гуру
28.10.22
✎
18:13
|
(68)+ Хотя забыл еще один вариант когда очень нужны ВК.
Чтобы сделать платное закрытое решение, с защитой привязанной к ВК. В этом случае без ВК согласен сложно - но это вынужденное кривое решение. |
|||
72
Serginio1
28.10.22
✎
18:50
|
(59) Как раз наоборот, более лаконичный код легче читается. Вот например в 1С нет замыканий. При этом используется ОписаниеОповещения("Имя функции"
Проблемы с рефакторингом и прочим. Кстати в C# есть nameof упрощающий рефакторинг. С await/async вызов асинхронных методов упрощается. А его то в 1С ввели совсем недавно и для совместимости с JavaScript! Про Linq вообще промолчу ибо там все типизировано с интеллисенсом. Pattern Matching и прочий сахар упрощает написание и чтение. Проблема в том, что не все могут функциональный код читать, а уж тем более писать. Но это не проблема языка! Когда Linq ввели многие его сторонились, но через некоторое время все (за некоторым исключение) приняли Linq на ура. То есть нужно постоянно изучать новое для тренировки мозгов. И поверь читать сложный код на C# значительно проще, чем код на 1С. Из-за простоты языка много наворотов, утиной типизации без интеллисенса. C# жто строгая типизация со всеми вытекающими (да есть dynamic но это мало используется, там где можно упростить ) |
|||
73
Garykom
гуру
28.10.22
✎
22:42
|
(72)
>Проблема в том, что не все могут функциональный код читать, а уж тем более писать. >Но это не проблема языка! Нет, это именно проблема переусложненного сахаром языка. Почему так популярен Python сейчас? Он простой, по сути замена Visual Basic. Почему такой легкий вход в Go? Он быстро учится, там только слайсы и утиная типизация с интерфейсами непривычны многим. Изучить современный C# (в отличие от старого времен когда он громил Java) это как изучить 1С 8 ОФ+УФ по сравнению с 1С 7.7. Слишком сложный вход для новичков стал - их стало мало - язык загибается в пользу более простых по входу. |
|||
74
Garykom
гуру
28.10.22
✎
22:43
|
(73)+ По этой же причине переусложнения и задирания порога входа умирает С++!
Взамен предпочитают писать либы на Go или системное на Rust. |
|||
75
Serginio1
29.10.22
✎
11:47
|
(74) C++ там больше проблемы с макросами и шаблонами и связанной с ней кодогенерацией.
В C# пошли другим путем Дженерики, generic math, Source Generator. Питон кстати много использовался в связке с C++ особенно для GUI. Сейчас всплеск популярности из-за машинного обучения. Еще раз разные языки нужны. У каждого языка своя ниша, свои плюсы и минусы. А вот простота языка никак не является критерием лучшести. Основной критерий это возможности. То есть скорость написания действующего алгоритма и скорость его выполнения. Смотрим популярность языков у профессионалов https://survey.stackoverflow.co/2022/#most-popular-technologies-language-prof Ну GO и Rust проигрывают и С и С++, а вот популярность TypeScript растет как на дрожжах. Хотя он значительно сложнее JS и во многом похож на C# (Хэйлсберг архитектор этих языков) |
|||
76
rphosts
29.10.22
✎
11:55
|
Сделаю закладочку... будет время - покусаю тему... если будет
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |