Вход | Регистрация
 

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

СКД. Получить программно представление отбора
Я
   SeiOkami
 
26.07.21 - 13:45
Есть элемент отбора.
Если у него нет представления, то платформа его "генерит" при выводе в результат отчета.
Например:

ЦФО Получателя Равно "Армавир"

Есть ли метод платформы, который позволит это представление получить программно?
   Smallrat
 
1 - 26.07.21 - 14:00
Строка(ЭлементОтбора)
   SeiOkami
 
2 - 26.07.21 - 14:05
(1), если бы все было так просто)

Строка() приводит к такой строке: "ЭлементОтбораКомпоновкиДанных"
   SeiOkami
 
3 - 26.07.21 - 14:07
Пока сделал так, но костыльно. И нормально обработает только самые примитивные варианты. Но хоть как-то )
Функция ПредставлениеОтбораКомпоновки(ЭлементОтбора)

    ПредставлениеОтбора = ЭлементОтбора.Представление;
    Если ЗначениеЗаполнено(ПредставлениеОтбора) Тогда
        Возврат ПредставлениеОтбора;
    КонецЕсли;
    
    ПолеОтбора = СхемаКомпоновкиДанных.НаборыДанных.Получить(0).Поля.Найти(ЭлементОтбора.ЛевоеЗначение);
    
    ПредставлениеОтбора = СтрШаблон("%1 %2 ""%3""", 
    ПолеОтбора.Заголовок, ЭлементОтбора.ВидСравнения, ЭлементОтбора.ПравоеЗначение);
    
    Возврат ПредставлениеОтбора;
    
КонецФункции
   Smallrat
 
4 - 26.07.21 - 14:13
(2) Да, ошибся - мне просто нужно было представление отбора и я получал представление через Строка(Отбор), если нужно представления элемента отбора, то надо костылить наверное(
   Pro-tone
 
5 - 26.07.21 - 14:43
(0) вот, вытащил код из своей нетленки на инфостарте

    ТекстПолейОтбора = ""+Символы.ПС;
    Если КомпоновщикНастроек.Настройки.Отбор.Элементы.Количество()>0 ИЛИ ОтборОбъектовУдаленнойИБ.Количество()>0 Тогда
        
        Для каждого ТекСтрока Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
            ТекстПолейОтбора = ТекстПолейОтбора    + "текущая база: " + Строка(ТекСтрока.ЛевоеЗначение) 
            + " " + Строка(ТекСтрока.ВидСравнения) + " """ + Строка(ТекСтрока.ПравоеЗначение) + """"+ Символы.ПС;             
        КонецЦикла;    
        
        Для каждого ТекСтрока Из ОтборОбъектовУдаленнойИБ Цикл
            ТекстПолейОтбора = ТекстПолейОтбора    + "удаленная база: " + ТекСтрока.Синоним + " "+ТекСтрока.ВидСравнения + " """ + ТекСтрока.Значение + """" + Символы.ПС; 
        КонецЦикла;    
        
    КонецЕсли;
   JonSilver
 
6 - 29.07.21 - 14:28
Всем доброго времени суток!
А можно мне задать вопрос по отборам в отчетах на СКД.
Пытаюсь из расширения запустить отчет конфигурации БП 3.0 "Движения товаров". Передаю туда отбор по номенклатуре:

        Номенклатура = ТекущиеДанные.Ссылка;
        //структура отбора

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

Выдает ошибку:
Невозможно применить фиксированные настройки. Совпадают значения параметра.
{Отчет.ДвижениеТоваров.Форма.ФормаОтчета.Форма(667)}:    ПараметрыОтчета.НастройкиКомпоновкиДанных         = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
{Отчет.ДвижениеТоваров.Форма.ФормаОтчета.Форма(925)}:    ПараметрыОтчета = ПодготовитьПараметрыОтчетаНаСервере();
{Отчет.ДвижениеТоваров.Форма.ФормаОтчета.Форма(733)}:    БухгалтерскиеОтчеты.ЗаписатьОперациюБизнесСтатистики(ЭтотОбъект, "СформироватьОтчет", НастройкиОтчетаДляСтатистики());
{Отчет.ДвижениеТоваров.Форма.ФормаОтчета.Форма(875)}:    РезультатВыполнения = СформироватьОтчетНаСервере();
{Отчет.ДвижениеТоваров.Форма.ФормаОтчета.Форма(511)}:    ЗапуститьФормированиеОтчета();

по причине:
Невозможно применить фиксированные настройки. Совпадают значения параметра.

Прошу помощи!!!
   JonSilver
 
7 - 29.07.21 - 17:40
Если передавать параметры в виде фиксированных настроек, типа:

        ПараметрыФормы = Новый Структура();
        ПараметрыФормы.Вставить("Отбор", Новый Структура("Номенклатура",ТекущиеДанные.Ссылка));
        ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
        ОткрытьФорму("Отчет.ДвижениеТоваров.Форма", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор);

Отчет открывается не заполненным, по кнопке "Сформировать" получаем все туже ошибку. Но если нажать "Показать настройки" и на вкладке "Отбор" снять отбор по выбранной позиции, то отчет формируется.
Данные правильные, но с прицепом в виде предупреждения "Отчет не сформирован! Недействительный адрес или не найден родительский сеанс задания".
Вобщем никакой автоматизации.
   Fragster
 
8 - 29.07.21 - 18:03
&НаСервере
Процедура ПеренестиНастройкиВРеквизитНаСервере()
    ТекущаяСтрока = Элементы.Авторасчет.ТекущаяСтрока;
    Если ТекущаяСтрока = Неопределено Тогда Возврат КонецЕсли;
    
    СтрокаАвторасчета = Объект.Авторасчет.НайтиПоИдентификатору(ТекущаяСтрока);
    Запись = Новый ЗаписьXML;
    Запись.УстановитьСтроку();
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    СериализаторXDTO.ЗаписатьXML(Запись, Настройки);
    СтрокаАвторасчета.Условие = Запись.Закрыть();
    
    СтрокаАвторасчета.ПредставлениеУсловия = Строка(Настройки.Отбор);
    
КонецПроцедуры


а потом можно по разделителям поделить, если надо
   JonSilver
 
9 - 29.07.21 - 19:28
(8) Извините, не совсем понял как это применить. Полагаю для передачи пользовательских настроек, т.е. в первом варианте.
   JonSilver
 
10 - 29.07.21 - 19:48
Похоже начинает доходить почему это происходит:
1. Отчет открывается в этом-же окне что и Владелец, поэтому отбор в виде параметра уже сидит в этом окне.
2. Последнее сообщение об ошибке связано с тем-же, окно одно и тоже, и курсор потерян. Может в терминах чего напутал, уж извините.
Но как это исправить все одно не пойму.

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.