ВЫБРАТЬ
СУММА(таб1.Р_Количество) КАК Р_Количество,
СУММА(таб1.Р_Сумма_С_НДС) КАК Р_Сумма_С_НДС,
СУММА(таб1.Р_Сумма_НДС) КАК Р_Сумма_НДС,
СУММА(таб1.Р_Сумма_Без_НДС) КАК Р_Сумма_Без_НДС,
таб1.Р_СчетУчета,
таб1.Р_СчетУчетаРасчетовСКонтрагентом,
таб1.Р_Период,
таб1.Р_НоменклатурнаяГруппа,
таб1.Р_Номенклатура,
СУММА(Таб2.Количество) КАК Количество,
СУММА(Таб2.Сумма_С_НДС) КАК Сумма_С_НДС,
СУММА(Таб2.Сумма_НДС) КАК Сумма_НДС,
СУММА(Таб2.Сумма_без_НДС) КАК Сумма_без_НДС,
Таб2.СчетУчета,
Таб2.СчетУчетаРасчетовСКонтрагентом,
Таб2.Период,
Таб2.НоменклатурнаяГруппа,
Таб2.Номенклатура
ИЗ
(ВЫБРАТЬ
СУММА(Реализация.Р_Количество) КАК Р_Количество,
СУММА(Реализация.Р_Сумма_С_НДС) КАК Р_Сумма_С_НДС,
СУММА(Реализация.Р_Сумма_НДС) КАК Р_Сумма_НДС,
СУММА(Реализация.Р_Сумма_Без_НДС) КАК Р_Сумма_Без_НДС,
Реализация.Р_СчетУчета КАК Р_СчетУчета,
Реализация.Р_СчетУчетаРасчетовСКонтрагентом КАК Р_СчетУчетаРасчетовСКонтрагентом,
Реализация.Р_Период КАК Р_Период,
Реализация.Р_НоменклатурнаяГруппа КАК Р_НоменклатурнаяГруппа,
Реализация.Р_Номенклатура КАК Р_Номенклатура
ИЗ
(ВЫБРАТЬ
СУММА(РеализацияТоваровУслугТовары.Количество) КАК Р_Количество,
ВЫБОР
КОГДА РеализацияТоваровУслуг.СуммаВключаетНДС = &нет
ТОГДА СУММА(РеализацияТоваровУслугТовары.Сумма + РеализацияТоваровУслугТовары.СуммаНДС)
ИНАЧЕ СУММА(РеализацияТоваровУслугТовары.Сумма)
КОНЕЦ КАК Р_Сумма_С_НДС,
РеализацияТоваровУслугТовары.СчетУчета КАК Р_СчетУчета,
РеализацияТоваровУслугТовары.Номенклатура.НоменклатурнаяГруппа КАК Р_НоменклатурнаяГруппа,
СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК Р_Сумма_НДС,
РеализацияТоваровУслуг.СчетУчетаРасчетовСКонтрагентом КАК Р_СчетУчетаРасчетовСКонтрагентом,
НАЧАЛОПЕРИОДА(РеализацияТоваровУслуг.Дата, МЕСЯЦ) КАК Р_Период,
ВЫБОР
КОГДА РеализацияТоваровУслуг.СуммаВключаетНДС = &да
ТОГДА СУММА(РеализацияТоваровУслугТовары.Сумма - РеализацияТоваровУслугТовары.СуммаНДС)
ИНАЧЕ СУММА(РеализацияТоваровУслугТовары.Сумма)
КОНЕЦ КАК Р_Сумма_Без_НДС,
РеализацияТоваровУслугТовары.Номенклатура КАК Р_Номенклатура,
РеализацияТоваровУслуг.Ссылка КАК Р_Ссылка,
РеализацияТоваровУслуг.СуммаВключаетНДС КАК Р_СуммаВключаетНДС
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ПО РеализацияТоваровУслугТовары.Ссылка = РеализацияТоваровУслуг.Ссылка
ГДЕ
РеализацияТоваровУслугТовары.СчетУчета = &Р_СчетУчета
И РеализацияТоваровУслуг.Проведен = &Да
СГРУППИРОВАТЬ ПО
РеализацияТоваровУслугТовары.СчетУчета,
РеализацияТоваровУслугТовары.Номенклатура.НоменклатурнаяГруппа,
РеализацияТоваровУслуг.СчетУчетаРасчетовСКонтрагентом,
РеализацияТоваровУслугТовары.Номенклатура,
НАЧАЛОПЕРИОДА(РеализацияТоваровУслуг.Дата, МЕСЯЦ),
РеализацияТоваровУслуг.Ссылка,
РеализацияТоваровУслуг.СуммаВключаетНДС) КАК Реализация
СГРУППИРОВАТЬ ПО
Реализация.Р_СчетУчета,
Реализация.Р_СчетУчетаРасчетовСКонтрагентом,
Реализация.Р_Период,
Реализация.Р_НоменклатурнаяГруппа,
Реализация.Р_Номенклатура) КАК таб1
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
СУММА(Возврат.Количество) КАК Количество,
СУММА(Возврат.Сумма_С_НДС) КАК Сумма_С_НДС,
СУММА(Возврат.Сумма_НДС) КАК Сумма_НДС,
СУММА(Возврат.Сумма_без_НДС) КАК Сумма_без_НДС,
Возврат.СчетУчета КАК СчетУчета,
Возврат.СчетУчетаРасчетовСКонтрагентом КАК СчетУчетаРасчетовСКонтрагентом,
Возврат.Период КАК Период,
Возврат.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
Возврат.Номенклатура КАК Номенклатура
ИЗ
(ВЫБРАТЬ
ВЫБОР
КОГДА ПоступлениеТоваровУслуг.СуммаВключаетНДС = &нет
ТОГДА СУММА(ПоступлениеТоваровУслугТовары.Сумма + ПоступлениеТоваровУслугТовары.СуммаНДС)
ИНАЧЕ СУММА(ПоступлениеТоваровУслугТовары.Сумма)
КОНЕЦ КАК Сумма_С_НДС,
СУММА(ПоступлениеТоваровУслугТовары.Количество) КАК Количество,
ПоступлениеТоваровУслугТовары.СчетУчета КАК СчетУчета,
ПоступлениеТоваровУслугТовары.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
СУММА(ПоступлениеТоваровУслугТовары.СуммаНДС) КАК Сумма_НДС,
ПоступлениеТоваровУслуг.СчетУчетаРасчетовСКонтрагентом КАК СчетУчетаРасчетовСКонтрагентом,
НАЧАЛОПЕРИОДА(ПоступлениеТоваровУслуг.Дата, МЕСЯЦ) КАК Период,
ВЫБОР
КОГДА ПоступлениеТоваровУслуг.СуммаВключаетНДС = &да
ТОГДА СУММА(ПоступлениеТоваровУслугТовары.Сумма - ПоступлениеТоваровУслугТовары.СуммаНДС)
ИНАЧЕ СУММА(ПоступлениеТоваровУслугТовары.Сумма)
КОНЕЦ КАК Сумма_без_НДС,
ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
ГДЕ
ПоступлениеТоваровУслуг.Проведен = &Да
И ПоступлениеТоваровУслугТовары.СчетУчета = &В_СчетУчета
СГРУППИРОВАТЬ ПО
ПоступлениеТоваровУслугТовары.СчетУчета,
ПоступлениеТоваровУслугТовары.Номенклатура.НоменклатурнаяГруппа,
ПоступлениеТоваровУслуг.СчетУчетаРасчетовСКонтрагентом,
НАЧАЛОПЕРИОДА(ПоступлениеТоваровУслуг.Дата, МЕСЯЦ),
ПоступлениеТоваровУслуг.СуммаВключаетНДС,
ПоступлениеТоваровУслугТовары.Номенклатура) КАК Возврат
СГРУППИРОВАТЬ ПО
Возврат.СчетУчета,
Возврат.СчетУчетаРасчетовСКонтрагентом,
Возврат.Период,
Возврат.Номенклатура,
Возврат.НоменклатурнаяГруппа) КАК Таб2
ПО (Таб2.НоменклатурнаяГруппа = таб1.Р_НоменклатурнаяГруппа)
И (Таб2.Период = таб1.Р_Период)
СГРУППИРОВАТЬ ПО
таб1.Р_НоменклатурнаяГруппа,
таб1.Р_Период,
Таб2.НоменклатурнаяГруппа,
Таб2.Период,
таб1.Р_СчетУчета,
таб1.Р_СчетУчетаРасчетовСКонтрагентом,
таб1.Р_Номенклатура,
Таб2.СчетУчета,
Таб2.СчетУчетаРасчетовСКонтрагентом,
Таб2.Номенклатура
Показать
Проблема в том, что суммы в данном запросе выводятся задвоенные или даже умноженные в 6 раз.
Помогите, пожалуйста, это исправить!
Какой некрасивый запрос, всё таки использование временных таблиц никто не отменял, да и данные надо бы из регистров вытаскивать, а не из документов (Они (регистры) для этого и придуманы).
(2) Xatori111, нужно было вытаскивать из документов, чтобы воспользоваться ссылкой и открыть документ, откуда программа берет данные. Это нужно было для проверки.
(5)Не сочтите за оскорбление, но если бы я такой запрос написал, меня бы били долго, больно и возможно ногами.
а по ссылке, откройте для себя поле Регистратор.
(7) Xatori111, я только учусь.
Не нужно меня сейчас учить, красивый или не красивый у меня запрос.
Мне бы хотя бы так некрасиво, но научиться делать.
Мне помощь нужна.
Вот привожу для сравнения результат запроса (слева), когда запрос был только по документу "Поступление товаров и услуг". И справа результат запроса из текущего запроса, который Вам не понравился, тоже по документу "Поступление товаров и услуг".
В чем может быть ошибка? Почему в некоторых строках цифры увеличились в 6 раз, а в некоторых в 10 раз?
Как можно убрать это умножение?
(10)Странно как то
(7) Xatori111, я только учусь.
Не нужно меня сейчас учить.
я Вам предложил как переписать запрос, что бы работало нормально и у вас там не умножение а дубли строк попадаются, сколько дублей, столько раз и сложение происходит.
(17) Xatori111, все началось в этой моей теме: http://forum.infostart.ru/forum26/topic101474/ У меня было два запроса, оба нормально функционировали.
Но мне нужно было их объединить, вот отсюда и полезла проблема =(
(16) Saengmyung, разбивайте запрос на части и смотрите результат. Я думаю редко кто может по одному взгляду найти ошибки в чужом коде написанном на листочке.
(20) Saengmyung, тогда может объясните что вы хотите получить на выходе объединения двух запросов???
по ощущениям все можно сделать проще через счета учета, так как тут речь идет о бухгалтерии. Вы хоть задачку тогда скажите.
Интересно так же связка по периоду, неужели возврат связан периодом с реализацией???
ПО (Таб2.НоменклатурнаяГруппа = таб1.Р_НоменклатурнаяГруппа)
И (Таб2.Период = таб1.Р_Период)
у вас 2 таблицы связаны только по номенклатурной группе. Соответственно результат будет помножен на количество номенклатуры внутри этих номенклатурных групп. Добавьте соединение по номенклатуре. А лучше перепишите под пакетный запрос и регистры. Все эти обращения к табличным частям по левому соединению с документом - моветон.
З.Ы. Пара хинтов.
При задании условия по булеву реквизиту, необязательно задавать параметр(например, Выбор Когда Документ.Проведен Тогда...)
При обращении к табличной части, сам документ доступен как Док.ТабличнаяЧасть.Ссылка(а его реквизиты, соответственно, как Док.ТабличнаяЧасть.Ссылка.Реквизит1 и т.д.), соединение с таблицей документов излишне.
поконструктивнее товарищи !
Тексты запросов состовляються исходя из потребности и имеющихся в наличии данных.
Иногда и документы приходится перебирать.
А что там за конфа, и как все построено, - неизвестно.
Поэтому, в данном случае, даже дать совет довольно трудноемкая задача.
Нужно понять, откуда берутся дубли, в каких таблицах.
А это "на глаз" трудно определить, тем более по голому тексту запроса. Отладка - часто, занимает большую часть времени в работе программиста, чем набивка текстов и создание объектов.
я так понял задача в том, чтобы объединить 2 запроса в один, только по вертикали.
типа такогого, нет ?
ВЫБРАТЬ
СУММА(таб1.Р_Количество) КАК Р_Количество,
СУММА(таб1.Р_Сумма_С_НДС) КАК Р_Сумма_С_НДС,
СУММА(таб1.Р_Сумма_НДС) КАК Р_Сумма_НДС,
СУММА(таб1.Р_Сумма_Без_НДС) КАК Р_Сумма_Без_НДС,
таб1.Р_СчетУчета,
таб1.Р_СчетУчетаРасчетовСКонтрагентом,
таб1.Р_Период,
таб1.Р_НоменклатурнаяГруппа,
таб1.Р_Номенклатура
ИЗ
(ВЫБРАТЬ
СУММА(Реализация.Р_Количество) КАК Р_Количество,
СУММА(Реализация.Р_Сумма_С_НДС) КАК Р_Сумма_С_НДС,
СУММА(Реализация.Р_Сумма_НДС) КАК Р_Сумма_НДС,
СУММА(Реализация.Р_Сумма_Без_НДС) КАК Р_Сумма_Без_НДС,
Реализация.Р_СчетУчета КАК Р_СчетУчета,
Реализация.Р_СчетУчетаРасчетовСКонтрагентом КАК Р_СчетУчетаРасчетовСКонтрагентом,
Реализация.Р_Период КАК Р_Период,
Реализация.Р_НоменклатурнаяГруппа КАК Р_НоменклатурнаяГруппа,
Реализация.Р_Номенклатура КАК Р_Номенклатура
ИЗ
(ВЫБРАТЬ
СУММА(РеализацияТоваровУслугТовары.Количество) КАК Р_Количество,
ВЫБОР
КОГДА РеализацияТоваровУслуг.СуммаВключаетНДС = &нет
ТОГДА СУММА(РеализацияТоваровУслугТовары.Сумма + РеализацияТоваровУслугТовары.СуммаНДС)
ИНАЧЕ СУММА(РеализацияТоваровУслугТовары.Сумма)
КОНЕЦ КАК Р_Сумма_С_НДС,
РеализацияТоваровУслугТовары.СчетУчета КАК Р_СчетУчета,
РеализацияТоваровУслугТовары.Номенклатура.НоменклатурнаяГруппа КАК Р_НоменклатурнаяГруппа,
СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК Р_Сумма_НДС,
РеализацияТоваровУслуг.СчетУчетаРасчетовСКонтрагентом КАК Р_СчетУчетаРасчетовСКонтрагентом,
НАЧАЛОПЕРИОДА(РеализацияТоваровУслуг.Дата, МЕСЯЦ) КАК Р_Период,
ВЫБОР
КОГДА РеализацияТоваровУслуг.СуммаВключаетНДС = &да
ТОГДА СУММА(РеализацияТоваровУслугТовары.Сумма - РеализацияТоваровУслугТовары.СуммаНДС)
ИНАЧЕ СУММА(РеализацияТоваровУслугТовары.Сумма)
КОНЕЦ КАК Р_Сумма_Без_НДС,
РеализацияТоваровУслугТовары.Номенклатура КАК Р_Номенклатура,
РеализацияТоваровУслуг.Ссылка КАК Р_Ссылка,
РеализацияТоваровУслуг.СуммаВключаетНДС КАК Р_СуммаВключаетНДС
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ПО РеализацияТоваровУслугТовары.Ссылка = РеализацияТоваровУслуг.Ссылка
ГДЕ
РеализацияТоваровУслугТовары.СчетУчета = &Р_СчетУчета
И РеализацияТоваровУслуг.Проведен = &Да
СГРУППИРОВАТЬ ПО
РеализацияТоваровУслугТовары.СчетУчета,
РеализацияТоваровУслугТовары.Номенклатура.НоменклатурнаяГруппа,
РеализацияТоваровУслуг.СчетУчетаРасчетовСКонтрагентом,
РеализацияТоваровУслугТовары.Номенклатура,
НАЧАЛОПЕРИОДА(РеализацияТоваровУслуг.Дата, МЕСЯЦ),
РеализацияТоваровУслуг.Ссылка,
РеализацияТоваровУслуг.СуммаВключаетНДС) КАК Реализация
СГРУППИРОВАТЬ ПО
Реализация.Р_СчетУчета,
Реализация.Р_СчетУчетаРасчетовСКонтрагентом,
Реализация.Р_Период,
Реализация.Р_НоменклатурнаяГруппа,
Реализация.Р_Номенклатура) КАК таб1
СГРУППИРОВАТЬ ПО
таб1.Р_НоменклатурнаяГруппа,
таб1.Р_Период,
таб1.Р_СчетУчета,
таб1.Р_СчетУчетаРасчетовСКонтрагентом,
таб1.Р_Номенклатура
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Таб2.Количество,
Таб2.Сумма_С_НДС,
Таб2.Сумма_НДС,
Таб2.Сумма_без_НДС,
Таб2.СчетУчета,
Таб2.СчетУчетаРасчетовСКонтрагентом,
Таб2.Период,
Таб2.НоменклатурнаяГруппа,
Таб2.Номенклатура
ИЗ
(ВЫБРАТЬ
СУММА(Возврат.Количество) КАК Количество,
СУММА(Возврат.Сумма_С_НДС) КАК Сумма_С_НДС,
СУММА(Возврат.Сумма_НДС) КАК Сумма_НДС,
СУММА(Возврат.Сумма_без_НДС) КАК Сумма_без_НДС,
Возврат.СчетУчета КАК СчетУчета,
Возврат.СчетУчетаРасчетовСКонтрагентом КАК СчетУчетаРасчетовСКонтрагентом,
Возврат.Период КАК Период,
Возврат.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
Возврат.Номенклатура КАК Номенклатура
ИЗ
(ВЫБРАТЬ
ВЫБОР
КОГДА ПоступлениеТоваровУслуг.СуммаВключаетНДС = &нет
ТОГДА СУММА(ПоступлениеТоваровУслугТовары.Сумма + ПоступлениеТоваровУслугТовары.СуммаНДС)
ИНАЧЕ СУММА(ПоступлениеТоваровУслугТовары.Сумма)
КОНЕЦ КАК Сумма_С_НДС,
СУММА(ПоступлениеТоваровУслугТовары.Количество) КАК Количество,
ПоступлениеТоваровУслугТовары.СчетУчета КАК СчетУчета,
ПоступлениеТоваровУслугТовары.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
СУММА(ПоступлениеТоваровУслугТовары.СуммаНДС) КАК Сумма_НДС,
ПоступлениеТоваровУслуг.СчетУчетаРасчетовСКонтрагентом КАК СчетУчетаРасчетовСКонтрагентом,
НАЧАЛОПЕРИОДА(ПоступлениеТоваровУслуг.Дата, МЕСЯЦ) КАК Период,
ВЫБОР
КОГДА ПоступлениеТоваровУслуг.СуммаВключаетНДС = &да
ТОГДА СУММА(ПоступлениеТоваровУслугТовары.Сумма - ПоступлениеТоваровУслугТовары.СуммаНДС)
ИНАЧЕ СУММА(ПоступлениеТоваровУслугТовары.Сумма)
КОНЕЦ КАК Сумма_без_НДС,
ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
ГДЕ
ПоступлениеТоваровУслуг.Проведен = &Да
И ПоступлениеТоваровУслугТовары.СчетУчета = &В_СчетУчета
СГРУППИРОВАТЬ ПО
ПоступлениеТоваровУслугТовары.СчетУчета,
ПоступлениеТоваровУслугТовары.Номенклатура.НоменклатурнаяГруппа,
ПоступлениеТоваровУслуг.СчетУчетаРасчетовСКонтрагентом,
НАЧАЛОПЕРИОДА(ПоступлениеТоваровУслуг.Дата, МЕСЯЦ),
ПоступлениеТоваровУслуг.СуммаВключаетНДС,
ПоступлениеТоваровУслугТовары.Номенклатура) КАК Возврат
СГРУППИРОВАТЬ ПО
Возврат.СчетУчета,
Возврат.СчетУчетаРасчетовСКонтрагентом,
Возврат.Период,
Возврат.Номенклатура,
Возврат.НоменклатурнаяГруппа) КАК Таб2
(24) Saengmyung, ну тогда это такой же вертикальный запрос,
только склеиваем период и группу, а суммы в разных столбиках делаем.
В одном запросе ставим 0 в местах где столбцы от другого.