Имя: Пароль:
1C
1С v8
Помогите с вложенными запросами
0 Alexion124
 
02.04.12
09:17
хочу посчитать разницу между периодами в процентах, но запрос выдает неправильные данные за период, подскажите в чем моя ошибка
сам запрос

ВЫБРАТЬ
   100 * (СУММА(ВложенныйЗапрос1.Количество / ВложенныйЗапрос1.Номенклатура.ЕдиницаДляОтчетов.Коэффициент) / ЕСТЬNULL(СУММА(ВложенныйЗапрос.Количество / ВложенныйЗапрос.Номенклатура.ЕдиницаДляОтчетов.Коэффициент), 1) - 1) КАК ПроцентУвеличенияКПрошломуГоду,
   ВложенныйЗапрос1.Подразделение,
   СУММА(ВложенныйЗапрос1.Количество / ВложенныйЗапрос1.Номенклатура.ЕдиницаДляОтчетов.Коэффициент) КАК Уп,
   СУММА(ВложенныйЗапрос1.Количество * ВложенныйЗапрос1.Номенклатура.ЕдиницаХраненияОстатков.Объем) КАК Литры,
   СУММА(ВЫРАЗИТЬ(ВложенныйЗапрос1.Стоимость КАК ЧИСЛО(10, 0))) КАК Руб,
   НАЧАЛОПЕРИОДА(ВложенныйЗапрос1.Период, ГОД) КАК ПериодГод,
   МЕСЯЦ(ВложенныйЗапрос1.Период) КАК ПериодМесяц,
   ВложенныйЗапрос1.ДоговорКонтрагента.Завод КАК Завод,
   ВложенныйЗапрос1.ДоговорКонтрагента.ТоргПредставитель КАК ТоргПредставитель
ИЗ
   (ВЫБРАТЬ
       Продажи.Подразделение КАК Подразделение,
       Продажи.Количество КАК Количество,
       Продажи.Номенклатура КАК Номенклатура,
       Продажи.Стоимость КАК Стоимость,
       Продажи.Период КАК Период,
       Продажи.ДоговорКонтрагента КАК ДоговорКонтрагента
   ИЗ
       РегистрНакопления.Продажи КАК Продажи
   ГДЕ
       Продажи.Период >= &ДатаНачала
       И Продажи.Период <= &ДатаОкончания) КАК ВложенныйЗапрос,
   (ВЫБРАТЬ
       Продажи.Подразделение КАК Подразделение,
       Продажи.Количество КАК Количество,
       Продажи.Номенклатура КАК Номенклатура,
       Продажи.Стоимость КАК Стоимость,
       Продажи.Период КАК Период,
       Продажи.ДоговорКонтрагента КАК ДоговорКонтрагента
   ИЗ
       РегистрНакопления.Продажи КАК Продажи
   ГДЕ
       Продажи.Период >= ДОБАВИТЬКДАТЕ(&ДатаНачала, ГОД, 1)
       И Продажи.Период <= ДОБАВИТЬКДАТЕ(&ДатаОкончания, ГОД, 1)) КАК ВложенныйЗапрос1

СГРУППИРОВАТЬ ПО
   НАЧАЛОПЕРИОДА(ВложенныйЗапрос1.Период, ГОД),
   МЕСЯЦ(ВложенныйЗапрос1.Период),
   ВложенныйЗапрос1.Подразделение,
   ВложенныйЗапрос1.ДоговорКонтрагента.Завод,
   ВложенныйЗапрос1.ДоговорКонтрагента.ТоргПредставитель
1 Ненавижу 1С
 
гуру
02.04.12
09:19
используй виртуальные таблицы оборотов и не нужны будут подзапросы
2 Axel2009
 
02.04.12
09:19
условие соединения хоть задай
3 el-gamberro
 
02.04.12
09:20
запросы надо соеденить
4 Axel2009
 
02.04.12
09:20
(1) ну и как же разделить то?
5 Alexion124
 
02.04.12
09:21
(2)(3) покажите плиз на примере, не соображу как их соеденить
6 el-gamberro
 
