Множество, не входящее в другое множество

  1. 4 г. назад

    Господа, хз как это будет по-русски: исходная задача - найти те товарные позиции, что есть в Счёте и отсутствуют в Реализации по этому Счёту.
    Т.е. по идее - мне второй запрос, к таблице Реализаций, надо строить внутри ГДЕ (НЕ СчетНаОплатуПокупателюТовары.Номенклатура В (ВЫБРАТЬ …)), так?
    Но чота традиционно туплю и не вижу, как именно их связать.
    Кому не лениво - хелп, плиз.

  2. ЛЕВОЕ СОЕДИНЕНИЕ
    ГДЕ
    РТУ.Ссылка ЕСТЬ NULL

  3. Левое соединение с отбором по is null

  4. псевдокод навскидку

    ...
    ТоварыСчета.Количество - ЕСТЬNULL(ТоварыРеализации.Количество) КАК Количество
    ...
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК ТоварыРеализации
    ПО ТоварыСчета.Ссылка = ТоварыРеализации.Ссылка.СчетНаОплату
    И ТоварыРеализации.Ссылка.Проведен
    И ТоварыСчета.Номенклатура = ТоварыРеализации.Номенклатура
    ГДЕ ТоварыСчета.Ссылка = &Ссылка 
    И ТоварыСчета.Количество - ЕСТЬNULL(ТоварыРеализации.Количество) > 0

    оптимизируй сам

    в простом случае, если нужны отсутствующие во второй таблице записи, то ПраваяТаблица.ИмяПоля ЕСТЬ NULL

  5. подрезал

  6. ТоварыСчета.Количество - ЕСТЬNULL(ТоварыРеализации.Количество) > 0

    а это зачем?

  7. Вот тож не понял про ТоварыСчета.Количество - ЕСТЬNULL(ТоварыРеализации.Количество) КАК Количество

  8. ну понятно же, что опечатка
    ЕСТЬNULL(ТоварыРеализации.Количество, 0)

    Ответы: (8)
  9. (7) один хрен не понятно зочем. Если хочешь выявить расхождения по количеству, то нужно <>0

  10. 25.11.2020 16:34:28 отредактировано jsmith82

    [...], в счёте, например, 3 табуретки, продали 1, получаю остаток позиции к продаже
    не обязательно же позиция в ноль списывается
    хотя не. обязательно в ноль. значит, простой is null
    если же возможна частичная продажа, то надо делать вложенный запрос / временную таблицу, чтобы группировать номенклатуру по количеству

  11. Вообще, прав. Надо смотреть немного глубже ТЗ

  12. 25.11.2020 16:43:03 отредактировано Дуб

    Вот смотрите: делаю так.

    ВЫБРАТЬ
    	СчетНаОплатуПокупателюТовары.Ссылка КАК Счет,
    	СчетНаОплатуПокупателюТовары.Номенклатура КАК Номенклатура,
    	СчетНаОплатуПокупателюТовары.Количество КАК Количество
    ИЗ
    	Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
    		ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    		ПО СчетНаОплатуПокупателюТовары.Ссылка = РеализацияТоваровУслугТовары.Ссылка.СчетНаОплатуПокупателю
    ГДЕ
    	НЕ СчетНаОплатуПокупателюТовары.Номенклатура В
    				(ВЫБРАТЬ
    					РеализацияТоваровУслугТовары.Номенклатура
    				ИЗ
    					Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    						ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
    						ПО
    							РеализацияТоваровУслугТовары.Ссылка.СчетНаОплатуПокупателю = СчетНаОплатуПокупателюТовары.Ссылка)

    И получаю пустой результат.

    Ответы: (15)
  13. [...] Дуб ты американец
    ты вообще понял, что сам написал
    ты берёшь записи товаров всех реализаций базы данных и соединяешь их с записями товаров всех счетов на оплату по необходимому, но не достаточному условию равенства ссылки и счета на оплату
    даже медитировать на это не надо. пиши сразу правильно
    и где ты научился такие запросы писать?

    Ответы: (13) (14)
  14. (12) это конструктор :)

  15. (12) Дуб в 1С не разбирается.
    Дуб С# изучает. Чтобы переписать движок Дубового Форума.

  16. (11) по номенклатуре тоже соединять надоть

    Ответы: (18)
  17. Один фиг не понимаю

    ВЫБРАТЬ
    	СчетНаОплатуПокупателюТовары.Ссылка КАК Счет,
    	СчетНаОплатуПокупателюТовары.Номенклатура КАК Номенклатура,
    	СчетНаОплатуПокупателюТовары.Количество КАК Количество
    ИЗ
    	Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
    ГДЕ
    	НЕ СчетНаОплатуПокупателюТовары.Номенклатура В
    				(ВЫБРАТЬ
    					РеализацияТоваровУслугТовары.Номенклатура
    				ИЗ
    					Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    						ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
    						ПО
    							РеализацияТоваровУслугТовары.Ссылка.СчетНаОплатуПокупателю = СчетНаОплатуПокупателюТовары.Ссылка)
    
    

    Так - то же самое...

  18. 25.11.2020 16:59:10 отредактировано jsmith82

    Ответы: (19)
  19. (15) делаю так:

    ВЫБРАТЬ
    	СчетНаОплатуПокупателюТовары.Ссылка КАК Счет,
    	СчетНаОплатуПокупателюТовары.Номенклатура КАК Номенклатура,
    	СчетНаОплатуПокупателюТовары.Количество КАК Количество
    ИЗ
    	Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
    ГДЕ
    	НЕ СчетНаОплатуПокупателюТовары.Номенклатура В
    				(ВЫБРАТЬ
    					РеализацияТоваровУслугТовары.Номенклатура
    				ИЗ
    					Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    						ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
    						ПО
    							РеализацияТоваровУслугТовары.Ссылка.СчетНаОплатуПокупателю = СчетНаОплатуПокупателюТовары.Ссылка И 
    							РеализацияТоваровУслугТовары.Номенклатура = СчетНаОплатуПокупателюТовары.Номенклатура)
    

    Ничего не меняется

    Ответы: (21)
  20. (17) звездануться! Начерта такие замуты со временной таблицей?

    Ответы: (20)
  21. (19)в некоторых случаях необходимо

    Ответы: (21)
  22. (20) да у меня полторы записи! Это на больших массивах рекомендовали же...
    Но даже и не в том вопрос. Какого чёрта не работает (18)?..

    Ответы: (22)
  23. 25.11.2020 17:07:27 отредактировано 1Сергей

    (21) хз

    Вот для понимания:

    ВЫБРАТЬ
    	СчетНаОплатуТовары.Ссылка КАК Ссылка,
    	СчетНаОплатуТовары.Номенклатура КАК Номенклатура,
    	СчетНаОплатуТовары.Количество КАК Количество
    ИЗ
    	Документ.СчетНаОплату.Товары КАК СчетНаОплатуТовары
    		ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    		ПО РеализацияТоваровУслугТовары.Ссылка.СчетНаОплату = СчетНаОплатуТовары.Ссылка
    			И РеализацияТоваровУслугТовары.Номенклатура = СчетНаОплатуТовары.Номенклатура
    ГДЕ
    	СчетНаОплатуТовары.Ссылка = &Ссылка
    	И РеализацияТоваровУслугТовары.Ссылка ЕСТЬ NULL
  24. Дуб, ты делаешь выборку счёта и товара с количеством, а сравниваешь только товар:
    НЕ СчетНаОплатуПокупателюТовары.Номенклатура В (...)
    вполне может быть, что по одному счёту товары все проданы, а по другому — нет, хотя товары одни и те же
    налицо интуитивное общение с бубном, но оно тут не прокатывает

    Ответы: (25)
  25. Хотя - почему оно должно работать при таком условии?... Что-то я - того.... Прошу пардона.

  26. (23) да я вот и смотрю. Пока таймаут.
    Спасибо :)

  27. 25.11.2020 18:08:45 отредактировано jsmith82

    А вообще, твой сферический в вакууме запрос, не имеющий практического применения, должен был быть таким:

    Ответы: (27)
  28. (26) вложенные запросы моветон же...

    Ответы: (28) (29) (33)
  29. (27) какая чушь

  30. (27) ёба, мэн
    Я так понял, что Дубу нужен был именно такой запрос не для решения практических задач, а для прокачки дао.

  31. Последние версии SQL например умеют пробрасывать параметры запроса во вложенные запросы, как в СКД, с ВТ такое не прокатит

  32. Не говоря уже о том что ВТ забивают ТемпДБ, короче каждый инструмент нужно использовать в нужном месте, а рекомендации 1С - это для ламеров

  33. ты, [...], щас вот из одной крайности в другую ушёл, не? вэтэ.. на.. забивают темпдэбэ... на... следовать рекомендациям 1с значит быть ламером..
    я использую вэтэ [...] потому что мне так удобно
    если чо, блять, в типовых [...] творится. можно забивать [...] на все стандарты и рекомендации

  34. Guk вложенные запросы моветон же...

    Теоретически считается, что да.
    Но на практике сталкивался с примерами, когда они намного быстрее ВТ работают.

  35. вы так говорите, будто кто-то вложенные запросы использует, ха-ха

    Ответы: (35)
  36. (34) Писатели типовых используют.
    И иногда я.

  37. ВТ часто используется вместо не сделанных 1с в языке запросов табличных переменных.

или зарегистрируйтесь чтобы ответить!