Имя: Пароль:
1C
 
Постабработка отчета СКД
0 SnowBarsCloud
 
10.12.22
17:02
Добрый день, коллеги. Нужен совет, может можно сделать вовсе как то легче, а я заморачиваюсь

Есть отчет, который показывает сколько было авансов в разрезе заказов и документов оплат. Отчет показывает остатки на начало и сумму всех авансов после даты отчета (не путать с остатком на конец)

Структура отчета СКД следующего плана
https://ibb.co/18Z7788

Запрос если нужен будет внизу

Сейчас при выводе, отчет выглядит так, где не нужен разрез заказов (например в остатках в кассе на начало дня) или где заказа вовсе нет (например при выемке авансов из кассы, используется для передачи денег поставщику) я ставлю вместо заказа или документов оплаты "<Пустая аналитика>". Эти строки надо убрать
Отчет выглядит вот так
https://ibb.co/Q9gBst1

ТЕПЕРЬ СОБСТВЕННО СУТЬ ВОПРОСА
Если я делаю это несколькоми группировками, ставя условие в группировке СКД, то у меня между группировками получаются разрывы, это не выглядит как сплошной отчет (может как то можно убрать разрывы, не используя постабработку, почему расскажу ниже)

Если просто ставлю в текущей структуре условия, то у меня бывают ситуации, как на скрине ниже, что 2 уровень надо скрыть, а 3 оставить. При условии скрывается группировка и ее вложенные
https://ibb.co/Q9gBst1 (часть внесение денег)

Если я делаю это постабраткой, то у меня съезжают группировки (плюсики и минусики)
Скрин как съежают данные
https://ibb.co/mHLSW6Z
Код постобработки
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    КомпоновщикМакета             = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки             = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
    ПроцессорКомпоновкиДанных     = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
    ПроцессорВывода             = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
    
    //УДАЛИМ СТРОКИ С ПУСТЫМИ АНАЛИТИКАМИ
    КонструкцияПоиска     = "<Пустая аналитика>";
    НайденнаяОбласть     = ДокументРезультат.НайтиТекст(КонструкцияПоиска);
    
    Пока НайденнаяОбласть <> Неопределено Цикл
        
        //УДАЛЯЕМ ПОЛНОСТЬЮ СТРОКУ
        УдаляемаяОбласть = ДокументРезультат.Область(НайденнаяОбласть.Верх, 1, НайденнаяОбласть.Низ, ДокументРезультат.ШиринаТаблицы);
        //УдаляемаяОбласть.АвтоВысотаСтроки     = Ложь;
        //УдаляемаяОбласть.ВысотаСтроки         = 0;
        ДокументРезультат.УдалитьОбласть(УдаляемаяОбласть, ТипСмещенияТабличногоДокумента.ПоВертикали);
        
        НайденнаяОбласть     = ДокументРезультат.НайтиТекст(КонструкцияПоиска, УдаляемаяОбласть);
    
    КонецЦикла;
    
КонецПроцедуры
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Пробовал так же использовать свойство видимость и высота строки, но не отрабатывает

Может есть другой способ или что-то в этих способах делаю не так. Спасибо заранее за ответы:)
1 SnowBarsCloud
 
10.12.22
17:03
Запрос

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

СГРУППИРОВАТЬ ПО
    ОплатаСчетовИЗаказовОбороты.СчетНаОплату,
    ОплатаСчетовИЗаказовОбороты.Регистратор
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Предоплат.Заказ КАК Заказ,
    СУММА(Предоплат.Предоплата) КАК Сумма
ПОМЕСТИТЬ ОплатыВРазрезеЗаказа
ИЗ
    Предоплат КАК Предоплат

СГРУППИРОВАТЬ ПО
    Предоплат.Заказ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЕСТЬNULL(СУММА(ВЫБОР
                КОГДА ДенежныеСредстваВКассахККМ.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
                    ТОГДА ДенежныеСредстваВКассахККМ.Сумма
                ИНАЧЕ -ДенежныеСредстваВКассахККМ.Сумма
            КОНЕЦ), 0) КАК Сумма,
    ДенежныеСредстваВКассахККМ.Регистратор.Заказ КАК Заказ
