|
Сохранение соединения ADODB.Connection eddy_n, Crusher, H A D G E H O G s, nick86, Климов Сергей, Garykom, maxar, AlexKimp, mTema32, Галахад, trad, obs191, vsy, АЛьФ, zenik, Bad_Aleks, JohnGilbert, PLUT, NorthWind, Zapal, shuhard, SeriyP, 1cVandal, Мультук, Fish, asady, ndrv, Бычье сердце, b_ru, dva1c, Eiffil123, alexxx961503, ADirks, toypaul, АгентБезопаснойНацио, DemonShinji2, MWWRuza, Умный Слоненок, Anton1307, ДенисСмирнов, DrZombi, lordworld17, kir-g, Dmitrii, RVN, sergey198, Страждущий, MM, 2S, unenu, crotnn
| ☑ | ||
|---|---|---|---|---|
|
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, тратить время на изменение технологии доступа он не будет, от слова совсем.
|
|||
|
27
eddy_n
12.05.26
✎
20:56
|
(0) У меня настройки на все соединения сидят в независимом РС без измерений с наращиваемым по мере необходимости пулом (игра слов) ресуросов. В таком РС единственная и неповторимая запись, а больше и не нужно.
|
|||
|
28
АЛьФ
12.05.26
✎
21:13
|
2(27) В ресурсах РС (регистр сведений?) можно хранить объект СОМ?
|
|||
|
29
АЛьФ
12.05.26
✎
21:13
|
2(26) Верно.
|
|||
|
30
eddy_n
12.05.26
✎
21:28
|
(28) О чём ты? А если у тебя тупо компонента не зарегена?
|
|||
|
31
eddy_n
12.05.26
✎
21:30
|
(30) + Да и работать с неё можно по-разному. Можно на сервере, можно на клиенте. Значит и регистрация будет разной.
|
|||
|
32
craxx
12.05.26
✎
22:29
|
(28) Объект COM - это кусок кода в памяти винды. Как ты его собрался где-то хранить? Ты еще объект обработки в регистр положить попытайся)
|
|||
|
33
Garykom
гуру
12.05.26
✎
23:07
|
С точки зрения корректного решения задачи можно поступить как в семерке
Запустить клиентский сеанс 1С 8 на сервере аля робота С глобальной переменной на клиенте в которой будет COMОбъект С ПодключитьОбработчикОжидания(), в котором любым способом с сервера получаются команды |
|||
|
34
eddy_n
13.05.26
✎
06:11
|
(33) Для тех, кто на бронепоезде - что такое 'аля робота'?
|
|||
|
35
АЛьФ
13.05.26
✎
09:00
|
2(30) Какая компонента?
2(31) Какая регистрация? 2(32) Так я об этом и спрашиваю. 2(33) Мою задачу это не решает. |
|||
|
36
eddy_n
13.05.26
✎
09:07
|
(35) COM-объекты живут без динамически подключаемой библиотеки в лице компоненты cntrl.dll?
|
|||
|
37
Eiffil123
13.05.26
✎
09:29
|
в параметры сеанса запихнуть не получится? они по идее только на сервере и висят
|
|||
|
38
eddy_n
13.05.26
✎
09:40
|
(37) я кстати кое-какие данные туда тоже пихаю. Не относящиеся к Com, но облегчающие жизнь.
|
|||
|
39
АЛьФ
13.05.26
✎
09:52
|
2(36) Какое это имеет отношение к теме?
2(37) Напрямую не получается. Было в (1) предложено через временное хранилище, но, как оказалось (11), во временном это дело не живет долго. |
|||
|
40
trad
13.05.26
✎
09:58
|
(39) Так и фиг с ним, что не живет долго. Протухнет - создашь заново
|
|||
|
41
АЛьФ
13.05.26
✎
10:07
|
2(40) Теряется весь смысл. У нас не такой активный обмен.
Хотели в динамическом списке выводить статусы документов из семерки. Именно тут и наткнулись на тормоза при соединении. Этот момент проще будет реализовать другим способом. |
|||
|
42
eddy_n
13.05.26
✎
11:28
|
(41) С динамическими списками не шутят ещё со времен 8.2, когда в предопределённые процедуры ПриВыводеСтроки, ПриПолученииДанных (так кажется эти изыски назывались) кое-кто пытался впихнуть невпихуемое.
|
|||
|
43
Eiffil123
13.05.26
✎
11:30
|
(41) ужасное конечно решение в динамическом списке тащить что-то из другой базы через ADO или COM. я бы тогда лучше сделал вспомогательный РС, его подцепил к дин.списку.
А обновление РС - уже через рег.задание хоть каждую минуту или по какому-то событию |
|||
|
44
zenik
13.05.26
✎
11:38
|
(41) А база SQL? Тогда можно через ADO напрямую данные читать...
|
|||
|
45
Garykom
гуру
13.05.26
✎
11:41
|
(43) Задачу ТС удобно через Внешние Источники Данных решать
Можно и прямо на ДС повесить, но лучше через промежуточный РС |
|||
|
46
Garykom
гуру
13.05.26
✎
11:40
|
(44) Не читатель?
У ТС как раз в медленном создании объекта ADO с подключением и проблема |
|||
|
47
АЛьФ
13.05.26
✎
11:42
|
2(43) Мы так и хотим в итоге сделать, но пока в файловом варианте работает, не хотелось бы рег.задания пытаться использовать. Перейдем на сервер, уберем все это дело в фон.
|
|||
|
48
Eiffil123
13.05.26
✎
11:42
|
(45) работал с внешними источниками. Запросы в разы медленнее работают, чем с объектам текущей ИБ. У меня есть подозрение, что выполнение запроса каждый раз открывает новое соединение, за счет этого и тормоза.
Получение статусов придется делать в обработчике "ПриполученииДанныхНаСервере", и при прокрутке дин.списка будут жуткие тормоза за счет этого. |
|||
|
49
Garykom
гуру
13.05.26
✎
11:43
|
(47) Чем регзадания не нравятся?
Да для файловых они не удобны, но для серверных баз это очень даже круто |
|||
|
50
АЛьФ
13.05.26
✎
11:43
|
2(45) Думали над использование внешних источников, но решили, что не стоит заморачиваться (см. мой коммент об использовании готовых прямых запросов SQL).
|
|||
|
51
АЛьФ
13.05.26
✎
11:44
|
2(49) Так именно тем, что сейчас работа в V8 идет в файловом варианте.
|
|||
|
52
Garykom
гуру
13.05.26
✎
11:48
|
(51) Так перейдите на автономный сервер с файловой базой то
Либо просто через публикацию на веб-сервере работать, с указанием через ключики запуска где можно регламентные выполнять Или конфа не УФ? |
|||
|
53
eddy_n
13.05.26
✎
12:00
|
(47) У нас на рег. заданиях многое держится. Без них ничего не взлетает.
|
|||
|
54
eddy_n
13.05.26
✎
12:02
|
(52) Веб-сервер как оказалось не самое хорошее решения для 20-22 платформ 1с. Пинать его (IIS) приходится периодически.
|
|||
|
55
eddy_n
13.05.26
✎
12:04
|
В теории всё легко и просто, а когда дело доходит до конкретной реализации всплывают подводные камни.
|
|||
|
56
eddy_n
13.05.26
✎
12:07
|
Спросите, а почему на 20-ой до сих пор? А потому что ни разу не было претензий к демоническому обновлению.
|
|||
|
57
АЛьФ
13.05.26
✎
12:19
|
2(52) Конфа УФ. Мы сейчас в процессе перехода на сервер.
|
|||
|
58
Garykom
гуру
13.05.26
✎
13:34
|
(54) Не наблюдал особых проблем с Апачем
Оно или сразу работает или нет |
|||
|
59
eddy_n
13.05.26
✎
13:53
|
(58) Не знаю почему, админ не хочет его ставить
|
|||
|
60
Garykom
гуру
13.05.26
✎
14:00
|
(59) Странный админ
Апачей можно даже несколько поднять, на разных портах И параллельно с IIS, мешать не будут друг-другу |
|||
|
61
eddy_n
13.05.26
✎
16:51
|
(60) Я в его монастырь со своим уставом не лезу. Да у меня и без это проблем выше крыши.
|
|||
|
62
eddy_n
13.05.26
✎
17:03
|
(61) + Марки марочные в спину дышат
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |