Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Подскажите как получить запросом данные

v7: Подскажите как получить запросом данные
Я
   URAL
 
12.01.19 - 12:25
Всем привет!
Не могу понять как получить из запроса данные
1с7 не знаю, 1с8 знаю

Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с '01.01.2017' по '31.12.2018';
    //|Без итогов;
    |ДокСправка = Документ.СправкаСчет.ТекущийДокумент;
    |Автомобиль = Документ.СправкаСчет.Автомобиль;
    |Группировка Автомобиль без упорядочивания;
    |Условие(Автомобиль=СпрАвто);
    |"//}}ЗАПРОС
    ;
    СпрАвто = СоздатьОбъект("Справочник.Автомобили");
    СпрАвто.НайтиПоКоду("XTT316300J1017380");
//    
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка() = 1 Цикл
        // Заполнение полей Сформировать
        Таб.ВывестиСекцию("Сформировать");
    КонецЦикла;
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
КонецПроцедуры
 
 
   URAL
 
1 - 12.01.19 - 12:26
в отладчике 
 Запрос.Группировка() = 0
   ДенисЧ
 
2 - 12.01.19 - 12:27
.Группировка("Автомобиль")
   URAL
 
3 - 12.01.19 - 12:27
без группировки можно ли как то получить запросом?

например в 1с8 можно так
 
Пока Результат.Следующий() Цикл
Документ = Выборка.Документ;
КонецЦикла;


а как в 1с7 не пойму
   URAL
 
4 - 12.01.19 - 12:29
(2) Пока Запрос.Группировка("Автомобиль") = 1 Цикл   так?

не работает
   ДенисЧ
 
5 - 12.01.19 - 12:38
Может, по коду не нашло?
тз = Запрос.Выгрузить();
тз.ВыбратьСтроку();

что-то показывает?
   skafandr
 
6 - 12.01.19 - 12:40
Я бы написал 
 ТекСпрАвто=  СпрАвто.ТекущийЭлемент();
и соответственно 
Условие(Автомобиль=ТекСпрАвто)
   skafandr
 
7 - 12.01.19 - 12:41
в группировке будет ровно один автомобиль и нет группировки по документам ,так задумано?
   Mihasya
 
8 - 12.01.19 - 12:42
Условие...
Условие(Автомобиль=СпрАвто.ТекущийЭлемент())
   ДенисЧ
 
9 - 12.01.19 - 12:51
(8) Не надо так делать. Особенно, если у тебя база на SQL
   URAL
 
10 - 12.01.19 - 13:42
Запрос.Выгрузить()= ошибка в выражении
 
 Рекламное место пустует
   Kigo_Kigo
 
11 - 12.01.19 - 13:49
Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос


СпрАвто = СоздатьОбъект("Справочник.Автомобили");
    Если СпрАвто.НайтиПоКоду("XTT316300J1017380") = 0 тогда
Сообщить("Авто не найден");
СтатусВозврата(0);
Возврат;
КонецЕсли

    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)


    |Период с '01.01.2017' по '31.12.2018';
    //|Без итогов;


    |ДокСправка = Документ.СправкаСчет.ТекущийДокумент;
    |Автомобиль = Документ.СправкаСчет.Автомобиль;
    |Группировка Автомобиль без упорядочивания;
    |Условие(Автомобиль в СпрАвто);
    |"//}}ЗАПРОС


    ;
   Kigo_Kigo
 
12 - 12.01.19 - 13:51
Ты сначала выполняешь запрос с жестким условием, а потом только пытаешься найти авто для условия, вот и ноль на выходе, сначала переменную авто для запроса найти, потом запрос выполняй
   URAL
 
13 - 12.01.19 - 15:29
Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    
СпрАвто = СоздатьОбъект("Справочник.Автомобили");
    Если СпрАвто.НайтиПоКоду("XTT316300J1017380") = 0 тогда
