|
Выбор элементов справочника, у которых нет записи в регистре сведений | ☑ | ||
---|---|---|---|---|
0
Len1vec
25.03.19
✎
13:50
|
Помогите, пожалуйста, разобраться.
Есть справочник "Спецификации". При записи его элемента производится передача этого элемента и делается соответствующая запись в регистре сведений. В запросе надо отобрать те элементы справочника, у которых дата выгрузки (ВыгрузкаОбъектовСрезПоследних.Период) меньше указанной или дата больше, но тогда отобрать те элементы, в которых статус не обработан. Так же есть элементы справочника, у которых запись в регистре сведений нет. Как правильно запросом получить такие элементы справочника? ВЫБРАТЬ Спецификации.Код, Спецификации.Ссылка КАК Документ, ВыгрузкаОбъектовСрезПоследних.Статус, ВыгрузкаОбъектовСрезПоследних.Период КАК Дата ИЗ Справочник.Спецификации КАК Спецификации ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВыгрузкаОбъектов.СрезПоследних КАК ВыгрузкаОбъектовСрезПоследних ПО Спецификации.Ссылка = ВыгрузкаОбъектовСрезПоследних.ОбъектВыгрузки И Спецификации.Ссылка = ВыгрузкаОбъектовСрезПоследних.ОбъектРегистратор ГДЕ (ВыгрузкаОбъектовСрезПоследних.Период > &ДатаВыгрузки И ВыгрузкаОбъектовСрезПоследних.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусВыгрузкиОбъекта.Обработан) ИЛИ ВыгрузкаОбъектовСрезПоследних.Период < &ДатаВыгрузки) |
|||
1
Cyberhawk
25.03.19
✎
13:50
|
Ты разместил условие на присоединяемую таблицу в секцию ГДЕ. Соединение стало по факту внутренним.
|
|||
2
Cyberhawk
25.03.19
✎
13:51
|
К тому же это значительно снизило читаемость кода (текста запроса). Не делай так.
|
|||
3
Len1vec
25.03.19
✎
13:57
|
(1) Этот вариант единственный, который отчасти(!) выдавал правильный результат. Сейчас бы к этому результату получить те элементы справочника, у которых нет записи в регистре сведений.
|
|||
4
hhhh
25.03.19
✎
14:02
|
(3) ну, вместо ГДЕ пишешь И
|
|||
5
Len1vec
25.03.19
✎
14:11
|
(4) Выводит лишние записи
|
|||
6
DrWatson
25.03.19
✎
14:26
|
(5) не только (4), ещё и (1) надо сделать.
|
|||
7
Len1vec
25.03.19
✎
14:28
|
(6) Что-то не понимаю. Это как?
|
|||
8
Len1vec
25.03.19
✎
14:29
|
(6) понял)
|
|||
9
DrWatson
25.03.19
✎
14:29
|
(7) Имеется в виду, что нужно написать ВНУТРЕННЕЕ СОЕДИНЕНИЕ, а не ЛЕВОЕ
|
|||
10
DrWatson
25.03.19
✎
14:33
|
Хотя всё это неправильно, если обратить внимание на "есть элементы справочника, у которых запись в регистре сведений нет". У тебя же запрос не возвращает такие элементы?
|
|||
11
Len1vec
25.03.19
✎
14:35
|
(9) с ЛЕВОЕ СОЕДИНЕНИЕ отрабатывает корректнее...
|
|||
12
Len1vec
25.03.19
✎
14:37
|
(10) Нет, с ЛЕВОЕ СОЕДИНЕНИЕ возвращал, но не все.
В справочнике спецификации 3841 элемент, а в запросе выводит всего 3765 (имеется в виду те, у которых установлен реквизит Справочник.Спецификации.Активность типа булево в значение Ложь) |
|||
13
DrWatson
25.03.19
✎
14:38
|
(11) Неожиданно. А в чем получилась разница?
|
|||
14
zehn
25.03.19
✎
14:40
|
> у которых дата выгрузки (ВыгрузкаОбъектовСрезПоследних.Период) меньше указанной или дата больше, но тогда отобрать те элементы, в которых статус не обработан.
Прямо буквально: ГДЕ ВЫБОР КОГДА ВыгрузкаОбъектовСрезПоследних.Период ЕСТЬ NULL ТОГДА // Нет записи в регистре ИСТИНА КОГДА ВыгрузкаОбъектовСрезПоследних.Период < &ДатаВыгрузки ТОГДА // Меньше указанной ИСТИНА ИНАЧЕ // Больше или равна ВыгрузкаОбъектовСрезПоследних.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусВыгрузкиОбъекта.Обработан) КОНЕЦ |
|||
15
Len1vec
25.03.19
✎
14:41
|
(13) самому интересно.
Та же ситуация со значением "Истина": 15965 элементов справочника против 15723 записей в запросе. |
|||
16
Len1vec
25.03.19
✎
14:46
|
Сейчас полностью запрос выглядит так:
"ВЫБРАТЬ | ВЫРАЗИТЬ(0 КАК ЧИСЛО) КАК Номер, | Спецификации.Код, | Спецификации.Ссылка КАК Техкарта, | ВыгрузкаОбъектовСрезПоследних.Статус, | ВыгрузкаОбъектовСрезПоследних.Период КАК Дата |ИЗ | Справочник.Спецификации КАК Спецификации | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВыгрузкаОбъектов.СрезПоследних КАК ВыгрузкаОбъектовСрезПоследних | ПО Спецификации.Ссылка = ВыгрузкаОбъектовСрезПоследних.ОбъектВыгрузки | И Спецификации.Ссылка = ВыгрузкаОбъектовСрезПоследних.ОбъектРегистратор | И (ВыгрузкаОбъектовСрезПоследних.Период > &ДатаВыгрузки | И ВыгрузкаОбъектовСрезПоследних.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусВыгрузкиОбъектаВSAPR3.Обработан) | ИЛИ ВыгрузкаОбъектовСрезПоследних.Период < &ДатаВыгрузки) |ГДЕ | Спецификации.Наименование ПОДОБНО ""[^В]%""" + ?(ЭтаФорма.Активность = "Все", "",(?(ЭтаФорма.Активность = "Активные", " И Спецификации.Активность", " И НЕ Спецификации.Активность")))+""+ ?(ЭтаФорма.Удаленные = "Все", "",(?(ЭтаФорма.Удаленные = "Удаленные", " И Спецификации.ПометкаУдаления", " И НЕ Спецификации.ПометкаУдаления")))+" |УПОРЯДОЧИТЬ ПО | Спецификации.Код" ; Запрос.УстановитьПараметр("ДатаВыгрузки", ДатаВыгрузки); |
|||
17
Len1vec
25.03.19
✎
14:50
|
(14) Выдает тот же результат
|
|||
18
bolero
25.03.19
✎
14:59
|
(0) sql-аналог для понимания правильной механики:
cat - справочник, reg - регистр |
|||
19
Len1vec
25.03.19
✎
16:41
|
Решение найдено. Всем спасибо!)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |