v7: Падает 1с77 при использовании 1с8 через OLE и COM #682845


#0 by necro
В глобальном модуле две переменных: ком-соединение и оле-соединение, создаются в ПриНачалеРаботыСистемы, обнуляются в ПриЗавершенииРаботыСистемы; доступ к ним организован через функции СоздатьСоединение, которые возвращают существующее соединение, либо создают новое, если его нет. 1с77 падает при завершении работы системы (уже после того, как закрылось окно программы); если ОЛЕ соединение инициализировать непосредственно перед использованием а потом сразу обнулять, падает значительно реже (но и работает соответственно дольше), однако всё равно иногда падает. У кого-нибудь есть предположения, как это побороть?
#1 by necro
Неужели никто не запускал восьмерку из семерки?
#2 by Кирпич
ну неизвестно, что ты там понапрограммировал. может там ересь какая.
#3 by necro
на скриптовом языке сложно что-нибудь эдакое напрограммировать, чтобы программа падала, я даже не знаю, как мне это удалось
#4 by Кирпич
наверное ссылок наплодил. восьмерка закрылась, а ссылки в семерке остались. ну это так. предположение.
#5 by necro
так каждый раз перед вызовом какого-то метода: если последнее не сделать, то если было ОЛЕ соединение, то после исчезновения окна 1С появляется сообщение об ошибке, если делать - то то же самое, но не каждый раз
#6 by Кирпич
и всё чтоли? больше ничо не делаешь?
#7 by necro
ну как же, процедурки разнообразные из модуля внешнего соединения восьмерочной базы вызываю, передаю туда исключительно строки, на том конце выполняются несложные запросы к справочникам (вроде найтипокоду) и проводится простейший документ. там и кода-то особого нет.
#8 by Кирпич
а cntr=0 пробовал?
#9 by necro
не, не пробовал
#10 by Кирпич
а после каждого Соединение = cntr.Connect(давКарты_СтрокаПодключения);         делать Соединение = 0 пробовал?
#11 by necro
попробую
#12 by necro
так получится на каждый вызов новое соединение, это слишком долго, поэтому хранится глобальная переменная с соединением
#13 by Кирпич
если Соединение у тебя одно и создается один раз, то в ПриЗавершенииРаботыСистемы:
#14 by Кирпич
понял
#15 by Кирпич
ну и остальное показал бы. мож где ссылки остаются еще.
#16 by necro
cntr вообще локальная переменная в той функции, которая создает соединение, она по идее должна всё-таки успеть обнулиться до выхода из программы
#17 by Кирпич
ну ты ее глобальной сделай. для интересу
#18 by necro
но я так понимаю от неё наоборот нуцжно как можно быстрее избавиться, вся работа идет через Соединение же а не через cntr
#19 by necro
вот сейчас никак не могу воспроизвести ошибку - не падает. наверное от фазы луны зависит.
#20 by Кирпич
ну если ты в документации проичтал, что от этой переменной надо быстрее избавиться, то это - да, понимание. а так, это не понимание, это фантазии.
#21 by Кирпич
"наверное от фазы луны зависит" а фазы луны - это обычно операторы ветвления в наших программах :)
#22 by necro
в документации я ничего про порядок удаления переменных не видел, наверное потому, что подразумевается что в скриптовых языках ничего удалять не надо. А фантазия подсказывает, что раз переменная cntr больше не для чего не нужна, то она не нужна. Соответственно в отличие от самого соединения она локальная в функции и по идее при выходе из функции должна удалиться сама, не сохранять же мне её про запас.
#23 by Кирпич
я чота вообще не понимаю как у тебя Соединение получается посмотрел в хелпе // Пример приводится на языке MS Visual Basic: Dim connector As Object Set connector=CreateObject("V82.Application") result=connector.Connect("File=c:InfoBasesTrade;Usr=Director;")
#24 by necro
result это и есть Соединение
#25 by Кирпич
Возвращаемое значение: Тип: Булево. Истина - инициализация прошла удачно, Ложь - в противном случае.
#26 by Кирпич
и чо работает?
#27 by necro
а, так это если Application - то булево, а если V82.ComConnector, то в ответе как раз соединение
#28 by Кирпич
а у тебя что?
#29 by necro
у меня оба. но Application я в результате стал создавать непосредственно перед использованием и сразу после этого обнулять, и вообще он подозрительный какой-то
#30 by necro
так что сейчас постоянно подключено "Внешнее соединение"
#31 by necro
кстати вот пример:
#32 by necro
никакие объекты из ИБ 1С8 не возвращаются и в неё не передаются, так что на них ссылок нет
#33 by Кирпич
ну у тебя в примере уже две ссылки (СпрКонтрагенты и Выборка) вобщем cntr делай глобальной и убивай при закрытии. т.к. больше кода нету, то и гадать больше нечего.
#34 by necro
да это не мой пример а из синтакс-помощника, я создание соединения оттуда скопипастил.
#35 by Кирпич
ну и хорошо
#36 by necro
кхм. запустил это безобразие у клиента, там две семерочные торговли к моей восьмерке коннектятся. Обе (ОБЕ!) упали с первого же вызова функции из модуля внешнего соединения (передаем в восьмерку строку и получаем в ответ Соответствие, у которого все элементы - строки). После перезапуска одна нормально заработала, вторая не запускалась вообще еще полчаса. Отладчик вывел в ПриОткрытии обработки FR_COMM. Фискального регистратора на рабочем месте нет. Отключил его в настройках. В процессе пока пытался запустить базу которая не запускалась, тестировал ту, которая запускалась. При мне работало. Кроме того, платформа запускалась 25-го релиза, исправил на 27. Не знаю, есть ли во всем этом взаимосвязь, ведь и у меня на компьютере падало, но у меня всё же в основном при использовании V82.Application, а там я оставил только V82.COMConnector.
#37 by necro
Есть вообще где-нибудь что-нибудь про практическое использование COM 1с8 из 1с77?
#38 by Кирпич
пока не покажешь код тебе никто ничем не поможет
#39 by Бертыш
Типа?
#40 by necro
читал, там к сожалению ничего такого нет
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С