Сообщить("Авто не найден");
СтатусВозврата(0);
Возврат;
КонецЕсли;
//Создание объекта типа Запрос

    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)

    |Период с '01.01.2017' по '31.12.2018';
    //|Без итогов;

    |ДокСправка = Документ.СправкаСчет.ТекущийДокумент;
    |Автомобиль = Документ.СправкаСчет.Автомобиль;
    |Группировка Автомобиль без упорядочивания;
    |Условие(Автомобиль в СпрАвто);
    |"//}}ЗАПРОС

    ;
//    

    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли; 
    
    Пока Запрос.Группировка() = 1 Цикл

    Сообщить(Запрос.Автомобиль);
     Сообщить(Запрос.ДокСправка);
    КонецЦикла;
    
КонецПроцедуры

так работает, но не отбирает по данному автомобилю
   URAL
 
14 - 12.01.19 - 15:29
выводит весь перечень документов за период
   URAL
 
15 - 12.01.19 - 15:33
Вот так заработало


Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    
СпрАвто = СоздатьОбъект("Справочник.Автомобили");
    Если СпрАвто.НайтиПоКоду("XTT316300J1017380") = 0 тогда
Сообщить("Авто не найден");
СтатусВозврата(0);
Возврат;
КонецЕсли;
ТекАвто = СпрАвто.текущийЭлемент();
//Создание объекта типа Запрос

    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)

    |Период с '01.01.2017' по '31.12.2018';
    //|Без итогов;

    |ДокСправка = Документ.СправкаСчет.ТекущийДокумент;
    |Автомобиль = Документ.СправкаСчет.Автомобиль;
    |Группировка Автомобиль без упорядочивания;
    |Условие(Автомобиль = ТекАвто);
    |"//}}ЗАПРОС

    ;
//    

    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли; 
    
    Пока Запрос.Группировка() = 1 Цикл

    Сообщить(Запрос.Автомобиль);
     Сообщить(Запрос.ДокСправка);
    КонецЦикла;
    
КонецПроцедуры
   URAL
 
16 - 12.01.19 - 15:33
но выводит два раза в сообщении

XTT316300J1017380
Справка-счет М370

Справка-счет М370
   Kigo_Kigo
 
17 - 12.01.19 - 15:48
|Группировка Автомобиль;
или
|Группировка Автомобиль без групп; ?
   Харлампий Дымба
 
18 - 12.01.19 - 15:48
(16) Хочешь получить список документов, а группировку ставишь по автомобилю. Да ещё и забываешь, что справочник "Автомобили" у тебя неодноуровневый. Вот и получаешь два взода в цикл, и оба раза с первым попавшимся документом. А что мешает сделать так:

ВыбАвтомобильVIN="XTT316300J1017380";
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = 
"//{{ЗАПРОС(Сформировать)

|Период с '01.01.2017' по '31.12.2018';
|АвтомобильVIN = Документ.СправкаСчет.Автомобиль.Код;
|Группировка Документ;
|Условие(АвтомобильVIN = ВыбАвтомобильVIN);
|"//}}ЗАПРОС

;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
КонецЕсли; 
Пока Запрос.Группировка("Документ") = 1 Цикл
    Сообщить(Запрос.Документ.Автомобиль);
    Сообщить(Запрос.Документ);
КонецЦикла;

Ну и надеюсь, ты помнишь, что если не указывать явно, то в запрос попадают только проведенные документы.
Ну и выбор периода ты странно придумал делать.
   URAL
 
19 - 12.01.19 - 16:07
(16) Благодарю, все отлично и подробно

есть другой вопрос, взял я код и интегрировал в 1с8 и пробую получить документ подключаясь к 1с7 


вот код в 1с 8
                    СпрАвто = Док7.Автомобиль//База.СоздатьОбъект("Справочник.Автомобили");

                    //Если СпрАвто.НайтиПоКоду("XTT316300J1017380") = 0 тогда

                    //    Сообщить("Авто не найден");

                    //    СтатусВозврата(0);

                    //    Возврат;

                    //КонецЕсли;

                    ТекАвто = СпрАвто.текущийЭлемент();
                    //Создание объекта типа Запрос

                    Запрос1с7 = База.CreateObject("Запрос");
                    ТекстЗапроса = 
                    "//{{ЗАПРОС(Сформировать)

                    |Период с '01.01.2017' по '31.12.2018';
                    //|Без итогов;

                    |ДокСправка = Документ.СправкаСчет.ТекущийДокумент;
                    |Автомобиль = Документ.СправкаСчет.Автомобиль;
                    |Группировка Автомобиль без упорядочивания;
                    |Условие(Автомобиль = ТекАвто);
                    |"//}}ЗАПРОС

                    ;
                    //    

                    Если Запрос1с7.Выполнить(ТекстЗапроса) = 0 Тогда
                        Возврат;
                    КонецЕсли; 
                    
                    Пока Запрос1с7.Группировка() = 1 Цикл
                        Док7ПоступлениеАвто = Запрос1с7.ДокСправка;
                        //Сообщить(Запрос.Автомобиль);

                        // Сообщить(Запрос.ДокСправка);

                    КонецЦикла;
    


вот ошибка в 1с8

{ВнешняяОбработка.ПереносАвтомобилейИз1С7.Форма.Форма.Форма(75)}: Ошибка при вызове метода контекста (Выполнить)
                    Если Запрос1с7.Выполнить(ТекстЗапроса) = 0 Тогда
по причине:
Произошла исключительная ситуация (1С:Предприятие): Условие(Автомобиль = ТекАвто <<?>> );
Запрос[6] : Ошибка в выражении 'ТекАвто'
   Харлампий Дымба
 
20 - 12.01.19 - 16:21
(19) Всё отлично и подробно, но я делаю по своему и опять бьюсь лбом?
Получаю ссылку на объект в 7.7, сохраняю его в переменной в 8, а потом ставлю условие в запросе в 7.7 по имени моей переменной в 8?
Зачем топтаться по граблям? Делай сразу условие по VINу, как в (18) и не мучайся.
   Харлампий Дымба
 
21 - 12.01.19 - 16:23
Могу ещё сюда отправить:
Передача параметров в запрос к базе, подключенной через OLE
если хочется по-своему сделать.
   URAL
 
22 - 12.01.19 - 19:56
(20) к сожалению не находит через вин
как правильно мне указать параметр автомобиля который я нашел в 1с77 через OLE из базы 1с8?
   Харлампий Дымба
 
23 - 12.01.19 - 23:03
(23) Ну я не знаю. Почитай
Передача параметров в запрос к базе, подключенной через OLE
Или здесь
Передача параметров в запрос к базе, подключенной через OLE
или тут
Передача параметров в запрос к базе, подключенной через OLE
Если после 3 раз будет непонятно, как передать параметр в запросе в OLE  - то используй уже простой способ: передавай текстовое значение VIN.
И всё там работает.
На худой конец так:
|Условие(СокрЛП(АвтомобильVIN) = ВыбАвтомобильVIN);
   Харлампий Дымба
 
24 - 12.01.19 - 23:08
Если в OLE из 8 в 7 то ВыбАвтомобильVIN известен в 8 то
|Условие(СокрЛП(АвтомобильVIN) = "+ВыбАвтомобильVIN+");
   URAL
 
25 - 13.01.19 - 10:11
(24) не знал что конструкцию СокрЛП() можно использовать в теле запроса 1с7

Премного благодарен!!!, очень помогло понять где я ошибался
   ДенисЧ
 
26 - 13.01.19 - 10:12
(25) Можно использовать, если у тебя слишком быстро работает отчёт...
   URAL
 
27 - 13.01.19 - 10:40
(26) Благодарю!


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует