Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как сравнить два запроса

Как сравнить два запроса
Я
   1СникомХочуСтать
 
17.05.21 - 14:46
Добрый день! Столкнулся с задачей и не знаю как дальше решить:

Делаю проверку, которая будет сравнивать количество в табличной часте документа ”ЗаказКлиентаТовары.Количество” и ресурс Регистра накопления ”СвободныеОстаткиОстатки.ВНаличииОстаток”. Как объединить в 1 запрос, чтобы получать остаток из РН по конкретному документу и номенклатуре?

Поэтому сделал два запроса в консоли:

1 запрос) получаю количество свободных остатков из РН ”СвободныеОстаткиОстатки.ВНаличииОстаток ”

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


2 запрос) получаю Кол-во по номенклатуре из табличной части Товары

ВЫБРАТЬ
    ЗаказКлиентаТовары.Номенклатура КАК Номенклатура,
    ЗаказКлиентаТовары.Характеристика КАК Характеристика,
    ЗаказКлиентаТовары.КоличествоУпаковок КАК КоличествоУпаковок,
    ЗаказКлиентаТовары.Количество КАК Количество
ИЗ
    Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
ГДЕ
    ЗаказКлиентаТовары.Ссылка = &Ссылка
   Kassern
 
1 - 17.05.21 - 14:48
(0) почитайте про левое соединение в запросе
   1СникомХочуСтать
 
2 - 17.05.21 - 15:13
(1) спасибо, а разве не через Объединение или через виртуальные таблицы такое делается?
   Kassern
 
3 - 17.05.21 - 15:18
(2) попробуйте все варианты соединения таблиц на небольшой выборке данных, чтобы на практике убедиться, какой метод что делает. Как только осознание появится, таких вопросов уже задавать не будете.
   RomanYS
 
4 - 17.05.21 - 15:22
ВЫБРАТЬ
    Т1.ключ,
    Т1.Значение КАК Значение1,
    0 КАК Значение2
ПОМЕСТИТЬ ВТ
ИЗ
    Т1 КАК Т1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Т2.ключ,
    0,
    Т2.Значение
ИЗ
    Т2 КАК Т2
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ВТ.ключ,
    СУММА(ВТ.Значение1) КАК Значение1,
    СУММА(ВТ.Значение2) КАК Значение2,
    СУММА(ВТ.Значение1 - ВТ.Значение2) КАК Разница
ИЗ
    ВТ КАК ВТ

СГРУППИРОВАТЬ ПО
    ВТ.ключ
   Kassern
 
5 - 17.05.21 - 16:10
(4) зачем так сложно то? У него простая задачка:
таб1 //заказы
Кастрюля|10шт
Таб2//Остатки
Кастрюля|30шт
Сковорода|5шт

//Нужно получить следующее, как я понял:
Кастрюля|10шт|30шт

Проще всего левым соединением к таблице заказов прикрутить таблицу остатков. Вывести остатки через ЕстьNull(СвободныеОстаткиОстатки.ВНаличииОстаток,0).
   RomanYS
 
6 - 17.05.21 - 16:47
(5) Ну начинается с левого соединения - оказывается что запись может быть только в правой таблице - переписываем на полное, все ключи заворачиваем в ЕстьNull.
Дальше оказывается, что ключи не уникальны - переписываем всё на ВрТ с предварительной группировкой.
Потом оказывается, что сравнивать нужно не 2 таблицы, а три и нормальное полное соединение на троих - это прикольный ребус.
В общем лучше сразу (4) ;-)
   Kassern
 
7 - 17.05.21 - 16:56
(6) Это все на берегу решается, до того, как садишься писать отчет. Самое главное понимать какую задачу решает этот отчет. Если понимание есть, то неопределенность в соединениях сводится к минимуму. Опыт подскажет, что еще может понадобиться клиенту для решения данного вопроса. В случае ТС, вообще странно, он берет товары из заказа, хочет по ним остатки, но ему даже в голову не пришло на какую дату нужны остатки.
   Kesim
 
8 - 17.05.21 - 18:00
скорее всего это не отчет, а проверка остатков перед проведением)))

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.