Имя: Пароль:
1C
1С v8
1С 8.2. СКД. Отличаются итоги по группировкам.
0 shulkin
 
27.11.14
12:10
Построил отчет в СКД. Отчет рассчитывает доходность продаж. Данные выбираются запросами, используется несколько временных таблиц, вычисляемые поля, и есть расчет ресурсов по разным группировкам разными способами.

При формировании отчета с группировкой самого низкого уровня, по номенклатуре, итоги верные. Верные, потому вручную пересчитывал.

При формировании отчета с группировками более высокого уровня без группировки самого низкого уровня итоги неверные.

Предполагаю что СКД искажает итоги при выборке данных и сворачивании по группировкам, но не могу понять что тому причина.

Подскажите пожалуйста, может кто сталкивался, куда копать?
1 shulkin
 
27.11.14
12:12
Код запроса:

ВЫБРАТЬ
    РасчетыСКлиентамиПоДокументамПрочиеОбороты.РасчетныйДокумент КАК ДокументРеализации,
    СУММА(РасчетыСКлиентамиПоДокументамПрочиеОбороты.СуммаРасход) КАК ОплатаВалюта,
    МАКСИМУМ(РасчетыСКлиентамиПоДокументамПрочиеОбороты.Период) КАК ДатаПоследнейОплатыЗаПериод
ПОМЕСТИТЬ СписокДокументовРеализации
ИЗ
    РегистрНакопления.РасчетыСКлиентамиПоДокументамПрочие.Обороты(
            &НачалоПериода,
            &КонецПериода,
            Регистратор,
            Валюта = &Валюта
                И РасчетныйДокумент ССЫЛКА Документ.ВводДвижений) КАК РасчетыСКлиентамиПоДокументамПрочиеОбороты
ГДЕ
    РасчетыСКлиентамиПоДокументамПрочиеОбороты.Регистратор.ВидРасчетногоДокумента <> ЗНАЧЕНИЕ(Справочник.ВидыРасчетныхДокументов.ВозвратОтПокупателя)
    И РасчетыСКлиентамиПоДокументамПрочиеОбороты.Регистратор.ВидРасчетногоДокумента <> ЗНАЧЕНИЕ(Справочник.ВидыРасчетныхДокументов.ВозвратТоваровОтКлиента)

СГРУППИРОВАТЬ ПО
    РасчетыСКлиентамиПоДокументамПрочиеОбороты.РасчетныйДокумент
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    1 КАК Поле1,
    МИНИМУМ(СписокДокументовРеализации.ДокументРеализации.Дата) КАК ДокументРеализацииДата
ПОМЕСТИТЬ НижняяГраница
ИЗ
    СписокДокументовРеализации КАК СписокДокументовРеализации
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВыручкаПрочихПродажОбороты.Регистратор КАК ДокументРеализации,
    ВЫБОР
        КОГДА ВыручкаПрочихПродажОбороты.Контрагент.СтарыйКонтрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
            ТОГДА ВыручкаПрочихПродажОбороты.Контрагент
        ИНАЧЕ ВыручкаПрочихПродажОбороты.Контрагент.СтарыйКонтрагент
    КОНЕЦ КАК Контрагент,
    СписокДокументовРеализации.ДатаПоследнейОплатыЗаПериод,
    ВыручкаПрочихПродажОбороты.СуммаВыручкиОборот КАК ВыручкаПоДокументу,
    СписокДокументовРеализации.ОплатаВалюта / ВыручкаПрочихПродажОбороты.СуммаВыручкиВалютаОборот КАК КоэффициентОплаты
ПОМЕСТИТЬ РеализацияПоДокументамСКоэффициентамиОплаты
ИЗ
    НижняяГраница КАК НижняяГраница
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ВыручкаПрочихПродаж.Обороты({(ДОБАВИТЬКДАТЕ(&НачалоПериода, ГОД, -100)) КАК Поле2}, &КонецПериода, Регистратор, Валюта = &Валюта) КАК ВыручкаПрочихПродажОбороты
        ПО (ВыручкаПрочихПродажОбороты.Период >= НижняяГраница.ДокументРеализацииДата)
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ СписокДокументовРеализации КАК СписокДокументовРеализации
        ПО (ВыручкаПрочихПродажОбороты.Регистратор = СписокДокументовРеализации.ДокументРеализации)
ГДЕ
    ВыручкаПрочихПродажОбороты.Регистратор.ВозвратПоставщику = ЛОЖЬ

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ВыручкаПрочихПродажОбороты.Регистратор,
    ВЫБОР
        КОГДА ВыручкаПрочихПродажОбороты.Контрагент.СтарыйКонтрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
            ТОГДА ВыручкаПрочихПродажОбороты.Контрагент
        ИНАЧЕ ВыручкаПрочихПродажОбороты.Контрагент.СтарыйКонтрагент
    КОНЕЦ,
    NULL,
    ВыручкаПрочихПродажОбороты.СуммаВыручкиОборот,
    0
ИЗ
    РегистрНакопления.ВыручкаПрочихПродаж.Обороты(&НачалоПериода, &КонецПериода, Регистратор, Валюта = &Валюта) КАК ВыручкаПрочихПродажОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ СписокДокументовРеализации КАК СписокДокументовРеализации
        ПО ВыручкаПрочихПродажОбороты.Регистратор = СписокДокументовРеализации.ДокументРеализации
ГДЕ
    ВыручкаПрочихПродажОбороты.Регистратор.ВозвратПоставщику = ЛОЖЬ
    И СписокДокументовРеализации.ДокументРеализации ЕСТЬ NULL
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ СписокДокументовРеализации
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВыручкаПрочихПродажОбороты.Период КАК ДатаРеализации,
    ВыручкаПрочихПродажОбороты.Организация,
    РеализацияПоДокументамСКоэффициентамиОплаты.Контрагент.Страна КАК Страна,
    РеализацияПоДокументамСКоэффициентамиОплаты.Контрагент КАК Контрагент,
    РеализацияПоДокументамСКоэффициентамиОплаты.Контрагент.ТорговыйПредставитель КАК ТорговыйПредставитель,
    ВыручкаПрочихПродажОбороты.Склад,
    ВыручкаПрочихПродажОбороты.Номенклатура.ХарактеристикаСорт КАК Сорт,
    ВыручкаПрочихПродажОбороты.Номенклатура.ВидНоменклатуры.ГруппаПродукции КАК ГруппаПродукции,
    ВыручкаПрочихПродажОбороты.Номенклатура.ХарактеристикаМодель.ГруппаОсновнойНоменклатуры КАК ГруппаОсновнойНоменклатуры,
    ВыручкаПрочихПродажОбороты.Номенклатура.ВидНоменклатуры КАК Вид,
    ВыручкаПрочихПродажОбороты.Номенклатура.ХарактеристикаМодель КАК Модель,
    ВыручкаПрочихПродажОбороты.Номенклатура.ХарактеристикаРазмер КАК Размер,
    ВыручкаПрочихПродажОбороты.Номенклатура.ХарактеристикаЦвет КАК Цвет,
    ВыручкаПрочихПродажОбороты.Номенклатура.ХарактеристикаРисунок КАК Рисунок,
    ВыручкаПрочихПродажОбороты.Регистратор КАК ДокументРеализации,
    РеализацияПоДокументамСКоэффициентамиОплаты.ДатаПоследнейОплатыЗаПериод,
    ВыручкаПрочихПродажОбороты.Номенклатура,
    ВыручкаПрочихПродажОбороты.КоличествоОборот КАК Количество,
    ВыручкаПрочихПродажОбороты.СтоимостьОборот КАК СтоимостьРуб,
    ВыручкаПрочихПродажОбороты.СуммаВыручкиОборот КАК СуммаСНДСРуб,
    ВыручкаПрочихПродажОбороты.СуммаВыручкиВалютаОборот КАК СуммаВыручкиВалюта,
    ВыручкаПрочихПродажОбороты.СуммаВыручкиДляРентабельностиВалютаОборот КАК СуммаВыручкиПоСебестоимостиВалюта,
    ВыручкаПрочихПродажОбороты.СебестоимостьВалютаОборот КАК СебестоимостьВалюта,
    ВыручкаПрочихПродажОбороты.СебестоимостьВалютаОборот * РеализацияПоДокументамСКоэффициентамиОплаты.КоэффициентОплаты КАК СебестоимостьПоОплатеВалюта,
    ВыручкаПрочихПродажОбороты.СуммаВыручкиВалютаОборот * РеализацияПоДокументамСКоэффициентамиОплаты.КоэффициентОплаты КАК ОплатаВалюта,
    0 КАК ДолгВалюта
ИЗ
    НижняяГраница КАК НижняяГраница
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ВыручкаПрочихПродаж.Обороты({(ДОБАВИТЬКДАТЕ(&НачалоПериода, ГОД, -100)) КАК Поле2}, &КонецПериода, Регистратор, Валюта = &Валюта) КАК ВыручкаПрочихПродажОбороты
        ПО (ВыручкаПрочихПродажОбороты.Период >= НижняяГраница.ДокументРеализацииДата)
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РеализацияПоДокументамСКоэффициентамиОплаты КАК РеализацияПоДокументамСКоэффициентамиОплаты
        ПО (РеализацияПоДокументамСКоэффициентамиОплаты.ДокументРеализации = ВыручкаПрочихПродажОбороты.Регистратор)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    РасчетыСКлиентамиПоДокументамПрочиеОстатки.РасчетныйДокумент.Дата,
    РасчетыСКлиентамиПоДокументамПрочиеОстатки.Организация,
    РасчетыСКлиентамиПоДокументамПрочиеОстатки.Контрагент.Страна,
    ВЫБОР
        КОГДА РасчетыСКлиентамиПоДокументамПрочиеОстатки.Контрагент.СтарыйКонтрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
            ТОГДА РасчетыСКлиентамиПоДокументамПрочиеОстатки.Контрагент
        ИНАЧЕ РасчетыСКлиентамиПоДокументамПрочиеОстатки.Контрагент.СтарыйКонтрагент
    КОНЕЦ,
    ВЫБОР
        КОГДА РасчетыСКлиентамиПоДокументамПрочиеОстатки.Контрагент.СтарыйКонтрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
            ТОГДА РасчетыСКлиентамиПоДокументамПрочиеОстатки.Контрагент.ТорговыйПредставитель
        ИНАЧЕ РасчетыСКлиентамиПоДокументамПрочиеОстатки.Контрагент.СтарыйКонтрагент.ТорговыйПредставитель
    КОНЕЦ,
    РасчетыСКлиентамиПоДокументамПрочиеОстатки.РасчетныйДокумент.Склад,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    РасчетыСКлиентамиПоДокументамПрочиеОстатки.РасчетныйДокумент,
    РеализацияПоДокументамСКоэффициентамиОплаты.ДатаПоследнейОплатыЗаПериод,
    NULL,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    РасчетыСКлиентамиПоДокументамПрочиеОстатки.СуммаОстаток
ИЗ
    РегистрНакопления.РасчетыСКлиентамиПоДокументамПрочие.Остатки(&Период, Валюта = &Валюта) КАК РасчетыСКлиентамиПоДокументамПрочиеОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ РеализацияПоДокументамСКоэффициентамиОплаты КАК РеализацияПоДокументамСКоэффициентамиОплаты
        ПО РасчетыСКлиентамиПоДокументамПрочиеОстатки.РасчетныйДокумент = РеализацияПоДокументамСКоэффициентамиОплаты.ДокументРеализации
ГДЕ
    НЕ(РасчетыСКлиентамиПоДокументамПрочиеОстатки.СуммаОстаток МЕЖДУ -1 И 1)