8.х ОБМЕН Как закрыть Com-соединение

Тема в разделе "Обмен данными в "1С:Предприятие 8"", создана пользователем vika, 4 дек 2008.

  1. TopicStarter Overlay
    vika
    Offline

    vika

    Регистрация:
    13 дек 2006
    Сообщения:
    43
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте!
    У меня организован обмен между двумя базами 1С 8.1 через Com-соединение.
    Написана обработка, где задается интервал дат для загрузки и после нажатия на кнопку
    "Загрузить" происходит Com-соединение. Все работает нормально, первый раз всегда соединяет,
    но если нажимаешь 2-ой раз на кнопку "Загрузить", то выдается ошибка соединения, в третий раз
    - все нормально. Т е соединяет через раз. Я думаю, что просто не закрывается первое Com-соединение, а на соединения есть ограничение. Вопрос - как закрыть программно Com-соединение.
    Помогите,если можете.
  2. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Свой код соединения и сообщение о ошибке в студию!
  3. TopicStarter Overlay
    vika
    Offline

    vika

    Регистрация:
    13 дек 2006
    Сообщения:
    43
    Симпатии:
    0
    Баллы:
    1
    Код следующий:

    Функция СоединенияСБазой(СтрокаПодключения)

    ОбъектПодключения ="V81.COMConnector" ;
    ТекCOMПодключение = Новый COMОбъект(ОбъектПодключения);
    ТекCOMОбъект = ТекCOMПодключение.Connect(СтрокаПодключения);
    //СтрокаПодключения - это путь к базе

    #Если Клиент Тогда
    Состояние("Соединение установлено");
    #КонецЕсли

    Исключение

    СтрокаСообщенияОбОшибке = "При попытке соедиения с COM-сервером произошла следующая ошибка:" + Символы.ПС
    + ОписаниеОшибки();
    #Если Клиент Тогда
    Сообщить(СтрокаСообщенияОбОшибке, СтатусСообщения.Важное);
    Состояние("Соединение установить не удалось");
    Состояние();
    #КонецЕсли

    Возврат Неопределено;

    КонецПопытки;
    КонецПроцедуры

    Ошибка :

    Ошибка при вызове метода контекста (Connect): Произошла исключительная ситуация (V81.COMConnector.1): {МодульВнешнегоСоединения(12)}: Нарушение количества допустимых сеансов!
    Допустимых сеансов стоит 1 и исправить я не могу , поэтому и спрашиваю, как закрыть сеанс соединения программно?
  4. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Для решения Вашей проблемы есть два пути:
    Первый - держать соединение на протяжении всего сеанса работы. Т.е. создал соединение в начале работы обработки, и потом при нажатии кнопки из уже установленного соединения тащу данные. Этот метод идеально подходит, если с обработкой работает оператор, т.к. на создание подключения уходит время, а пользователи не любят ждать :) У меня так работают обработки обмена документами между двумя базами - пользователь запускает обработку, она устанавливает соединение, и когда пользователю нужно получить документы, он жмет на кнопочку и вуаля :) Недостатком является то, что отжираеются ресурсы на поддержания соединения. Достоинством - не нужно каждый раз ждать по 1,5 - 3 минуты на соединение.
    Второй - убивать соединение собственными руками например
    Код:
    Соединение = V8.Connect(СтрокаСоединения); 
    // если заглянуть в монитор пользователей, то в данный момент будет висеть пользователь КОМсоединения.
    
    /// получаю нужные данные....
    
    Соединение = 0; // <<-!! убиваю соединение 
    // КОМсоединения больше нет.
    
    
    
    Все с точностью до наоборот - ресурсы за зря не расходуем, но ждем пока произойдет соединение. По идее должно работать. :)
  5. TopicStarter Overlay
    vika
    Offline

    vika

    Регистрация:
    13 дек 2006
    Сообщения:
    43
    Симпатии:
    0
    Баллы:
    1
    К сожалению, все тоже самое.
    Вот процедура нажатия на кнопку "Подкачать"
    Код:
    Процедура ВыбратьНажатие(Элемент)
    ДатаНачала=Строка(ЭлементыФормы.ДатаНачала.Значение);
    ДатаОкончания=Строка(ЭлементыФормы.ДатаОкончания.Значение);
    
    ТбТовары=Новый ТаблицаЗначений;
    ТбИерархияТоваров=Новый ТаблицаЗначений;
    ТбПлатежи = Новый ТаблицаЗначений;
    Результат=неопределено;
    ТаблицаЗаказов=   ПодкачкаДанныхСТаможеннойБазы.ПолучитьТаблицуГТД(ДНачала,ДОкончания,ФлагиГТД,
    ТбТовары,ТбИерархияТоваров,ТбПлатежи,Результат);
    ТаблицаНомеровГТД=ПодкачкаДанныхСТаможеннойБазы.ПолучитьТаблицуНомеровГТД(Результат);
    Результат=0;
    
    
    Соединение само вызывается в ПолучитьТаблицуГТД и возвращается , как Результат.
    Если не закрывать форму и нажать опять "Подкачать", вываливается ошибка соединения.
  6. TopicStarter Overlay
    vika
    Offline

    vika

    Регистрация:
    13 дек 2006
    Сообщения:
    43
    Симпатии:
    0
    Баллы:
    1

Поделиться этой страницей