02.04.12
09:22
(ВЫБРАТЬ
       Продажи.Подразделение КАК Подразделение,
       Продажи.Количество КАК Количество,
       Продажи.Номенклатура КАК Номенклатура,
       Продажи.Стоимость КАК Стоимость,
       Продажи.Период КАК Период,
       Продажи.ДоговорКонтрагента КАК ДоговорКонтрагента
   ИЗ
       РегистрНакопления.Продажи КАК Продажи
   ГДЕ
       Продажи.Период >= &ДатаНачала
       И Продажи.Период <= &ДатаОкончания) КАК ВложенныйЗапрос,
   (ВЫБРАТЬ
       Продажи.Подразделение КАК Подразделение,
       Продажи.Количество КАК Количество,
       Продажи.Номенклатура КАК Номенклатура,
       Продажи.Стоимость КАК Стоимость,
       Продажи.Период КАК Период,
       Продажи.ДоговорКонтрагента КАК ДоговорКонтрагента
   ИЗ
       РегистрНакопления.Продажи КАК Продажи
   ГДЕ
       Продажи.Период >= ДОБАВИТЬКДАТЕ(&ДатаНачала, ГОД, 1)
       И Продажи.Период <= ДОБАВИТЬКДАТЕ(&ДатаОкончания, ГОД, 1)) КАК ВложенныйЗапрос1
ГДЕ
ВложенныйЗапрос1.Подразделение = ВложенныйЗапрос.Подразделение И ВложенныйЗапрос1.Номенклатура= ВложенныйЗапрос.Номенклатура

уродский синтаксис. но
7 Axel2009
 
02.04.12
09:22
(5) как любые таблицы между собой соединяются
8 Alexion124
 
02.04.12
09:22
(5)точнее по какому полю, я пробовал по договору контрагента, но вообще запрос пустоту тогда выдапет
9 el-gamberro
 
02.04.12
09:22
(8) ты должен использовать ПОЛНОЕ СОЕДИНЕНИЕ ПО
10 Axel2009
 
02.04.12
09:23
(6) еще по договору, и вложенные таблицы свернуть надо и посчитать суммарные значения
11 el-gamberro
 
02.04.12
09:23
(8) вообще важны условия задачи. что если по номенклатуре в прошлом периоде были обороты. а в текущем нет. они должны попасть в отчет?
12 Alexion124
 
02.04.12
09:29
(11)прошлые периоды вообще не вывожу в отчет, мне они нужны только для вычисления процента
13 Ненавижу 1С
 
гуру
02.04.12
09:34
ВЫБРАТЬ
   ЕСТЬNULL(ПродажиОбороты.ДоговорКонтрагента, ПродажиОбороты1.ДоговорКонтрагента) КАК Договор,
   ЕСТЬNULL(ПродажиОбороты.Номенклатура, ПродажиОбороты1.Номенклатура) КАК Номенклатура,
   ЕСТЬNULL(ДОБАВИТЬКДАТЕ(ПродажиОбороты.Период, МЕСЯЦ, 12), ПродажиОбороты1.Период) КАК Месяц,
   ЕСТЬNULL(ПродажиОбороты.СтоимостьОборот, 0) КАК База,
   ЕСТЬNULL(ПродажиОбороты1.СтоимостьОборот, 0) КАК Текущее,
   ВЫБОР
       КОГДА ЕСТЬNULL(ПродажиОбороты.СтоимостьОборот, 0) = 0
           ТОГДА NULL
       ИНАЧЕ (ЕСТЬNULL(ПродажиОбороты1.СтоимостьОборот, 0) / ЕСТЬNULL(ПродажиОбороты.СтоимостьОборот, 0) - 1) * 100
   КОНЕЦ КАК Процент
ИЗ
   РегистрНакопления.Продажи.Обороты(&НачДата, &КонДата, Месяц, ) КАК ПродажиОбороты
       ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&НачДата, ГОД, 1), ДОБАВИТЬКДАТЕ(&КонДата, ГОД, 1), Месяц, ) КАК ПродажиОбороты1
       ПО ПродажиОбороты.Номенклатура = ПродажиОбороты1.Номенклатура
           И ПродажиОбороты.ДоговорКонтрагента = ПродажиОбороты1.ДоговорКонтрагента
           И (ДОБАВИТЬКДАТЕ(ПродажиОбороты.Период, МЕСЯЦ, 12) = ПродажиОбороты1.Период)
14 Ненавижу 1С
 
гуру
02.04.12
09:35
+(13) это рыба
AdBlock убивает бесплатный контент. 1Сергей