|
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) Благодарю!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |