|
Как в построителе отчета сделать отбор по полю составного типа? | ☑ | ||
---|---|---|---|---|
0
Тенепопятам
01.04.21
✎
11:55
|
Источник данных для построителя - таблица значений с полями составного типа. При выполнении отбора по полю составного типа построитель ругается, что нельзя сравнивать значения разных типов. Как обойти эту проблему?
|
|||
1
Kondarat
01.04.21
✎
12:33
|
(0) И что не получаетс? Показывай как делал.
|
|||
2
Тенепопятам
01.04.21
✎
13:14
|
//ДокументыКИмпортуДляОтбора - таблица значений на форме обработки "КлиентБанк"
//Поле контрагент имеет составной тип - Контрагент, Строка, Организация ПостроительОтчета.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДокументыКИмпортуДляОтбора); ПоляНастройки = ПостроительОтчета.Отбор.ПолучитьДоступныеПоля(); //Тут удаление лишних полей отбора ПостроительОтчета.Отбор.УстановитьДоступныеПоля(ПоляНастройки); ФормаНастройкиЗаполнения = ЭтотОбъект.ПолучитьФорму("ФормаОтбора"); //На форму выведен ПостроительОтчета.Отбор ФормаНастройкиЗаполнения.ОткрытьМодально(); //пользователь устанавливает отбор. Для полей составного типа выбирает сначала тип, потом значение ПостроительОтчета.Выполнить(); ДокументыКИмпорту = ПостроительОтчета.Результат.Выгрузить(); ////////////////////////// Далее ошибка: {ВнешняяОбработка.КлиентБанк.Форма.Форма.Форма(1004)}: Ошибка при получении значения атрибута контекста (Результат) ДокументыКИмпорту = ПостроительОтчета.Результат.Выгрузить(); по причине: {(99, 37)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины и поля несовместимых типов. ОписаниеИсточникаДанных.Контрагент <<?>>= &Параметр1 |
|||
3
Тенепопятам
01.04.21
✎
14:13
|
?
|
|||
4
RomanYS
01.04.21
✎
14:15
|
Ограничь длину строки
|
|||
5
RomanYS
01.04.21
✎
14:17
|
+(4) возможно ещё лучше разделить данные на две колонки: контрагентСсылка и контрагентСтрока
|
|||
6
Kondarat
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
|
Выглядит все адекватно, отбор-вид сравнения-значение. Для контрагента сначала выбираешь тип, потом значение
|
|||
10
Kondarat
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) Так запроса то нет - в качестве источника используется ТЗ. Попробую переделать на запрос.
|
|||
14
Kondarat
01.04.21
✎
14:57
|
(12) >> на форму выведена ТЗ с источником данных Построитель.Отбор
Наверное не ТЗ а ТабличноеПоле с типом Отбор? А так смотри, что в ДоступныхПолях построителя и в полях отбора. Ибо с составным типом все работает как надо. Да, и что хоть за конфигурация? |
|||
15
Тенепопятам
01.04.21
✎
15:47
|
УПП. Да, табличное поле конечно, сорри.
|
|||
16
Тенепопятам
01.04.21
✎
15:59
|
Если в списке составного типа есть строка - ругается. Если нет, но все ок... Проверил на других реквизитах.
|
|||
17
Kondarat
01.04.21
✎
16:08
|
(16) Ну не знаю... Взял УТ 10.3., документ ПриходныйКассовыйОрдер. Там Реквизит Контрагент составного типа. Добавил ему Тип("Строка"), длина 500, пихнул построителю - все работает.
|
|||
18
Тенепопятам
01.04.21
✎
16:25
|
(17) Может таблица значений ему не нравится... А как еще можно скормить ТЗ построителю кроме источника данных? В качестве параметра к запросу он ТЗ не воспринимает...
|
|||
19
Тенепопятам
01.04.21
✎
16:25
|
Или может уже на СКД сделать...
|
|||
20
Kondarat
01.04.21
✎
16:44
|
(18) Может и не нравится... Посмотри как она заполняется и типы колонки "Контрагент"
|
|||
21
Kassern
01.04.21
✎
16:48
|
(0) в ТЗ, какая длина строки указана для составного типа?
|
|||
22
Kassern
01.04.21
✎
16:49
|
(21) вообще когда работаешь с ТЗ и хочешь его запихнуть куда нить типа запроса, то все типы для колонок должны быть явно указаны, если хочешь сравнивать по строке, то нужно ее ограничить
|
|||
23
Kondarat
01.04.21
✎
17:02
|
(18) Попробуй так сделать. Что получиться?
Пока ПостроительОтчета.Отбор.Количество() <> 0 Цикл ПостроительОтчета.Отбор.Удалить(0); КонецЦикла; ПостроительОтчета.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДокументыКИмпортуДляОтбора); ДоступныеПоля = ПостроительОтчета.ДоступныеПоля; Для Каждого Поле ИЗ ДоступныеПоля Цикл Если Поле.Отбор Тогда ПостроительОтчета.Отбор.Добавить(Поле.Имя); КонецЕсли; КонецЦикла; ФормаНастройкиЗаполнения = ЭтотОбъект.ПолучитьФорму("ФормаОтбора"); РезультатЗакрытия = ФормаНастройкиЗаполнения.ОткрытьМодально(); ДокументыКИмпорту = ПостроительОтчета.Результат.Выгрузить(); |
|||
24
Тенепопятам
01.04.21
✎
17:58
|
Спасибо за помощь! Причина оказалась в том, что в модуле обработки эта ТЗ, которая изначально находится на форме, создается заново и при ее создании не устанавливается квалификатор строки.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |