|
Вопрос по запросу | ☑ | ||
---|---|---|---|---|
0
IVT_2009
07.07.20
✎
10:54
|
Есть простой запрос , результат которого показывает остаток в магазине в разрезе характеристик товара , которому присвоен штрих код.
Если просто выполнить запрос: ВЫБРАТЬ Штрихкоды.Владелец КАК Владелец, Штрихкоды.Характеристика КАК Характеристика ИЗ РегистрСведений.Штрихкоды КАК Штрихкоды ГДЕ Штрихкоды.Штрихкод = &Штрихкод выдает три позиции товара с характеристиками. Хотим знать остаток: ВЫБРАТЬ шкОтбор.Владелец КАК Владелец, шкОтбор.Характеристика КАК Характеристика, ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток ИЗ (ВЫБРАТЬ Штрихкоды.Владелец КАК Владелец, Штрихкоды.Характеристика КАК Характеристика ИЗ РегистрСведений.Штрихкоды КАК Штрихкоды ГДЕ Штрихкоды.Штрихкод = &Штрихкод) КАК шкОтбор ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки ПО (шкОтбор.Владелец = ТоварыНаСкладахОстатки.Номенклатура И шкОтбор.Характеристика = ТоварыНаСкладахОстатки.Характеристика) ГДЕ ТоварыНаСкладахОстатки.Склад = &Склад в запрос соединяем левым соединением отбор товара для данного штрих кода и регистр остатка по полу товар и характеристика. В результате две позиции товара, должно показать три. почему так? Технически левое соединение главной таблицы с 3 мя записями и подчиненной с двумя должно дать на выходе три записи , но дает только две. Запрос для 1с розница |
|||
1
Джинн
07.07.20
✎
10:57
|
Запрос к регистру накопления, а к нему левым соединением штрихкоды. И научитесь пользоваться виртуальными таблицами.
|
|||
2
asady
07.07.20
✎
10:59
|
(0)
ГДЕ ТоварыНаСкладахОстатки.Склад = &Склад это перенеси в ПВТ |
|||
3
acht
07.07.20
✎
10:59
|
(0) Вся магия здесь:
ГДЕ ТоварыНаСкладахОстатки.Склад = &Склад |
|||
4
unregistered
07.07.20
✎
10:59
|
(0) Про условие забыли.
ГДЕ
Это условие отравляет всю логику Ваших рассуждений. |
|||
5
IVT_2009
07.07.20
✎
11:00
|
(1) я специально не стал тут их использовать. Сейчас перепишу - посмотрю на результат.
Основной таблице должен быть отбор товара , так как интересны позиции без остатков так же. |
|||
6
unregistered
07.07.20
✎
11:00
|
А вообще соглашусь с (1). Запрос - *авно.
|
|||
7
IVT_2009
07.07.20
✎
11:01
|
(4) оно отбирает две записи , которые связаны с тремя основной таблицы.
|
|||
8
unregistered
07.07.20
✎
11:02
|
(7) Совершенно верно. Но тогда почему вы ждёте три записи на выходе, если сами же ставите условие, что нужны только две?
|
|||
9
Джинн
07.07.20
✎
11:03
|
(5) Если интересны позиции без остатков, то запрос к справочнику номенклатуры. Зачем к остаткам тогда обращаться?
|
|||
10
unregistered
07.07.20
✎
11:04
|
Короче. Изучите что такое параметры виртуальных таблиц и разберитесь - где нужно ставить условия, где параметры, а где использовать временные таблицы.
|
|||
11
IVT_2009
07.07.20
✎
11:05
|
(9) нужны все позиции по заданному штрих коду , где есть остатки и где их нет.
Видится отбор этих позиций по РС штрих коду и потом связь с регистром остатков левым соединением Остатки интересны по текущему магазину. Очевидно что их предварительно по магазину отобрать а потом связать результат то же не очень идея |
|||
12
IVT_2009
07.07.20
✎
11:11
|
Такой запрос отработал правильно , но он мне честно говоря не нравится
ВЫБРАТЬ шкОтбор.Владелец КАК Владелец, шкОтбор.Характеристика КАК Характеристика ПОМЕСТИТЬ втШк ИЗ (ВЫБРАТЬ Штрихкоды.Владелец КАК Владелец, Штрихкоды.Характеристика КАК Характеристика ИЗ РегистрСведений.Штрихкоды КАК Штрихкоды ГДЕ Штрихкоды.Штрихкод = &Штрихкод) КАК шкОтбор ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток, ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, ТоварыНаСкладахОстатки.Характеристика КАК Характеристика ПОМЕСТИТЬ выбОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки ГДЕ ТоварыНаСкладахОстатки.Склад = &Склад ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ втШк.Владелец КАК Владелец, втШк.Характеристика КАК Характеристика, выбОстаток.КоличествоОстаток КАК КоличествоОстаток ИЗ втШк КАК втШк ЛЕВОЕ СОЕДИНЕНИЕ выбОстаток КАК выбОстаток ПО втШк.Владелец = выбОстаток.Номенклатура И втШк.Характеристика = выбОстаток.Характеристика вопрос , чем подзапрос отличается от виртуальной таблицы в данном случае ? (опыт написания SQL запросов с 1997 года) |
|||
13
asady
07.07.20
✎
11:14
|
(12) после 97 года чему-нить еще научились?
тебе написали уже ПВТ - параметры виртуальной таблицы - заполни! зачем временные таблицы насоздавал? |
|||
14
IVT_2009
07.07.20
✎
11:19
|
Такой запрос , то же показал правильный результат
ВЫБРАТЬ шкОтбор.Владелец КАК Владелец, шкОтбор.Характеристика КАК Характеристика, ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток ИЗ (ВЫБРАТЬ Штрихкоды.Владелец КАК Владелец, Штрихкоды.Характеристика КАК Характеристика ИЗ РегистрСведений.Штрихкоды КАК Штрихкоды ГДЕ Штрихкоды.Штрихкод = &Штрихкод) КАК шкОтбор ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&период, Склад = &склад) КАК ТоварыНаСкладахОстатки ПО (шкОтбор.Владелец = ТоварыНаСкладахОстатки.Номенклатура) И (шкОтбор.Характеристика = ТоварыНаСкладахОстатки.Характеристика) |
|||
15
IVT_2009
07.07.20
✎
11:23
|
(13) понял. Спасибо! все заработало как надо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |