Помощь - Поиск - Пользователи - Календарь
Полная версия: Как закрыть Com-соединение
1C-PRO - Форум по 1С > Форумы по платформе "1С:Предприятие 8.x" > (8.х) Обмен данными
Vika
Здравствуйте!
У меня организован обмен между двумя базами 1С 8.1 через Com-соединение.
Написана обработка, где задается интервал дат для загрузки и после нажатия на кнопку
"Загрузить" происходит Com-соединение. Все работает нормально, первый раз всегда соединяет,
но если нажимаешь 2-ой раз на кнопку "Загрузить", то выдается ошибка соединения, в третий раз
- все нормально. Т е соединяет через раз. Я думаю, что просто не закрывается первое Com-соединение, а на соединения есть ограничение. Вопрос - как закрыть программно Com-соединение.
Помогите,если можете.
lazy
Свой код соединения и сообщение о ошибке в студию!
Vika
Цитата(lazy @ 4.12.2008, 19:07) *

Свой код соединения и сообщение о ошибке в студию!


Код следующий:

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

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

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

Исключение

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

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

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

Ошибка :

Ошибка при вызове метода контекста (Connect): Произошла исключительная ситуация (V81.COMConnector.1): {МодульВнешнегоСоединения(12)}: Нарушение количества допустимых сеансов!
Допустимых сеансов стоит 1 и исправить я не могу , поэтому и спрашиваю, как закрыть сеанс соединения программно?
lazy
Для решения Вашей проблемы есть два пути:
Первый - держать соединение на протяжении всего сеанса работы. Т.е. создал соединение в начале работы обработки, и потом при нажатии кнопки из уже установленного соединения тащу данные. Этот метод идеально подходит, если с обработкой работает оператор, т.к. на создание подключения уходит время, а пользователи не любят ждать :) У меня так работают обработки обмена документами между двумя базами - пользователь запускает обработку, она устанавливает соединение, и когда пользователю нужно получить документы, он жмет на кнопочку и вуаля :) Недостатком является то, что отжираеются ресурсы на поддержания соединения. Достоинством - не нужно каждый раз ждать по 1,5 - 3 минуты на соединение.
Второй - убивать соединение собственными руками например
Код
Соединение = V8.Connect(СтрокаСоединения); 
// если заглянуть в монитор пользователей, то в данный момент будет висеть пользователь КОМсоединения.

/// получаю нужные данные....

Соединение = 0; // <<-!! убиваю соединение
// КОМсоединения больше нет.


Все с точностью до наоборот - ресурсы за зря не расходуем, но ждем пока произойдет соединение. По идее должно работать. :-)
Vika
Цитата(lazy @ 5.12.2008, 11:53) *

Для решения Вашей проблемы есть два пути:
Первый - держать соединение на протяжении всего сеанса работы. Т.е. создал соединение в начале работы обработки, и потом при нажатии кнопки из уже установленного соединения тащу данные. Этот метод идеально подходит, если с обработкой работает оператор, т.к. на создание подключения уходит время, а пользователи не любят ждать :) У меня так работают обработки обмена документами между двумя базами - пользователь запускает обработку, она устанавливает соединение, и когда пользователю нужно получить документы, он жмет на кнопочку и вуаля :) Недостатком является то, что отжираеются ресурсы на поддержания соединения. Достоинством - не нужно каждый раз ждать по 1,5 - 3 минуты на соединение.
Второй - убивать соединение собственными руками например
Код
Соединение = V8.Connect(СтрокаСоединения); 
// если заглянуть в монитор пользователей, то в данный момент будет висеть пользователь КОМсоединения.

/// получаю нужные данные....

Соединение = 0; // <<-!! убиваю соединение
// КОМсоединения больше нет.

Все с точностью до наоборот - ресурсы за зря не расходуем, но ждем пока произойдет соединение. По идее должно работать. :-)

К сожалению, все тоже самое.
Вот процедура нажатия на кнопку "Подкачать"
Код
Процедура ВыбратьНажатие(Элемент)
ДатаНачала=Строка(ЭлементыФормы.ДатаНачала.Значение);
ДатаОкончания=Строка(ЭлементыФормы.ДатаОкончания.Значение);

ТбТовары=Новый ТаблицаЗначений;
ТбИерархияТоваров=Новый ТаблицаЗначений;
ТбПлатежи = Новый ТаблицаЗначений;
Результат=неопределено;
ТаблицаЗаказов= ПодкачкаДанныхСТаможеннойБазы.ПолучитьТаблицуГТД(ДНачала,ДОкончания,ФлагиГТД,
ТбТовары,ТбИерархияТоваров,ТбПлатежи,Результат);
ТаблицаНомеровГТД=ПодкачкаДанныхСТаможеннойБазы.ПолучитьТаблицуНомеровГТД(Результат);
Результат=0;


Соединение само вызывается в ПолучитьТаблицуГТД и возвращается , как Результат.
Если не закрывать форму и нажать опять "Подкачать", вываливается ошибка соединения.
Vika
[quote name='lazy' date='5.12.2008, 11:53' post='46649']
Для решения Вашей проблемы есть два пути:
Первый - держать соединение на протяжении всего сеанса работы. Т.е. создал соединение в начале работы обработки, и потом при нажатии кнопки из уже установленного соединения тащу данные. Этот метод идеально подходит, если с обработкой работает оператор, т.к. на создание подключения уходит время, а пользователи не любят ждать :) У меня так работают обработки обмена документами между двумя базами - пользователь запускает обработку, она устанавливает соединение, и когда пользователю нужно получить документы, он жмет на кнопочку и вуаля :) Недостатком является то, что отжираеются ресурсы на поддержания соединения. Достоинством - не нужно каждый раз ждать по 1,5 - 3 минуты на соединение.


Спасибо Большое. воспользовалась этим методом и все нормально работает.

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2009 Invision Power Services, Inc.