Имя: Пароль:
1C
1С v8
v8: Итоги по периодам в запросе
0 Sanya ZH
 
02.09.11
15:13
Здравствуйте, помогите разобраться, почему в отчете при выборе разных группировок по периоду выводятся разные итоги, уже сломал всю голову.
1 Sanya ZH
 
02.09.11
15:16
ВЫБРАТЬ
   СУММА(ЕСТЬNULL(ТаблицаРегистра.Стоимость, 0)) КАК Стоимость,
   СУММА(ТаблицаРегистраСредняяСебестоимость.Стоимость) КАК СредняяСебестоимость,
   СпрНоменклатура.Ссылка КАК Номенклатура,
   ТаблицаДат.Период КАК Период,
   НАЧАЛОПЕРИОДА(ТаблицаДат.Период, ДЕНЬ) КАК ПериодДень,
   НАЧАЛОПЕРИОДА(ТаблицаДат.Период, МЕСЯЦ) КАК ПериодМесяц
{ВЫБРАТЬ
   СпрНоменклатура.Ссылка КАК Номенклатура,
   (НАЧАЛОПЕРИОДА(ТаблицаДат.Период, ДЕНЬ)) КАК ПериодДень,
   (НАЧАЛОПЕРИОДА(ТаблицаДат.Период, МЕСЯЦ)) КАК ПериодМесяц}
ИЗ
   Справочник.Номенклатура КАК СпрНоменклатура
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ДОБАВИТЬКДАТЕ(&ДатаНач, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период,
           aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d КАК НомерДняИзДиапазона
       ИЗ
           (ВЫБРАТЬ
               0 КАК a
           
           ОБЪЕДИНИТЬ
           
           ВЫБРАТЬ
               1
           
           ОБЪЕДИНИТЬ
           
           ВЫБРАТЬ
               2
           
           ОБЪЕДИНИТЬ
           
           ВЫБРАТЬ
               3
           
           ОБЪЕДИНИТЬ
           
           ВЫБРАТЬ
               4
           
           ОБЪЕДИНИТЬ
           
           ВЫБРАТЬ
               5
           
           ОБЪЕДИНИТЬ
           
           ВЫБРАТЬ
               6
           
           ОБЪЕДИНИТЬ
           
           ВЫБРАТЬ
               7
           
           ОБЪЕДИНИТЬ
           
           ВЫБРАТЬ
               8
           
           ОБЪЕДИНИТЬ
           
           ВЫБРАТЬ
               9) КАК aa
               ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                   0 КАК b
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   1
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   2
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   3
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   4
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   5
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   6
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   7
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   8
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   9) КАК bb
               ПО (ИСТИНА)
               ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                   0 КАК c
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   1
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   2
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   3
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   4
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   5
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   6
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   7
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   8
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   9) КАК cc
               ПО (ИСТИНА)
               ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                   0 КАК d
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   1
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   2
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   3
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   4
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   5
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   6
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   7
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   8
               
               ОБЪЕДИНИТЬ
               
               ВЫБРАТЬ
                   9) КАК dd
               ПО (ИСТИНА)
       ГДЕ
           aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&ДатаНач, &ДатаКон, ДЕНЬ)) КАК ТаблицаДат
       ПО (ИСТИНА)
       ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ПродажиОборот.СтоимостьОборот КАК Стоимость,
           НАЧАЛОПЕРИОДА(ПродажиОборот.Период, ДЕНЬ) КАК Период,
           ПродажиОборот.Номенклатура КАК Номенклатура,
           ПродажиОборот.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
       ИЗ
           РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, Регистратор, Номенклатура = &Номенклатура) КАК ПродажиОборот
               ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиСебестоимость.Обороты(&ДатаНач, &ДатаКон, Регистратор, Номенклатура = &Номенклатура) КАК ТаблицаРегистраСебестоимость
               ПО ПродажиОборот.Номенклатура = ТаблицаРегистраСебестоимость.Номенклатура
                   И ПродажиОборот.ХарактеристикаНоменклатуры = ТаблицаРегистраСебестоимость.ХарактеристикаНоменклатуры
                   И ПродажиОборот.Регистратор = ТаблицаРегистраСебестоимость.Регистратор
               ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                   СУММА(ЕСТЬNULL(ПродажиСебестоимость.Стоимость, 0)) КАК СтоимостьОборот,
                   ПродажиСебестоимость.Номенклатура КАК Номенклатура,
                   ПродажиСебестоимость.ДокументДвижения КАК ДокументДвижения,
                   ПродажиСебестоимость.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
               ИЗ
                   РегистрНакопления.ПродажиСебестоимость КАК ПродажиСебестоимость
               
               СГРУППИРОВАТЬ ПО
                   ПродажиСебестоимость.Номенклатура,
                   ПродажиСебестоимость.ДокументДвижения,
                   ПродажиСебестоимость.ХарактеристикаНоменклатуры) КАК ТаблицаРегистраСебестоимостьКорректировка
               ПО ПродажиОборот.Номенклатура = ТаблицаРегистраСебестоимостьКорректировка.Номенклатура
                   И ПродажиОборот.ХарактеристикаНоменклатуры = ТаблицаРегистраСебестоимостьКорректировка.ХарактеристикаНоменклатуры
                   И ПродажиОборот.Регистратор = ТаблицаРегистраСебестоимостьКорректировка.ДокументДвижения) КАК ТаблицаРегистра
       ПО СпрНоменклатура.Ссылка = ТаблицаРегистра.Номенклатура
           И (ТаблицаДат.Период = ТаблицаРегистра.Период)
       ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           Оборот1.Дата КАК ДатаС,
           МИНИМУМ(ВЫБОР
                   КОГДА Оборот2.Дата ЕСТЬ NULL
                       ТОГДА КОНЕЦПЕРИОДА(&ДатаКон, ДЕНЬ)
                   ИНАЧЕ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(Оборот2.Дата, ДЕНЬ, -1), ДЕНЬ)
               КОНЕЦ) КАК ДатаПо,
           Оборот1.СтоимостьКонечныйОстаток КАК Стоимость,
           Оборот1.Номенклатура КАК Номенклатура,
           Оборот1.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
       ИЗ
           (ВЫБРАТЬ
               ПартииТоваровНаСкладах.Период КАК Дата,
               ПартииТоваровНаСкладах.СтоимостьКонечныйОстаток КАК СтоимостьКонечныйОстаток,
               ПартииТоваровНаСкладах.Номенклатура КАК Номенклатура,
               ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
           ИЗ
               РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, ДЕНЬ, , Номенклатура = &Номенклатура) КАК ПартииТоваровНаСкладах) КАК Оборот1
               ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                   ПартииТоваровНаСкладах.Период КАК Дата,
                   ПартииТоваровНаСкладах.Номенклатура КАК Номенклатура,
                   ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
               ИЗ
                   РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, ДЕНЬ, , Номенклатура = &Номенклатура) КАК ПартииТоваровНаСкладах) КАК Оборот2
               ПО Оборот1.Дата < Оборот2.Дата
                   И Оборот1.Номенклатура = Оборот2.Номенклатура
                   И Оборот1.ХарактеристикаНоменклатуры = Оборот2.ХарактеристикаНоменклатуры
       
       СГРУППИРОВАТЬ ПО
           Оборот1.Дата,
           Оборот1.СтоимостьКонечныйОстаток,
           Оборот1.Номенклатура,
           Оборот1.ХарактеристикаНоменклатуры) КАК ТаблицаРегистраСредняяСебестоимость
       ПО СпрНоменклатура.Ссылка = ТаблицаРегистраСредняяСебестоимость.Номенклатура
           И (ТаблицаДат.Период МЕЖДУ ТаблицаРегистраСредняяСебестоимость.ДатаС И ТаблицаРегистраСредняяСебестоимость.ДатаПо)
