|
Запрос - объединение Подобно/Склады/Цены | ☑ | ||
---|---|---|---|---|
0
DaDe
20.12.14
✎
22:02
|
Добрый день.
Прошу помочь если не сложно. Нужно сформировать таблицу из номенклатуры, которая содержит несколько слов и отобразить в колонках остатки по нескольким складам и цены номенклатуры. Номенклатура/ОстСклад1/ОстСклад2+ОстСклад3/Цена Есть ли вариант упрощения чем у меня получилось. ВЫБРАТЬ СпрНоменклатура.Наименование, СпрНоменклатура.Ссылка КАК Номенклатура, СпрНоменклатура.Родитель ПОМЕСТИТЬ ТЗ ИЗ Справочник.Номенклатура КАК СпрНоменклатура ГДЕ СпрНоменклатура.Наименование ПОДОБНО "%1132%" ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТоварыНаСкладахОстатки1.Номенклатура, ТоварыНаСкладахОстатки1.Номенклатура.Родитель, ТоварыНаСкладахОстатки1.Склад, ТоварыНаСкладахОстатки1.КоличествоОстаток КАК КоличествоОстаток1, 0 КАК КоличествоОстаток2, 0 КАК КоличествоОстаток3 ПОМЕСТИТЬ ТЗО ИЗ ТЗ КАК ТЗ ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки1 ПО ТЗ.Номенклатура = ТоварыНаСкладахОстатки1.Номенклатура ГДЕ ТоварыНаСкладахОстатки1.Склад = &Склад1 ОБЪЕДИНИТЬ ВЫБРАТЬ ТоварыНаСкладахОстатки2.Номенклатура, ТоварыНаСкладахОстатки2.Номенклатура.Родитель, ТоварыНаСкладахОстатки2.Склад, 0, ТоварыНаСкладахОстатки2.КоличествоОстаток, 0 ИЗ ТЗ КАК ТЗ ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки2 ПО ТЗ.Номенклатура = ТоварыНаСкладахОстатки2.Номенклатура ГДЕ ТоварыНаСкладахОстатки2.Склад = &Склад2 ОБЪЕДИНИТЬ ВЫБРАТЬ ТоварыНаСкладахОстатки3.Номенклатура, ТоварыНаСкладахОстатки3.Номенклатура.Родитель, ТоварыНаСкладахОстатки3.Склад, 0, 0, ТоварыНаСкладахОстатки3.КоличествоОстаток ИЗ ТЗ КАК ТЗ ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки3 ПО ТЗ.Номенклатура = ТоварыНаСкладахОстатки3.Номенклатура ГДЕ ТоварыНаСкладахОстатки3.Склад = &Склад3 ; //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТЗО.Номенклатура, ТЗО.НоменклатураРодитель, СУММА(ТЗО.КоличествоОстаток1) КАК КоличествоОстаток1, СУММА(ТЗО.КоличествоОстаток2 + ТЗО.КоличествоОстаток3) КАК Поле1, ЦеныНоменклатурыСрезПоследних.ТипЦен, ЦеныНоменклатурыСрезПоследних.Цена ИЗ ТЗО КАК ТЗО ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних ПО ТЗО.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура ГДЕ ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен СГРУППИРОВАТЬ ПО ТЗО.Номенклатура, ТЗО.НоменклатураРодитель, ЦеныНоменклатурыСрезПоследних.ТипЦен, ЦеныНоменклатурыСрезПоследних.Цена |
|||
1
exwill
20.12.14
✎
22:52
|
(0) Можно обойтись без временных таблиц. Просто соединяй левым соединением справочник Номенклатура с регистрами.
|
|||
2
alle68
21.12.14
✎
06:27
|
(0) Есть. Н., ВТ имеют параметры, есть конструкция "ВЫБОР", "ИЛИ", etc.
(1) От первой тоже отказаться!? |
|||
3
DaDe
21.12.14
✎
20:25
|
Может не совсем правильно написал. Имел ввиду упрощения с точки зрения скорости выполнения запроса.
(1) Пробовал вариант с левым соединением. Время выполнения оказалось больше, хотя и немного. Причем больше всего времени примерно 50-70% занимает подключение ЦеныНоменклатурыСрезПоследних. Почему так много. Может я что-то делаю не так? (2) Что такое Н. |
|||
4
vicof
21.12.14
✎
20:44
|
(0) Налицо неумение пользоваться виртуальными таблицами и наложение условия на правую таблицу при левом соединении
|
|||
5
DaDe
21.12.14
✎
21:21
|
(4) можно подсказать в какую сторону копать
ВЫБРАТЬ СпрНоменклатура.Наименование, СпрНоменклатура.Ссылка КАК Номенклатура, СпрНоменклатура.Родитель, ТоварыНаСкладахОстатки1.КоличествоОстаток, ТоварыНаСкладахОстатки2.КоличествоОстаток + ТоварыНаСкладахОстатки3.КоличествоОстаток КАК КоличествоОстаток2, ЦеныНоменклатурыСрезПоследних.Цена ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки3 ПО СпрНоменклатура.Ссылка = ТоварыНаСкладахОстатки3.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки2 ПО СпрНоменклатура.Ссылка = ТоварыНаСкладахОстатки2.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки1 ПО СпрНоменклатура.Ссылка = ТоварыНаСкладахОстатки1.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних ПО СпрНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура ГДЕ СпрНоменклатура.Наименование ПОДОБНО "%1132%" И ТоварыНаСкладахОстатки1.Склад = &Склад1 И ТоварыНаСкладахОстатки2.Склад = &Склад2 И ТоварыНаСкладахОстатки3.Склад = &Склад3 И ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен |
|||
6
vicof
21.12.14
✎
21:33
|
1. Выбрать нужную номенклатуру, поместить во временную таблицу
2. Выбрать остатки с отбором по складам и нужной номенклатуре. Здесь тебе нужно самому прочитать про параметры виртуальных таблиц. 3. То же самое с ценами 4. Соединить 1, 2 и 3 |
|||
7
DaDe
21.12.14
✎
22:01
|
(6) Спасибо, дельный совет. В общих чертах понял
Понятно что нужно ограничить набор данных и по нему уже получать дополнительные сведения. Просто не совсем было понятно как. |
|||
8
DaDe
21.12.14
✎
23:08
|
(6) Типа того:
ВЫБРАТЬ Номенклатура.Ссылка, Номенклатура.Наименование, Номенклатура.Родитель ПОМЕСТИТЬ СписокТоваров ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка.Наименование ПОДОБНО "%1132%" СГРУППИРОВАТЬ ПО Номенклатура.Ссылка, Номенклатура.Наименование, Номенклатура.Родитель ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СписокТоваров.Ссылка, СписокТоваров.Наименование, СписокТоваров.Родитель, ТоварыНаСкладахОстатки1.КоличествоОстаток, ТоварыНаСкладахОстатки2.КоличествоОстаток + ТоварыНаСкладахОстатки3.КоличествоОстаток КАК КоличествоОстаток2, ЦеныНоменклатурыСрезПоследних.Цена ИЗ СписокТоваров КАК СписокТоваров ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( &Дата, Номенклатура В (ВЫБРАТЬ СписокТоваров.Ссылка ИЗ СписокТоваров КАК СписокТоваров)) КАК ТоварыНаСкладахОстатки1 ПО СписокТоваров.Ссылка = ТоварыНаСкладахОстатки1.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( &Дата, Номенклатура В (ВЫБРАТЬ СписокТоваров.Ссылка ИЗ СписокТоваров КАК СписокТоваров)) КАК ТоварыНаСкладахОстатки2 ПО СписокТоваров.Ссылка = ТоварыНаСкладахОстатки2.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( &Дата, Номенклатура В (ВЫБРАТЬ СписокТоваров.Ссылка ИЗ СписокТоваров КАК СписокТоваров)) КАК ТоварыНаСкладахОстатки3 ПО СписокТоваров.Ссылка = ТоварыНаСкладахОстатки3.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата,ТипЦен=&ТипЦен И Номенклатура В (ВЫБРАТЬ СписокТоваров.Ссылка ИЗ СписокТоваров КАК СписокТоваров)) КАК ЦеныНоменклатурыСрезПоследних ПО СписокТоваров.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура ГДЕ ТоварыНаСкладахОстатки1.Склад = &Склад1 И ТоварыНаСкладахОстатки2.Склад = &Склад2 И ТоварыНаСкладахОстатки3.Склад = &Склад3 |
|||
9
vicof
21.12.14
✎
23:41
|
и получилось у тебя внутренее соединение. Условие по складам тоже в параметры виртуальных таблиц запихай.
и естьнулл на количество поставь |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |