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

Динсписок: отборы по многим данным ))

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

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

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


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

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

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

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

"ДополнительныеРеквизитыПродуктов.ВидРеквизита.* КАК ВидДопРеквизита" и "ДополнительныеРеквизитыПродуктов.Значение.* КАК ЗначениеДопРеквизита" - это отбор на твой "тип договора"
   ам794123
 
18 - 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) Надо будет попробоват
   mzelensky
 
22 - 18.05.20 - 18:47
(21) я уже попробовал. Должно взлететь
   aleks_default
 
23 - 18.05.20 - 18:58
Это ж как Характеристики в запросе
   experimentator76
 
24 - 18.05.20 - 21:33
(0) не рекомендуется, но если сильно нужно
{ГДЕ
    Контрагенты.Ссылка В
            (ВЫБРАТЬ
                Договоры.Владелец
            ИЗ
                Договоры КАК Договоры
            ГДЕ
                Договоры.Тип В (&Тип))}
   Ненавижу 1С
 
25 - 18.05.20 - 22:05
Можно вообще сделать

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

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

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

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

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.