1С8. Пример получения данных запросом к другой базе через V82.COMConnector

Идея: Работаем с другой базой через V82.COMConnector - получаем запросом ТаблицуЗначений, отсоединяемся, и дальше работаем с полученными в таблице данными.

Ниже - пример преобразования COM объекта в полноценную таблицу значений.

При работе с другой базой через V82.COMConnector часто нужно получить данные на другой стороне запросом, и поместить их во временную таблицу.

Но полученная таким образом ТаблицаЗначений - это объект "на той стороне" и имеет тип COM Объект - вовсе не ТаблицаЗначений. В приведенном ниже примере эта задача решается через преобразование ТаблицаЗначений в строку на "на той стороне" и обратное преобразование строки в ТаблицаЗначений "на этой стороне"

COM в Таблицу значений

Функция ПолучитьИБИсточник(массивСтрокСоединения)
    Состояние("Соединяемся через V82.COMConnector...");
    v8 = Новый COMОбъект("V82.COMConnector");
              
    Для каждого стрСоединения Из массивСтрокСоединения  Цикл    
        Попытка
            мИБИсточник = v8.Connect(стрСоединения);
            Возврат мИБИсточник ; // COMОбъект    
        Исключение            
            Сообщить("Не удалось выполнить соединение - "
                + " БазаДанных-Источник не открыта!!!");        
            Возврат -1;
            
        КонецПопытки;        
    КонецЦикла;    
    
КонецФункции

// Функция отображает данные таблицы значений в элемент формы ТабличноеПоле
// Параметры:
// 		ЭлементыФормыТабличноеПоле - ЭлементыФормы.ТабличноеПоле
//      ТЗ - таблица значений
// 
// Таблица значений должна иметь колонку 
// с именем "Флаг" и типом данных Булево (Boolean)
Функция ПолучитьТЗСотрудники()
	 
	массивСтрокСоединения = новый массив;
	
	Пользователь="user";
  	Пароль="pass";
	// рабочее соединение
	массивСтрокСоединения.Добавить(""
		+ "Srvr=serv1C;"
		+ "Ref=zup;"
		+ "Usr=" + Пользователь + ";"
		+ "Pwd=" + Пароль + ";"
		);
	// тестовое соединение	
	массивСтрокСоединения.Добавить(""
		+ "File=j:\1c_base\ВС;"
		+ "Usr=" + Пользователь + ";"
		+ "Pwd=" + Пароль + ";"
		);	
	
	ЗиУП = ПолучитьИБИсточник(массивСтрокСоединения);		

	ошибка=?(Строка(Тип(ЗиУП)) = "COM Объект",Ложь,Истина);
	
	Если ошибка тогда 
		возврат ошибка; 
	КонецЕсли;
	
	// все что на стороне базы ЗиУП - COM-Объекты
	// на стороне базы ЗиУП создаем объект Запрос
	com_ЗиУП_Запрос = ЗиУП.NewObject("Query"); 
	
	// конструкция ПРЕДСТАВЛЕНИЕ(ПРЕДСТАВЛЕНИЕССЫЛКИ(...)) нужна для получения простых
	// несоставных не объектных данных. Только строки, числа, bool (значение логического типа)...
	com_ЗиУП_Запрос.Text = 	
	"ВЫБРАТЬ первые 20
	| Ложь как Флаг, // флаг  для последующего выбора в табличномПоле элемента формы
	| ПРЕДСТАВЛЕНИЕ(ПРЕДСТАВЛЕНИЕССЫЛКИ(ФизическиеЛица.Ссылка)) КАК Физлицо,
	| ПРЕДСТАВЛЕНИЕ(ПРЕДСТАВЛЕНИЕССЫЛКИ(ПоследнееСостояниеСотрудника.датаПоследнегоСобытия))
	| 	КАК датаПоследнегоСобытия,	
	| ПРЕДСТАВЛЕНИЕ(ПРЕДСТАВЛЕНИЕССЫЛКИ(РаботникиОрганизаций.Регистратор))КАК Регистратор,		
	| ПРЕДСТАВЛЕНИЕ(ПРЕДСТАВЛЕНИЕССЫЛКИ(РаботникиОрганизаций.Сотрудник)) КАК Сотрудник,
	| ПРЕДСТАВЛЕНИЕ(ПРЕДСТАВЛЕНИЕССЫЛКИ(РаботникиОрганизаций.Организация)) КАК Организация,	
	| РаботникиОрганизаций.ЗанимаемыхСтавок,
	| ПРЕДСТАВЛЕНИЕ(ПРЕДСТАВЛЕНИЕССЫЛКИ(РаботникиОрганизаций.ОбособленноеПодразделение)) 
	| 	КАК ОбособленноеПодразделение,
	| ПРЕДСТАВЛЕНИЕ(ПРЕДСТАВЛЕНИЕССЫЛКИ(РаботникиОрганизаций.ПодразделениеОрганизации)) 
	| 	КАК ПодразделениеОрганизации,
	| ПРЕДСТАВЛЕНИЕ(ПРЕДСТАВЛЕНИЕССЫЛКИ(РаботникиОрганизаций.Должность)) КАК Должность,
	| ПРЕДСТАВЛЕНИЕ(ПРЕДСТАВЛЕНИЕССЫЛКИ(РаботникиОрганизаций.ГрафикРаботы)) КАК ГрафикРаботы,	
	| ПРЕДСТАВЛЕНИЕ(ПРЕДСТАВЛЕНИЕССЫЛКИ(РаботникиОрганизаций.ПричинаИзмененияСостояния)) 
	| 	КАК ПричинаИзмененияСостояния,	
	| ПРЕДСТАВЛЕНИЕ(ПРЕДСТАВЛЕНИЕССЫЛКИ(РаботникиОрганизаций.ПервичныйДокумент)) 
	| 	КАК ПервичныйДокумент
	|ИЗ
	|	Справочник.ФизическиеЛица КАК ФизическиеЛица
	|		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
	|			Работник.Сотрудник.Физлицо КАК Физлицо,
	|			МАКСИМУМ(Работник.Регистратор.Дата) КАК датаПоследнегоСобытия
	|		ИЗ
	|			РегистрСведений.РаботникиОрганизаций КАК Работник
	|		
	|		СГРУППИРОВАТЬ ПО
	|			Работник.Сотрудник.Физлицо) КАК ПоследнееСостояниеСотрудника
	|		ПО ФизическиеЛица.Ссылка = ПоследнееСостояниеСотрудника.Физлицо
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
	|		ПО ФизическиеЛица.Ссылка = РаботникиОрганизаций.Сотрудник.Физлицо
	|			И (ПоследнееСостояниеСотрудника.датаПоследнегоСобытия = 
	| 		 	РаботникиОрганизаций.Регистратор.Дата)
	|
	|УПОРЯДОЧИТЬ ПО
	|	ФизическиеЛица.Наименование";
	
	
	// на стороне базы ЗиУП получаем Результат запроса
	com_Результат = com_ЗиУП_Запрос.Выполнить(); // COM объект 	
	
	com_ТЗ_Сотрудники = com_Результат.Выгрузить(); // COM объект 
	
	// Получаем таблицу значений из COM-объекта
	// COMОбъект в -> строку
	// Запишем COMОбъект в строку на стороне базы-источника 
	стр_ТЗ_Сотрудники = ЗиУП.ЗначениеВСтрокуВнутр(com_ТЗ_Сотрудники);
			
	// получим таблицу значений из строки
	ТЗ_Сотрудники = ЗначениеИзСтрокиВнутр(стр_ТЗ_Сотрудники);
	
	Возврат ТЗ_Сотрудники;
	
КонецФункции


ТЗ_Сотрудники = ПолучитьТЗСотрудники(ЭлементыФормы.ТабличноеПоле1,мТЗ_Сотрудники);




Рекламный блок:

Предлагаем решение Ваших задач 1С.

Внедрение 1С:

Доработка и сопровождение 1С:

Ориентировочная стоимость работ программиста 1С : 500 р. за 1 час работы.

Пишите: j008@j008.ru

Звоните: 8 916 710 83 51 Ольга