ГДЕ
   СпрНоменклатура.Ссылка = &Номенклатура
{ГДЕ
   СпрНоменклатура.Ссылка КАК Номенклатура}

СГРУППИРОВАТЬ ПО
   СпрНоменклатура.Ссылка,
   ТаблицаДат.Период
{УПОРЯДОЧИТЬ ПО
   СпрНоменклатура.Ссылка КАК Номенклатура}
ИТОГИ
   СУММА(Стоимость),
   СУММА(СредняяСебестоимость)
ПО
   ОБЩИЕ,
   Номенклатура,
   ПериодМесяц КАК ПериодМесяц
{ИТОГИ ПО
   Номенклатура.* КАК Номенклатура,
   (НАЧАЛОПЕРИОДА(ТаблицаДат.Период, ДЕНЬ)) КАК ПериодДень,
   (НАЧАЛОПЕРИОДА(ТаблицаДат.Период, МЕСЯЦ)) КАК ПериодМесяц}
АВТОУПОРЯДОЧИВАНИЕ
2 Sanya ZH
 
02.09.11
15:23
Если в отчете присутствует группировка по дням, то данные выводятся правильные, стоит оставить только группировку по месяцам, показывает какую-то ерунду.
3 SaM58
 
02.09.11
15:24
что это???
4 kible
 
02.09.11
15:25
Читай ИТС. И периодичность "Авто" поставь.
5 Sanya ZH
 
02.09.11
15:32
Мне нужно посчитать за каждый день оборот по регистру продажи и на конец каждого дня остаток по партиям, т.е в итого получить следующую формулу:
(валовая прибыль за период)/(средняя себестоимость за период), где средняя себестоимость = (остаток на каждый день)/(число дней за период)

а период может быть любой, кратный месяцам, кварталам и т.д.
6 Sanya ZH
 
02.09.11
15:39
Если в консоле запросов запустить запрос, как он есть, то все считает правильно (только я еще не сделал деление на число дней в периоде), а если убрать из группировки ПериодДень и убрать Период из выбранных полей, т.е. сделать шруппировку по месяцам, то суммы средней себестоимости вообще не те.
7 Sanya ZH
 
02.09.11
16:09
Смотрю отчет с группировкой по месяцам за март: сумма "средней" себестоимости стоит 24591,40, нажимаешь на расшифровку этой суммы по дням сумма в итогах 762333,40
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн