Имя: Пароль:
1C
1С v8
запрос по справочнику подчиненных
0 Папай
 
08.09.21
18:26
Добрый вечер.подскажите реально ли запросом сделать следующее:есть справочник контрагенты,к нему подчиненных справочник :посещения магазина.
так вот сделать выборку по контрагенту который приходил,но ничего не купил.Таких посещений может быть несколько.Если хоть одно посещение было удачным,то все записи из подчиненного справочника игнорируются(ибо смысла нет,покупка была),и если он посещал но ничего не купил то берется последнее посещение и анализируются реквизиты этой строки.
1 kubik_live
 
08.09.21
18:28
Признак "Удачного Посещения" это что?
2 Папай
 
08.09.21
18:29
признак удачного посещения это заполненный реквизит ДатаОплаты
3 kubik_live
 
08.09.21
18:31
Контрагент что-то при входе предъявляет или он в в туалет по пути к Вам зашёл?
4 Папай
 
08.09.21
18:31
фактически может быть 2 строки с пустой датой.то есть 2 раза приходил,и одна строка с заполненной датой,то есть совершил покупку.То такие три строки не брать в запрос.нужны  строки если бы они все три были пустые,но отобрать только последнюю
5 PuhUfa
 
08.09.21
18:32
(4) у тебя каждое посещение создает новый элемент справочника "посещения магазина"?
6 kubik_live
 
08.09.21
18:32
ДатаОплаты чего? Он ничего и покупать не собирался? Как Вы его идентифицмруете? Документы требуете?
7 agntosha
 
08.09.21
18:32
издеваешься ?
8 kubik_live
 
08.09.21
18:33
Чем торгуете?
9 Папай
 
08.09.21
18:33
(5)каждое посещение это строка в подчиненном справочнике "посещение"
10 Папай
 
08.09.21
18:34
+/- как будет запрос выглядеть?
11 agntosha
 
08.09.21
18:35
как он будет выглядеть .. тебе нужно показать тех контрагентов которые принадлежат множеству ходящих в магазин , но не совершивших покупки
12 agntosha
 
08.09.21
18:36
все контрагенты которые ходиили НО ничего не купили
13 Папай
 
08.09.21
18:36
(11)мне нужны именно записи подчиненного спр.но только последнее посещение
14 kubik_live
 
08.09.21
18:36
(11) Это население РФ в общем случае! :)))
15 agntosha
 
08.09.21
18:37
(13) последние .. ну это скажем так несколько усложняет запрос, но не намного ..
16 agntosha
 
08.09.21
18:38
(14) Ну, почему .. население ходит в магазины и даже покупает там что то рублей на 200-300 .. сейчас даже больше .. богатеем
17 kubik_live
 
08.09.21
18:39
(16) ???
Документ на входе предъявляете?
Что-то такого не припомню давно (был в "Березке" в СССР)
18 1Сергей
 
08.09.21
18:39
В общем случае, ответ Да
19 agntosha
 
08.09.21
18:39
(13) это учебная задача или нет ?
20 agntosha
 
08.09.21
18:41
(17) по лицу распознают
21 kubik_live
 
08.09.21
18:43
Если на входе всех однозначно идентифицировать (не в маске или в микабе), тогда можно решить задачу - кто купил а кто нет
22 Папай
 
08.09.21
18:48
как то я не очень представляю как это запросом обработать
23 Папай
 
08.09.21
18:48
(19)что то вроде.пытаюсь разобраться со сложными вариантами
24 kubik_live
 
08.09.21
18:52
(22) Запрос из чего выбирать-то будет?
Определись
25 agntosha
 
08.09.21
18:54
(23) просто , если учебная то смотреть будут на то как сделал .. а если не учебная .. то там варианты возможны разные.
Так или иначе тебе нужно получить последнюю запись .. это соединение таблицы посещений с такой же сгруппированной по связи дата = Максим(дата)
это тебе даст только последние .. а контрагентов надо взять из тех у кого не было покупок вообще и связать их .. но вот как это правильно записать , если она учебная х.з
26 Папай
 
08.09.21
18:59
(25)спасибо попробую
27 Папай
 
08.09.21
19:02
(25)а как взять контр.у которых не было покупок?если есть только дата посещения.нет даты оплаты но она может по началу не быть а потом в конце появится.например 2 раза приходил а купил на третий
28 kubik_live
 
08.09.21
19:04
(27) МАКСИМУМ(ДатаОплаты)
29 Папай
 
08.09.21
19:14
(28)сударь вы не внимательно читали.какой смысл использовать максимальное значение даты если она будет одна среди всех.с таким же успехом ее можно сравнить с Null
30 Папай
 
08.09.21
19:15
однако если она будет присутствовать среди строк подч.спр.то  надо взять последнее посещение не удачное а не удачное
31 kubik_live
 
08.09.21
19:20
"...последнее посещение не удачное а не удачное"
Да уж...
"Бог в помощь!" © Волк
32 Папай
 
09.09.21
11:44
добрый день.возвращаясь к вчерашней теме получил список контрагентов подлежащих к исключению из запроса.Как продолжить выборку из запроса, но за исключением тех контрагентов которых я получил данным запросом?как отобрать всех кто сюда не вошел?

|    Контрагент.ссылка,
|    Посещения.ДатаПолученияОплаты
|ИЗ
|    Справочник.Контрагент КАК Контрагент
|        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Посещения КАК Посещения
|        ПО Контрагент.Ссылка = Посещения .Владелец
|        И (Посещения .ДатаПолученияОплаты <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0))
33 mistеr
 
09.09.21
12:30
(0) Сначала отобрать нужных контрагентов в ВТ. Затем по ним найти последнее посещение. Типа среза последних вручную.
34 Папай
 
09.09.21
12:51
(33)если бы я мог отобрать нужны сразу то зачем мне тогда временная таблица?у меня получится лишь отобрать тех которых надо исключить.
Еще раз:вы 3 раза посещали магазин.в системе 3 строки с пустой датой оплаты,но в конце концов в 4-й раз вы совершили покупку,всего 4 строки в подчиненном справочнике.Так вот вас надо исключить.А если человек так ничего и не купил на момент формирования отчета то его вывести.а у него может быть сколько угодно посещений без оплат
35 Папай
 
09.09.21
12:52
может можно сделать выборку левым посещение где все с пустой датой?все до единой записи?
36 agntosha
 
09.09.21
12:56
может прочитать про множества и логические операции над ними. Тогда дело пойдет быстрее.
Вам нужно множество котрагентов которые не совершали покупки. Это раз.
Вам нужно множество последних посещений магазина контрагентами
Вам нужно множество которое состоит их пересечения этих множеств
37 agntosha
 
09.09.21
12:57
Делается все это разными запросами которые потом соединяются .. с нужными связями.
Самый сложный для вас будет это запрос последних посещений магазинов ..
38 agntosha
 
09.09.21
13:01
(34) вам это нужно потому что там будут одни и те же данные использоваться несколько раз .. скорее всего , если задача учебная то вас натянут за неиспользование .. хотя я не знаю .. но подозреваю
39 mistеr
 
09.09.21
13:31
(35) Конечно можно. Левое соединение, группировка по контрагенту, ИМЕЮЩИЕ МАКСИМУМ(ДатаОплаты) ЕСТЬ NULL
40 mistеr
 
09.09.21
13:32
(39) Точнее ЕСТЬNULL(МАКСИМУМ(ДатаОплаты), &ПустаяДата) = &ПустаяДата