8.х Отбор в СКД по итоговым значениям группировки

Тема в разделе "Система компоновки данных (СКД)", создана пользователем Svb, 5 мар 2015.

  1. TopicStarter Overlay
    Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    Добрый день.
    Конфигурация УТ, НЕ типовая.
    Есть отчет на СКД (схему прикладываю), данные берет из 4-х регистров накопления: РасчетыСКлиентами, РасчетыСПоставщиками, ДополнительныеРасчетыСКлиентами, ДополнительныеРасчетыСПоставщиками.
    Допустим,
    РасчетыСКлиентами возвращает данные "Контрагент1.... +1500р." (контрагент1 должен нам 1500р. как клиент);
    РасчетыСПоставщиками возвращает данные "Контрагент1.... -1000р." (контрагент1 должны мы 1000р. как поставщику)
    Если никаких отборов нет, отчет выводит правильный результат: "Контрагент1....+500р."
    Теперь я хочу видеть в отчете только долги (итоговые, по обоим регистрам). Накладываю отбор: "Сумма>0". Должен получить в отчете тот же результат: "Контрагент1....+500р.". Но получаю "Контрагент1....+1500р.", т.е. отбор накладывается до того как записи из разных регистров суммировались. Что, в моем случае, не правильно.
    Как быть?

    Вложения:

  2. TopicStarter Overlay
    Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    Немного разобрался. Надо отбор "Сумма>0" наложить не на весь отчет в целом, а на группировку "Контрагент".
    Но в моем случае отбор накладывать программно, а программно я умею накладывать отбор только на весь отчет:
    Код:
                ЭлОтбора = Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
                ПолеКД                        = Новый ПолеКомпоновкиДанных(УстанавливаемыйОтбор.ЛевоеЗначение);
                ЭлОтбора.ВидСравнения         = УстанавливаемыйОтбор.ВидСравнения;
                ЭлОтбора.ЛевоеЗначение        = ПолеКД;
                ЭлОтбора.Использование        = Истина;
                ЭлОтбора.ПравоеЗначение        = УстанавливаемыйОтбор.ПравоеЗначение;
    
    Вобщем теперь задача такая: либо программно научиться накладывать отбор на группировку отчета, либо поправить отчет так, чтобы он правильно выводил данные и с отбором налоденным на весь отчет. :rolleyes:
    Подскажите чего-нибудь?
  3. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    программно наложить отбор на группировку, имхо проще и правильнее в данном конкретном случае.
  4. TopicStarter Overlay
    Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    А как указать на что отбор накладывать? Это вообще возможно?
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    В КомпоновщикНастроек.ПолучитьНастройки() много чего есть и много чего можно настроить программным способом.
  6. TopicStarter Overlay
    Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    Несомненно :) Но пока не получается.

    Вот тут предлагают сделать следующим образом, но у меня реквизит "отбор" отсутствует "НовыйЭлементОтбора = КомпоновщикНастроек.Настройки.Структура[0].Отбор"

    http://1c-pro.ru/threads/programmno-ustanovit-otbor-v-skd.13221/
    Код:
    НовыйЭлементОтбора = КомпоновщикНастроек.Настройки.Структура[0].Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    НовыйЭлементОтбора.ЛевоеЗначение = КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных("Организация")).Поле;
    НовыйЭлементОтбора.ПравоеЗначение = Организация;
    
  7. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    А в структуре вообще что присутствует? Должны быть группировки, если они определены в самой СКД.
    Svb нравится это.
  8. TopicStarter Overlay
    Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    nomad_irk, спасибо. Получилось вот так:
    Код:
    Для Каждого ЭлементСтруктурыНастроек Из Настройки.Структура Цикл
                     Если ТипЗнч(ЭлементСтруктурыНастроек)= Тип("ТаблицаКомпоновкиДанных") Тогда
                        СтрокиТаблицыКомпановкиДанных = ЭлементСтруктурыНастроек.Строки;
                        Для Каждого СтрокаТаблицыКомпановкиДанных из СтрокиТаблицыКомпановкиДанных Цикл
                            Если ТипЗнч(СтрокаТаблицыКомпановкиДанных) = Тип("ГруппировкаТаблицыКомпоновкиДанных")
                                И НаименованиеГруппировки = Строка(СтрокаТаблицыКомпановкиДанных.ПоляГруппировки) Тогда
                              
                                УстановитьОтбор(СтрокаТаблицыКомпановкиДанных.Отбор, УстанавливаемыйОтбор);
                                ОтборУстановлен = Истина;
              
                            КонецЕсли;
                          
                        КонецЦикла;
                       
                     КонецЕсли;
                КонецЦикла;[/LEFT]
    
    Код:
    Процедура УстановитьОтбор(Отбор, УстанавливаемыйОтбор)
       
        ЭлОтбора = Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ПолеКД                        = Новый ПолеКомпоновкиДанных(УстанавливаемыйОтбор.ЛевоеЗначение);
        ЭлОтбора.ВидСравнения         = УстанавливаемыйОтбор.ВидСравнения;
        ЭлОтбора.ЛевоеЗначение        = ПолеКД;
        ЭлОтбора.Использование        = Истина;
        ЭлОтбора.ПравоеЗначение        = УстанавливаемыйОтбор.ПравоеЗначение;
           
    КонецПроцедуры
    где Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

    Наверняка, не для всех отчетов на СКД работать будет. Но мне пока достаточно.​

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