|
Не работает есть null в запросе, почему? | ☑ | ||
---|---|---|---|---|
0
Ly_Alena
19.01.19
✎
22:51
|
Доброй ночи!
Нужно выбрать номенклатуру, у которой приход - документ поступление товаров и услуг. По факту выбирает все подряд. Пробовала выбрать все документы списком, которые не нужны - тоже не работает. А теперь вопрос, товарищи знатоки - что не так? Запрос: ВЫБРАТЬ ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура, ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Склад, ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.ХарактеристикаНоменклатуры.ГВ КАК ГодВыпуска, ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура.Код КАК Код, СУММА(ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.КоличествоНачальныйОстаток) КАК КоличествоНачальныйОстаток, СУММА(ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.КоличествоПриход) КАК КоличествоПриход, СУММА(ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.КоличествоРасход) КАК КоличествоРасход, СУММА(ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток ИЗ РегистрНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет.ОстаткиИОбороты(&НачалоПериодаФормирования, &КонецПериодаФормирования, , , ) КАК ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.Номенклатура КАК Номенклатура ИЗ РегистрНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет.Обороты(&НачалоПериодаФормирования, &НачалоПериодаБезДвижения, Регистратор, ) КАК ПартииТоваровНаСкладахБухгалтерскийУчетОбороты ГДЕ ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.КоличествоПриход > 0 И НЕ ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг СГРУППИРОВАТЬ ПО ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.Номенклатура) КАК ВложенныйЗапрос ПО ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура = ВложенныйЗапрос.Номенклатура ГДЕ ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.КоличествоКонечныйОстаток > 0 И ВложенныйЗапрос.Номенклатура ЕСТЬ NULL СГРУППИРОВАТЬ ПО ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Склад, ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура, ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.ХарактеристикаНоменклатуры.ГВ, ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура.Код |
|||
1
RomanYS
19.01.19
✎
23:02
|
(0) Не согласуется как-то:
"у которой приход - документ поступление товаров и услуг" и "НЕ ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг" |
|||
2
Ly_Alena
19.01.19
✎
23:04
|
(1) во вложенном выбираем все документы которые не поступление, а далее при соединении с РН соединяем по номенклатуре и в условиях есть null
|
|||
3
Ly_Alena
19.01.19
✎
23:05
|
(2) то есть исключаем все документы, которые выбрали и остается только поступление
|
|||
4
AlvlSpb
19.01.19
✎
23:40
|
(2) Во вложенном запросе НЕТ номенклатуры со значением NULL
Зачем вырезать гланды через седалище? Сразу отбирайте номенклатуру по регистратору Поступление |
|||
5
RomanYS
19.01.19
✎
23:53
|
(2) Или логика нарушена, или мое понимание исходной задачи:
во вложенном запросе номенклатура, по которой есть приходы по не ПТиУ. Итого вы не может знать были ли приходы по ПТиУ, т.к. во вложенном запросе такая номенклатура может быть или не быть. |
|||
6
Ly_Alena
20.01.19
✎
09:33
|
(4) Во вложенном запросе такой номенклатуры нет - в том и смысл, мне нужна номенклатура по которой связь с регистром нулевая. Т.е. номенклатура у которой есть в регистраторах Поступление.
|
|||
7
Ly_Alena
20.01.19
✎
09:35
|
(5) во вложенном запросе такая номенклатура есть.
из партий нужно выбрать всю номенклатуру, исключая то что есть во вложенном запросе. |
|||
8
Лодырь
20.01.19
✎
09:43
|
Вы проверяли содержимое вложенного запроса?
|
|||
9
Ly_Alena
20.01.19
✎
09:51
|
(8) Да. Убирала все - выводила регистратор, снова соединяла. Не работает - какой-то тупняк не могу понять какой.
|
|||
10
Фрэнки
20.01.19
✎
10:00
|
(6) Я бы тогда принципиально написал запрос с использованием не вложенного запроса, а пакетом. Сразу выбрать и поместить в виртуальную таблицу со всеми разумными условиями. Затем соединяем и смотрим условия соединения. Так будет легче составить сам запрос. Позже можно будет подумать о его оптимизации, если в этом возникнет необходимость.
|
|||
11
Ly_Alena
20.01.19
✎
10:40
|
(10) что значит разумными условиями и условия соединения? Временные таблицы пробовала.
|
|||
12
dmpl
20.01.19
✎
10:57
|
(0) В консоли запросов выполните подзапрос - что он выдает? У вас там даты отборов по регистрам разные.
|
|||
13
Ly_Alena
20.01.19
✎
11:17
|
(12) Я знаю что даты разные - так должно быть. Да и не в датах дело...
|
|||
14
Фрэнки
20.01.19
✎
11:50
|
(11) ну например, вот это условие для поля ВложенныйЗапрос.Номенклатура. Я не хочу утверждать, что это не должно работать, но я сам так не написал бы. Структурно сделал бы первый запрос в пакете с Поместить в втНоменклатура и затем Левое соединение во втором запросе. Но еще раз подчеркну, что тут чисто стиль написания - мои предпочтения при составлении корректно работающего запроса - сделать пакет из множества выборок с получением нескольких ВТ и связать их в итоговом. Когда все заработало, переходить к оптимизации.
|
|||
15
Ly_Alena
20.01.19
✎
12:03
|
(14) Дело в том что поступление номенклатуры нужно сделать без привязки к складу или характеристике, то есть тупо всю номенклатуру по предприятию, а потом уже исключить ее и подвязать и склад и характеристики. Как это сделать с кучей ВТ не представляю.
|
|||
16
bolder
20.01.19
✎
12:06
|
(0) Извращение какое то)Почему нельзя прямо ограничить регистратором то?
|
|||
17
Sapiens_bru
20.01.19
✎
12:27
|
(0) А если в указанном периоде приход одной номенклатуры выполнялся разными документами? Например было и поступление от поставщика и возврат от покупателя. Как запрос должен отработать такое совпадение?
|
|||
18
Фрэнки
20.01.19
✎
12:29
|
(15) но может так и стоит сделать. Буквально в топике так и сказано, но в коде не сделано.
Выбрать по справочнику Номенклатура Соединять выборки из регистров с выборкой по Номенклатуре и там где будет нул в соединении, там оборота не было. А так, как написано сейчас = выборка всех и остатков и оборотов. Нечеткое условие. Сейчас к полученным остаткам и оборотам чего-то прикручено еще раз обороты и что? Масло масленное какое-то |
|||
19
dmpl
20.01.19
✎
13:27
|
(13) Что возвращает подзапрос? Ну или исполнить весь запрос, и добавить в выборку поле ВложенныйЗапрос.Номенклатура.
|
|||
20
Ly_Alena
20.01.19
✎
15:30
|
(17) если есть хоть один документ поступления - то должен отобрать номенклатуру.
|
|||
21
Ly_Alena
20.01.19
✎
15:32
|
(19) в том-то и дело что из исполненного запроса, нужно исключить всю номенклатуру, которая пришла не через поступление. Между складами вечная движуха - на склад номенклатура могла попасть через перемещение, да через кучу документов.
|
|||
22
Sapiens_bru
20.01.19
✎
15:36
|
(21) (20) Вы сами себе противоречите. Если товар "Печенька" пришел и поступлением и перемещением? Нужно показать весь оборот такого товара?
|
|||
23
hhhh
20.01.19
✎
16:07
|
(20) ну, вы же не исключение другие документы. Значит, они тоже должны быть. А не только поступление.
|
|||
24
dmpl
20.01.19
✎
18:13
|
(21) Так у вас ВложенныйЗапрос.Номенклатура будет NULL если вообще никаких движений по товару не было. Поэтому чтобы убедиться, что ЕСТЬ NULL работает, достаточно в запросе выбрать то поле, которое проверяется на NULL.
|
|||
25
Ly_Alena
20.01.19
✎
19:13
|
(22) на предприятие товар не может придти перемещением, а вот на склад да. Отбор идет по номенклатуре. Если в обороте есть поступление - неважно даже на одну ед товару - мне подходит. Весь оборот будет показан через партии.
(23) Исключить не получается - потому и сюда обратилась. Есть номенклатура, у которой во всем обороте документа поступления в принципе нет (и не спрашивайте как так?) - мне ее нужно исключить. Отчет - отображает все обороты и остатки, единственное не все позиции которые нужны. Мне кажется по запросу все видно. (24) В данном запросе проверяется связь - то есть партии соединяем с вложенным запросом только по номенклатуре у которой было поступление. ТО есть связываем только по тому чему нет связи с отбором во вложенном цикле. Не знаю насколько понятно объяснила. Я думала конструкция понятна... |
|||
26
Sapiens_bru
20.01.19
✎
19:38
|
(25) Ваш вложенный запрос проверяет не наличие поступлений, а отсутствие поступления в КОНКРЕТНОЙ записи регистра. Затем вся такая номенклатура группируется.
Возьмем например яблочко, оно поступило и было перемещено. Вложенный запрос увидит 2 записи в регистре, одну пропустит по условию, вторую возьмет в результат. И вот ваше яблочко уже считается не поступавшим по вашей логике? Перепишите запрос корректно - вложенным запросом выберите всю номенклатуру по которой БЫЛО поступление, а затем сделайте ВНУТРЕННЕЕ соединение с таблицей верхнего уровня. |
|||
27
Ёпрст
21.01.19
✎
09:02
|
(0) хз, что вам надо, так может ?
|
|||
28
Ёпрст
21.01.19
✎
09:03
|
условие на номенклатуру можете и унутьрь ВТ останкиИОбороты запихать, если че..
|
|||
29
catena
21.01.19
✎
10:05
|
А почему условия на регистратор, а не на ДокументОприходования?
|
|||
30
dezss
21.01.19
✎
10:10
|
И НЕ ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
заменить на И ПартииТоваровНаСкладахБухгалтерскийУчетОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг А это убрать И ВложенныйЗапрос.Номенклатура ЕСТЬ NULL |
|||
31
dezss
21.01.19
✎
10:12
|
(30) + соединение сделать внутренним
|
|||
32
dezss
21.01.19
✎
10:13
|
ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура.Код КАК Код,
этот треш нафиг...лучше явно соединиться с номенклатурой и оттуда вытащить код...либо это сделать во вложенном запросе. |
|||
33
dmpl
21.01.19
✎
10:33
|
(29) Чтобы перемещения между складами отсеять.
|
|||
34
Ly_Alena
22.01.19
✎
20:20
|
(26) это фиаско, братан!
С логикой явно у меня проблема - спасибо! Сейчас свежим взглядом посмотрю. Спасибо еще раз! |
|||
35
Ly_Alena
22.01.19
✎
22:03
|
(26) (31) Сделала отбор по поступлению с внутренним соединением - все получилось! Спасибо!
Еще вопрос - как отобрать номенклатуру, если у нее из регистраторов только Перемещение товаров, хоть одна хоть не одна запись? Такое вообще возможно? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |