Имя: Пароль:
1C
1С v8
Не выводятся детальные записи в обходе запроса.
0 Босечка
 
21.07.17
16:00
Запрос2.Текст = "ВЫБРАТЬ
                    |    ВыбНоменДляДатыПрихода.Номенклатура КАК Номенклатура,
                    |    ВыбНоменДляДатыПрихода.Склад КАК Склад,
                    |    ВыбНоменДляДатыПрихода.Остаток КАК Остаток,
                    |    ТоварыНаСкладах.Период КАК Период,
                    |    ТоварыНаСкладах.Номенклатура КАК Номенклатура1,
                    |    ТоварыНаСкладах.Количество КАК Количество,
                    |    ТоварыНаСкладах.Склад КАК Склад1
                    |ИЗ
                    |    ВыбНоменДляДатыПрихода КАК ВыбНоменДляДатыПрихода
                    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
                    |        ПО ВыбНоменДляДатыПрихода.Номенклатура = ТоварыНаСкладах.Номенклатура
                    |            И ВыбНоменДляДатыПрихода.Склад = ТоварыНаСкладах.Склад
                    |ГДЕ
                    |    ТоварыНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
                    |    И НЕ ТоварыНаСкладах.Регистратор ССЫЛКА Документ.ВозвратТоваровОтПокупателя
                    |
                    |УПОРЯДОЧИТЬ ПО
                    |    ТоварыНаСкладах.Период УБЫВ
                    |ИТОГИ ПО
                    |    Номенклатура1,
                    |    Склад1,
                    |    Период";
                    
                    Запрос2.МенеджерВременныхТаблиц    = МенВрТаб;  
                   РезультатЗапроса = Запрос2.Выполнить().Выгрузить();       
                    РезультатЗапроса.ВыбратьСтроку();
    
                    РезультатЗапроса = Запрос2.Выполнить();
                    Обход = ОбходРезультатаЗапроса.ПоГруппировкам;
                    Номенклатура=РезультатЗапроса.Выбрать(Обход,"Номенклатура1");
                    Пока Номенклатура.Следующий() Цикл
                        Склады=Номенклатура.Выбрать(Обход, "Склад1");
                        Пока Склады.Следующий() Цикл
                            новстр=Т_ДатаПрихода.Добавить();
                            новстр.Номенклатура=Склады.Номенклатура1;
                            Ост1=Склады.Остаток;
                            новстр.Склад=Склады.Склад1;
                            //Ост1=Периоды.Остаток;
                            Сообщить("Остаток "+Ост1);
                            //Если (ЗначениеЗаполнено(Периоды.Количество)) и (ЗначениеЗаполнено(Ост1)) тогда
                            //Разн=Периоды.Количество-Ост1;
                            //новстр.ДатаПрих =Периоды.Период;
                            //Если Разн >0 тогда
                            //    новстр.ДатаПрих =Периоды.Период;
                            //    Прервать;
                            //иначе
                            //    Ост1=Ост1-стр.Количество;
                            //Конецесли;    
                            //Конецесли;    
                        Конеццикла;
                    Конеццикла;
                    Т_ДатаПрихода.ВыбратьСтроку();
1 Босечка
 
21.07.17
16:00
оСТАТОК показывает NULL
2 Босечка
 
21.07.17
16:01
Когда запрос выгружаешь в ТЗ, все хорошо
3 Босечка
 
21.07.17
16:09
ап...
4 Ненавижу 1С
 
гуру
21.07.17
16:10
а ты ведь не обходишь детальные записи
либо остаток вынеси в итоги
5 vadim777
 
21.07.17
16:11
(4) Думаем, не мешай...
6 Босечка
 
21.07.17
16:11
а как их надо обойти, подскажите плиз
7 Ненавижу 1С
 
гуру
21.07.17
16:12
нужен другое вид значения ОбходРезультатаЗапроса
8 Босечка
 
21.07.17
16:15
какой?
9 mistеr
 
21.07.17
16:18
(0) Две ошибки.

1. В Запросе не указаны агрегатные функции для итогов: СУММА(Количество)

2. При обходе детальные записи будут на четвертом уровне, т.к. в итогах 3 уровня + 1 = 4.
10 vadim777
 
21.07.17
16:18
(0) ВыборкаСклад = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад", "ВСЕ");
Не?
11 Босечка
 
21.07.17
16:24
Запрос2 = Новый Запрос;
    Запрос2.Текст = "ВЫБРАТЬ
                    |    ВыбНоменДляДатыПрихода.Номенклатура КАК Номенклатура,
                    |    ВыбНоменДляДатыПрихода.Склад КАК Склад,
                    |    ВыбНоменДляДатыПрихода.Остаток КАК Остаток,
                    |    ТоварыНаСкладах.Период КАК Период,
                    |    ТоварыНаСкладах.Номенклатура КАК Номенклатура1,
                    |    ТоварыНаСкладах.Количество КАК Количество,
                    |    ТоварыНаСкладах.Склад КАК Склад1
                    |ИЗ
                    |    ВыбНоменДляДатыПрихода КАК ВыбНоменДляДатыПрихода
                    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
                    |        ПО ВыбНоменДляДатыПрихода.Номенклатура = ТоварыНаСкладах.Номенклатура
                    |            И ВыбНоменДляДатыПрихода.Склад = ТоварыНаСкладах.Склад
                    |ГДЕ
                    |    ТоварыНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
                    |    И НЕ ТоварыНаСкладах.Регистратор ССЫЛКА Документ.ВозвратТоваровОтПокупателя
                    |
                    |УПОРЯДОЧИТЬ ПО
                    |    ТоварыНаСкладах.Период УБЫВ
                    |ИТОГИ
                    |    СУММА(Остаток),
                    |    СУММА(Количество)
                    |ПО
                    |    Номенклатура1,
                    |    Склад1";
                    
                    Запрос2.МенеджерВременныхТаблиц    = МенВрТаб;  
                   РезультатЗапроса = Запрос2.Выполнить().Выгрузить();       
                    РезультатЗапроса.ВыбратьСтроку();
    
                    РезультатЗапроса = Запрос2.Выполнить();
                    Обход = ОбходРезультатаЗапроса.ПоГруппировкам;
                    Номенклатура=РезультатЗапроса.Выбрать(Обход,"Номенклатура1");
                    Пока Номенклатура.Следующий() Цикл
                        Склады=Номенклатура.Выбрать(Обход, "Склад1");
                        Пока Склады.Следующий() Цикл
                            новстр=Т_ДатаПрихода.Добавить();
                            новстр.Номенклатура=Склады.Номенклатура1;
                            Ост1=Склады.Остаток;
                            новстр.Склад=Склады.Склад1;
                            //Ост1=Периоды.Остаток;
                            Сообщить("Остаток "+Ост1);
                            //Если (ЗначениеЗаполнено(Периоды.Количество)) и (ЗначениеЗаполнено(Ост1)) тогда
                            //Разн=Периоды.Количество-Ост1;
                            //новстр.ДатаПрих =Периоды.Период;
                            //Если Разн >0 тогда
                            //    новстр.ДатаПрих =Периоды.Период;
                            //    Прервать;
                            //иначе
                            //    Ост1=Ост1-стр.Количество;
                            //Конецесли;    
                            //Конецесли;    
                        Конеццикла;
                    Конеццикла;
12 Босечка
 
21.07.17
16:25
(9) все равно остатки не выводит. Только итоги по ним. Мне итоги не надо. Мне надо детальные записи.
13 mistеr
 
21.07.17
16:26
(12) Что значит "все равно"? Ты ошибки исправила?
14 mistеr
 
21.07.17
16:28
(13) А, прошу прощения, не увидел (11)
15 Босечка
 
21.07.17
16:30
(10) Не работает все равно
16 mistеr
 
21.07.17
16:30
(11) Ну и где обход детальных записей? Теперь это третий уровень, а у тебя только две выборки.
17 Босечка
 
21.07.17
16:30
Мне итог не нужен по Остаток. Мне нужно его значение
18 mistеr
 
21.07.17
16:31
ДетальныеЗаписи = Склады.Выбрать();
19 Босечка
 
21.07.17
16:31
(16) А какой третий по периоду?
20 Вафель
 
21.07.17
16:31
у тебя по факту 3 группировки и только 4 - деаельные записи
21 mistеr
 
21.07.17
16:36
(19) Еще раз: сколько бы ни было группировок в секции "ПО" в запросе, - детальные записи будут на СЛЕДУЮЩЕМ уровне. +1, понимаешь? В консоли выведи результат в дерево, сама все увидишь.