Имя: Пароль:
1C
1С v8
Как программно сделать отбор в Типовом Отчете "Отчет по проводкам"
0 zerat
 
27.09.12
11:39
Всем привет! Собственно весь вопрос в заголовке.
Пытался сделать так, но ничего не вышло отбор пуст

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

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

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

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

Цикл




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

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

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

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

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

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

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

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

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

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

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

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

КонецПроцедуры
1 zerat
 
27.09.12
11:48
Уважаемые форумчане помогите пожалуйста, бьюсь с этим отчетом второй день..ничего не получается
2 zerat
 
27.09.12
12:11
апну
3 DrShad
 
27.09.12
12:14
никто не будет читать твою простыню и искать что в ней не так
4 zerat
 
27.09.12
12:22
Всем спасибо я разобрался
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший