Имя: Пароль:
1C
1С v8
Подскажите... почему при подключении по Com и последующей выборке
0 Ivan_495
 
14.01.14
13:16
Подскажите... почему при подключении по Com и последующей выборке результата ОбходРезультатаЗапроса.ПоГруппировкам не срабатывает?
V8=Новый ComОбъект("V82.Application");
    
    ПУть="C:\zup1";
    Попытка
        ОТкрытие=V8.Connect("File="""+Путь+""";Usr=""Администратор"";");
    Исключение
       Сообщить("База данных не открыта!");
        V8=0;
       ОТкрытие=0;

       Возврат;
   КонецПопытки;
      Сообщить("УРА");

    // Вставить содержимое обработчика.
    ЗапросКом =V8.newObject("Запрос");

    ЗапросКом.Текст =
        "ВЫБРАТЬ
        |    ВложенныйЗапрос.Сотрудники КАК Сотрудник,
        |    ВложенныйЗапрос.Физ КАК Физ,
        |    ВложенныйЗапрос.Поле1 КАК Поле1,
        |    ВложенныйЗапрос.Поле2 КАК Поле2,
        |    ВложенныйЗапрос.Поле3 КАК Поле3,
        |    ВложенныйЗапрос.Поле4 КАК Поле4,
        |    ВложенныйЗапрос.Поле5 КАК Поле5,
        |    ВложенныйЗапрос.Поле6 КАК Поле6,
        |    ВложенныйЗапрос.Поле7 КАК Поле7,
        |    ВложенныйЗапрос.Поле8 КАК Поле8,
        |    ВложенныйЗапрос.Поле9 КАК Поле9,
        |    ВложенныйЗапрос.Поле10 КАК Поле10,
        |    ВложенныйЗапрос.Объект КАК Объект,
        |    ВложенныйЗапрос.Тип КАК Тип,
        |    ВложенныйЗапрос.Вид КАК Вид
        |ИЗ
        |    (ВЫБРАТЬ
        |        СотрудникиОрганизаций.Ссылка КАК Сотрудники,
        |        ФизическиеЛица.Ссылка КАК Физ,
        |        КонтактнаяИнформация.Объект КАК Объект,
        |        КонтактнаяИнформация.Тип КАК Тип,
        |        КонтактнаяИнформация.Вид КАК Вид,
        |        КонтактнаяИнформация.Поле1 КАК Поле1,
        |        КонтактнаяИнформация.Поле2 КАК Поле2,
        |        КонтактнаяИнформация.Поле3 КАК Поле3,
        |        КонтактнаяИнформация.Поле4 КАК Поле4,
        |        КонтактнаяИнформация.Поле5 КАК Поле5,
        |        КонтактнаяИнформация.Поле6 КАК Поле6,
        |        КонтактнаяИнформация.Поле7 КАК Поле7,
        |        КонтактнаяИнформация.Поле8 КАК Поле8,
        |        КонтактнаяИнформация.Поле9 КАК Поле9,
        |        КонтактнаяИнформация.Поле10 КАК Поле10,
        |        КонтактнаяИнформация.Комментарий КАК Комментарий,
        |        КонтактнаяИнформация.ЗначениеПоУмолчанию КАК ЗначениеПоУмолчанию,
        |        КонтактнаяИнформация.ТипДома КАК ТипДома,
        |        КонтактнаяИнформация.ТипКорпуса КАК ТипКорпуса,
        |        КонтактнаяИнформация.ТипКвартиры КАК ТипКвартиры
        |    ИЗ
        |        Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
        |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица
        |                ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
        |                ПО ФизическиеЛица.Ссылка = КонтактнаяИнформация.Объект.Ссылка
        |            ПО СотрудникиОрганизаций.Физлицо = ФизическиеЛица.Ссылка) КАК ВложенныйЗапрос
        |
        |УПОРЯДОЧИТЬ ПО
        |    ВложенныйЗапрос.Сотрудники.Наименование
        |ИТОГИ ПО
        |    Сотрудник,
        |    Физ,
        |    Тип";

    ЗапросКом.УстановитьПараметр("дт", '20140114');
    

    Результат = ЗапросКом.Выполнить();

    Выборка1 = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
     t=0;
    
     Пока Выборка1.Следующий() Цикл
          t=t+1;
         Сообщить(""+t+" Сотрудник "+Выборка1.Сотрудник.Наименование);
         Выборка2=Выборка1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
         Пока Выборка2.Следующий() цикл
             Сообщить(" Физ лицо "+ Выборка2.Физ);
            
             Выборка3=Выборка2.Выбрать();
             Пока Выборка3.Следующий() цикл
            Сообщить(""+Выборка3.Объект+" "+Выборка3.Тип+" "+Выборка3.Вид+
            " "+Выборка3.Поле1+" "+Выборка3.Поле2+" "+Выборка3.Поле3+" "+Выборка3.Поле4+" "+Выборка3.Поле5+" "+Выборка3.Поле6+" "+Выборка3.Поле7+" "+Выборка3.Поле8+" "+Выборка3.Поле9+" "+Выборка3.Поле10);    
            Сообщить("________________________________________________________________________________________________________");
             КонецЦикла;
         КонецЦикла;
         прервать;
        
               
        
     КонецЦикла;
1 zladenuw
 
14.01.14
13:17
Выборка1 = Результат.Выбрать(V8.ОбходРезультатаЗапроса.ПоГруппировкам);

а так ?
2 Ivan_495
 
14.01.14
13:17
Ошибка
Форма.Форма.Форма(76)}: Ошибка при вызове метода контекста (Выбрать)
    Результат = ЗапросКом.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.2.18.109): Несоответствие типов (параметр номер '1')
3 zladenuw
 
14.01.14
13:18
ну так блин. у тебя запрос СОМ. то ты должен передать обход результата запроса. той базы
4 Рэйв
 
14.01.14
13:18
(0)Потому что для твоего запроса местный ОбходРезультатаЗапроса.ПоГруппировкам - неизвестный зверь COMObject.

Надо получать тамошний.
5 Рэйв
 
14.01.14
13:19
я както выкладывал функцию выполнения произвольного кода на стороне подцепленной СОМ базы
6 Рэйв
 
14.01.14
13:21
7 Рэйв
 
14.01.14
13:23
Выполнишь "Ответ=ОбходРезультатаЗапроса.ПоГруппировкам"

Оно вернет тебе тамошний обход, вставишь в параметр при выборке, и заработает
8 ИС-2
 
14.01.14
13:23
(2) т.к значение имеет тип com думаю.
Попробуй ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(ОбходРезультатаЗапроса.ПоГруппировкам))
9 zladenuw
 
14.01.14
13:25
РезультатСОМ = ЗапросСОМ.Выполнить().Выгрузить(СОМСоединение.QueryResultIteration.ByGroupsWithHierarchy);
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.