Имя: Пароль:
1C
1С v8
Два отдельных отбора по одному полю
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) Если пользователь укажет только один отбор, то расширение языка запроса оставит только одно условие и "ИЛИ" превратиться в обычное "ГДЕ Отбор_ЗаказКлиента = &ЗаказКЛиента". В этом плюс такой реализации, эта более гибкая возможность, чем использовать параметры.
Ошибка? Это не ошибка, это системная функция.