Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Обход результата запроса

Обход результата запроса
Я
   treor
 
31.08.18 - 17:00
Здравствуйте.
Подскажите в чем может быть проблема.
Делаю запрос с итогами по контрагентам и договорам. На уровне детальных записей вывожу документы. Все работает нормально. Но если перед контрагентами добавляю еще итоги по регионам, то в детальных записях по каждому договору добавляется пустая строка(((
 
 
   igork1966
 
1 - 31.08.18 - 17:02
(0) не хватает вложенной выборки
   treor
 
2 - 31.08.18 - 17:04
(1) поясните, пожалуйста
   treor
 
3 - 31.08.18 - 17:07
(1) у меня три выборки с обходом результата ПоГруппировкам для региона, контрагента и договора (группировки указываю) и выборка для детальных записей без указания вида обхода
   Franchiser
 
4 - 31.08.18 - 17:09
Сколько в Секции "Итоги По" полей столько и нужно делать выборок с типом ПоГруппировкам
   igork1966
 
5 - 31.08.18 - 17:09
(3) Может ты итоги с иерархией сделал, может общие итоги стоит еще. ТЫж хочешь чтобы погадали?
   treor
 
6 - 31.08.18 - 17:13
(5)"я не мастер, я только учусь"... не судите строго

ВЫБРАТЬ
    ВложенныйЗапрос.КонтрагентРегион КАК КонтрагентРегион,
    ВложенныйЗапрос.Контрагент КАК Контрагент,
    ВложенныйЗапрос.Договор КАК Договор,
    ВложенныйЗапрос.ДокументПоставки,
    ВложенныйЗапрос.ПроцентАванса,
    ВложенныйЗапрос.ВидОтсрочкиОплаты,
    ВЫБОР
        КОГДА ВложенныйЗапрос.ВидОтсрочкиОплаты = ЗНАЧЕНИЕ(Перечисление.ЮИ_ВидыОтсрочки.БанковскихДней)
            ТОГДА "б.д."
        ИНАЧЕ "к.д."
    КОНЕЦ КАК ВидОтсрочкиСтрока,
    ВложенныйЗапрос.СрокОплаты,
    ВложенныйЗапрос.КалендарныхДней,
    СУММА(ЗП_РегламентированныйПроизводственныйКалендарь.КалендарныеДни) КАК БанковскихДней,
    ВЫБОР
        КОГДА ВложенныйЗапрос.ВидОтсрочкиОплаты = ЗНАЧЕНИЕ(Перечисление.ЮИ_ВидыОтсрочки.БанковскихДней)
            ТОГДА СУММА(ЗП_РегламентированныйПроизводственныйКалендарь.КалендарныеДни)
        ИНАЧЕ ВложенныйЗапрос.КалендарныхДней
    КОНЕЦ КАК ПрошлоДней,
    ВложенныйЗапрос.СуммаОстаток КАК СуммаОстаток,
    ВложенныйЗапрос.КонтрагентКодКраткий
ИЗ
    (ВЫБРАТЬ
        ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
        ХозрасчетныйОстатки.Субконто2 КАК Договор,
        ХозрасчетныйОстатки.Субконто3 КАК ДокументПоставки,
        ЕСТЬNULL(ХозрасчетныйОстатки.Субконто2.ЮИ_Соглашение.ПроцентАванса, 0) КАК ПроцентАванса,
        ХозрасчетныйОстатки.Субконто2.ЮИ_Соглашение.ВидОтсрочкиОплаты КАК ВидОтсрочкиОплаты,
        ЕСТЬNULL(ХозрасчетныйОстатки.Субконто2.ЮИ_Соглашение.СрокОплаты, 0) КАК СрокОплаты,
        РАЗНОСТЬДАТ(ХозрасчетныйОстатки.Субконто3.Дата, &ДатаОтчета, ДЕНЬ) КАК КалендарныхДней,
        ВЫБОР
            КОГДА ХозрасчетныйОстатки.Валюта ЕСТЬ NULL
                ТОГДА ХозрасчетныйОстатки.СуммаОстатокДт
            ИНАЧЕ ХозрасчетныйОстатки.ВалютнаяСуммаОстатокДт
        КОНЕЦ КАК СуммаОстаток,
        ХозрасчетныйОстатки.Субконто1.ЮИ_КодКраткий КАК КонтрагентКодКраткий,
        ХозрасчетныйОстатки.Субконто1.ЮИ_Регион КАК КонтрагентРегион
    ИЗ
        РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаПолученияОстатков, Счет В (&Счет), &ВидыСубконто, ) КАК ХозрасчетныйОстатки
    ГДЕ
        ХозрасчетныйОстатки.СуммаОстатокДт > 0) КАК ВложенныйЗапрос,
    РегистрСведений.ЗП_РегламентированныйПроизводственныйКалендарь КАК ЗП_РегламентированныйПроизводственныйКалендарь
ГДЕ
    ЗП_РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ ВложенныйЗапрос.ДокументПоставки.Дата И &ДатаОтчета
    И ЗП_РегламентированныйПроизводственныйКалендарь.Пятидневка = 1
    И ЗП_РегламентированныйПроизводственныйКалендарь.ВидДня В(&ВидыДня)

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.Контрагент,
    ВложенныйЗапрос.Договор,
    ВложенныйЗапрос.ДокументПоставки,
    ВложенныйЗапрос.ПроцентАванса,
    ВложенныйЗапрос.ВидОтсрочкиОплаты,
    ВложенныйЗапрос.СрокОплаты,
    ВложенныйЗапрос.КалендарныхДней,
    ВложенныйЗапрос.КонтрагентКодКраткий,
    ВложенныйЗапрос.КонтрагентРегион,
    ВложенныйЗапрос.СуммаОстаток
ИТОГИ
    СУММА(СуммаОстаток)
ПО
    КонтрагентРегион,
    Контрагент,
    Договор
   Franchiser
 
7 - 31.08.18 - 17:18
Покажи обход. КонтрагентРегион = NULL ?
   hhhh
 
8 - 31.08.18 - 17:19
(6) выборку покажи как делаешь, и установка параметров
   treor
 
9 - 31.08.18 - 17:23
Установка параметров

Запрос.УстановитьПараметр("ДатаОтчета", ДатаОтчета);
    Запрос.УстановитьПараметр("ДатаПолученияОстатков", Новый Граница(КонецДня(ДатаОтчета), ВидГраницы.Включая));
    
    СписокСчетов = Новый СписокЗначений();
    СписокСчетов.Добавить(ПланыСчетов.Хозрасчетный.РасчетыСПокупателями);
    СписокСчетов.Добавить(ПланыСчетов.Хозрасчетный.РасчетыСПокупателямиВал);
    Запрос.УстановитьПараметр("Счет", СписокСчетов);
    
    ВидыСубконто = Новый СписокЗначений();
    ВидыСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты);
    ВидыСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры);
    ВидыСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ДокументыРасчетовСКонтрагентами);
    Запрос.УстановитьПараметр("ВидыСубконто", ВидыСубконто);
    
    ВидыДня = Новый СписокЗначений();
    ВидыДня.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий);
    ВидыДня.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный);
    Запрос.УстановитьПараметр("ВидыДня", ВидыДня);
   treor
 
10 - 31.08.18 - 17:24
ВыборкаРегион = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "КонтрагентРегион");
    Пока ВыборкаРегион.Следующий() Цикл
        
        ОбластьРегион.Параметры.Регион = ВРег(ВыборкаРегион.КонтрагентРегион);
        ТабличныйДокумент.Вывести(ОбластьРегион);
        
        ВыборкаКОнтрагент = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Контрагент");
        Пока ВыборкаКонтрагент.Следующий()Цикл
            
            ОбластьКонтрагент.Параметры.Контрагент = ВыборкаКОнтрагент.Контрагент;
            ТабличныйДокумент.Вывести(ОбластьКонтрагент);
            
            ИтогоПросроченоПоКонтрагенту = 0;
            ИтогоИстекаетСрокОплатыПоКОнтрагенту = 0;
            ИтогоМожноОтложитьОплатуПоКонтрагенту = 0;
            
            ВыборкаДоговор = ВыборкаКОнтрагент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Договор");
            Пока ВыборкаДоговор.Следующий() Цикл
                
                ОбластьДоговор.Параметры.Договор = ВыборкаДоговор.Договор;
                ОбластьДоговор.Параметры.Валюта =  ВыборкаДоговор.Договор.ВалютаВзаиморасчетов;
                ТабличныйДокумент.Вывести(ОбластьДоговор);
                
                ВыборкаЗапись = ВыборкаДоговор.Выбрать();
                Пока ВыборкаЗапись.Следующий() Цикл
                    
                    ПолучитьСуммыДляОплаты(СуммыДляОплаты, ВыборкаЗапись);
                    
                    ОбластьЗапись.Параметры.Документ = ВыборкаЗапись.ДокументПоставки;
                    ОбластьЗапись.Параметры.СуммаПросрочено = СуммыДляОплаты.СуммаПросрочено;
                    ОбластьЗапись.Параметры.СуммаИстекаетСрокОплаты = СуммыДляОплаты.СуммаИстекаетСрокОплаты;
                    ОбластьЗапись.Параметры.СуммаМожноОтложитьОплату = СуммыДляОплаты.СуммаМожноОтложитьОплату;
                    ТабличныйДокумент.Вывести(ОбластьЗапись);
                    
                    ИтогоПросроченоПоКонтрагенту = ИтогоПросроченоПоКонтрагенту + СуммыДляОплаты.СуммаПросрочено;
                    ИтогоИстекаетСрокОплатыПоКОнтрагенту = ИтогоИстекаетСрокОплатыПоКОнтрагенту + СуммыДляОплаты.СуммаИстекаетСрокОплаты;
                    ИтогоМожноОтложитьОплатуПоКонтрагенту = ИтогоМожноОтложитьОплатуПоКонтрагенту + СуммыДляОплаты.СуммаМожноОтложитьОплату;
                КонецЦикла;
                
            КОнецЦикла;
            
            ОбластьИтогоПоКонтрагенту.Параметры.ИтогоПросроченоПоКонтрагенту = ИтогоПросроченоПоКонтрагенту;
            ОбластьИтогоПоКонтрагенту.Параметры.ИтогоИстекаетСрокОплатыПоКОнтрагенту = ИтогоИстекаетСрокОплатыПоКОнтрагенту;
            ОбластьИтогоПоКонтрагенту.Параметры.ИтогоМожноОтложитьОплатуПоКонтрагенту = ИтогоМожноОтложитьОплатуПоКонтрагенту;
            ТабличныйДокумент.Вывести(ОбластьИтогоПоКонтрагенту);
            
            ТабличныйДокумент.Вывести(ОбластьПустаяСтрока); 
        КОнецЦикла;
        
    КОнецЦикла;
 
 Рекламное место пустует
   Franchiser
 
11 - 31.08.18 - 17:28
Это что такое?
ВыборкаКОнтрагент = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Контрагент");
   Franchiser
 
12 - 31.08.18 - 17:30
Нужно так:
ВыборкаКОнтрагент = ВыборкаРегион.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Контрагент");
   Franchiser
 
13 - 31.08.18 - 17:33
Это зачем?
 ТабличныйДокумент.Вывести(ОбластьПустаяСтрока);
   treor
 
14 - 31.08.18 - 17:33
(11) Ctrl+C Ctrl+V((( и невнимательность. А главное думаю, чего он так тормозит в этом месте. Короче "гляжу в книгу - вижу фигу!"(((
   Franchiser
 
15 - 31.08.18 - 17:35
(14) Рита, ну так нельзя!
   treor
 
16 - 31.08.18 - 17:39
(13) Спасибо, работает)
   treor
 
17 - 31.08.18 - 17:40
(15)постараюсь...( может дадите оценку того как написан запрос в целом? Может бросилось в глаза еще что-нибудь как делать нельзя
   treor
 
18 - 31.08.18 - 17:42
задача была по поставщикам определить какие суммы на дату формирования отчета по условиям договора просрочены, какие нужно оплатить в течении дня и какие можно отложить
   Franchiser
 
19 - 31.08.18 - 17:44
Вложенный запрос не желательно использовать, вместо списка значений лучше передавать массив. Но это если придираться.
   treor
 
20 - 31.08.18 - 17:46
(19) "Вложенный запрос не желательно использовать"
По другому не придумала как в одном запросе и остатки получить и банковские дни рассчитать
   Franchiser
 
21 - 31.08.18 - 17:49
ОбластьКонтрагент.Параметры.Контрагент = ВыборкаКОнтрагент.Контрагент;

Вместь это можно написать ЗаполнитьЗначенияСвойств(ОбластьКонтрагент.Параметры, ВыборкаКОнтрагент)
   Franchiser
 
22 - 31.08.18 - 17:50
(20) Временные таблицы
   Franchiser
 
23 - 31.08.18 - 17:51
(21) Точнее так:
ОбластьКонтрагент.Параметры.Заполнить(ВыборкаКОнтрагент)
   treor
 
24 - 31.08.18 - 17:53
(22)спасибо. с 1с8 работаю недавно. С временными таблицами пока самой не доводилось работать. Буду разбираться. Еще раз спасибо!!!
   Franchiser
 
25 - 31.08.18 - 17:57
Группировать по ВложенныйЗапрос.СуммаОстаток неправильно, нужно суммировать


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