Имя: Пароль:
1C
1С v8
Динсписок: отборы по многим данным ))
0 ДенисЧ
 
18.05.20
15:08
Дайте идею...
есть справочник (например, контрагенты). У него есть подчинённый (например, договоры). У договора есть признак (например, тип договора).
Нужно в списке фильтровать контрагентов по типу договора.
В джойн типы договоров, разумеется, не впихнуть, договоров у контрагента много.
А как иначе сделать?
Вариант отбора "в списке" не катит....
1 МихаилМ
 
18.05.20
15:11
Exist
2 ДенисЧ
 
18.05.20
15:14
(1) А как это будет выглядеть в запросе динсписка? Менять текст запроса? Как-то оно нехалялльно...
3 Fedor-1971
 
18.05.20
15:40
(0) До установки отбора список будет выглядеть так:
Контрагент1   ТипДогПоставщик
Контрагент1   ТипДогПокупатель

Контрагент2   ТипДогПосредник

Контрагент3   ТипДогКредитоДатель
Контрагент3   ТипДогКредитоВзятель
Контрагент3   ТипДогПоставщик
4 mistеr
 
18.05.20
16:26
(0) Если нужно делать отбор, то нужно каджый вид договора сделать отдельной колонкой, то есть транспонировать.
5 ДенисЧ
 
18.05.20
17:01
(4) Нет. Криво.
6 mistеr
 
18.05.20
17:09
(5) Ну найдешь как прямо, расскажи.
7 mzelensky
 
18.05.20
17:15
(0) Подробней опиши:
8 mzelensky
 
18.05.20
17:16
(7) Какие колонки должны выводиться в ДинСписке (в случае установки отбора и в случае без отбора)?
9 Fedor-1971
 
18.05.20
17:22
(5) сделай отображение дин списка как дерево, там кодом придётся прописать, будет примерный вид вот такой:

+ Контрагент3  
   ТипДогКредитоДатель
   ТипДогКредитоВзятель
   ТипДогПоставщик


В свёрнутом виде  - исходный список, в развёрнутом - типы договоров, не совсем красиво, но универсально, кроме того, сможешь фильтровать по 2 и более типам договоров
10 kumena
 
18.05.20
17:24
Если типов договоров не много, то - при создании формы прочитать все типы договора, вывести их на форму списка в виде флажков, назначить им процедуры при изменении.
При изменении значений флажков устанавливать отбор заново.
11 Fedor-1971
 
18.05.20
17:32
(10) Отбор в (0) хочет поставить на данные, которых нет в текущем списке
  Контрагент  -  он в списке
    Договор   -  есть связь, но в списке нет
      ТипДоговора  - вот по этому реквизиту нужно отобрать

Тут вариантов не много:
   1. Динамически изменять текст запроса
(недостаток - дёргаем БД при каждой попытке изменить отбор)

   2. Сделать ДС деревом и ставить стандартные отборы
(недостаток - изменяется внешний вид списка Контрагентов)
12 kumena
 
18.05.20
17:40
> Отбор в (0) хочет поставить на данные, которых нет в текущем списке

не волнуйтесь, я понял.
При создании формы списка контрагентов это никак не мешает прочитать данные договоров запросом.
13 Fedor-1971
 
18.05.20
17:52
(12) В том и вопрос:
прочитали все возможные типы, реализовали работу галочек типов договоров, а дальше?
Данных для отбора в списке нет. Прямого, универсального, решения то же нет.
Решение есть только под конкретный набор типов договоров (тогда и галочки практически ни к чему), но, как я понимаю, хочется некоторой универсальности
14 toypaul
 
гуру
18.05.20
17:58
select k from kk where k in (select v from dd where t = &t) воломон?
15 mzelensky
 
18.05.20
18:04
(0) Вот так это не решается разве?

ВЫБРАТЬ
    Продукты.Ссылка КАК Продукт
{ВЫБРАТЬ
    Продукт.*}
ИЗ
    Справочник.Продукты КАК Продукты
        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеРеквизитыПродуктов КАК ДополнительныеРеквизитыПродуктов
        ПО Продукты.Ссылка = ДополнительныеРеквизитыПродуктов.Объект}
{ГДЕ
    Продукты.Ссылка.* КАК Продукт,
    ДополнительныеРеквизитыПродуктов.ВидРеквизита.* КАК ВидДопРеквизита,
    ДополнительныеРеквизитыПродуктов.Значение.* КАК ЗначениеДопРеквизита}
16 mzelensky
 
18.05.20
18:10
(15) + У меня по этому запросу ситуация описанная в (0) отработала корректно.
17 mzelensky
 
18.05.20
18:12
(15) + Здесь

"Справочник.Продукты КАК Продукты" - это твои "контрагенты"
"РегистрСведений.ДополнительныеРеквизитыПродуктов" - это твои "Договора"

"ДополнительныеРеквизитыПродуктов.ВидРеквизита.* КАК ВидДопРеквизита" и "ДополнительныеРеквизитыПродуктов.Значение.* КАК ЗначениеДопРеквизита" - это отбор на твой "тип договора"
18 ам794123
 
18.05.20
18:19
проблема может быть в том, автор топика указал основную таблицу ДС - Контрагенты. Если галку снять, все получится
19 ДенисЧ
 
18.05.20
18:44
(8) Контрагенты. Те, у которых есть договор с нужным типом.
20 ДенисЧ
 
18.05.20
18:45
(9) Лажа
21 ДенисЧ
 
18.05.20
18:46
(15) Надо будет попробоват
22 mzelensky
 
18.05.20
18:47
(21) я уже попробовал. Должно взлететь
23 aleks_default
 
18.05.20
18:58
Это ж как Характеристики в запросе
24 experimentator76
 
18.05.20
21:33
(0) не рекомендуется, но если сильно нужно
{ГДЕ
    Контрагенты.Ссылка В
            (ВЫБРАТЬ
                Договоры.Владелец
            ИЗ
                Договоры КАК Договоры
            ГДЕ
                Договоры.Тип В (&Тип))}
25 Ненавижу 1С
 
гуру
18.05.20
22:05
Можно вообще сделать

Выбрать различные ...
Из договоры
Левое соединение контрагенты
26 zladenuw
 
18.05.20
23:44
(25) а зачем левое ?
можно таблицу договоров. с контрагентами и так будет неявное, если выбирать еще какие то реквизиты
27 Ненавижу 1С
 
гуру
19.05.20
08:34
(26) ну или так, соединение чтобы псевдонимы полей не править потом
28 kumena
 
19.05.20
10:01
> прочитали все возможные типы, реализовали работу галочек типов договоров, а дальше?

дальше другим запросом выбираем нужных контрагентов, с учетом выставленных флажков (типов договоров).
29 kumena
 
19.05.20
10:05
>   Справочник.Продукты КАК Продукты
>        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеРеквизитыПродуктов КАК ДополнительныеРеквизитыПродуктов
>        ПО Продукты.Ссылка = ДополнительныеРеквизитыПродуктов.Объект}
>
> + У меня по этому запросу ситуация описанная в (0) отработала корректно.

если я правильно понимаю, то в этом случае левое соединение наплодит продукты (контрагентов), в случае более 1 соединенного дополнительного реквизита (договора).
30 ДенисЧ
 
19.05.20
10:06
Добавил
{ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК Договоры
    ПО СправочникКонтрагенты.Ссылка = Договоры.Владелец
}
{
    ГДЕ Договоры.ТипДоговора.* КАК ТипДоговора
}

При установке отбора по типу - получаю дублирование ссылок ((

Что, получается ничего, кроме временной тз никак?
31 kumena
 
19.05.20
10:09
(30) рекомендую обратить внимание на 10 пост, там на мой взгляд вполне удобное для пользователя решение.
32 ДенисЧ
 
19.05.20
10:12
(31) Не, там плохой вариант. У меня этих типов только активных 30 штук...
Мне лучше штатным отбором динсписка...
33 Fedor-1971
 
19.05.20
10:26
(30) Погоди отбрасывать решение у тебя несколько договоров одного типа у контрагента
Переделай своё соединение, например, так:

Выбрать Количество(Различные таб.ТипДоговора) как Сколько, таб.Владелец из Справочник.ДоговорыКонтрагентов как таб)
34 Fedor-1971
 
19.05.20
10:30
33+ т.е. соединяй не с таблицей справочника, а с количеством договоров определённого типа у владельца - это гарантирует одну запись на Контрагента