|
Сохранение соединения ADODB.Connection Vstur, shuhard, reg0303, d18, Группа неравнодушных, Жеглофф, Олдж, Dedal, maxab72, Garykom, zenik, НачинающийВосьмерочн, АгентБезопаснойНацио, ЕRPe, АЛьФ, AlexKimp, LuckyStar, XMMS, crotnn, Fedor-1971, Мультук, Hmster, A_G, MWWRuza, Гипервизор, X Leshiy, Caesar, JohnGilbert, maxar, Micke, DrZombi, mikecool, RVN, trad, мистер игрек, trooba, Web00001, kubik_live
| ☑ | ||
|---|---|---|---|---|
|
0
АЛьФ
12.05.26
✎
14:49
|
Из базы v8 настроено общение с v7 через прямые запросы. Можно где-то сохранить соединение, чтобы инициализировать его один раз при старте и дальше пользовать? В v7 это решалось просто - глобальная переменная. Как это решить в v8?
|
|||
|
1
zenik
12.05.26
✎
14:52
|
Процедура ДобавитьСоединениеВПараметрыСеанса( ИнформационнаяБаза, Соединение )
АдресХранилища = ПоместитьВоВременноеХранилище( Новый Структура("COMОбъект", Соединение), Новый УникальныйИдентификатор() ); СоответствиеИБ = ПараметрыСеанса.COMОбъекты.Получить(); СоответствиеИБ.Вставить( ИнформационнаяБаза, АдресХранилища ); ПараметрыСеанса.COMОбъекты = Новый ХранилищеЗначения( СоответствиеИБ ); КонецПроцедуры Функция ПолучитьСоединениеИзПараметровСеанса( ИнформационнаяБаза ) // COMОбъекты = ХранилищеЗначения - Соответствие - Структура - COMОбъект СоответствиеИБ = ПараметрыСеанса.COMОбъекты.Получить(); АдресХранилища = СоответствиеИБ[ИнформационнаяБаза]; Если АдресХранилища = Неопределено Тогда Возврат Неопределено; КонецЕсли; Структура = ПолучитьИзВременногоХранилища( АдресХранилища ); Если Структура = Неопределено Тогда Возврат Неопределено; КонецЕсли; Возврат Структура.COMОбъект; КонецФункции |
|||
|
2
АЛьФ
12.05.26
✎
14:56
|
2(1) Спасибо.
|
|||
|
3
Garykom
гуру
12.05.26
✎
14:57
|
(1) Хак со временным хранилищем ненадежен
|
|||
|
4
Garykom
гуру
12.05.26
✎
15:01
|
(0) На сервере легко и просто в целом никак
Не считая глючного хака (1) через временное хранилище Более правильно через длительное фоновое, которое в цикле с паузой постоянно крутится А обмен с этим длительным фоновым как раз через временные хранилища возможен или иными способами На клиенте легко |
|||
|
5
Garykom
гуру
12.05.26
✎
15:03
|
Представь что у тебя кластер серверов 1С
На одном ты поднял COMОбъект А если вызов от клиента пришел на другой сервер 1С? |
|||
|
6
Garykom
гуру
12.05.26
✎
15:10
|
Имхо правильный (на текущем уровне технологий) способ держать одно или пул соединений из 1С это использовать нечто внешнее
Например микросервис, который поднимает и держит нужный COM/OLE А 1С с ним работает через http |
|||
|
7
Garykom
гуру
12.05.26
✎
15:13
|
(6)+ В этом случае сразу решается и проблема кросс-платформенности
Когда сервер 1С крутится под Linux А этот отдельный микросервис можно запускать на Windows |
|||
|
8
АЛьФ
12.05.26
✎
15:13
|
2(4) В чем глючность?
2(5) У меня нет кластера. |
|||
|
9
АЛьФ
12.05.26
✎
15:14
|
2(6)(7) У меня частная задача в жестких условиях окружения. Мне на фиг не сдалось все вот это решение проблем, которые у меня в принципе не возникнут.
|
|||
|
10
АЛьФ
12.05.26
✎
15:14
|
2(1) Все получилось. Еще раз спасибо.
|
|||
|
11
Garykom
гуру
12.05.26
✎
15:19
|
(8)
21.3.3. Получение данных из временного хранилища
При записи объекта в информационную базу может понадобиться извлечь данные из временного хранилища и поместить их, например, в реквизит объекта информационной базы. Для этого существует специальный метод – ПолучитьИзВременногоХранилища(). Этот метод извлекает данные из временного хранилища и возвращает их в качестве результата выполнения. Для получения данных необходимо указать адрес во временном хранилище. Этот адрес возвращают методы помещения данных во временное хранилище в случае их успешного выполнения (см. предыдущие разделы). Внимание! При получении на сервере значения из временного хранилища следует учитывать то, что оно получается по ссылке. В действительности, ссылка эта указывает на значение, которое хранится в кеше. В течение 20 минут, с момента помещения в хранилище или же с момента последнего обращения, значение сохранится в кеше, а затем записывается на диск и из кеша удаляется. При следующем обращении значение загружается с диска и снова помещается в кеш. После десериализации и восстановления значения из временного хранилища ссылки не восстанавливаются. Значение в кеше восстанавливается с диска. Но после сериализации/десериализации восстановить ссылки на другие объекты внутри значения невозможно. https://its.1c.ru/db/v836doc#bookmark:dev:TI000000809 |
|||
|
12
Garykom
гуру
12.05.26
✎
15:18
|
(10) Учти, 20 минут с последнего обращения - и оно из кэша падает на диск
Точнее оно туда сразу падает, но пока свежее используется из кэша - COMОбъект еще жив Как только пропало из кэша - COMОбъект умер |
|||
|
13
Garykom
гуру
12.05.26
✎
15:24
|
(10) А как многозадачность/многопоточность решил?
Ну если к одному твоему COMОбъект а параметрах захотят разные модули параллельно обратиться? Или у тебя это сразу запрещено? |
|||
|
14
АЛьФ
12.05.26
✎
15:27
|
2(11)(12) Хм... Посмотрим.
2(13) У нас нет фоновых заданий. |
|||
|
15
Garykom
гуру
12.05.26
✎
15:31
|
(14) Не обязательно фоновые
Одну или разные обработки одновременно открыли копии в одном сеансе, где одинаковый код обращения Или будешь под каждую отдельный параметр сеанса? |
|||
|
16
Garykom
гуру
12.05.26
✎
15:33
|
Имхо почему каждый раз просто заново не создавать COMОбъект
Не совсем понимаю схемы работы что требуется его сохранять между серверными вызовами |
|||
|
17
АЛьФ
12.05.26
✎
15:33
|
2(15) Как в одном сеансе одновременно выполнять разный код без фоновых заданий?
|
|||
|
18
АЛьФ
12.05.26
✎
15:34
|
2(16) Установка соединения съедает 80-90% времени всего запроса.
|
|||
|
19
Garykom
гуру
12.05.26
✎
15:39
|
(17) По очереди
Одна обработка к 1-й базе v7 соединилась, затем вторая ко 2-й базе v7 тот же объект И тут первая начинает писать, думая что работает с 1-й а база то 2-я |
|||
|
20
Garykom
гуру
12.05.26
✎
15:40
|
(18) Обычно создали объект, подключились и много нечто делаем, затем отключаемся
Что за схема работы что требуется держать подключение? Пишешь интерфейс на 8-ке для работы онлайн с базой 77? Дык я в 77 для такого аля веб-сервис поднимал |
|||
|
21
Garykom
гуру
12.05.26
✎
15:48
|
(20)+ https://github.com/Garykom/http1C77
как и писал выше в (6) микросервис на Go https://github.com/Garykom/http1C77/blob/main/main.go держит COM/OLE с базой 1С 7.7 получает запросы по http запросы по сути просто код на ЯП 1С 7.7 засовывает его в текстовый файл и запускает на выполнение через внешнюю обработку где #ЗагрузитьИзФайла результат кода сериализуется во что надо (у меня в TSV) и возвращается через http |
|||
|
22
АЛьФ
12.05.26
✎
15:48
|
2(19) Это решается тем, что запрос закрывается каждый раз. Не возникает ситуация, когда запрос открыт и через это соединение идет второй запрос.
2(20) Обычная схема работы. Как раз каждый раз подключаться - это странно. Поэтому и ищу возможность открыть соединиение один раз и использовать его. У нас переходный период, поэтому данные идут в обоих направлениях, работа в обоих системах активная идет. 2(21) Слишком ненадежно и запарочно для нашей задачи. Проще оставить как есть. |
|||
|
23
Garykom
гуру
12.05.26
✎
15:56
|
(22) Оно надежней чем из 1С 8 соединяться
И удобней По сети можно когда 1С 8 и 1С 77 на разных машинах Единственный минус что сериализация нужна явная в обе стороны самому |
|||
|
24
АЛьФ
12.05.26
✎
16:55
|
2(23) Это если нужна постоянная связь, то может быть. В моем случае это временное решение на переходный период. Разрабатывать отдельно функционал обмена никто не позволит.
У меня есть куча готовых запросов в v7, которые возвращают всякие предподготовленные наборы данных для отчетов и быстрого анализа. Вот эти запросы просто теперь вызываются из v8 и там используются. Ну, это помимо обмена собственно данными в обе стороны. |
|||
|
25
Garykom
гуру
12.05.26
✎
17:10
|
(24) Так зачем их через ADO то вызывать?
Используй REST API как прокладку между 1С 8 и MS SQL Или банально через ВИД тогда уж |
|||
|
26
shuhard
12.05.26
✎
17:25
|
(25) у ТС стоит конкретная прикладная задача - ускорить работу через ADODB, тратить время на изменение технологии доступа он не будет, от слова совсем.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |