Создание и освобождение COM-объекта

Добрый вечер.
Столкнулся с такой проблемой. В течение дня из Terasoft 3.3.2 создается несколько COM-соединений с 1С 7.7 от имени одного пользователя. Но в некоторых случаях (повторить не удалось, события случайны) при завершении работы с COM-объектом не происходит завершения процесса 1С. В результате при следующем создании COM-объекта соединения с 1С получаю "Каталог пользователя занят".
Как это победить - не представляю. Если только перед созданием подключения искать процессы 1С-ки и их грохать?

Нравится

2 комментария

Данная ситуация скорей всего возникает из-за того, что вы объявляете некоторые переменные для работы с объектами 1С и не очищаете их. В случае работы с 1С 7.7 это автоматически не происходит (в других версиях уже поправлено).
Вам нужно во всех местах где Вы присваиваете переменный ссылки на объекты 1С в конце использования очищать с помощью System.EmptyValue. Пример:

function OnBeforeRecordImport(Param, Dataset, Select1C) {
        var Kind = Param.CurrentTabularSection.ПервичныйДокумент.Вид();
	if (Kind != 'Счет') {
                return true;
        }
        Kind = System.EmptyValue;
}

не хватает еще одной строки Kind = System.EmptyValue перед return

function OnBeforeRecordImport(Param, Dataset, Select1C) {
        var Kind = Param.CurrentTabularSection.ПервичныйДокумент.Вид();
	if (Kind != 'Счет') {
                Kind = System.EmptyValue;
                return true;
        }
        Kind = System.EmptyValue;
}

Переменная Kind должна быть очищена в любом случае.

Петр, некоторые комментации по решению, предоставленному Максимом:

В случае, если у Вас есть дополнительные скрипты синхронизации с 1С (т.е. не только настройки утилиты интеграции), следует внести правки в скрипты в соответствии с комментарием Максима.

Если у Вас возникнут трудности с самостоятельной модификацией скриптов, просим предоставить скрипты в техническую поддержку.

Показать все комментарии