Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
23 ноя 2024, 01:22

Обратиться к Com-соединению

Автор Зингер, 24 дек 2016, 12:46

0 Пользователей и 1 гость просматривают эту тему.

Зингер

На форме две кнопки.
Одна из них устанавливает com-соединение:

Процедура СоединениеСБазой(Команда) 
  ДиалоговыйВыбор=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); 
  ДиалоговыйВыбор.Заголовок="Путь к базе"; 
  ДиалоговыйВыбор.Фильтр=""; 
  ДиалоговыйВыбор.ПредварительныйПросмотр=Ложь; 
   
  Если ДиалоговыйВыбор.Выбрать() Тогда 
  Отказ=Ложь; 
  Коннектор=Новый COMОбъект("V83.ComConnector"); 
  СтрокаПодключения="File="""+СокрЛП(ДиалоговыйВыбор.Каталог)+""";Usr=""АдминБ8"";"; 
  Попытка 
  Дескриптор=Коннектор.Connect(СтрокаПодключения); 
   
  СоединениеУстановлено="Да"; 
  ЦветРамкиСУ=Новый Цвет(0,255,0); 
  Элементы.СоединениеУстановлено.ЦветРамки=ЦветРамкиСУ; 
   
  Сообщить(Дескриптор); 
   
  Исключение 
  СоединениеУстановлено="Нет"; 
  ЦветРамкиСУ=Новый Цвет(255,0,0); 
  Элементы.СоединениеУстановлено.ЦветРамки=ЦветРамкиСУ;  
  Сообщить("Ошибка подключения!" +ОписаниеОшибки()); 
  Отказ=Истина; 
  КонецПопытки; 
  КонецЕсли; 
  КонецПроцедуры


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

sertak

Создайте параметр сеанса типа Строка 256 и сохраняйте туда адрес временного хранилища.
ПараметрыСеанса.СоединениеСВнешнейБазой = ПоместитьВоВременноеХранилище(Дескриптор, Новый УникальныйИдентификатор());
...
Дескриптор = ПолучитьИзВременногоХранилища(ПараметрыСеанса.СоединениеСВнешнейБазой);

Можно попробовать реквизит формы вместе параметра сеанса того же типа.

LexaK

объявляете свою переменную Дескриптор - глобальной и прямо обращайтесь из процедуры обработки другой кнопки.
если помогло нажмите: Спасибо!

Зингер

Цитата: sertak от 24 дек 2016, 21:58
Создайте параметр сеанса типа Строка 256 и сохраняйте туда адрес временного хранилища.
ПараметрыСеанса.СоединениеСВнешнейБазой = ПоместитьВоВременноеХранилище(Дескриптор, Новый УникальныйИдентификатор());
...
Дескриптор = ПолучитьИзВременногоХранилища(ПараметрыСеанса.СоединениеСВнешнейБазой);

Можно попробовать реквизит формы вместе параметра сеанса того же типа.

Ага-а, спасибо. Очень помогло.
Ваш пост + мои размышления привели к тому, что

&НаКлиенте
Перем КомОбъект;

Затем

&НаКлиенте
Процедура СоединитьСБазой(Команда)
ДиалогВыбора=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
ДиалогВыбора.Заголовок="Путь";
ДиалогВыбора.МножественныйВыбор=Ложь;
Если ДиалогВыбора.Выбрать() Тогда
СоединениеУстановлено=Истина;
Цвет=Новый Цвет(0,255,0);
Элементы.СоединениеУстановлено.ЦветТекста=Цвет;
КомОбъект=СвязьСБазой_Функц(ДиалогВыбора.Каталог);
КонецЕсли;
КонецПроцедуры

И наконец-то

&НаКлиенте
Функция СвязьСБазой_Функц(Путь)
Коннектор=Новый COMОбъект("V83.ComConnector");
СтрокаПодключения="File="""+Путь+""";Usr=""АдминБ8"";";
Попытка
КомОбъект=Коннектор.Connect(СтрокаПодключения);
Исключение
КомОбъект=Неопределено;
КонецПопытки;
Возврат КомОбъект;
КонецФункции


В результате всех "этих танцев с бубном", как я понимаю на клиенте храниться переменная КомОбъект, которая хранит Com-Объект.

Поправьте, если не так.
P.S.
Перехожу к новой теме.


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск