Как в запросе вычесть одно поле из другого

1. squall84 11.09.14 11:59 Сейчас в теме
Здравствуйте.

из регистра партии товаров выбираю нужную номенклатуру и количество. Затем выбираю из регистра заказы покупателя нужную номенклатуру и количество.

Требуется получить разницу в количестве между номенклатурой в партиях товаров и заказах покупателей.

Вообще планировалось сделать такой отчет консолью отчетов, но опять же не могу понять, как на выходе получить табличку - номенклатура/ количество (разность регистра партии товаров и регистра заказы покупателя)
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Eugene_Life 3 11.09.14 12:07 Сейчас в теме
(1)Ну, обычно создаются Виртуальные таблицы (партии товаров, заказы покупателей), затем эти вирт таблицы соединяются (по условию) и пишется выражение типа "СуммаПартии - СуммаЗаказа".
4. squall84 11.09.14 12:14 Сейчас в теме
(2) Eugene_Life, Это я понимаю, только не совсем понятно, как именно.

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

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

СГРУППИРОВАТЬ ПО
	ЗаказыПокупателей.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Запрос1.Номенклатура
ИЗ
	Запрос1 КАК Запрос1,
	Запрос2 КАК Запрос2

СГРУППИРОВАТЬ ПО
	Запрос2.Номенклатура,
	Запрос1.Номенклатура
Показать

Я уже создал две виртуальных таблицу. Только не пойму, как в третьем запросе их объединить
5. Obvious 11.09.14 12:21 Сейчас в теме
(4) squall84, Соедени(вкладка связи конструктора) и условие соединения пропиш как в (2)
6. deniseek77 86 11.09.14 12:25 Сейчас в теме
(5) Obvious, а количество что не вычли в 3 объединенной таблице?
ВЫБРАТЬ
    ПартииТоваровНаСкладахОстатки.Номенклатура,
    ПартииТоваровНаСкладахОстатки.КоличествоОстаток
ПОМЕСТИТЬ Запрос1
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.Остатки КАК ПартииТоваровНаСкладахОстатки
ГДЕ
    ПартииТоваровНаСкладахОстатки.ДокументОприходования.Ссылка = &ДокОпр
;

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

СГРУППИРОВАТЬ ПО
    ЗаказыПокупателей.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    Запрос1.Номенклатура,
Запрос1.КоличествоОстаток-Запрос2.Количество как разница
ИЗ
    Запрос1 КАК Запрос1,
    Запрос2 КАК Запрос2

СГРУППИРОВАТЬ ПО
    Запрос2.Номенклатура,
    Запрос1.Номенклатура
Показать
10. Ёпрст 1063 11.09.14 12:31 Сейчас в теме
(6) ну а cross join, это вообще за гранью добра..
сразу в топку
12. deniseek77 86 11.09.14 12:35 Сейчас в теме
(10) Ёпрст, я тупо скопировал его запрос и дописал как вычесть, исправлять ошибки самого запроса не расчитывал, поэтому и не смотрел, что у него там написано. Я ему ответил на поставленный вопрос
3. V_1988 11.09.14 12:12 Сейчас в теме
Ну, обычно создаются Виртуальные таблицы (партии товаров, заказы покупателей), затем эти вирт таблицы соединяются (по условию) и пишется выражение типа "СуммаПартии - СуммаЗаказа".
7. Eugene_Life 3 11.09.14 12:26 Сейчас в теме
ВЫБРАТЬ
ПартииТоваровНаСкладахОстатки.Номенклатура,
ПартииТоваровНаСкладахОстатки.КоличествоОстаток
ПОМЕСТИТЬ Запрос1
ИЗ
РегистрНакопления.ПартииТоваровНаСкладах.Остатки КАК ПартииТоваровНаСкладахОстатки
ГДЕ
ПартииТоваровНаСкладахОстатки.ДокументОприходования.Ссылка = &ДокОпр
;

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

СГРУППИРОВАТЬ ПО
ЗаказыПокупателей.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
Запрос1.Номенклатура,
Запрос1.КоличествоОстаток - ЕСТЬNULL(Запрос2.Количество, 0) КАК Разность
ИЗ
Запрос1 КАК Запрос1
ЛЕВОЕ СОЕДИНЕНИЕ Запрос2 КАК Запрос2
ПО Запрос1.Номенклатура = Запрос2.Номенклатура

СГРУППИРОВАТЬ ПО
Запрос2.Номенклатура,
Запрос1.Номенклатура,
Запрос1.КоличествоОстаток - ЕСТЬNULL(Запрос2.Количество, 0)
9. Ёпрст 1063 11.09.14 12:30 Сейчас в теме
(7) так есть шанец потерять часть товаров, которые есть во второй табличке и нет в первой.
Надо тогда уж не left join , а full join делать
11. Eugene_Life 3 11.09.14 12:34 Сейчас в теме
(9) Согласен. Но что конкретно требуется по условию задачи - неизвестно. Вопроса про левое/полное соединение пока не было от ТС.
13. squall84 11.09.14 12:42 Сейчас в теме
(11) Eugene_Life, Суть такова. Диспетчера создают заказ и на его основании реализацию на завтра. Максимально возможное количество, которое мы можем произвести задаем производством за смену сегодняшним числом, а на следующий день исправляем на то, что было выполнено по заказам. Требуется, чтобы во время работы диспетчера видели, сколько заказов по номенклатуре они могут принять, чтобы не превысить лимит производства.
14. Eugene_Life 3 12.09.14 11:39 Сейчас в теме
(13) Запрос-то помог? Разобрался как вычитать?
8. Ёпрст 1063 11.09.14 12:28 Сейчас в теме
ВыБрать Таб.Номенклатура,Сумма(Таб.Разность) как Разность 
ИЗ
(
ВЫБРАТЬ
    Запрос1.Номенклатура как Номенклатура,Запрос1.КоличествоОстаток как Разность
ИЗ
    Запрос1 КАК Запрос1
Объединить все
ВЫБРАТЬ
    Запрос2.Номенклатура,-Запрос2.КоличествоОстаток
ИЗ
    Запрос2 КАК Запрос2
)как Таб
СГРУППИРОВАТЬ ПО
    Запрос.Номенклатура
Показать
15. panda-34 38 15.09.14 13:54 Сейчас в теме
(8)
Еще стоит дописать

ИМЕЮЩИЕ
	СУММА(Таб.Разность) <> 0

чтобы пустые строки не печатать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот