|
|
|
Запрос, левое соединение. | ☑ | ||
|---|---|---|---|---|
|
0
Zombi
21.07.11
✎
09:33
|
В конфигурации УТ 10.3 пишу такой запрос:
ВЫБРАТЬ ТоварыНаСкладахОбороты.Номенклатура, ТоварыНаСкладахОбороты.Склад, ТоварыНаСкладахОбороты.КоличествоРасход, ТоварыНаСкладахОстатки.КоличествоОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.Обороты(&НачаДата, &КонДата) КАК ТоварыНаСкладахОбороты ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&КонДата) КАК ТоварыНаСкладахОстатки ПО ТоварыНаСкладахОбороты.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура ГДЕ ТоварыНаСкладахОбороты.Склад = &склад И ТоварыНаСкладахОстатки.Склад = &склад АВТОУПОРЯДОЧИВАНИЕ Если выбрать просто расход(без второй таблицы), результат запроса - 90 строк. Если делаю так как выше, результат - 60 строк. В запрос не попадают строки, для которых нет остатка. Но ведь "ЛЕВОЕ СОЕДИНЕНИЕ" должно выбирать первую таблицу полностью, а из второй брать что есть? ЧЯДНТ? |
|||
|
1
Defender aka LINN
21.07.11
✎
09:34
|
(0) У тебя внутреннее соединение
|
|||
|
2
Defender aka LINN
21.07.11
✎
09:34
|
+(1) И вообще, за такие запросы ногами бьют.
|
|||
|
3
Ненавижу 1С
гуру
21.07.11
✎
09:35
|
ВЫБРАТЬ
ТоварыНаСкладахОбороты.Номенклатура, ТоварыНаСкладахОбороты.Склад, ТоварыНаСкладахОбороты.КоличествоРасход, ТоварыНаСкладахОстатки.КоличествоОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.Обороты(&НачаДата, &КонДата) КАК ТоварыНаСкладахОбороты ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&КонДата) КАК ТоварыНаСкладахОстатки ПО ТоварыНаСкладахОбороты.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура И ТоварыНаСкладахОбороты.Склад= ТоварыНаСкладахОстатки.Склад ГДЕ ТоварыНаСкладахОбороты.Склад = &склад |
|||
|
4
vicof
21.07.11
✎
09:35
|
(0) а остаткиИобороты не предлагать?
|
|||
|
5
Jstunner
21.07.11
✎
09:37
|
(3) зачем бяку советуешь?
|
|||
|
6
Ненавижу 1С
гуру
21.07.11
✎
09:38
|
(5) я такой ))
|
|||
|
7
Zombi
21.07.11
✎
09:40
|
Ну так как в (3) работает. А как правильнее этот запрос написать?
|
|||
|
8
Ненавижу 1С
гуру
21.07.11
✎
09:41
|
(7) правильно передавть условия в параметрах виртуальных таблиц и подмать над использованием таблицы ОстаткиИОбороты вместо двух этих
|
|||
|
9
Jstunner
21.07.11
✎
09:41
|
(7) используй (4), условие в параметры виртуальной таблицы
|
|||
|
10
Zombi
21.07.11
✎
09:42
|
(4) ОстаткиИОбороты не прокатят, так как данные нужно будет выбирать еще с периодичностью "регистратор", а остатки нужны будут на конечную дату.
|
|||
|
11
Jstunner
21.07.11
✎
09:43
|
(10) открой для себя СП
|
|||
|
12
Zombi
21.07.11
✎
09:43
|
Запрос как доделаю, выложу.
|
|||
|
13
Defender aka LINN
21.07.11
✎
09:47
|
(10) Прямо любопытно, как ты будешь жить с тем, что у тебя количество в итогах умножится на количество строк с регистраторами.
|
|||
|
14
СвинТуз
21.07.11
✎
09:48
|
(3)
такое можно только от ненависти написать ) большой ненависти |
|||
|
15
Zombi
21.07.11
✎
09:55
|
Сейчас все работает, вот полный код:
Процедура КнопкаВыполнитьНажатие(Кнопка) КПеремещению.Очистить(); ТабОтчет = ЭлементыФормы.ТабОтчет; ТабОтчет.Очистить(); Макет = ПолучитьМакет("Макет"); СписокСкладов = Новый СписокЗначений; СчСклад = 0; Пока СчСклад < Склады.Количество() Цикл Если Склады.Получить(СчСклад).Пометка Тогда СписокСкладов.Добавить(Склады.Получить(СчСклад).Значение); КонецЕсли; СчСклад = СчСклад + 1; КонецЦикла; // Пока Запрос = Новый Запрос("ВЫБРАТЬ | ТоварыНаСкладахОбороты.Номенклатура КАК Номенклатура, | ТоварыНаСкладахОбороты.Склад КАК Склад, | МАКСИМУМ(ТоварыНаСкладахОбороты.Период) КАК Период, | СУММА(ТоварыНаСкладахОбороты.КоличествоРасход) КАК КоличествоРасход, | МАКСИМУМ(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток, | МАКСИМУМ(ТоварыНаСкладахОстаткиОтправ.КоличествоОстаток) КАК КоличествоОстатокОтправ |ИЗ | РегистрНакопления.ТоварыНаСкладах.Обороты(&НачДата, &КонДата, Регистратор, ) КАК ТоварыНаСкладахОбороты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&КонДата, ) КАК ТоварыНаСкладахОстатки | ПО ТоварыНаСкладахОбороты.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура | И ТоварыНаСкладахОбороты.Склад = ТоварыНаСкладахОстатки.Склад | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&КонДата, ) КАК ТоварыНаСкладахОстаткиОтправ | ПО ТоварыНаСкладахОбороты.Номенклатура = ТоварыНаСкладахОстаткиОтправ.Номенклатура |ГДЕ | ТоварыНаСкладахОбороты.Склад В(&СписокСкладов) | И ТоварыНаСкладахОстаткиОтправ.Склад = &Отправитель | И ТоварыНаСкладахОбороты.Номенклатура В ИЕРАРХИИ(&НомГруппа) | |СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОбороты.Номенклатура, | ТоварыНаСкладахОбороты.Склад |ИТОГИ ПО | Номенклатура, | Склад |АВТОУПОРЯДОЧИВАНИЕ"); Запрос.УстановитьПараметр("НачДата",НачДата); Запрос.УстановитьПараметр("КонДата",КонДата); Запрос.УстановитьПараметр("СписокСкладов",СписокСкладов); Запрос.УстановитьПараметр("Отправитель",Отправитель); Запрос.УстановитьПараметр("НомГруппа",НомГруппа); Результат = Запрос.Выполнить(); Секция = Макет.ПолучитьОбласть("R3C2:R4C2"); ТабОтчет.Вывести(Секция); Секция = Макет.ПолучитьОбласть("R3C3:R4C4"); ВыборкаШапка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Склад","Все"); Пока ВыборкаШапка.Следующий() цикл Секция.Параметры.НаимСклада = ВыборкаШапка.Склад.Наименование; ТабОтчет.Присоединить(Секция); КонецЦикла; Секция = Макет.ПолучитьОбласть("R3C5:R4C6"); ТабОтчет.Присоединить(Секция); ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Номенклатура","Все"); Пока ВыборкаНоменклатура.Следующий() Цикл Секция = Макет.ПолучитьОбласть("R5C2:R5C2"); Секция.Параметры.Номенклатура = ВыборкаНоменклатура.Номенклатура; Секция.Область().Расшифровка = ВыборкаНоменклатура.Номенклатура; Если ВыборкаНоменклатура.Период > КонДата - 86400 * 7 Тогда Фон = WebЦвета.СветлоЗеленый; ИначеЕсли (ВыборкаНоменклатура.Период > КонДата - 86400 * 14) И (ВыборкаНоменклатура.Период < КонДата - 86400 * 7) Тогда Фон = WebЦвета.СветлоЖелтый; ИначеЕсли ВыборкаНоменклатура.Период < КонДата - 86400 * 14 Тогда Фон = WebЦвета.Розовый; КонецЕсли; Секция.Область().ЦветФона = Фон; ТабОтчет.Вывести(Секция); РасходВсего = 0; Заказывать = 0; ВыборкаСклад = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Склад","Все"); Пока ВыборкаСклад.Следующий() Цикл Секция = Макет.ПолучитьОбласть("R5C3:R5C4"); Секция.Параметры.Расход = ВыборкаСклад.КоличествоРасход; Секция.Параметры.КонОстаток = ВыборкаСклад.КоличествоОстаток; Секция.Область().Расшифровка = ВыборкаСклад.Номенклатура; Секция.Область().ЦветФона = Фон; ТабОтчет.Присоединить(Секция); Если (ВыборкаСклад.КоличествоРасход <> Null) И (ВыборкаСклад.КоличествоОстаток <> Null) Тогда РасходВсего = РасходВсего + ВыборкаСклад.КоличествоРасход; Если ВыборкаСклад.Номенклатура.БазоваяЕдиницаИзмерения.Наименование = "т.шт." Тогда Если ВыборкаСклад.КоличествоОстаток <= 0.001 Тогда Заказывать = 1; КонецЕсли; Иначе Если ВыборкаСклад.КоличествоОстаток <= 1 Тогда Заказывать = 1; КонецЕсли КонецЕсли; КонецЕсли; КонецЦикла; // Пока Если Заказывать = 1 Тогда НоваяСтрокаПеремещение = КПеремещению.Добавить(); НоваяСтрокаПеремещение.Номенклатура = ВыборкаНоменклатура.Номенклатура; НоваяСтрокаПеремещение.Продано = РасходВсего; НоваяСтрокаПеремещение.Перемещать = РасходВсего; КонецЕсли; Секция = Макет.ПолучитьОбласть("R5C5:R5C6"); Секция.Параметры.ОстатокОтрпав = ВыборкаНоменклатура.КоличествоОстатокОтправ; Секция.Параметры.КПеремещению = ?(Заказывать = 1,РасходВсего,0); Секция.Область().Расшифровка = ВыборкаНоменклатура.Номенклатура; Секция.Область().ЦветФона = Фон; ТабОтчет.Присоединить(Секция); КонецЦикла; // Пока ТабОтчет.ТолькоПросмотр = Истина; ТабОтчет.ФиксацияСверху = 2; КонецПроцедуры Если подскажите что можно оптимизировать, буду признателен :) |
|||
|
16
Jstunner
21.07.11
✎
10:05
|
кошмар
|
|||
|
17
Шапокляк
21.07.11
✎
10:11
|
(15) А вас устраивает, что в отчете не будет остатков тех товаров, по которым оборотов не было?
|
|||
|
18
Шапокляк
21.07.11
✎
10:18
|
+(17) И вообще, зачем периодичность Регистратор, если дальше информация о регистраторах не используется? Что все-таки мешает использовать ОстаткиИОбороты?
|
|||
|
19
Zombi
21.07.11
✎
10:22
|
(17) Да, это как бы отчет по расходам.
(18) В отчете используется дата последнего расхода. |
|||
|
20
Zombi
21.07.11
✎
11:01
|
(16) Как бы ты написал этот отчет?(в общих чертах).
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |