Часто встречающаяся задача. Варианты решения.

  1. 9 г. назад

    Допустим есть табличная часть документа. В ней 5 строк.
    В запросе я левым соединением соединяю её с некой таблицей и у меня задваиваются строки.
    Запрос мне возвращает вместо пяти строк, 25.

    Как боретесь с задваиванием строк?
    Можно ли построить запрос так, чтобы левое соединение не задваивало строки?

  2. Выбрать различные
    ....
    или
    ....
    СГРУППИРОВАТЬ ПО

  3. группировкой

  4. Вот пример:

    ВЫБРАТЬ
    МК_РозничнаяПродажаЧек.Номенклатура,
    МестаХраненияНоменклатуры.МестоХранения,
    МК_РозничнаяПродажаЧек.Количество,
    МК_РозничнаяПродажаЧек.Сумма
    ИЗ
    Документ.МК_РозничнаяПродажаЧек.Товары КАК МК_РозничнаяПродажаЧек
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
    ПО МК_РозничнаяПродажаЧек.Номенклатура = МестаХраненияНоменклатуры.Номенклатура
    И (МестаХраненияНоменклатуры.Склад = &Склад)
    ГДЕ
    МК_РозничнаяПродажаЧек.Ссылка = &НашДокумент

    Теперь мне надо перебирать запрос и удалять все задвоенные строки

    Ответы: (4) (6)
  5. 10.09.2014 15:52:21 отредактировано sda553

    (3) Э....а что вообще показывать должен этот запрос в поле "Место хранения"? По бизнес смыслу запроса?

  6. а у тебя и в левой и правой таблице изначально строки не задвоенные?

    Ответы: (10)
  7. 10.09.2014 15:54:21 отредактировано Bekas

    Я вот это :

    (МестаХраненияНоменклатуры.Склад = &Склад)

    считаю плохим условием соединения

  8. Может, вот так:

    ВЫБРАТЬ
    МК_РозничнаяПродажаЧек.Номенклатура,
    МестаХраненияНоменклатуры.МестоХранения,
    МК_РозничнаяПродажаЧек.Количество,
    МК_РозничнаяПродажаЧек.Сумма
    ИЗ
    Документ.МК_РозничнаяПродажаЧек.Товары КАК МК_РозничнаяПродажаЧек
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
    ПО МК_РозничнаяПродажаЧек.Номенклатура = МестаХраненияНоменклатуры.Номенклатура
    ГДЕ
    МК_РозничнаяПродажаЧек.Ссылка = &НашДокумент
    И (МестаХраненияНоменклатуры.Склад = &Склад)

    Ответы: (14)
  9. Вы хоть выясните что человек хочет в таблице результата запроса получить то вообще. Если Номенклатура, количество, сумма еще понятно, что это объем продаж номенклатуры. То что означает место хранения? Особенно если номенклатура может лежать в нескольких местах хранения? Место хранения где этих номенклатур больше всего? Или место где эти номенклатуры самые старые по партии? Или что это вообще за "Место хранения", что оно должно показать?

    Ответы: (11)
  10. а еще МестаХраненияНоменклатуры.МестоХранения и МестаХраненияНоменклатуры.Склад - это разные вещи

  11. (5) вот!! Задвоены и еще как. Что слева что справа.

    Усложняем задачу.
    Менеджер вбил в документ все пять строк одинаковой номенклатуры.
    А кладовщику нужно в печатной форме чтобы всё количество по одной номенклатуре суммировалось и сбоку прицепилось одно!!! любое место хранение.
    При этом у каждой номенклатуры по одному складу может быть мест хранения от 0 до докуя. Наличие никому ненужного измерения "Приоритет" в регистре мест хранения это позволяет.

    Ответы: (12)
  12. (8) абстрактная задача на поиск лучшего алгоритма.
    Реальную я и сам без вас напишу.

  13. (10) выбирай РАЗЛИЧНЫЕ из каждой таблицы по отдельности, выгружай во ВТ каждую, потом третьим запросом соединять их как задумал

  14. 10.09.2014 16:30:10 отредактировано sda553

    ВЫБРАТЬ
    МК_РозничнаяПродажаЧек.Номенклатура,
    МестаХраненияНоменклатуры.МестоХранения,
    МК_РозничнаяПродажаЧек.Количество,
    МК_РозничнаяПродажаЧек.Сумма
    ИЗ
    Документ.МК_РозничнаяПродажаЧек.Товары КАК МК_РозничнаяПродажаЧек
    ЛЕВОЕ СОЕДИНЕНИЕ
    (выбрать Максимум(МестоХранения) КАК МестоХранения,Номенклатура,Склад
    ИЗ
    РегистрСведений.МестаХраненияНоменклатуры
    СГРУППИРОВАТЬ ПО Номенклатура,Склад
    )КАК МестаХраненияНоменклатуры
    ПО МК_РозничнаяПродажаЧек.Номенклатура = МестаХраненияНоменклатуры.Номенклатура
    ГДЕ
    МК_РозничнаяПродажаЧек.Ссылка = &НашДокумент
    И (МестаХраненияНоменклатуры.Склад = &Склад)

  15. (7) а чем тебе условие на склад в соединении не понравилось? Зачем ты его выне во в "где"?

  16. Было как-то на дубовом: http://vapaus.ru/16371?0

  17. Как боретесь с задваиванием строк?

    Правильно писать запросы не предлагать? Когда у меня возникает задваивание данных, вытаскиваю получение таблиц для соединения в отдельные запросы. Смотрю что выходит, нахожу и устраняю ошибку. Как правило добавляя группировку.

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