Имя: Пароль:
1C
1С v8
Запрос на остатки
0 antihacker
 
27.02.18
15:53
Всем привет !

Запрос
1 DmitriyDI
 
27.02.18
15:54
информативно)
2 antihacker
 
27.02.18
15:54
"ВЫБРАТЬ
|    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
|    ТоварыНаСкладахОстатки.Номенклатура.ЭтоГруппа КАК ЭтоГруппа,

|    ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток,
|    Цены.Цена КАК Цена
|
|ИЗ
|
|    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
|        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
|            ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
|            МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Цена) КАК Цена
|        ИЗ
|            РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,) КАК ЦеныНоменклатурыСрезПоследних
        
|        СГРУППИРОВАТЬ ПО
|            ЦеныНоменклатурыСрезПоследних.Номенклатура) КАК Цены
|        ПО ТоварыНаСкладахОстатки.Номенклатура = Цены.Номенклатура
|ИТОГИ
|    СУММА(Остаток)
|ПО
|    Номенклатура ИЕРАРХИЯ";

Почему элементы выходит по 2 раза
3 antihacker
 
27.02.18
15:56
Вывожу вот так
Результат = Запрос.Выполнить();
    
    ТабДок.НачатьАвтогруппировкуСтрок();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Группа.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
        
        Если ВыборкаДетальныеЗаписи.ЭтоГруппа Тогда            
             Группа.Область("R1C1:R1C18").ЦветФона =WebЦвета.СветлоКоричневый;
             Группа.Область("R1C1:R1C18").ЦветРамки =WebЦвета.Коричневый;
            

        Иначе
            Группа.Область("R1C1:R1C18").ЦветФона =WebЦвета.Белый;
            Группа.Область("R1C1:R1C18").ЦветРамки =WebЦвета.Коричневый;

            
        КонецЕсли;    
        
            
        ТабДок.Вывести(Группа, ВыборкаДетальныеЗаписи.Уровень());      
        
        
        
        //Пока СписокСкладов.Следующий() Цикл
        //      
        //             //СтокаНоменклатура.Параметры.ОстатокПоТекСкладу = ОстатокНомНаСкладе(ВыборкаДетальныеЗаписи.Ссылка,СписокСкладов.Ссылка);
        //             //ТабДок.Присоединить(СтокаНоменклатура);

        //КонецЦикла;

    КонецЦикла;


Именно элмент по два раза. И еще в группированом виде. То елемент и этот же элемент в своей группе
4 DmitriyDI
 
27.02.18
15:56
(2) ИТОГИ ПО
    Ссылка ТОЛЬКО ИЕРАРХИЯ
5 Джинн
 
27.02.18
15:57
Сколько типов цен?
6 antihacker
 
27.02.18
15:59
Пробовал указать тип цен  явным образом. Не помогает
7 Джинн
 
27.02.18
16:01
Сколько складов?
8 antihacker
 
27.02.18
16:03
Далее с этой функцией пытаюсь получить остаток

Функция ОстатокНомНаСкладе(вхНоменклатура,вхСклад);

          //---Проверяем остаток---------------------------------
        запрос=новый запрос;
        запрос.Текст="ВЫБРАТЬ
        |    ТоварыНаСкладахОстатки.Склад КАК Склад,
        |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
        |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
        |ИЗ
        |    РегистрНакопления.ТоварыНаСкладах.Остатки(
        |            &ДатаОст,
        |            Склад = &выбСписСклады
        |                И Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстатки";
            
        запрос.УстановитьПараметр("ДатаОст",КонецДня(ЭтотОБъект.Дата));    
        запрос.УстановитьПараметр("выбСписСклады",вхСклад);
        запрос.УстановитьПараметр("Номенклатура",вхНоменклатура);        
                                          
        КолОстаток=запрос.Выполнить().Выбрать();

        Если КолОстаток.Количество()=0 Тогда
             Возврат 0;
        Иначе
             Пока КолОстаток.Следующий() Цикл  
                  Возврат  КолОстаток.КоличествоОстаток;
                
             КонецЦикла;                
      КонецЕсли;
    
КонецФункции    


Ничегоне возвращает
9 DmitriyDI
 
27.02.18
16:05
(8) Ужас, тебе надо делать обход результата запроса по группировкам, а не делать запрос в цикле
10 antihacker
 
27.02.18
16:10
То есть функция выдает остатки, но остаток группы не выдает
11 DmitriyDI
 
27.02.18
16:12
(10)
Номенклатура В ИЕРАРХИИ (&Номенклатура) напиши в запросе, который у тебя в цикле
12 DmitriyDI
 
27.02.18
16:14
(10) а вообще ужасное исполнение, на твоем месте переписал бы нормально в первом запросе получай выборку и по складам и по товарам, затем обходи по группировкам в двух циклах.
13 antihacker
 
27.02.18
16:15
Это как ? Не умею. Слабак я
14 antihacker
 
27.02.18
16:15
Мозг протекает
15 DmitriyDI
 
27.02.18
16:19
(13) зачем тебе в первом запросе итоги? убери сделай группировку, во втором в цикле который сделай Номенклатура В ИЕРАРХИИ (&Номенклатура)
16 xXeNoNx
 
27.02.18
17:24
(2) А потому шта иерархия по номенклатуре!
17 antihacker
 
27.02.18
17:43
И так. Кто подскажет. Как мне исправить функцию, что бы она возвращала остатки и по группам тоже.
18 hhhh
 
27.02.18
17:48
(17)    как-то так

    ВыборкаДетальныеЗаписи = Результат.Выбрать(ОБбходРезультатаЗапроса.ПоГруппировкамСИерархией);

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
19 xXeNoNx
 
27.02.18
18:00
(17) Остатки по группе "Продукты": Молоко - 1литр + Селедка - 1шт + Колбаса - 1палка - чему буде равно? Думаю что тут надо новую единицу измерения ввести - РЖ(расстройство желудка)
20 xXeNoNx
 
27.02.18
18:09
1. Получаем остатки товаров в разрезе склада
2. Получаем цены по уже выбранной номенклатуре (используя параметры вирт. таблицы)
3. Соединяя эксперементируй
И не забываем: СОЕДИНЯТЬСЯ С ВИРТУАЛЬНОЙ ТАБЛИЦЕЙ - ЭТО ХРЕНОВО
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.