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

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

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

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

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


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

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

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

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

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

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

Таб2 //Остатки
Кастрюля|30шт
Сковорода|5шт

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

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