Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 12:37

Как программно сделать отбор в Типовом Отчете "Отчет по проводкам"

Автор Zeratul, 27 сен 2012, 12:03

0 Пользователей и 1 гость просматривают эту тему.

Zeratul

Всем привет! Собственно весь вопрос в заголовке.
Пытался сделать так, но ничего не вышло отбор пуст

        Отчет = Отчеты["ОтчетПоПроводкам"].Создать();
        Отчет.НачалоПериода = НачПериода;
        Отчет.КонецПериода = КонПериода;
        Отчет.Организация = организация;
        Настройки  = Отчет.КомпоновщикНастроек.Настройки;
               Для Каждого Текстрока из ТаблицаЗначения

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

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

    ИзменитьОтбор(Отчет.КомпоновщикНастроек,СоответствиеПоискаОтбора,СоответствиеНовогоОтбора);                       

Цикл




Процедура ИзменитьОтбор(ЭлементСтруктуры,
СоответствиеПоискаОтбора = Неопределено, СоответствиеНовогоОтбора) Экспорт

Если ТипЗнч(ЭлементСтруктуры) = Тип("КомпоновщикНастроекКомпоновкиДанных")  Тогда
    Отбор = ЭлементСтруктуры.Настройки.Отбор;
Иначе
    Отбор = ЭлементСтруктуры;
КонецЕсли;

Если ТипЗнч(СоответствиеНовогоОтбора["ЛевоеЗначение"]) = Тип("Строка") Тогда
    нПоле = Новый ПолеКомпоновкиДанных(СоответствиеНовогоОтбора.ЛевоеЗначение);
Иначе
    нПоле = СоответствиеНовогоОтбора["ЛевоеЗначение"];
КонецЕсли;

Если СоответствиеНовогоОтбора.Получить("ВидСравнения") = Неопределено Тогда
    нВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Иначе
    нВидСравнения = СоответствиеНовогоОтбора["ВидСравнения"];
КонецЕсли;

Если СоответствиеНовогоОтбора.Получить("Использование") = Неопределено Тогда
    нИспользование = Истина;
Иначе
    нИспользование = СоответствиеНовогоОтбора["Использование"];
КонецЕсли;

нЗначение = СоответствиеНовогоОтбора["Значение"];

ТолькоПоЛевомуЗначению = Ложь;
Если СоответствиеПоискаОтбора = Неопределено Тогда
    ТолькоПоЛевомуЗначению = Истина;
КонецЕсли;

сЛевоеЗначение  =  СоответствиеПоискаОтбора.Получить("ЛевоеЗначение");
Если сЛевоеЗначение = Неопределено Тогда
    сЛевоеЗначение = нПоле;
КонецЕсли;

сВидСравнения  =  СоответствиеПоискаОтбора.Получить("ВидСравнения");
Если ВидСравнения = Неопределено Тогда
    сВидСравнения = ВидСравнения;
КонецЕсли;

сИспользование =  СоответствиеПоискаОтбора.Получить("Использование");
Если сИспользование = Неопределено Тогда
    сИспользование = нИспользование;
КонецЕсли;

Для каждого ЭлементОтбора Из Отбор.Элементы Цикл
    Если ТолькоПоЛевомуЗначению Тогда
        НайденныйОтбор = ЭлементОтбора;
        Прервать;
    Иначе
        Если (ЭлементОтбора.ЛевоеЗначение = сЛевоеЗначение)
            И (ЭлементОтбора.ВидСравнения = сВидСравнения)
            И (ЭлементОтбора.Использование = сИспользование) Тогда
            НайденныйОтбор = ЭлементОтбора;
            Прервать;
        КонецЕсли;
    КонецЕсли;
КонецЦикла;

Если НайденныйОтбор <> Неопределено Тогда
    НайденныйОтбор.ЛевоеЗначение  = нПоле;
    НайденныйОтбор.Использование  = нИспользование;
    НайденныйОтбор.ВидСравнения   = нВидСравнения;
    НайденныйОтбор.ПравоеЗначение = нЗначение;
КонецЕсли;

КонецПроцедуры

Zeratul


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск