8.х Посчитать количествооборотов для группы

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем Raideres, 15 мар 2016.

  1. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    200
    Симпатии:
    0
    Баллы:
    26
    Код:
    ЗапросРеализацияФакт = новый запрос;
       ЗапросРеализацияФакт.Текст = "ВЫБРАТЬ
        |   ПродажиОбороты.Номенклатура КАК Номенклатура,
        |   СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот,
        |   КонтактнаяИнформация.Поле4,
        |   ПродажиОбороты.Контрагент
        |ИЗ
        |   РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, , Номенклатура В(&Номенклатура)) КАК ПродажиОбороты
        |     ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
        |     ПО ПродажиОбороты.Контрагент = КонтактнаяИнформация.Объект
        |ГДЕ
        |   КонтактнаяИнформация.Вид = &Вид
        |   И КонтактнаяИнформация.Поле4 = &ПризнакМеста
        |   И ПродажиОбороты.ДокументПродажи.Проведен = ИСТИНА
        |   И ТИПЗНАЧЕНИЯ(ПродажиОбороты.ДокументПродажи) = ТИП(Документ.РеализацияТоваровУслуг)
        |
        |СГРУППИРОВАТЬ ПО
        |   ПродажиОбороты.Номенклатура,
        |   КонтактнаяИнформация.Поле4,
        |   ПродажиОбороты.Контрагент
        |АВТОУПОРЯДОЧИВАНИЕ";
       //****************************************************
       НайдЭлемент = Справочники.ВЗ_Константы.НайтиПоНаименованию("АлкогольнаяПродукция");
    Посчитать количество оборотов для группы а не для номенклатуры..
    у меня есть список групп но считает не для группы а для номенклатуры. помогите поправить

    Код:
    Если Не НайдЭлемент = Справочники.ВЗ_Константы.ПустаяСсылка() Тогда
         ТзКонстанты =  НайдЭлемент.ДоступныеЗначения.Выгрузить();
       КонецЕсли;
       МассивНоменк =ТзКонстанты.ВыгрузитьКолонку("Значение");
       ЗапросРеализацияФакт.УстановитьПараметр("ДатаНач",объект.Период);
       ЗапросРеализацияФакт.УстановитьПараметр("ДатаКон",Объект.ПериодПо);
       ЗапросРеализацияФакт.УстановитьПараметр("Номенклатура",МассивНоменк);
       ЗапросРеализацияФакт.УстановитьПараметр("Вид",Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00008"));
       //Куз
       ЗапросРеализацияФакт.УстановитьПараметр("ПризнакМеста","Куз");
       ВыборкаФакт = ЗапросРеализацияФакт.Выполнить().Выгрузить();
       //********************************Очистка колонки Факт
       Для каждого стрКол из  объект.Кузн цикл
         стрКол.Факт = 0;
       КонецЦикла;
       //*****************************Добавляем факты Куз
       для каждого стрКуз из объект.Куз цикл
         Номенкл = ВыборкаФакт.Найти(стрКуз.Наименование,"Номенклатура");
         Если Номенкл <> неопределено тогда
           если Номенкл.КоличествоОборот >0 тогда
           стрКуз.Факт = Номенкл.КоличествоОборот;
         иначе
           стрКуз.Факт = 0;
           конецЕсли;
         конецЕсли;
       конеццикла;
       //Пенза
       ЗапросРеализацияФакт.УстановитьПараметр("ПризнакМеста","Пен");
       ВыборкаФактПен = ЗапросРеализацияФакт.Выполнить().Выгрузить();
       //********************************Очистка колонки Факт
       Для каждого стрКол из  объект.Куз цикл
         стрКол.ФактПен = 0;
       КонецЦикла;
       //*****************************Добавляем факты Пенза
       для каждого стрКуз из объект.Куз цикл
         Номенкл = ВыборкаФактПен.Найти(стрКуз.Наименование,"Номенклатура");
         Если Номенкл <> неопределено тогда
           если Номенкл.КоличествоОборот >0 тогда
           стрКуз.ФактПен = Номенкл.КоличествоОборот;
         иначе
           стрКуз.ФактПен = 0;
           конецЕсли;
         конецЕсли;
       конеццикла;
    Последнее редактирование модератором: 15 мар 2016
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Не совсем понятна постановка задаячи
    Допустиму Вас справочник номеналатура
    там
    Алкогольная продукция
    ---Вина
    -------красные
    -------Белые
    ---Пиво
    ---Водка

    Так вот если берем какое то вино то для какой группы счатать итог надо?

    у Вас же в запросе прописано
    Номенклатура В(&Номенклатура) т.е вы указываете номенклатуру а не группу.
  3. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    200
    Симпатии:
    0
    Баллы:
    26
    у меня есть справочник
    -Пиво (корень)
    ----Пиво А(группа) тут надо посчитать количество
    --Пиво А бут
    --Пиво А шт
    ----Пиво В(группа) тут надо посчитать количество
    --Пиво В бут
    --Пиво В шт
    --ПИВО С (не входит в группы)тут надо посчитать количество
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну и смотрите получается что Вам надо посчитать итог как по группе так и по номенклатуре (С это же не группа)

    Ну можете еще в запрос конечно добавть поле
    Номенклатура.Родитель это как раз и будет Ваша группа и посмотерть устроит Вас такой вариант или нет

    т.е будет что то вроде

    Код:
    ЗапросРеализацияФакт.Текст = "ВЫБРАТЬ
        |   ПродажиОбороты.Номенклатура КАК Номенклатура,
        |  ПродажиОбороты.Номенклатура.Родитель КАК ГруппаНоменклатуры,
        |   СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот,
        |   КонтактнаяИнформация.Поле4,
        |   ПродажиОбороты.Контрагент
        |ИЗ
        |   РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, , Номенклатура В(&Номенклатура)) КАК ПродажиОбороты
        |     ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
        |     ПО ПродажиОбороты.Контрагент = КонтактнаяИнформация.Объект
        |ГДЕ
        |   КонтактнаяИнформация.Вид = &Вид
        |   И КонтактнаяИнформация.Поле4 = &ПризнакМеста
        |   И ПродажиОбороты.ДокументПродажи.Проведен = ИСТИНА
        |   И ТИПЗНАЧЕНИЯ(ПродажиОбороты.ДокументПродажи) = ТИП(Документ.РеализацияТоваровУслуг)
        |
        |СГРУППИРОВАТЬ ПО
         |  ПродажиОбороты.Номенклатура.Родитель,
        |   ПродажиОбороты.Номенклатура,
        |   КонтактнаяИнформация.Поле4,
        |   ПродажиОбороты.Контрагент
        |АВТОУПОРЯДОЧИВАНИЕ";
  5. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    200
    Симпатии:
    0
    Баллы:
    26
    Код:
    МассивНоменк =ТзКонстанты.ВыгрузитьКолонку("Значение");
       ЗапросРеализацияФакт.УстановитьПараметр("ДатаНач",объект.Период);
       ЗапросРеализацияФакт.УстановитьПараметр("ДатаКон",Объект.ПериодПо);
       ЗапросРеализацияФакт.УстановитьПараметр("Номенклатура",МассивНоменк);
       ЗапросРеализацияФакт.УстановитьПараметр("Вид",Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00008"));
       //Кузнецк
       ЗапросРеализацияФакт.УстановитьПараметр("ПризнакМеста","Куз");
       ВыборкаФакт = ЗапросРеализацияФакт.Выполнить().Выгрузить();
       //********************************Очистка колонки Факт
       Для каждого стрКол из  объект.Куз цикл
         стрКол.Факт = 0;
       КонецЦикла;  
       //*****************************Добавляем факты Куз
       для каждого стрКуз из объект.Кузцикл
       если стрКуз.Группа =ложь тогда///не группа
        
         Номенкл = ВыборкаФакт.Найти(стрКуз.Наименование,"Номенклатура");
         Если Номенкл <> неопределено тогда
           если Номенкл.КоличествоОборот >0 тогда
           стрКуз.Факт = Номенкл.КоличествоОборот;
         иначе
           стрКуз.Факт = 0;
           конецЕсли;
         конецЕсли;
       иначе    ///группа
       //  Номенкл = ВыборкаФакт.Найти(стрКуз.Наименование,"НоменклатураРодитель");
    //    Если Номенкл <> неопределено тогда
       //    если Номенкл.КоличествоОборот >0 тогда
      //     стрКуз.Факт = Номенкл.КоличествоОборот;
    //    иначе
      //     стрКуз.Факт = 0;
      //     конецЕсли;
      //   конецЕсли;
    ///   конецЕсли;
       конеццикла;
    а группу как посчитать
    Последнее редактирование модератором: 15 мар 2016
  6. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну в запрос Итоги добавьте в чем проблема то?
  7. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    200
    Симпатии:
    0
    Баллы:
    26
    у меня почему то не получилось...(руки кривые=) )
  8. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Код:
    Запрос.Текст="ВЫБРАТЬ
                     |    ПродажиОбороты.Номенклатура КАК Номенклатура,
                     |    ПродажиОбороты.Номенклатура.Родитель КАК ГруппаНоменклатуры,
                     |    СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот,
                     |    КонтактнаяИнформация.Поле4,
                     |    ПродажиОбороты.Контрагент
                     |ИЗ
                     |    РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, , Номенклатура В (&Номенклатура)) КАК ПродажиОбороты
                     |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
                     |        ПО ПродажиОбороты.Контрагент = КонтактнаяИнформация.Объект
                     |ГДЕ
                     |    КонтактнаяИнформация.Вид = &Вид
                     |    И КонтактнаяИнформация.Поле4 = &ПризнакМеста
                     |    И ПродажиОбороты.ДокументПродажи.Проведен = ИСТИНА
                     |    И ТИПЗНАЧЕНИЯ(ПродажиОбороты.ДокументПродажи) = ТИП(Документ.РеализацияТоваровУслуг)
                     |
                     |СГРУППИРОВАТЬ ПО
                     |    ПродажиОбороты.Номенклатура.Родитель,
                     |    ПродажиОбороты.Номенклатура,
                     |    КонтактнаяИнформация.Поле4,
                     |    ПродажиОбороты.Контрагент
                     |ИТОГИ
                     |    СУММА(КоличествоОборот)
                     |ПО
                     |    ГруппаНоменклатуры,
                     |    Номенклатура
                     |АВТОУПОРЯДОЧИВАНИЕ";
    Так посмотрите что Вам результат запроса выдает. Можете в ТЗ выгрузить и глянуть
  9. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    200
    Симпатии:
    0
    Баллы:
    26
    СпособВыборки = ОбходРезультатаЗапроса.ПоГруппировкам;
    ВыборкаФакт = ЗапросРеализацияФакт.Выполнить().Выгрузить(СпособВыборки);

    в итоге у меня вывело все группы а отдельную номенклатуру нет он ее просто тоже итоги посчитал
  10. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну правильно что не вывел Вам же надо еще и их это выборки потом выборку сделать.
    Вообщем я думаю Вам надо мат часть подучить еще.

    "он ее просто тоже итоги посчитал" а Вам что надо было Итоги по группе же и надо было
  11. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    200
    Симпатии:
    0
    Баллы:
    26
    тоесть делаю 2ю выборку по группам правильно понял вас?
  12. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Если по элементам надо то из выборки по группам надо сделать еще выборку
  13. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    200
    Симпатии:
    0
    Баллы:
    26
    Код:
    //*************************ФАКТ-продажи из Реализаций
       ЗапросРеализацияФакт = новый запрос;
       ЗапросРеализацияФакт.Текст = "ВЫБРАТЬ
        |   ПродажиОбороты.Номенклатура КАК Номенклатура,
        |   СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот,
        |   КонтактнаяИнформация.Поле4 КАК Поле4,
        |   ПродажиОбороты.Контрагент,
        |   ПродажиОбороты.Номенклатура.Родитель КАК НоменклатураРодитель
        |ИЗ
        |   РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, , Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ПродажиОбороты
        |     ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
        |     ПО ПродажиОбороты.Контрагент = КонтактнаяИнформация.Объект
        |ГДЕ
        |   КонтактнаяИнформация.Вид = &Вид
        |   И КонтактнаяИнформация.Поле4 = &ПризнакМеста
        |   И ПродажиОбороты.ДокументПродажи.Проведен = ИСТИНА
        |   И ТИПЗНАЧЕНИЯ(ПродажиОбороты.ДокументПродажи) = ТИП(Документ.РеализацияТоваровУслуг)
        |
        |СГРУППИРОВАТЬ ПО
        |   ПродажиОбороты.Номенклатура,
        |   КонтактнаяИнформация.Поле4,
        |   ПродажиОбороты.Контрагент,
        |   ПродажиОбороты.Номенклатура.Родитель
        |ИТОГИ
        |   СУММА(КоличествоОборот)
        |ПО
        |   НоменклатураРодитель,
                      |  Номенклатура
        |АВТОУПОРЯДОЧИВАНИЕ";
       //****************************************************
       НайдЭлемент = Справочники.ВЗ_Константы.НайтиПоНаименованию("АлкогольнаяПродукция");
       Если Не НайдЭлемент = Справочники.ВЗ_Константы.ПустаяСсылка() Тогда
         ТзКонстанты =  НайдЭлемент.ДоступныеЗначения.Выгрузить();  
       КонецЕсли;
       МассивНоменк =ТзКонстанты.ВыгрузитьКолонку("Значение");
       ЗапросРеализацияФакт.УстановитьПараметр("ДатаНач",объект.Период);
       ЗапросРеализацияФакт.УстановитьПараметр("ДатаКон",Объект.ПериодПо);
       ЗапросРеализацияФакт.УстановитьПараметр("Номенклатура",МассивНоменк);
       ЗапросРеализацияФакт.УстановитьПараметр("Вид",Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00008"));
       //Кузн
       ЗапросРеализацияФакт.УстановитьПараметр("ПризнакМеста","Кузн");
       СпособВыборки = ОбходРезультатаЗапроса.ПоГруппировкам;
       ВыборкаФакт = ЗапросРеализацияФакт.Выполнить().Выгрузить(СпособВыборки);
       //********************************Очистка колонки Факт
       Для каждого стрКол из  объект.Куз цикл
         стрКол.Факт = 0;
       КонецЦикла;  
       //*****************************Добавляем факты Куз
       для каждого стрКуз из объект.Куз цикл
       если стрКуз.Группа =ложь тогда///не группа   А ТУТ У МЕНЯ ВСЕ ЧЕРЕЗ ПОПУ
         если ВыборкаФакт.Строки.Найти(справочники.Номенклатура.НайтиПоКоду("00000000007"),"НоменклатураРодитель")<> неопределено тогда
         Номенкл =   ВыборкаФакт.Строки.Найти(справочники.Номенклатура.НайтиПоКоду("00000000007"),"НоменклатураРодитель").Строки;
         Если Номенкл.Родитель.Строки.Найти(справочники.Номенклатура.НайтиПоНаименованию(стрКуз.наименование),"Номенклатура") <> неопределено тогда
            если Номенкл.Родитель.Строки.Найти(справочники.Номенклатура.НайтиПоНаименованию(стрКуз.наименование),"Номенклатура").КоличествоОборот >0 тогда
            стрКуз.Факт = Номенкл.Родитель.Строки.Найти(справочники.Номенклатура.НайтиПоНаименованию(стрКуз.наименование),"Номенклатура").КоличествоОборот;
          иначе
            стрКуз.Факт = 0;
              конецЕсли;
         иначе
         конецЕсли;
          иначе
        конецесли;
       иначе    ///группа  ТУТ ВСЕ ПРАВИЛЬНО У МЕНЯ РАБОТАЕТ
         Номенкл = ВыборкаФакт.Строки.Найти(стрКуз.Наименование,"НоменклатураРодитель");
         Если Номенкл <> неопределено тогда
           если Номенкл.КоличествоОборот >0 тогда
           стрКуз.Факт = Номенкл.КоличествоОборот;
         иначе
           стрКуз.Факт = 0;
           конецЕсли;
         конецЕсли;
       конецЕсли;
       конеццикла;
    --- Объединение сообщений, 16 мар 2016 ---
    [​IMG]
    Последнее редактирование модератором: 16 мар 2016
Похожие темы
  1. TerANik
    Ответов:
    13
    Просмотров:
    506
Загрузка...

Поделиться этой страницей