Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как в построителе отчета сделать отбор по полю составного типа?

Как в построителе отчета сделать отбор по полю составного типа?
Я
   Тенепопятам
 
01.04.21 - 11:55
Источник данных для построителя - таблица значений с полями составного типа. При выполнении отбора по полю составного типа построитель ругается, что нельзя сравнивать значения разных типов. Как обойти эту проблему?
   Kondarat
 
1 - 01.04.21 - 12:33
(0) И что не получаетс? Показывай как делал.
   Тенепопятам
 
2 - 01.04.21 - 13:14
//ДокументыКИмпортуДляОтбора - таблица значений на форме обработки "КлиентБанк"

//Поле контрагент имеет составной тип - Контрагент, Строка, Организация
 

ПостроительОтчета.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДокументыКИмпортуДляОтбора);

ПоляНастройки = ПостроительОтчета.Отбор.ПолучитьДоступныеПоля();

//Тут удаление лишних полей отбора              


ПостроительОтчета.Отбор.УстановитьДоступныеПоля(ПоляНастройки);


ФормаНастройкиЗаполнения = ЭтотОбъект.ПолучитьФорму("ФормаОтбора");

//На форму выведен ПостроительОтчета.Отбор


ФормаНастройкиЗаполнения.ОткрытьМодально();//пользователь устанавливает отбор. Для полей составного типа выбирает сначала тип, потом значение


ПостроительОтчета.Выполнить();

ДокументыКИмпорту = ПостроительОтчета.Результат.Выгрузить();
               
//////////////////////////

Далее ошибка:

{ВнешняяОбработка.КлиентБанк.Форма.Форма.Форма(1004)}: Ошибка при получении значения атрибута контекста (Результат)

ДокументыКИмпорту = ПостроительОтчета.Результат.Выгрузить();

по причине:

{(99, 37)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля

неограниченной длины и поля несовместимых типов.

ОписаниеИсточникаДанных.Контрагент <<?>>= &Параметр1
   Тенепопятам
 
3 - 01.04.21 - 14:13
?
   RomanYS
 
4 - 01.04.21 - 14:15
Ограничь длину строки
   RomanYS
 
5 - 01.04.21 - 14:17
+(4) возможно ещё лучше разделить данные на две колонки: контрагентСсылка и контрагентСтрока
   Kondarat
 
6 - 01.04.21 - 14:18
(3) А как отбор на форме заполняется? Который пользователю показывается.
Такое впечатление, что для поля "Контрагент" Отбор = Ложь.
Только, что проверил. Отбор по полю составного типа рпботает штатно.
   Тенепопятам
 
7 - 01.04.21 - 14:19
(4) длина строки ограничена. Если в качестве значения выбирать строку, то ошибки нет, а если контрагента, то есть.
   Тенепопятам
 
8 - 01.04.21 - 14:22
(6) Заполняется автоматом. Построитель отчета реквизит обработки, у формы отбора основной реквизит "ОбработкаОбъект", на форму выведена ТЗ с источником данных Построитель.Отбор
   Тенепопятам
 
9 - 01.04.21 - 14:23
Выглядит все адекватно, отбор-вид сравнения-значение. Для контрагента сначала выбираешь тип, потом значение
   Kondarat
 
10 - 01.04.21 - 14:34
(8) Из того кода, что ты привел отбор не может заполниться автоматом.
   АнализДанных
 
11 - 01.04.21 - 14:40
(2) Если я правильно понял твою проблему, то тебе надо использовать "Выразить"

Выразить(ОписаниеИсточникаДанных.Контрагент КАК Справочник.Контрагенты) = &Параметр1

или так

Выбор когда ТипЗнч(&Параметр1) = Тип(Строка) Тогда
   Выразить(ОписаниеИсточникаДанных.Контрагент КАК Строка(1024)) = &Параметр1
Иначе
   Выразить(ОписаниеИсточникаДанных.Контрагент КАК Справочник.Контрагенты) = &Параметр1
Конец
   Тенепопятам
 
12 - 01.04.21 - 14:44
(10) Заполняется и работает. После открытия на форме список полей и значений, можно выбрать что нужно, закрыть форму и построитель отбирает что нужно. Спотыкается только на поле составного типа "Контрагент"
   Тенепопятам
 
13 - 01.04.21 - 14:48
(11) Так запроса то нет - в качестве источника используется ТЗ. Попробую переделать на запрос.
   Kondarat
 
14 - 01.04.21 - 14:57
(12) >> на форму выведена ТЗ с источником данных Построитель.Отбор
Наверное не ТЗ а ТабличноеПоле с типом Отбор?

А так смотри, что в ДоступныхПолях построителя и в полях отбора.
Ибо с составным типом все работает как надо.
Да, и что хоть за конфигурация?
   Тенепопятам
 
15 - 01.04.21 - 15:47
УПП. Да, табличное поле конечно, сорри.
   Тенепопятам
 
16 - 01.04.21 - 15:59
Если в списке составного типа есть строка - ругается. Если нет, но все ок... Проверил на других реквизитах.
   Kondarat
 
17 - 01.04.21 - 16:08
(16) Ну не знаю... Взял УТ 10.3., документ ПриходныйКассовыйОрдер. Там Реквизит Контрагент составного типа. Добавил ему Тип("Строка"), длина 500, пихнул построителю - все работает.
   Тенепопятам
 
18 - 01.04.21 - 16:25
(17) Может таблица значений ему не нравится... А как еще можно скормить ТЗ построителю кроме источника данных? В качестве параметра к запросу он ТЗ не воспринимает...
   Тенепопятам
 
19 - 01.04.21 - 16:25
Или может уже на СКД сделать...
   Kondarat
 
20 - 01.04.21 - 16:44
(18) Может и не нравится... Посмотри как она заполняется и типы колонки "Контрагент"
   Kassern
 
21 - 01.04.21 - 16:48
(0) в ТЗ, какая длина строки указана для составного типа?
   Kassern
 
22 - 01.04.21 - 16:49
(21) вообще когда работаешь с ТЗ и хочешь его запихнуть куда нить типа запроса, то все типы для колонок должны быть явно указаны, если хочешь сравнивать по строке, то нужно ее ограничить
   Kondarat
 
23 - 01.04.21 - 17:02
(18) Попробуй так сделать. Что получиться?
    Пока ПостроительОтчета.Отбор.Количество() <> 0 Цикл
        
        ПостроительОтчета.Отбор.Удалить(0);
        
    КонецЦикла;    
    
    ПостроительОтчета.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДокументыКИмпортуДляОтбора);
    
    ДоступныеПоля = ПостроительОтчета.ДоступныеПоля;
    Для Каждого Поле ИЗ ДоступныеПоля Цикл
        Если Поле.Отбор Тогда
            ПостроительОтчета.Отбор.Добавить(Поле.Имя);
        КонецЕсли;    
    КонецЦикла;    
    
    ФормаНастройкиЗаполнения = ЭтотОбъект.ПолучитьФорму("ФормаОтбора");
    РезультатЗакрытия = ФормаНастройкиЗаполнения.ОткрытьМодально();
    ДокументыКИмпорту  = ПостроительОтчета.Результат.Выгрузить();
   Тенепопятам
 
24 - 01.04.21 - 17:58
Спасибо за помощь! Причина оказалась в том, что в модуле обработки эта ТЗ, которая изначально находится на форме, создается заново и при ее создании не устанавливается квалификатор строки.


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