Имя: Пароль:
1C
 
В чем ошибка связи при левом запросе?
0 KIraA
 
11.09.18
10:57
Вот запрос

  "ВЫБРАТЬ
      |    Перечень.Контрагент,
      |    Перечень.Объект,
      |    Перечень.Ссылка КАК Ссылка
      |ПОМЕСТИТЬ Поставить
      |ИЗ
      |    Документ.Перечень КАК Перечень
      |ГДЕ
      |    НЕ Перечень.ПометкаУдаления
      |    И Перечень.Контрагент = &Контрагент
      |    И Перечень.ОбъектОхраны = &ОбъектОхраны
      |    И Перечень.Тип = ЗНАЧЕНИЕ(Перечисление.Тип.Поставить)
      |;
      |
      |////////////////////////////////////////////////////////////////////////////////
      |ВЫБРАТЬ
      |    Перечень.Контрагент КАК Контрагент,
      |    Перечень.Объект,
      |    Перечень.Ссылка КАК Ссылка
      |ПОМЕСТИТЬ Снять
      |ИЗ
      |    Документ.Перечень КАК Перечень
      |ГДЕ
      |    НЕ Перечень.ПометкаУдаления
      |    И Перечень.Контрагент = &Контрагент
      |    И Перечень.Объект = &Объект
      |    И Перечень.Тип = ЗНАЧЕНИЕ(Перечисление.Тип.Снять)
      |;
      |
      |////////////////////////////////////////////////////////////////////////////////
      |ВЫБРАТЬ
      |    Поставить.Контрагент,
      |    Поставить.Объект,
      |    Снять.Контрагент КАК Контрагент1,
      |    Снять.Объект КАК Объект1,
      |    Поставить.Ссылка,
      |    Снять.Ссылка КАК Ссылка1
      |ИЗ
      |    Поставить КАК Поставить
      |        ЛЕВОЕ СОЕДИНЕНИЕ Снять КАК Снять
      |        ПО Поставить.Контрагент = Снять.Контрагент
      |            И Поставить.Объект = Снять.Объект"


Запрос1
Количество 4
Запрос2
Количество 2
Запрос3
Количество 8???????? ПОЧЕМУ?
1 Lexey_
 
11.09.18
11:01
Документ "Перечень" и Перечисление "Тип" это мощно конечно
2 Borteg
 
11.09.18
11:03
(0) 4*2=8
3 Borteg
 
11.09.18
11:03
(0) если хочется 6 надо объединить все, если 4 то объединить
4 unregistered
 
11.09.18
11:14
Если во всех записях как первого запроса так и второго один и тот же объект и один и тот же контрагент, то имеет место ситуация из (2).
5 KIraA
 
11.09.18
11:17
(4) Конечно один и тот же. Что при этом делать чтоб получить правильную связь?
6 Borteg
 
11.09.18
11:18
(5) а какой результат ожидается?
7 KIraA
 
11.09.18
11:20
Мне нужно вытащить документы при которых    
ГДЕ
           Снять.Контрагент ЕСТЬ NULL
           И Снять.Объект ЕСТЬ NULL
8 1Сергей
 
11.09.18
11:20
Так работает левое соединение
9 1Сергей
 
11.09.18
11:21
(7) с пустой ссылкой не путаешь?
10 catena
 
11.09.18
11:23
(5)Если там 4 ссылки "Поставить" и 2 "Снять", он их соединить рандомно должен или какая-то стратегия у вас есть?
12 catena
 
11.09.18
11:23
Пардон, наврала про не может быть.
13 KIraA
 
11.09.18
11:32
(9) Да там пока нет ни одного ни другого. Связь полная идет, раз 8 шт
14 hhhh
 
11.09.18
11:39
(13) ну, так и должно быть, Должно быть 8 шт, и получилось 8. Всё в порядке.
15 KIraA
 
11.09.18
11:44
(14) А как сделать чтоб не было?)) Вот в чем вопрос?. Есть 4 документа с типом перечисления поставить и 2 с перечислением снять. Как получить 4-2 =2?
16 1Сергей
 
11.09.18
11:55
(15) нужно ещё какое-то поле для соединения, уникальное. чтобы каждой конкретной строке из таблицы справа соответствовала конкретная строка из таблицы слева
17 Re_agent
 
11.09.18
11:57
(15) попробуй третий запрос переписать

      |ВЫБРАТЬ
      |    Поставить.Контрагент,
      |    Снять.Контрагент КАК Контрагент1
      |ИЗ
      |    Поставить КАК Поставить
      |        ЛЕВОЕ СОЕДИНЕНИЕ Снять КАК Снять
      |        ПО Поставить.Контрагент = Снять.Контрагент
      |            И Поставить.Объект = Снять.Объект"

и станет 4 ;)
18 Re_agent
 
11.09.18
11:59
(15) не, ошибся

      |ВЫБРАТЬ
      |    Поставить.Контрагент,
      |    Поставить.Объект
      |ИЗ
      |    Поставить КАК Поставить
      |        ЛЕВОЕ СОЕДИНЕНИЕ Снять КАК Снять
      |        ПО Поставить.Контрагент = Снять.Контрагент
      |            И Поставить.Объект = Снять.Объект"
19 1Сергей
 
11.09.18
11:59
(17) с чего бы это?
20 1Сергей
 
11.09.18
11:59
(18) аналогично
21 Borteg
 
11.09.18
11:59
(15)    |ВЫБРАТЬ
      |    Поставить.Контрагент,
      |    Снять.Контрагент КАК Контрагент1
      |ИЗ
      |    Поставить КАК Поставить
      |        ЛЕВОЕ СОЕДИНЕНИЕ Снять КАК Снять
      |        ПО Поставить.Контрагент = Снять.Контрагент
      |            И Поставить.Объект = Снять.Объект
      | Где Снять.Контрагент Eсть NULL
22 Borteg
 
11.09.18
12:01
(15) |ВЫБРАТЬ
      |    Поставить.Контрагент,
      |    Поставить.Объект,
      |    Снять.Контрагент КАК Контрагент1,
      |    Снять.Объект КАК Объект1,
      |    Поставить.Ссылка,
      |    Снять.Ссылка КАК Ссылка1
      |ИЗ
      |    Поставить КАК Поставить
      |        ЛЕВОЕ СОЕДИНЕНИЕ Снять КАК Снять
      |        ПО Поставить.Контрагент = Снять.Контрагент
      |            И Поставить.Объект = Снять.Объект
| Где Снять.Контрагент Eсть NULL

Приминительно к 0
23 dmt
 
11.09.18
12:02
(15) Тебе нужны объекты на охране? Спроектировано по дурацки. Но как вариант (в одну секунду м.б. 1 док постановки):

выбрать
П.К,
П.ОХ,
Максимум(П.Дата) КАК ДП,
Максимум(Сн.Дата) КАК ДСн
поместить ВТ_МаксДаты
из П левое соединение Сн
по П.К = Сн.К
И П.ОХ = Сн.ОХ
сгруппировать по П.К, П.ОХ
имеющие Максимум(П.Дата) > Максимум(Сн.Дата)
;

Выбрать
П.*
из П
правое соединение ВТ_МаксДаты КАК МД
по П.К = МД.К
И П.ОХ = МД.ОХ
И П.Дата = МД.ДП
24 dmt
 
11.09.18
12:05
(15) а как надо: периодический РС, измерения Контрагент, ОбъектОхраны, ресурс НаОхране. Документы делают движения, ты обращаещься к срезу последних РС
25 KIraA
 
11.09.18
12:06
(15) Да не настроено тут движение, приходится выкручиваться, искать методом исключения
26 Вафель
 
11.09.18
12:08
если нужно те кторые не сняты, то запрос пойдет, если нужны и те которые сняты, сто "снять" нужно группировать по "контрагент, объект"
27 Borteg
 
11.09.18
12:08
(25) где есть null допиши тогда и все, а вообще надо сделать правильною
28 catena
 
11.09.18
12:10
(25)Как их связывать-то нужно? По старшинству периода? Вручную объясни, как ты хочешь связать те 4, но вчера и эти 2, но сегодня.
29 KIraA
 
11.09.18
12:14
(27) с нулем вообще результтат нулевой, потому что связь есть и естественно с нулевым полем нету
30 KIraA
 
11.09.18
12:15
(28) По дате видимо )))
31 catena
 
11.09.18
12:17
(30)Даты у них последовательные (поставить-снять-поставить-снять) или бардак?
32 dmt
 
11.09.18
12:17
(29) исходные данные сюда скопируй. У тебя наверное 2 объекта, по разу поставлены-сняты, и еще раз поставлены
33 Borteg
 
11.09.18
12:18
(29) показывай запрос с нулем
34 dmt
 
11.09.18
12:18
(30) а ты вообще понимаешь что хочешь получить?
35 KIraA
 
11.09.18
12:20
(29) Да тут 2 дока поставлено потом 2 снято потом 2 опять поставлено. В принципе не важно в какой последовательности что когда проводилось, важны оставшиеся документы не связаные по перечислению поставить/снять.
36 KIraA
 
11.09.18
12:22
(29)
     |ИЗ
         |    Поставить КАК Поставить
         |        ЛЕВОЕ СОЕДИНЕНИЕ Снять КАК Снять
         |        ПО Поставить.Контрагент = Снять.Контрагент
         |            И Поставить.Объект = Снять.Объект
         |ГДЕ
         |    Снять.Контрагент ЕСТЬ NULL "
37 KIraA
 
11.09.18
12:24
Может нужно гденить Максимум указать? Чтоб в правой части было только 2 документа?
38 dmt
 
11.09.18
12:24
(37) см 23 и 24
39 Borteg
 
11.09.18
12:25
(35)
"ВЫБРАТЬ
      |    Перечень.Контрагент,
      |    Перечень.Объект,
      |    Перечень.Ссылка КАК Ссылка
      |ПОМЕСТИТЬ Поставить
      |ИЗ
      |    Документ.Перечень КАК Перечень
      |ГДЕ
      |    НЕ Перечень.ПометкаУдаления
      |    И Перечень.Контрагент = &Контрагент
      |    И Перечень.ОбъектОхраны = &ОбъектОхраны
      |    И Перечень.Тип = ЗНАЧЕНИЕ(Перечисление.Тип.Поставить)
      |;
      |
      ////////////////////////////////////////////////////////////////////////////////

      |ВЫБРАТЬ
      |    Поставить.Контрагент,
      |    Поставить.Объект,
      |    Снять.Контрагент КАК Контрагент1,
      |    Снять.Объект КАК Объект1,
      |    Поставить.Ссылка,
      |    Снять.Ссылка КАК Ссылка1
      |ИЗ
      |    Поставить КАК Поставить
      |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.Перечень КАК Снять
      |        ПО Поставить.Контрагент = Снять.Контрагент
      |            И Поставить.Объект = Снять.Объект
      |            И Снять.Тип = ЗНАЧЕНИЕ(Перечисление.Тип.Снять) И НЕ Снять.ПометкаУдаления
      | Где Снять.Контрагент ЕСть NULL"
40 OldCondom
 
11.09.18
12:27
В конфе документ с именем "Перечень", реквизитами "Объект" и "Тип" типа "ПеречислениеСсылка.Тип".
Полагаю реквизит "Объект" - это "СправочникСсылка.Объекты".

Развлекаются как могут.
41 Borteg
 
11.09.18
12:27
(37) быстрее сделать ((24)), там кода на пару строчек
42 dmt
 
11.09.18
12:29
(40) причем в славном документе Перечень есть реквизит Объект, а есть ОбъектОхраны!
43 KIraA
 
11.09.18
12:30
(42) да это просто не затерлось)))
44 KIraA
 
11.09.18
12:33
(41) Менять не дают, только дописать
45 Borteg
 
11.09.18
12:45
(44) а ничего менять и не надо, создать один регистр и добавить в обработке проведения движения
46 KIraA
 
11.09.18
12:50
(45) А 4-2 =2 НИКАК не сделать? И (23) Выберет только 1 последний документ? Или 2 оставшихся?
47 DexterMorgan
 
11.09.18
12:55
(46) Вопрос в том, какие два документа из 4 ты хочешь не выводить в конечном итоге
48 DexterMorgan
 
11.09.18
12:56
у тебя 4 с типом поставить и 2 - снять. Что в итоге ты хочешь увидеть?
49 catena
 
11.09.18
12:58
(46)Если их просто по старшинству периода выводить, то можно упорядочить по дате обе таблицы, пронумеровать строки и соединять по номеру строки.
50 Borteg
 
11.09.18
13:00
(46) так не получится, программа не додумает какие две записи отминусовать)

Давай определимся - тебе надо узнать в каком состоянии объект находится?(поставлен/снят)
Ты можешь просто выбрать последний документ по объекту контрагенту и узнать его состояние тогда
51 DexterMorgan
 
11.09.18
13:00
А все понятно, эмулируем работу оборотного РН в запросе.
52 DexterMorgan
 
11.09.18
13:00
РукаЛицо
53 KIraA
 
11.09.18
13:06
Мне нужно получить оставшиеся 2 документа с поставить Все.
54 dmt
 
11.09.18
13:11
(53) Тебе не это нужно. Догадываюсь, что  тебе нужны объекты на охране. Значит, вопрос ты должна была задать такой:  как получить последние документы Постановки, для которых нет более поздних документов Снятие (для каждой пары Контрагент-Объект).
55 KIraA
 
11.09.18
13:15
(53) Прям с языка снял. Прав прав прав))
56 DexterMorgan
 
11.09.18
13:16
(53) Ну в твоем примере в качестве изврата - получить разницу между количеством документов поставить и снять, выбрать все документы поставить, отсортировать по дате УБЫВ и взять первые такое то количество
57 DexterMorgan
 
11.09.18
13:20
(53) Можно, кстати и в одном запросе: пронумеровать таблицу поставить, получить количество документов поставить, соединить и отобрать по НомерСтроки <= КоличествоДокументов. Только не понятно правда зачем такой изврат=)
58 DexterMorgan
 
11.09.18
13:21
(57) * "получить количество документов поставить" - Получить разницу в количестве документов поставить/снять
59 KIraA
 
12.09.18
09:24
Доброе время суток (23) оказалось правильным решением, но одна загвоздка вот в этом куске...
|ВЫБРАТЬ
         |    МАКСИМУМ(Поставить.Дата) КАК ДП,
         |    МАКСИМУМ(Снять.Дата) КАК ДСн,
         |    Поставить.Контрагент,
         |    Поставить.Объект,
         |ПОМЕСТИТЬ ВТ_МаксДаты
         |ИЗ
         |    Поставить КАК Поставить
         |        ЛЕВОЕ СОЕДИНЕНИЕ Снять КАК Снять
         |        ПО Поставить.Контрагент = Снять.Контрагент
         |            И Поставить.ОбъектОхраны = Снять.Объект
         |
         |СГРУППИРОВАТЬ ПО
         |    Поставить.Контрагент,
         |    Поставить.Объект
         |
         |ИМЕЮЩИЕ
         |    МАКСИМУМ(Поставить.Дата) > МАКСИМУМ(Снять.Дата)
         |;

Если у меня нет ни одного документа о "Снять" то и даты соответственно нет.
Я так полагаю нужно впихнуть что то такое....
ВЫБОР
    КОГДА Снять.Дата ЕСТЬ NULL ТОГДА Снять.Дата = ДАТАВРЕМЯ(1,1,1)
    ИНАЧЕ Снять.Дата
КОНЕЦ
60 catena
 
12.09.18
09:28
(59)Это конструкция пишется намного проще: ЕстьNULL(Снять.Дата,ДАТАВРЕМЯ(1,1,1))
61 KIraA
 
12.09.18
09:30
(60) Спасибо
62 KIraA
 
12.09.18
09:33
Отдельное спасибо dmt и  catena. Все заработало. Пост можно закрывать.
AdBlock убивает бесплатный контент. 1Сергей