Что делать, если 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("Массив");

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

См. также

Перенос данных 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 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

61356 руб.

04.08.2015    179922    410    293    

424

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 руб.

12.06.2017    153759    903    304    

466

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

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

61356 руб.

15.04.2019    79461    214    163    

153

Перенос данных 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" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

52967 руб.

25.02.2015    178550    329    277    

396

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

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

58422 руб.

03.12.2020    42351    121    75    

115

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

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

38000 руб.

15.12.2021    30144    216    58    

161

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

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

61356 руб.

31.10.2014    243298    113    351    

318

Перенос данных 1C Программист Бухгалтер 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ ФОМС, ЕФС Платные (руб)

Обработки для быстрого перехода с конфигураций «КАМИН:Расчет заработной платы 3.0», «КАМИН:Зарплата для бизнеса 4.0» и «КАМИН:Зарплата 5.0» на конфигурацию «Зарплата и управление персоналом» версии 3.1.

12000 руб.

25.09.2016    87029    378    257    

315
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 341 17.10.12 07:49 Сейчас в теме
На разных платформах работал. Все же ком всегда работал. Если и были проблемы, то только с кодом, который был неправильно написан и был источником ошибок.
6. Elisy 957 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С можно такое ожидать.
Сам лично не сталкивался, но и активно моим СОМ-отчетом, намедни написанным, пока не пользовались.
Посему настрожился.

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

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

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

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