|   |   | 
| 
 | 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 | 
        Сделаю закладочку... будет время - покусаю тему... если будет     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |