|
Обход результата запроса | ☑ | ||
---|---|---|---|---|
0
treor
31.08.18
✎
17:00
|
Здравствуйте.
Подскажите в чем может быть проблема. Делаю запрос с итогами по контрагентам и договорам. На уровне детальных записей вывожу документы. Все работает нормально. Но если перед контрагентами добавляю еще итоги по регионам, то в детальных записях по каждому договору добавляется пустая строка((( |
|||
1
igork1966
31.08.18
✎
17:02
|
(0) не хватает вложенной выборки
|
|||
2
treor
31.08.18
✎
17:04
|
(1) поясните, пожалуйста
|
|||
3
treor
31.08.18
✎
17:07
|
(1) у меня три выборки с обходом результата ПоГруппировкам для региона, контрагента и договора (группировки указываю) и выборка для детальных записей без указания вида обхода
|
|||
4
Franchiser
гуру
31.08.18
✎
17:09
|
Сколько в Секции "Итоги По" полей столько и нужно делать выборок с типом ПоГруппировкам
|
|||
5
igork1966
31.08.18
✎
17:09
|
(3) Может ты итоги с иерархией сделал, может общие итоги стоит еще. ТЫж хочешь чтобы погадали?
|
|||
6
treor
31.08.18
✎
17:13
|
(5)"я не мастер, я только учусь"... не судите строго
ВЫБРАТЬ ВложенныйЗапрос.КонтрагентРегион КАК КонтрагентРегион, ВложенныйЗапрос.Контрагент КАК Контрагент, ВложенныйЗапрос.Договор КАК Договор, ВложенныйЗапрос.ДокументПоставки, ВложенныйЗапрос.ПроцентАванса, ВложенныйЗапрос.ВидОтсрочкиОплаты, ВЫБОР КОГДА ВложенныйЗапрос.ВидОтсрочкиОплаты = ЗНАЧЕНИЕ(Перечисление.ЮИ_ВидыОтсрочки.БанковскихДней) ТОГДА "б.д." ИНАЧЕ "к.д." КОНЕЦ КАК ВидОтсрочкиСтрока, ВложенныйЗапрос.СрокОплаты, ВложенныйЗапрос.КалендарныхДней, СУММА(ЗП_РегламентированныйПроизводственныйКалендарь.КалендарныеДни) КАК БанковскихДней, ВЫБОР КОГДА ВложенныйЗапрос.ВидОтсрочкиОплаты = ЗНАЧЕНИЕ(Перечисление.ЮИ_ВидыОтсрочки.БанковскихДней) ТОГДА СУММА(ЗП_РегламентированныйПроизводственныйКалендарь.КалендарныеДни) ИНАЧЕ ВложенныйЗапрос.КалендарныхДней КОНЕЦ КАК ПрошлоДней, ВложенныйЗапрос.СуммаОстаток КАК СуммаОстаток, ВложенныйЗапрос.КонтрагентКодКраткий ИЗ (ВЫБРАТЬ ХозрасчетныйОстатки.Субконто1 КАК Контрагент, ХозрасчетныйОстатки.Субконто2 КАК Договор, ХозрасчетныйОстатки.Субконто3 КАК ДокументПоставки, ЕСТЬNULL(ХозрасчетныйОстатки.Субконто2.ЮИ_Соглашение.ПроцентАванса, 0) КАК ПроцентАванса, ХозрасчетныйОстатки.Субконто2.ЮИ_Соглашение.ВидОтсрочкиОплаты КАК ВидОтсрочкиОплаты, ЕСТЬNULL(ХозрасчетныйОстатки.Субконто2.ЮИ_Соглашение.СрокОплаты, 0) КАК СрокОплаты, РАЗНОСТЬДАТ(ХозрасчетныйОстатки.Субконто3.Дата, &ДатаОтчета, ДЕНЬ) КАК КалендарныхДней, ВЫБОР КОГДА ХозрасчетныйОстатки.Валюта ЕСТЬ NULL ТОГДА ХозрасчетныйОстатки.СуммаОстатокДт ИНАЧЕ ХозрасчетныйОстатки.ВалютнаяСуммаОстатокДт КОНЕЦ КАК СуммаОстаток, ХозрасчетныйОстатки.Субконто1.ЮИ_КодКраткий КАК КонтрагентКодКраткий, ХозрасчетныйОстатки.Субконто1.ЮИ_Регион КАК КонтрагентРегион ИЗ РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаПолученияОстатков, Счет В (&Счет), &ВидыСубконто, ) КАК ХозрасчетныйОстатки ГДЕ ХозрасчетныйОстатки.СуммаОстатокДт > 0) КАК ВложенныйЗапрос, РегистрСведений.ЗП_РегламентированныйПроизводственныйКалендарь КАК ЗП_РегламентированныйПроизводственныйКалендарь ГДЕ ЗП_РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ ВложенныйЗапрос.ДокументПоставки.Дата И &ДатаОтчета И ЗП_РегламентированныйПроизводственныйКалендарь.Пятидневка = 1 И ЗП_РегламентированныйПроизводственныйКалендарь.ВидДня В(&ВидыДня) СГРУППИРОВАТЬ ПО ВложенныйЗапрос.Контрагент, ВложенныйЗапрос.Договор, ВложенныйЗапрос.ДокументПоставки, ВложенныйЗапрос.ПроцентАванса, ВложенныйЗапрос.ВидОтсрочкиОплаты, ВложенныйЗапрос.СрокОплаты, ВложенныйЗапрос.КалендарныхДней, ВложенныйЗапрос.КонтрагентКодКраткий, ВложенныйЗапрос.КонтрагентРегион, ВложенныйЗапрос.СуммаОстаток ИТОГИ СУММА(СуммаОстаток) ПО КонтрагентРегион, Контрагент, Договор |
|||
7
Franchiser
гуру
31.08.18
✎
17:18
|
Покажи обход. КонтрагентРегион = NULL ?
|
|||
8
hhhh
31.08.18
✎
17:19
|
(6) выборку покажи как делаешь, и установка параметров
|
|||
9
treor
31.08.18
✎
17:23
|
Установка параметров
Запрос.УстановитьПараметр("ДатаОтчета", ДатаОтчета); Запрос.УстановитьПараметр("ДатаПолученияОстатков", Новый Граница(КонецДня(ДатаОтчета), ВидГраницы.Включая)); СписокСчетов = Новый СписокЗначений(); СписокСчетов.Добавить(ПланыСчетов.Хозрасчетный.РасчетыСПокупателями); СписокСчетов.Добавить(ПланыСчетов.Хозрасчетный.РасчетыСПокупателямиВал); Запрос.УстановитьПараметр("Счет", СписокСчетов); ВидыСубконто = Новый СписокЗначений(); ВидыСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты); ВидыСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры); ВидыСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ДокументыРасчетовСКонтрагентами); Запрос.УстановитьПараметр("ВидыСубконто", ВидыСубконто); ВидыДня = Новый СписокЗначений(); ВидыДня.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий); ВидыДня.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный); Запрос.УстановитьПараметр("ВидыДня", ВидыДня); |
|||
10
treor
31.08.18
✎
17:24
|
ВыборкаРегион = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "КонтрагентРегион");
Пока ВыборкаРегион.Следующий() Цикл ОбластьРегион.Параметры.Регион = ВРег(ВыборкаРегион.КонтрагентРегион); ТабличныйДокумент.Вывести(ОбластьРегион); ВыборкаКОнтрагент = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Контрагент"); Пока ВыборкаКонтрагент.Следующий()Цикл ОбластьКонтрагент.Параметры.Контрагент = ВыборкаКОнтрагент.Контрагент; ТабличныйДокумент.Вывести(ОбластьКонтрагент); ИтогоПросроченоПоКонтрагенту = 0; ИтогоИстекаетСрокОплатыПоКОнтрагенту = 0; ИтогоМожноОтложитьОплатуПоКонтрагенту = 0; ВыборкаДоговор = ВыборкаКОнтрагент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Договор"); Пока ВыборкаДоговор.Следующий() Цикл ОбластьДоговор.Параметры.Договор = ВыборкаДоговор.Договор; ОбластьДоговор.Параметры.Валюта = ВыборкаДоговор.Договор.ВалютаВзаиморасчетов; ТабличныйДокумент.Вывести(ОбластьДоговор); ВыборкаЗапись = ВыборкаДоговор.Выбрать(); Пока ВыборкаЗапись.Следующий() Цикл ПолучитьСуммыДляОплаты(СуммыДляОплаты, ВыборкаЗапись); ОбластьЗапись.Параметры.Документ = ВыборкаЗапись.ДокументПоставки; ОбластьЗапись.Параметры.СуммаПросрочено = СуммыДляОплаты.СуммаПросрочено; ОбластьЗапись.Параметры.СуммаИстекаетСрокОплаты = СуммыДляОплаты.СуммаИстекаетСрокОплаты; ОбластьЗапись.Параметры.СуммаМожноОтложитьОплату = СуммыДляОплаты.СуммаМожноОтложитьОплату; ТабличныйДокумент.Вывести(ОбластьЗапись); ИтогоПросроченоПоКонтрагенту = ИтогоПросроченоПоКонтрагенту + СуммыДляОплаты.СуммаПросрочено; ИтогоИстекаетСрокОплатыПоКОнтрагенту = ИтогоИстекаетСрокОплатыПоКОнтрагенту + СуммыДляОплаты.СуммаИстекаетСрокОплаты; ИтогоМожноОтложитьОплатуПоКонтрагенту = ИтогоМожноОтложитьОплатуПоКонтрагенту + СуммыДляОплаты.СуммаМожноОтложитьОплату; КонецЦикла; КОнецЦикла; ОбластьИтогоПоКонтрагенту.Параметры.ИтогоПросроченоПоКонтрагенту = ИтогоПросроченоПоКонтрагенту; ОбластьИтогоПоКонтрагенту.Параметры.ИтогоИстекаетСрокОплатыПоКОнтрагенту = ИтогоИстекаетСрокОплатыПоКОнтрагенту; ОбластьИтогоПоКонтрагенту.Параметры.ИтогоМожноОтложитьОплатуПоКонтрагенту = ИтогоМожноОтложитьОплатуПоКонтрагенту; ТабличныйДокумент.Вывести(ОбластьИтогоПоКонтрагенту); ТабличныйДокумент.Вывести(ОбластьПустаяСтрока); КОнецЦикла; КОнецЦикла; |
|||
11
Franchiser
гуру
31.08.18
✎
17:28
|
Это что такое?
ВыборкаКОнтрагент = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Контрагент"); |
|||
12
Franchiser
гуру
31.08.18
✎
17:30
|
Нужно так:
ВыборкаКОнтрагент = ВыборкаРегион.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Контрагент"); |
|||
13
Franchiser
гуру
31.08.18
✎
17:33
|
Это зачем?
ТабличныйДокумент.Вывести(ОбластьПустаяСтрока); |
|||
14
treor
31.08.18
✎
17:33
|
(11) Ctrl+C Ctrl+V((( и невнимательность. А главное думаю, чего он так тормозит в этом месте. Короче "гляжу в книгу - вижу фигу!"(((
|
|||
15
Franchiser
гуру
31.08.18
✎
17:35
|
(14) Рита, ну так нельзя!
|
|||
16
treor
31.08.18
✎
17:39
|
(13) Спасибо, работает)
|
|||
17
treor
31.08.18
✎
17:40
|
(15)постараюсь...( может дадите оценку того как написан запрос в целом? Может бросилось в глаза еще что-нибудь как делать нельзя
|
|||
18
treor
31.08.18
✎
17:42
|
задача была по поставщикам определить какие суммы на дату формирования отчета по условиям договора просрочены, какие нужно оплатить в течении дня и какие можно отложить
|
|||
19
Franchiser
гуру
31.08.18
✎
17:44
|
Вложенный запрос не желательно использовать, вместо списка значений лучше передавать массив. Но это если придираться.
|
|||
20
treor
31.08.18
✎
17:46
|
(19) "Вложенный запрос не желательно использовать"
По другому не придумала как в одном запросе и остатки получить и банковские дни рассчитать |
|||
21
Franchiser
гуру
31.08.18
✎
17:49
|
ОбластьКонтрагент.Параметры.Контрагент = ВыборкаКОнтрагент.Контрагент;
Вместь это можно написать ЗаполнитьЗначенияСвойств(ОбластьКонтрагент.Параметры, ВыборкаКОнтрагент) |
|||
22
Franchiser
гуру
31.08.18
✎
17:50
|
(20) Временные таблицы
|
|||
23
Franchiser
гуру
31.08.18
✎
17:51
|
(21) Точнее так:
ОбластьКонтрагент.Параметры.Заполнить(ВыборкаКОнтрагент) |
|||
24
treor
31.08.18
✎
17:53
|
(22)спасибо. с 1с8 работаю недавно. С временными таблицами пока самой не доводилось работать. Буду разбираться. Еще раз спасибо!!!
|
|||
25
Franchiser
гуру
31.08.18
✎
17:57
|
Группировать по ВложенныйЗапрос.СуммаОстаток неправильно, нужно суммировать
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |