8.х Программно установить отбор в отчете на СКД

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Svb, 17 фев 2015.

  1. TopicStarter Overlay
    Svb
    Offline

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

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    Добрый день.
    8.2, УТ, Тонкий клиент.
    Как установить программно отбор в отчете выполненном на СКД. Именно в типовом отчете сделанном, а не просто в СКД (это я знаю как).
    Итак, один отчет (назову его "Баланс"), в нем есть строчка "Дебиторская задолженность". Щелчок по этой строчке должен открывать типовой отчет (в УТ он есть) "РасчетыСПартнерами" с параметрами "дата отчета", с определенным ключом варианта, и с отбором "ДолгКонечныйОстаток>0". С параметром и ключем вопросов нет. Отбор установить не получается.
    Вот сюда надо отбор:
    Снимок.JPG
    Вот сделал тестовую обработку.
    По щелчку кнопки должен формироваться отчет, в который должны попадать только долги клиентов.
    Объясните, пожалуйста, технологию.

    Вложения:

    Последнее редактирование: 17 фев 2015
  2. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    А не проще тогда взять, сохранить настройку(вариант) в xml, а при шелчке по кнопке открывать этот отчет изагружать туда данную настройку. При необходимости данный файлик xml, можно прямо в макет вашего отчета Баланс загнать.

    Т.е я это вижу так. берете ваш типовой отчет в УТ - делае в нем нужные настройки, сохраняете вариант в файл.
    этот фал как макет с двоичными анными цепляете к вашему отчету Баланс.
    В балансе при нажатии на кнопку получаете этот файл, запускаете отчет и грузите в него настройку и все
    Svb нравится это.
  3. TopicStarter Overlay
    Svb
    Offline

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

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    Нет, к сожалению не проще. Статей в балансе, то много. Это для каждой свой файлик xml. Сегодня босс хочет видеть отбор "ДолгКонечныйОстаток>0". А завтра скажет, что ему не интересны долги меньше 5 рублей.
    Draco, спасибо за вариант, но вопрос еще открыт.

    Вот так, кстати работает, но не то что нужно: нельзя сделать отбор с видом сравнение "больше"
    Код:
        Отбор = Новый Структура("ДолгКонечныйОстаток", 200);
        ПараметрыФормы = Новый Структура("СформироватьПриОткрытии, Отбор, КлючВарианта", Истина, Отбор, "РасчетыСКлиентами");
        ОткрытьФорму("Отчет.РасчетыСПартнерами.Форма", ПараметрыФормы);   
    
    Так это выглядит на форме:
    Снимок.JPG
    --- Объединение сообщений, 17 фев 2015 ---
    Можно, кстати устанавливать отбор по нескольким значениям:
    Код:
            Отбор = Новый Структура("ДолгКонечныйОстаток, ДолгКонечныйОстаток", 200, 100);
            ПараметрыФормы = Новый Структура("СформироватьПриОткрытии, Отбор, КлючВарианта", Истина, Отбор, "РасчетыСКлиентами");
            ОткрытьФорму("Отчет.РасчетыСПартнерами.Форма", ПараметрыФормы);
    Но мне нужно не это.
  4. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Ну опять же. меньше 5 рублей, вы же все равно будете заходить в код и менять.Аналлогично пересохранили XML все.
    Тут просто смотрите в чем особенность СКД, та же самая вкладка ОТБОР в конфигураторе и в пользовательком режиме - для СКД это разные объекты, и когда Вы открываете отчет и устанавливаете, то это Вы работает с пользовательской и с Вариантом отчета.

    смотритет я бы еще вот тут

    Код:
    Отчет=Отчеты.РасчетыСПартнерами.Создать();
       
        КомпоновщикНастроек=Отчет.КомпоновщикНастроек;
       
        ЭлементыОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы;
       
        НовыйЭлемент = ЭлементыОтбора.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        НовыйЭлемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДолгКонечныйОстаток");
        НовыйЭлемент.ВидСравнения            = ВидСравненияКомпоновкиДанных.Больше;
        НовыйЭлемент.ПравоеЗначение        = 0;
        НовыйЭлемент.Использование            = Истина;
    
        Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(КомпоновщикНастроек.Настройки);
    Svb нравится это.
  5. TopicStarter Overlay
    Svb
    Offline

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

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    Draco, спасибо. Попробовал Ваш вариант, рабочий, но с некоторыми "но" (смотрите приложенную обработку, Вариант №3). Этот вариант так же предложил в чате nomad_irk.
    Думаю, что можно доработать этот вариант, как-то, чтобы избежать этих "но".
    П.С.
    В итоге пока самым подходящим остается "вариант 2". Он кажется мне самым не оптимальным с точки зрения кода, зато не нашел в нем огрехов. Этот вариант кто-то из "стариков" форума предлагал давно.
    Снимок.JPG
    Если прокомментируете варианты, буду благодарен. Файл обработки приложил

    Вложения:

  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.573
    Симпатии:
    717
    Баллы:
    204
    все 4 варианта - суть вариации на тему
    Код:
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    .......
    КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
    :)

    А уж каким образом ты будешь задавать сами значения настроек - дело, так сказать, лично каждого программиста и уж тем более, каким образом взаимодействовать с формой отчета, чтобы на ней отображалось пользователю все, как он хочет....
  7. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Как я Вам уже писал у СКД есть разные виды настроек, про отбор писал и что это два разных значения так вот Вы сейчас работаете с Настройки - это именно то что в конфигураторе, а есть

    КомпоновщикНастроекКомпоновкиДанных (DataCompositionSettingsComposer)
    Свойства:
    Настройки (Settings)
    ПользовательскиеНастройки (UserSettings)
    ФиксированныеНастройки (FixedSettings)

    Попробуйте через Пользовательские Настройки. там по сути дела надо будет КомпоновщикНастроек.Настройки заменить на КомпоновщикНастроек.ПоьзовательскиеНастройки

    Так вот пользовательские настройки - это именно когда вы делаете изменить вариант и т.д.

    В чем разница.
    Смотрите у Вас у СКД есть в конфигураторе Основная настройка, а в пользовательском режиме есть Варианты настроек их там пользователь может наделать кучу, ну в конфигураторе вы то же сами кучу можете сделатьто же, не суть.
    так вот Настройки - отвечает за настройки СКД в конфигураторе и меняет по сути структуру отчета, а Пользовательские - это пользовательские - попробуйте через них. Про фиксированные пока не буду ничего говорить :)
    --- Объединение сообщений, 17 фев 2015 ---
    Я код только сейчас посмотрел, во втором вы как раз и работает с пользовательскими
    но там есть вот это
    ПараметрОтбора = ФормаОтчетаНастроек.Отчет.КомпоновщикНастроек.Настройки.Отбор;
    и вот это
    ЭлементОтбора = ФормаОтчетаНастроек.Отчет.КомпоновщикНастроек.Настройки.Отбор.ДоступныеПоляОтбора.Элементы.Найти("ДолгКонечныйОстаток");

    Попробуйте везде с пользовательскими
  8. Bonny
    Offline

    Bonny Опытный в 1С

    Регистрация:
    15 янв 2015
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    Добрый день. У меня везде выскакивает ошибка на "КомпоновщикНастроек = ФормаОтчетаНастроек.Отчет.КомпоновщикНастроек;"

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