ПОМЕСТИТЬ ИспользованоПредоплат
ИЗ
    РегистрНакопления.ДенежныеСредстваВКассахККМ КАК ДенежныеСредстваВКассахККМ
ГДЕ
    ДенежныеСредстваВКассахККМ.СодержаниеПроводки = "Зачет предоплаты"

СГРУППИРОВАТЬ ПО
    ДенежныеСредстваВКассахККМ.Регистратор.Заказ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ОплатыВРазрезеЗаказа.Заказ КАК Заказ
ПОМЕСТИТЬ ЛишниеЗаказы
ИЗ
    ИспользованоПредоплат КАК ИспользованоПредоплат
        ЛЕВОЕ СОЕДИНЕНИЕ ОплатыВРазрезеЗаказа КАК ОплатыВРазрезеЗаказа
        ПО ИспользованоПредоплат.Заказ = ОплатыВРазрезеЗаказа.Заказ
ГДЕ
    ИспользованоПредоплат.Сумма + ОплатыВРазрезеЗаказа.Сумма <= 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    2 КАК ВидОперации,
    "Внесено предоплат" КАК НазваниеОперации,
    Предоплат.Заказ КАК Заказ,
    Предоплат.ДокументПлатежа КАК ДокументПлатежа,
    Предоплат.Предоплата КАК Предоплата
ПОМЕСТИТЬ СписокАвансовПолный
ИЗ
    Предоплат КАК Предоплат
ГДЕ
    НЕ Предоплат.Заказ В
                (ВЫБРАТЬ
                    ЛишниеЗаказы.Заказ
                ИЗ
                    ЛишниеЗаказы)

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

ВЫБРАТЬ
    3,
    "Внесение денег в кассу",
    "",
    ДенежныеСредства.Регистратор,
    ДенежныеСредства.Сумма
ИЗ
    РегистрНакопления.ДенежныеСредства КАК ДенежныеСредства
ГДЕ
    ДенежныеСредства.Статья = ЗНАЧЕНИЕ(Справочник.СтатьиДвиженияДенежныхСредств.ЛичныеСредстваПредпринимателя)
    И ДенежныеСредства.Регистратор ССЫЛКА Документ.ПоступлениеВКассу
    И ДенежныеСредства.Регистратор.Касса = ВЫРАЗИТЬ(&КассаККМ КАК Справочник.КассыККМ).КассаАвансов
    И ДенежныеСредства.Период >= ДАТАВРЕМЯ(2022, 12, 1)
        
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    4,
    "Выемка денег из кассы",
    "",
    ДенежныеСредства.Регистратор,
    -ДенежныеСредства.Сумма
ИЗ
    РегистрНакопления.ДенежныеСредства КАК ДенежныеСредства
ГДЕ
    ДенежныеСредства.Статья = ЗНАЧЕНИЕ(Справочник.СтатьиДвиженияДенежныхСредств.ЛичныеСредстваПредпринимателя)
    И ДенежныеСредства.Регистратор ССЫЛКА Документ.РасходИзКассы
    И ДенежныеСредства.Регистратор.Касса = ВЫРАЗИТЬ(&КассаККМ КАК Справочник.КассыККМ).КассаАвансов
    И ДенежныеСредства.Период >= ДАТАВРЕМЯ(2022, 1, 1)
    
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    5,
    "Зачтено предоплат",
    ЧекиИспользованныеПредоплаты.Ссылка,
    ЧекиИспользованныеПредоплаты.Документ,
    ЧекиИспользованныеПредоплаты.СуммаРасчетов
ИЗ
    Документ.ЧекККМ.Предоплата КАК ЧекиИспользованныеПредоплаты
ГДЕ
    ЧекиИспользованныеПредоплаты.Ссылка.Заказ В
            (ВЫБРАТЬ
                Предоплат.Заказ
            ИЗ
                Предоплат)
    И ЧекиИспользованныеПредоплаты.Документ В
            (ВЫБРАТЬ
                Предоплат.ДокументПлатежа
            ИЗ
                Предоплат)
    И ЧекиИспользованныеПредоплаты.Документ ССЫЛКА Документ.ПоступлениеВКассу
    
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    5,
    "Зачтено предоплат",
    ЧекиИспользованныеПредоплаты.Ссылка,
    ЧекиИспользованныеПредоплаты.Документ,
    -ЧекиИспользованныеПредоплаты.СуммаРасчетов
ИЗ
    Документ.ЧекККМВозврат.Предоплата КАК ЧекиИспользованныеПредоплаты
ГДЕ
    ЧекиИспользованныеПредоплаты.Ссылка.Заказ В
            (ВЫБРАТЬ
                Предоплат.Заказ
            ИЗ
                Предоплат)
    И ЧекиИспользованныеПредоплаты.Документ В
            (ВЫБРАТЬ
                Предоплат.ДокументПлатежа
            ИЗ
                Предоплат)
    И ЧекиИспользованныеПредоплаты.Документ ССЫЛКА Документ.ПоступлениеВКассу
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    1 КАК ВидОперации,
    "Остаток на начало периода" КАК НазваниеОперации,
    "" КАК Заказ,
    "" КАК ДокументПлатежа,
    ВЫБОР
        КОГДА СписокАвансовПолный.ДокументПлатежа ССЫЛКА Документ.ПоступлениеВКассу
                ИЛИ СписокАвансовПолный.ДокументПлатежа ССЫЛКА Документ.РасходИзКассы
            ТОГДА СписокАвансовПолный.Предоплата
        ИНАЧЕ 0
    КОНЕЦ КАК Наличные,
    ВЫБОР
        КОГДА СписокАвансовПолный.ДокументПлатежа ССЫЛКА Документ.ПоступлениеНаСчет
                ИЛИ СписокАвансовПолный.ДокументПлатежа ССЫЛКА Документ.РасходСоСчета
            ТОГДА СписокАвансовПолный.Предоплата
        ИНАЧЕ 0
    КОНЕЦ КАК Счета,
    ВЫБОР
        КОГДА СписокАвансовПолный.ДокументПлатежа ССЫЛКА Документ.ОперацияПоПлатежнымКартам
            ТОГДА СписокАвансовПолный.Предоплата
        ИНАЧЕ 0
    КОНЕЦ КАК ПлатежныеКарты
ИЗ
    СписокАвансовПолный КАК СписокАвансовПолный
ГДЕ
    СписокАвансовПолный.ДокументПлатежа.Дата < &ПериодОтчетаДатаНачала

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

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

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

ВЫБРАТЬ
    6,
    "Остаток на конец периода",
    "",
    "",
    ВЫБОР
        КОГДА СписокАвансовПолный.ДокументПлатежа ССЫЛКА Документ.ПоступлениеВКассу
                ИЛИ СписокАвансовПолный.ДокументПлатежа ССЫЛКА Документ.РасходИзКассы
            ТОГДА СписокАвансовПолный.Предоплата
        ИНАЧЕ 0
    КОНЕЦ,
    ВЫБОР
        КОГДА СписокАвансовПолный.ДокументПлатежа ССЫЛКА Документ.ПоступлениеНаСчет
                ИЛИ СписокАвансовПолный.ДокументПлатежа ССЫЛКА Документ.РасходСоСчета
            ТОГДА СписокАвансовПолный.Предоплата
        ИНАЧЕ 0
    КОНЕЦ,
    ВЫБОР
        КОГДА СписокАвансовПолный.ДокументПлатежа ССЫЛКА Документ.ОперацияПоПлатежнымКартам
            ТОГДА СписокАвансовПолный.Предоплата
        ИНАЧЕ 0
    КОНЕЦ
ИЗ
    СписокАвансовПолный КАК СписокАвансовПолный
ГДЕ
    СписокАвансовПолный.ДокументПлатежа.Дата > &ПериодОтчетаДатаОкончания
2 SnowBarsCloud
 
10.12.22
17:11
Меня бы устроила постабработка, но как поправить плюсики и минусики? Как программно обновить их?