|   |   | 
| 
 | v7: Подскажите как получить запросом данные | ☑ | ||
|---|---|---|---|---|
| 0
    
        URAL 12.01.19✎ 12:25 | 
        Всем привет!
 Не могу понять как получить из запроса данные 1с7 не знаю, 1с8 знаю Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с '01.01.2017' по '31.12.2018'; //|Без итогов; |ДокСправка = Документ.СправкаСчет.ТекущийДокумент; |Автомобиль = Документ.СправкаСчет.Автомобиль; |Группировка Автомобиль без упорядочивания; |Условие(Автомобиль=СпрАвто); |"//}}ЗАПРОС ; СпрАвто = СоздатьОбъект("Справочник.Автомобили"); СпрАвто.НайтиПоКоду("XTT316300J1017380"); // Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Пока Запрос.Группировка() = 1 Цикл // Заполнение полей Сформировать Таб.ВывестиСекцию("Сформировать"); КонецЦикла; // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры | |||
| 1
    
        URAL 12.01.19✎ 12:26 | 
        в отладчике 
 Запрос.Группировка() = 0 | |||
| 2
    
        ДенисЧ 12.01.19✎ 12:27 | 
        .Группировка("Автомобиль")     | |||
| 3
    
        URAL 12.01.19✎ 12:27 | 
        без группировки можно ли как то получить запросом?
 например в 1с8 можно так Пока Результат.Следующий() Цикл Документ = Выборка.Документ; КонецЦикла; а как в 1с7 не пойму | |||
| 4
    
        URAL 12.01.19✎ 12:29 | 
        (2) Пока Запрос.Группировка("Автомобиль") = 1 Цикл   так?
 не работает | |||
| 5
    
        ДенисЧ 12.01.19✎ 12:38 | 
        Может, по коду не нашло?
 тз = Запрос.Выгрузить(); тз.ВыбратьСтроку(); что-то показывает? | |||
| 6
    
        skafandr 12.01.19✎ 12:40 | 
        Я бы написал 
 ТекСпрАвто= СпрАвто.ТекущийЭлемент(); и соответственно Условие(Автомобиль=ТекСпрАвто) | |||
| 7
    
        skafandr 12.01.19✎ 12:41 | 
        в группировке будет ровно один автомобиль и нет группировки по документам ,так задумано?     | |||
| 8
    
        Mihasya 12.01.19✎ 12:42 | 
        Условие...
 Условие(Автомобиль=СпрАвто.ТекущийЭлемент()) | |||
| 9
    
        ДенисЧ 12.01.19✎ 12:51 | 
        (8) Не надо так делать. Особенно, если у тебя база на SQL     | |||
| 10
    
        URAL 12.01.19✎ 13:42 | 
        Запрос.Выгрузить()= ошибка в выражении     | |||
| 11
    
        Kigo_Kigo 12.01.19✎ 13:49 | 
        Процедура Сформировать()
 Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос СпрАвто = СоздатьОбъект("Справочник.Автомобили"); Если СпрАвто.НайтиПоКоду("XTT316300J1017380") = 0 тогда Сообщить("Авто не найден"); СтатусВозврата(0); Возврат; КонецЕсли Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с '01.01.2017' по '31.12.2018'; //|Без итогов; |ДокСправка = Документ.СправкаСчет.ТекущийДокумент; |Автомобиль = Документ.СправкаСчет.Автомобиль; |Группировка Автомобиль без упорядочивания; |Условие(Автомобиль в СпрАвто); |"//}}ЗАПРОС ; | |||
| 12
    
        Kigo_Kigo 12.01.19✎ 13:51 | 
        Ты сначала выполняешь запрос с жестким условием, а потом только пытаешься найти авто для условия, вот и ноль на выходе, сначала переменную авто для запроса найти, потом запрос выполняй     | |||
| 13
    
        URAL 12.01.19✎ 15:29 | 
        Процедура Сформировать()
 Перем Запрос, ТекстЗапроса, Таб; СпрАвто = СоздатьОбъект("Справочник.Автомобили"); Если СпрАвто.НайтиПоКоду("XTT316300J1017380") = 0 тогда Сообщить("Авто не найден"); СтатусВозврата(0); Возврат; КонецЕсли; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с '01.01.2017' по '31.12.2018'; //|Без итогов; |ДокСправка = Документ.СправкаСчет.ТекущийДокумент; |Автомобиль = Документ.СправкаСчет.Автомобиль; |Группировка Автомобиль без упорядочивания; |Условие(Автомобиль в СпрАвто); |"//}}ЗАПРОС ; // Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Пока Запрос.Группировка() = 1 Цикл Сообщить(Запрос.Автомобиль); Сообщить(Запрос.ДокСправка); КонецЦикла; КонецПроцедуры так работает, но не отбирает по данному автомобилю | |||
| 14
    
        URAL 12.01.19✎ 15:29 | 
        выводит весь перечень документов за период     | |||
| 15
    
        URAL 12.01.19✎ 15:33 | 
        Вот так заработало
 Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; СпрАвто = СоздатьОбъект("Справочник.Автомобили"); Если СпрАвто.НайтиПоКоду("XTT316300J1017380") = 0 тогда Сообщить("Авто не найден"); СтатусВозврата(0); Возврат; КонецЕсли; ТекАвто = СпрАвто.текущийЭлемент(); //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с '01.01.2017' по '31.12.2018'; //|Без итогов; |ДокСправка = Документ.СправкаСчет.ТекущийДокумент; |Автомобиль = Документ.СправкаСчет.Автомобиль; |Группировка Автомобиль без упорядочивания; |Условие(Автомобиль = ТекАвто); |"//}}ЗАПРОС ; // Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Пока Запрос.Группировка() = 1 Цикл Сообщить(Запрос.Автомобиль); Сообщить(Запрос.ДокСправка); КонецЦикла; КонецПроцедуры | |||
| 16
    
        URAL 12.01.19✎ 15:33 | 
        но выводит два раза в сообщении
 XTT316300J1017380 Справка-счет М370 Справка-счет М370 | |||
| 17
    
        Kigo_Kigo 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 Цикл Сообщить(Запрос.Документ.Автомобиль); Сообщить(Запрос.Документ); КонецЦикла; Ну и надеюсь, ты помнишь, что если не указывать явно, то в запрос попадают только проведенные документы. Ну и выбор периода ты странно придумал делать. | |||
| 19
    
        URAL 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 если хочется по-своему сделать. | |||
| 22
    
        URAL 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+"); | |||
| 25
    
        URAL 13.01.19✎ 10:11 | 
        (24) не знал что конструкцию СокрЛП() можно использовать в теле запроса 1с7
 Премного благодарен!!!, очень помогло понять где я ошибался | |||
| 26
    
        ДенисЧ 13.01.19✎ 10:12 | 
        (25) Можно использовать, если у тебя слишком быстро работает отчёт...     | |||
| 27
    
        URAL 13.01.19✎ 10:40 | 
        (26) Благодарю!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |