Имя: Пароль:
1C
 
1С менеджер временных таблиц и сом объект.
0 ИУБиПовиц
 
19.10.15
11:54
День добрый. Можно ли из менеджера ВТ который сом, получить обычный мвт, притом, что в таблице только примитивные типы. т.е. мне нужно получить что то типа этого:
V8 = Новый COMОбъект("V82.ComConnector");
    ОТкрыта = V8.Connect("адреса пароли явки");
    
    Запрос             = Открыта.NewObject("Запрос");
    менеджер = Открыта.NewObject("МенеджерВременныхТаблиц");
    ЗАпрос.МенеджерВременныхТаблиц = менеджер;
    Запрос.Текст = "ВЫБРАТЬ
                   |    РаботникиОрганизацийСрезПоследних.Сотрудник КАК СотрудникФИО,
                   |    РаботникиОрганизацийСрезПоследних.Сотрудник.Наименование,
                   |    РаботникиОрганизацийСрезПоследних.Сотрудник.Код
                   |ПОМЕСТИТЬ СотрудникЦ
                   |ИЗ
                   |    РегистрСведений.РаботникиОрганизаций.СрезПоследних(, ) КАК РаботникиОрганизацийСрезПоследних";
        
   Selected = Запрос.Execute().Выгрузить();
  
   Запрос = Новый Запрос;
   ЗАпрос.МенеджерВременныхТаблиц = менеджер;
   Запрос.Текст = "ВЫБРАТЬ
                  |    СотрудникиЦ.КОД,
                  |    СотрудникиЦ.Наименование
                  |ПОМЕСТИТЬ Ц
                  |ИЗ
                  |    &СотрудникиЦ КАК СотрудникиЦ
                  |;
                  |
                  |////////////////////////////////////////////////////////////////////////////////
                  |ВЫБРАТЬ
                  |    РаботникиОрганизацийСрезПоследних.Сотрудник КАК СотрудникФИО,
                  |    РаботникиОрганизацийСрезПоследних.Сотрудник.Наименование,
                  |    РаботникиОрганизацийСрезПоследних.Сотрудник.Код
                  |ИЗ
                  |    РегистрСведений.РаботникиОрганизаций.СрезПоследних(, ) КАК РаботникиОрганизацийСрезПоследних
                  |        ЛЕВОЕ СОЕДИНЕНИЕ Ц КАК Ц
                  |        ПО РаботникиОрганизацийСрезПоследних.Сотрудник.Код = Ц.КОД
                  |ГДЕ
                  |    НЕ (ВЫРАЗИТЬ(РаботникиОрганизацийСрезПоследних.Сотрудник.Наименование КАК СТРОКА(150))) = (ВЫРАЗИТЬ(Ц.Наименование КАК СТРОКА(150)))";
  
   Запрос.Выполнить().Выгрузить();
1 hhhh
 
19.10.15
12:06
просто сделайие через пакетный запрос. Нафига здесь менеджер?
2 cons74
 
19.10.15
12:17
МенеджерВременныхТаблиц сам по себе - не примитивный тип. Так что нет, не выйдет.
Тут "ЗАпрос.МенеджерВременныхТаблиц = менеджер;" ты пытаешься передать непримитивный тип по СОМу
3 ptiz
 
19.10.15
12:18
(0) Что значит "получить"?
Использовать временные таблицы этого менеджера в текущей базе?
4 olegves
 
19.10.15
12:19
(0) нельзя
5 hhhh
 
19.10.15
12:53
(3) не получится. Так

Запрос.МенеджерВременныхТаблиц = менеджер

в Запрос.МенеджерВременныхТаблиц пытаешься Com-объект зафигачить. Оно это не поймет.
6 ИУБиПовиц
 
19.10.15
13:01
(5) да я знаю, что не поймет, я ж и спрашиваю как ком вт преобразовать в обычную. вт:)
7 ИУБиПовиц
 
19.10.15
13:58
короче выгрузил сом запрос  в тз, и скормил обычному запросу.
Запрос.Текст = "ВЫБРАТЬ
                   |    РаботникиОрганизацийСрезПоследних.Сотрудник КАК СотрудникФИО,
                   |    РаботникиОрганизацийСрезПоследних.Сотрудник.Наименование,
                   |    РаботникиОрганизацийСрезПоследних.Сотрудник.Код
                  // |ПОМЕСТИТЬ СотрудникЦ
                   |ИЗ
                   |    РегистрСведений.РаботникиОрганизаций.СрезПоследних(, ) КАК РаботникиОрганизацийСрезПоследних";
        
   Selected = Запрос.Execute().Выгрузить();
  
   Запрос = Новый Запрос;
//  ЗАпрос.МенеджерВременныхТаблиц = менеджер;
тз = новый ТаблицаЗначений;
тз.Колонки.Добавить("КОД",Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(10)));
тз.Колонки.Добавить("Наименование",Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(100)));
// тз.Колонки.Добавить("КОД");
// тз.Колонки.Добавить("Наименование");
для каждого стр из Selected цикл
     СтрН = тз.Добавить();
     СтрН.КОД = СокрЛП(Стр.СотрудникКод);
     СтрН.Наименование = СокрЛП(Стр.СотрудникНаименование);
    
     //СтрН.КОД = "0123456789";
     //СтрН.Наименование = "тест";

     //прервать;
КонецЦикла;


   Запрос.УстановитьПараметр("СотрудникиЦ",  тз);
   Запрос.Текст = "ВЫБРАТЬ
                  |    СотрудникиЦ.Наименование КАК Наименование,
                  |    СотрудникиЦ.КОД КАК Код
                  |ПОМЕСТИТЬ Ц
                  |ИЗ
                  |    &СотрудникиЦ КАК СотрудникиЦ
                  |;
                  |
                  |////////////////////////////////////////////////////////////////////////////////
                  |ВЫБРАТЬ
                  |    РаботникиОрганизацийСрезПоследних.Сотрудник КАК СотрудникФИО,
                  |    РаботникиОрганизацийСрезПоследних.Сотрудник.Наименование,
                  |    РаботникиОрганизацийСрезПоследних.Сотрудник.Код,
                  |    Ц.Наименование,
                  |    Ц.Код
                  |ИЗ
                  |    Ц КАК Ц
                  |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(, ) КАК РаботникиОрганизацийСрезПоследних
                  |        ПО (РаботникиОрганизацийСрезПоследних.Сотрудник.Код = Ц.Код)
                  |ГДЕ
                  |    НЕ РаботникиОрганизацийСрезПоследних.Сотрудник.Наименование = Ц.Наименование";
  
   тзНЕСовпод = Запрос.Выполнить().Выгрузить();
8 cons74
 
19.10.15
14:01
Пока я вспоминал ТС сам написал. Красава.
9 nixel2007
 
19.10.15
16:41
По идее может помочь использование одного и того же объекта Запрос без переопределения вторым Новый Запрос();

То есть
Запрос             = Открыта.NewObject("Запрос");
Запрос.МенеджерВременныхТаблиц = Открыта.NewObject("МенеджерВременныхТаблиц");

Запрос.Текст = "ТекстЗапроса1";
Запрос.Выполнить();
блаблабла

Запрос.Текст = "ТекстЗапроса2";
10 hhhh
 
19.10.15
16:53
(9) не получится. Второй запрос у него не NewObject("Запрос");
11 nixel2007
 
19.10.15
16:59
(10) ааа, вот в чем соль... не углядел.
Тогда да, только через промежуточную ТЗ.