|
Два отдельных отбора по одному полю | ☑ | ||
---|---|---|---|---|
0
Hlorka
18.01.23
✎
19:40
|
Доброго времени суток!
В СКД строю отчет. Есть поле, в которое в зависимости от некоего условия выводится либо склад из справочника СтруктурныеЕдиницы, либо покупатель из справочника Контрагенты https://ibb.co/kgQ6dcN . Не обращайте внимание, что колонка называется продавец. Так надо:) Нужно реализовать возможность делать отбор отдельно по складу и отдельно по покупателю. Как здесь https://ibb.co/zVFZw29 Пока получается так https://ibb.co/hy4Zhch Но хотелось бы, чтобы не было формы выбора типа данных, т.е. где покупатель - должна сразу открывается форма выбора контрагента, а где склад - форма выбора склада. Подскажите, пожалуйста, осуществимо ли это? Если да, то как? |
|||
1
FIXXXL
18.01.23
✎
20:10
|
Как вариант, сделать два параметра запроса, в запросе же проверку заполнения и подстановку параметров
если не один не выбран - условие отбора = ИСТИНА поле, на которое накладывается отбор составного типа? |
|||
2
Hlorka
18.01.23
✎
20:18
|
(1) да, поле составного типа
|
|||
3
FIXXXL
18.01.23
✎
20:30
|
(2) https://forum.infostart.ru/forum9/topic10811/
только проверяй &ПараметрКонтрагент и &ПараметрСклад, можно на ПустуюСсылку, предварительно типизировав параметры на закладке параметры |
|||
4
Hlorka
18.01.23
✎
21:15
|
(3) Что значит типизировав?
Параметры добавила https://ibb.co/q9V1m4K правильно? Поле составляется таким образом: ВЫБОР КОГДА ПродажиОбороты.Регистратор ССЫЛКА Документ.ОтчетКомиссионера ТОГДА ПродажиОбороты.Регистратор.Контрагент ИНАЧЕ ВЫБОР КОГДА ПродажиОбороты.Регистратор ССЫЛКА Документ.РасходнаяНакладная ИЛИ ПродажиОбороты.Регистратор ССЫЛКА Документ.ПриходнаяНакладная ТОГДА ПродажиОбороты.Регистратор.СтруктурнаяЕдиница КОНЕЦ КОНЕЦ В этом кусочке надо делать проверку и подстановку параметров? |
|||
5
FIXXXL
18.01.23
✎
21:25
|
(4) ну отбор то в запросе на закладке условия делай
и так ПродажиОбороты.Регистратор.Контрагент не пиши, используй ВЫРАЗИТЬ(ПродажиОбороты.Регистратор КАК Документ.ОтчетКомиссионера).Контрагент |
|||
6
FIXXXL
18.01.23
✎
21:27
|
(4) с типизацией параметров все норм, только Значение наверное лишнее
|
|||
7
Hlorka
18.01.23
✎
21:35
|
(5) С отбором покупателя заработало:)
но если его не указать, то выводит ошибку https://ibb.co/6Pfr8LZ В условии написала: ВЫБОР КОГДА &Покупатель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) ТОГДА ИСТИНА ИНАЧЕ ПродажиОбороты.Регистратор.Контрагент = &Покупатель КОНЕЦ |
|||
8
eddy_n
18.01.23
✎
23:29
|
(7) - Для начала, категорически нельзя использовать такую конструкцию ПродажиОбороты.Регистратор.Контрагент. Это завуалированное левое соединение со всеми регистраторами регистра. А если таких регистраторов там миллион? Во- вторых, что мешает обернуть конструкцию с параметром в чешую (фигурные скобки)?
|
|||
9
АнализДанных
19.01.23
✎
01:39
|
(0) Используй расширение языка запроса (фигурные скобочки), так ты сможешь отделить каждый тип из составного поля. В примере ниже есть "ДокументОснование" составного типа, после такой конструкции у тебя появится 2 отдельных поля по которым можно делать отборы:
ВЫБРАТЬ ЗаказПоставщику.Ссылка КАК Ссылка, ЗаказПоставщику.ДокументОснование КАК ДокументОснование ИЗ Документ.ЗаказПоставщику КАК ЗаказПоставщику {ГДЕ (ВЫРАЗИТЬ(ЗаказПоставщику.ДокументОснование КАК Документ.ЗаказКлиента)).* КАК Отбор_ЗаказКлиента, (ВЫРАЗИТЬ(ЗаказПоставщику.ДокументОснование КАК Документ.ЗаказНаПеремещение)).* КАК Отбор_ЗаказНаПеремещение} Работать будет только какой-то один из отборов. Если тебе надо чтобы отборы можно было ставить одновременно и на склад и на контрагента, то надо переписать запрос на объединение, где в первой части выбираешь только контрагентов, а во второй только склады. Расширение языка запроса будет такое же, но для каждой части свой тип. |
|||
10
eddy_n
19.01.23
✎
01:50
|
(7) Для твоего подхода можно попробовать отделаться "малой кровью": у параметра Контрагент выставить Использование - Всегда.
|
|||
11
АнализДанных
19.01.23
✎
09:30
|
(7) Используй расширение языка запросов из (9), чтобы работать через отборы, а не параметры. Параметры не дадут тебе возможность указывать произвольный вид сравнения, который хочет указать пользователь (в списке, не в списке, равно, не равно итд..), также отборы дадут возможность отбираться по подчиненным полям склада или контрагента.
Я еще в (9) написал, что работать будет только один из отборов, здесь я ошибся, в отборы можно добавить группу "ИЛИ" и оба поля (контрагент\склад) добавить туда, тогда по любому из указанных полей будет работать. |
|||
12
DJ Anthon
19.01.23
✎
09:53
|
(8) если знаешь, что их там мало, почему бы и нет? Вон, в ERP нет отбора по контрагентам в отчетах по денежным средствам. ни в одном. нахрена тогда они вообще нужны?
|
|||
13
eddy_n
19.01.23
✎
11:41
|
(11) ИЛИ - это зло в известной идеологии.
|
|||
14
АнализДанных
19.01.23
✎
20:47
|
(13) Если пользователь укажет только один отбор, то расширение языка запроса оставит только одно условие и "ИЛИ" превратиться в обычное "ГДЕ Отбор_ЗаказКлиента = &ЗаказКЛиента". В этом плюс такой реализации, эта более гибкая возможность, чем использовать параметры.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |