Что делать, если COM-соединение вылетает?

15.10.12

Интеграция - Перенос данных 1C

Как-то я столкнулся с тем, что соединение с V82.COMConnector вылетало при множественных обращениях ко внешним информационным базам. В статье рассказывается, как побороть недуг. Способ смешной, откровенно говоря. А если проводить медицинские аналогии - чисто хирургический. Надеюсь, что кому-то эта небольшая статья сэкономит время.

Что делать, если COM-соединение вылетает?

Для COM-соединения используется два 1С-объекта: V82.Application, V82.COMConnector. Считается, что объект: V82.Application менее эффективен, так как использует интерфейсные библиотеки, при этом объект V82.COMConnector не имеет в своем арсенале ничего из того, что отвечает за интерфейс.  Казалось бы всё просто и понятно, но есть одно “НО” – при использовании V82.COMConnector   1С 8.2  теряет ключ защиты или вылетает по Run-time (хотя и не всегда, а при некоторых, одному одинэсу ведомых условиях…).

С обозначенной бедой в полной мере я столкнулся в релизе платформы 8.2.15.319 (хотя, в более ранних релизах беда тоже была).  Выглядело это примерно так – при множественных обращениях к информационным базам обработка, которая использовала данные внешних ИБ успешно отрабатывала, а вот при закрытии этой обработки начиналась та самая чехарда. Иногда и не закрывая обработки, а просто попытавшись открыть, скажем, справочник Контрагенты, текущая информационная база радостно вылетала.

Понятно, что первое, что приходит на ум – некорректное закрытие подключений. Но нет, подключение существовало ровно, пока было необходимо. Потом ему присваивалось значение Неопределено. Много еще где копал, но, как выяснилось – искал черную кошку в темной комнате. В конце концов нашел  описание ошибки, зарегистрированное на http://users.v8.1c.ru/ там, где платформы скачивают. В релизе 8.2.15.319 ошибка, как следовало из описания, была исправлена. Однако, моя платформа об этом не знала…

Что в результате? В результате отказался от использования объекта V82.COMConnector и вместо него взял V82.Application и COM-соединение стало работать стабильно. Из негатива только такой нюанс: при отключении внешнего соединения, выдавалось окно диалога, с просьбой подтвердить выход из приложения. Окно мне было без надобности, поэтому отключил его вывод на уровне системной записи, под которой происходило подключение к информационной базе.

 

Такая вот история…

 

Ниже привожу код для подключения с использованием V82.Application.

Модуль формы обработки.

Перем мТекущееПодключение Экспорт ;
…
Процедура ПодключитьИБСерверныйВариант(ИмяСервера, ИмяБазы,  Пользователь, Пароль)   Экспорт           
     мТекущееПодключение = новый COMОбъект("V82.Application");
     Состояние(ИмяБазы + "..." + " возможны интерфейсные сообщения...");
     Connection = Истина;                                                                                  
     Попытка
         Connection = мТекущееПодключение.Connect("Srvr="+СокрЛП(ИмяСервера) + ";" + "Ref="+СокрЛП(ИмяБазы) + ";" + "Usr="+СокрЛП(Пользователь) + ";" + "Pwd="+СокрЛП(Пароль));
     Исключение
         мТекущееПодключение = Неопределено;
         Предупреждение("Ошибка открытия информационной базы" + ИмяБазы );
         Сообщить(ОписаниеОшибки());
     КонецПопытки;
КонецПроцедуры

На нюансах работы с объектами внешней ИБ здесь останавливаться не буду, по этому поводу много чего есть, в том числе и на infostart. Напомню, только, что для того, чтобы работать с запросом во внешней базе можно использовать такой код:

Запрос = мТекущееПодключение.NewObject("Query");           
Запрос.Текст = “….Текст запроса …”;
Запрос.УстановитьПараметр("НачалоПериода",
НачалоПериода);Запрос.УстановитьПараметр("КонецПериода" , КонецДня(КонецПериода));

Для того, чтобы передать массив субконто, подойдет такой код:

ВидыСубконтоКД = мТекущееПодключение.NewObject("Массив");
ВидыСубконтоКД.Добавить(мТекущееПодключение.ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты);
ВидыСубконтоКД.Добавить(мТекущееПодключение.ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры);
Запрос.УстановитьПараметр("ВидыСубконтоКД", ВидыСубконтоКД);

Обратите внимание, что массив во внешней информационной базе в вышеприведенном примере создается при помощи мТекущееПодключение.NewObject("Массив");

Вступайте в нашу телеграмм-группу Инфостарт

См. также

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27660 24894 руб.

12.06.2017    148561    867    302    

455

SALE! 10%

Перенос данных 1C Программист 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

55778 50200 руб.

04.08.2015    174069    378    288    

404

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

16260 руб.

18.02.2016    191543    626    537    

546

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.21.x).

35000 руб.

23.07.2020    58984    284    75    

224

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    175206    319    267    

388

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.246.x) и БП 3.0 (3.0.175.x). Правила подходят для версии ПРОФ и КОРП.

35000 руб.

15.12.2021    27889    198    58    

153

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Перенос данных из КА 1.1 в КА 2 | из КА 1.1 в УТ 11 | Воспользовались более 367 компаний! | Переносятся все возможные виды документов, начальных остатков и вся справочная информация из "1С:КА 1.1" в "1С:КА 2.х" / "1С:УТ 11" | Разработан в формате КД 2 (правила конвертации данных) | Фильтр по организациям при выгрузке | Выбор разных алгоритмов выгрузки начальных остатков | Можно проверить перенос до покупки!

55778 50200 руб.

04.12.2015    194350    254    351    

409

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

53111 47800 руб.

03.12.2020    39767    112    73    

106
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. WKBAPKA 216 16.10.12 09:36 Сейчас в теме
надо сказать, что использование V82.Application из негатива несет не только, что могут появляться диалоговые окна при закрытии соединения, а еще жрет памяти больше и медленно загружается, т.к. по сути происходит загрузка всей конфигурации...
2. WKBAPKA 216 16.10.12 09:38 Сейчас в теме
минус за то, что пример как бы не совсем к тематики статьи... да и сильного отличия в коде при подключении через ComConnector или Application нет
3. 1cspbru 200 16.10.12 11:53 Сейчас в теме
Речь не про то, что память жрет, это понятно. Речь о том, что V82.COMConnector работает не стабильно. Один-два раза вы сможете подключиться к данным, потом произойдет вылет. Во всяком случае, на 8.2.15. В анонсе я определил цели статьи - экономия времени того несчастного, который столкнется с данной проблемой. Переключение на Application реально спасает, хотя и менее эффективно
4. FedorovEvg 153 16.10.12 17:10 Сейчас в теме
Не сталкивался с вылетами в com, можно подробнее описать проблему ?
5. aspirator23 340 17.10.12 07:49 Сейчас в теме
На разных платформах работал. Все же ком всегда работал. Если и были проблемы, то только с кодом, который был неправильно написан и был источником ошибок.
6. Elisy 952 17.10.12 08:02 Сейчас в теме
7. 1cspbru 200 17.10.12 18:05 Сейчас в теме
Ошибка описана в статье. Я понимаю, что в комментариях звучат некоторые сомнения. Сам бы не поверил. Выгледело примерно так: запускаешь раз пять отчет с разными входными параметрами, потом открываешь, скажем, справочник контрагентов, а эсина вылетает. Либо с сообщением, что потерян ключ защиты, либо по run-time errjr какой-то сишной библиотеки (оную даже админа попросил переставить, не помогло). Еще раз напомню, что речь о 8.2.15. Можно почитать список ошибок платформы на эсовском сайте, там много ошибое с com.

Раньше я то же не сталкивался...
8. 1cspbru 200 17.10.12 18:07 Сейчас в теме
Рад бы, если речь о моей ошибке. Если у кого-то есть абстрактные идеи (код, честно говоря, приводить лень), рад был бы услышать
9. Spi1y 19.10.12 11:27 Сейчас в теме
Хм, в рабочей базе используется отчет, собирающий по ComConnector данные из примерно 5-6 баз. Самим отчетом регулярно пользуются 2-3 человека. Ни единого репорта не было.
10. утюгчеловек 42 22.08.13 09:29 Сейчас в теме
Вполне верю автору. От 1С можно такое ожидать.
Сам лично не сталкивался, но и активно моим СОМ-отчетом, намедни написанным, пока не пользовались.
Посему настрожился.

Мне не понятна это предложение:
Окно мне было без надобности, поэтому отключил его вывод на уровне системной записи, под которой происходило подключение к информационной базе.

Можешь расшифровать до уровня элементарных действий? Меня лично это окошко просто выводит из себя.

И еще. Строка типа:
мТекущееПодключение = Неопределено;

Это просто правило хорошего тона? Просто в мануалах сказано что соединение существует пока существует контекст, в котором оно создано. Или я что-то не тек понял?
Оставьте свое сообщение