Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 06:50

"Задваивание" данных в отчете

Автор mashencev_anton, 27 июл 2015, 15:53

0 Пользователей и 1 гость просматривают эту тему.

mashencev_anton

Друзья помогите правильно составить Запрос.
Вот по такой схеме нужно отследить  номенклатуру:
ЗаявкаКлиента->ЗаказПодКл->ПредварительныйЗаказПоставщику->ОсновнойЗаказПоставщику->ПоступлениеТоваров

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

Работает но не совсем правильно. Дело в том, что если к примеру в ЗаявкеКлиенту одна номенклатура будет "выбита" двумя позициями, то количество по другим документам , где участвует эта номенклатура, будет задвоиным. Как выход, попробовал сделать так
ЦитироватьСУММА(ЗаявкаКлиента.Количество) КАК КоличествоЗаявка,
и этот вариант отрабатыватся правильно в случае когда именно в ЗаявкеКлиента одна номенклатура "Выбита" двумя позициями. как быть??

vitasw


mashencev_anton

Цитата: vitasw от 27 июл 2015, 16:21
Для начала поясните термин
Цитата: mashencev_anton от 27 июл 2015, 15:53"Выбита"
Я имел виду что в ТЧ документа присутствует к примеру две строки с одной и той же номенклатурой

vitasw

группируйте по ссылке и номенклатуре. Только сначала надо группировать, а потом цеплять левые соединения.

mashencev_anton

Цитата: vitasw от 27 июл 2015, 16:48
группируйте по ссылке и номенклатуре. Только сначала надо группировать, а потом цеплять левые соединения.
т.е. использовать вложенные запросы??

vitasw

Ээээ, не обязательно. Есть еще временные таблицы. Однозначно сказать нельзя. Нужно выполнить группировку, а с помощью чего это вы будете делать - не суть важно.

mashencev_anton

Цитата: vitasw от 27 июл 2015, 17:01
Ээээ, не обязательно. Есть еще временные таблицы. Однозначно сказать нельзя. Нужно выполнить группировку, а с помощью чего это вы будете делать - не суть важно.
к сожалению не прокатило(( ВЫБРАТЬ
Заявка.Ссылка КАК ЗаявкаКлиента,
Заявка.Номенклатура,
Заявка.Количество КАК КоличествоЗаявка,
ЗаказПодКлиента.Количество КАК КоличествоПодКлиента,
Предварительный.Количество КАК КоличествоПредварительный,
ОсновнойЗаказ.Количество КАК КоличествоОсновной,
Поступление.Количество КАК КоличествоПоступление,
ЗаказПодКлиента.Ссылка КАК ЗаказПодКлиента
ИЗ
(ВЫБРАТЬ
ЗаказПокупателяТовары.Ссылка КАК Ссылка,
ЗаказПокупателяТовары.Количество КАК Количество,
ЗаказПокупателяТовары.Номенклатура КАК Номенклатура
ИЗ
Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
ГДЕ
ЗаказПокупателяТовары.Ссылка.Проведен
И ЗаказПокупателяТовары.Ссылка = &Ссылка

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

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

СГРУППИРОВАТЬ ПО
ЗаказПоставщикуТовары.Номенклатура,
ЗаказПоставщикуТовары.Ссылка,
ЗаказПоставщикуТовары.Количество,
ЗаказПоставщикуТовары.ДокументРазмещение) КАК Предварительный
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ЗаказПоставщикуТовары.Ссылка КАК Ссылка,
ЗаказПоставщикуТовары.Количество КАК Количество,
ЗаказПоставщикуТовары.Номенклатура КАК Номенклатура
ИЗ
Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
ГДЕ
ЗаказПоставщикуТовары.Ссылка.Проведен
И НЕ ЗаказПоставщикуТовары.Ссылка.Предварительный

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

СГРУППИРОВАТЬ ПО
ПоступлениеТоваровУслугТовары.Номенклатура,
ПоступлениеТоваровУслугТовары.Ссылка,
ПоступлениеТоваровУслугТовары.Количество) КАК Поступление
ПО ОсновнойЗаказ.Ссылка = Поступление.Ссылка.Сделка
И ОсновнойЗаказ.Номенклатура = Поступление.Номенклатура
ПО Предварительный.Номенклатура = ОсновнойЗаказ.Номенклатура
И Предварительный.Ссылка = ОсновнойЗаказ.Ссылка.ДокументОснование
ПО ЗаказПодКлиента.Номенклатура = Предварительный.Номенклатура
И ЗаказПодКлиента.Ссылка = Предварительный.ДокументРазмещение
ПО Заявка.Ссылка = ЗаказПодКлиента.ЗаказПокупателя
И Заявка.Номенклатура = ЗаказПодКлиента.Номенклатура

vitasw

Цитата: mashencev_anton от 27 июл 2015, 17:28к сожалению не прокатило((

Это как-бы не очень информационный ответ. Что вы ожидали увидеть, а что получили?

Дмитрий@

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

temrmal

Автор, проблема в том что наверно не совсем представляете суть соединений и группировок.
Нарисуйте на бумаги таблицы с воображаемыми строками и представьте как пройдет соединение. Тогда поймете.
Даже если идет левое соединение и правая таблица сгруппирована, это не означает что не будет задвоений. Та же ситуация может произойти и в правых таблицах. Поэтому группируйте все таблицы, а потом соединяйте. И лучше использовать пакеты (врем. таблицы) как и написали выше
Добавлено: 28 июл 2015, 08:54


Цитата: Дмитрий@ от 27 июл 2015, 18:28
Это явно на группировку не тянет
ВЫБРАТЬ
        ЗаказПокупателяТовары.Ссылка КАК Ссылка,
        ЗаказПокупателяТовары.Количество КАК Количество,
        ЗаказПокупателяТовары.Номенклатура КАК Номенклатура
    ИЗ
        Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
    ГДЕ
        ЗаказПокупателяТовары.Ссылка.Проведен
        И ЗаказПокупателяТовары.Ссылка = &Ссылка
   
    СГРУППИРОВАТЬ ПО
        ЗаказПокупателяТовары.Ссылка,
        ЗаказПокупателяТовары.Номенклатура,
        ЗаказПокупателяТовары.Количество


Обычная группировка

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск