Имя: Пароль:
1C
1С v8
Проблема с запросом
0 kabv
 
15.06.12
09:40
Здравствуйте! Объединение двух запросов и группирую по 3 полям. Первый группирровка по 3 полям, второй по 2. Объединение по 2 полям. Когда получаю результат, то значение поля второго запроса (одна и таже цифра) записано во всех строках третьего уровня группировки и итог суммируется. Получается из второго запроса одна сумма умножается на количество вариантов третьего уровня группировки первого запроса. Можно для третьего уровня группировки установить значения поля второго запроса "0", а чтобы для первого и второго уровня (т.к. объединение по 2 полям) значения сохранились.
Заранее благодарен!
1 Нуф-Нуф
 
15.06.12
09:41
запрос покажи
2 Buster007
 
15.06.12
09:41
(0) может проще запрос показать?
3 kabv
 
15.06.12
09:43
ВЫБРАТЬ
   ВложенныйЗапрос.Подразделение КАК Подразделение,
   ВложенныйЗапрос.НоменклатурныеГруппы КАК НоменклатурныеГруппы,
   СУММА(ВложенныйЗапрос.СуммаОборотДт) КАК Расходы,
   ВложенныйЗапрос.СтатьиЗатрат КАК СтатьиЗатрат,
   СУММА(ВложенныйЗапрос1.Сумма) КАК Сумма
{ВЫБРАТЬ
   Подразделение,
   НоменклатурныеГруппы,
   Расходы,
   СтатьиЗатрат,
   Сумма}
ИЗ
   (ВЫБРАТЬ
       Проводки.Подразделение КАК Подразделение,
       Проводки.НоменклатурныеГруппы КАК НоменклатурныеГруппы,
       СУММА(Проводки.СуммаОборотДт) КАК СуммаОборотДт,
       Проводки.СтатьиЗатрат КАК СтатьиЗатрат
   {ВЫБРАТЬ
       Подразделение,
       НоменклатурныеГруппы,
       СуммаОборотДт}
   ИЗ
       (ВЫБРАТЬ
           ХозрасчетныйОстаткиИОбороты.Субконто1 КАК НоменклатурныеГруппы,
           ХозрасчетныйОстаткиИОбороты.Субконто2 КАК СтатьиЗатрат,
           ХозрасчетныйОстаткиИОбороты.Подразделение КАК Подразделение,
           СУММА(ХозрасчетныйОстаткиИОбороты.СуммаОборотДт) КАК СуммаОборотДт
       ИЗ
           РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ОсновноеПроизводство), , ) КАК ХозрасчетныйОстаткиИОбороты
       ГДЕ
           ХозрасчетныйОстаткиИОбороты.Подразделение <> &Подразделение
       
       СГРУППИРОВАТЬ ПО
           ХозрасчетныйОстаткиИОбороты.Субконто2,
           ХозрасчетныйОстаткиИОбороты.Субконто1,
           ХозрасчетныйОстаткиИОбороты.Подразделение) КАК Проводки
   ГДЕ
       Проводки.СуммаОборотДт <> 0
   {ГДЕ
       Проводки.Подразделение,
       Проводки.НоменклатурныеГруппы,
       Проводки.СтатьиЗатрат}
   
   СГРУППИРОВАТЬ ПО
       Проводки.НоменклатурныеГруппы,
       Проводки.Подразделение,
       Проводки.СтатьиЗатрат
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       ВложенныйЗапрос.Подразделение,
       ВложенныйЗапрос.НоменклатурныеГруппы,
       СУММА(ВложенныйЗапрос.СуммаОборотДт),
       ВложенныйЗапрос.СтатьиЗатрат
   {ВЫБРАТЬ
       Подразделение,
       НоменклатурныеГруппы,
       СуммаОборотДт}
   ИЗ
       (ВЫБРАТЬ
           ЗатратыПодразделенийОбороты.Подразделение КАК Подразделение,
           ЗатратыПодразделенийОбороты.НоменклатурнаяГруппа КАК НоменклатурныеГруппы,
           ЗатратыПодразделенийОбороты.СтатьяЗатрат КАК СтатьиЗатрат,
           СУММА(ЗатратыПодразделенийОбороты.Сумма20Оборот) КАК СуммаОборотДт
       {ВЫБРАТЬ
           Подразделение,
           НоменклатурныеГруппы,
           СтатьиЗатрат,
           СуммаОборотДт}
       ИЗ
           РегистрНакопления.ЗатратыПодразделений.Обороты(&ДатаНач, &ДатаКон, , ) КАК ЗатратыПодразделенийОбороты
       ГДЕ
           ЗатратыПодразделенийОбороты.Сумма20Оборот <> 0
           И ЗатратыПодразделенийОбороты.Подразделение <> &Подразделение
       {ГДЕ
           ЗатратыПодразделенийОбороты.НоменклатурнаяГруппа,
           ЗатратыПодразделенийОбороты.СтатьяЗатрат,
           ЗатратыПодразделенийОбороты.Подразделение}
       
       СГРУППИРОВАТЬ ПО
           ЗатратыПодразделенийОбороты.СтатьяЗатрат,
           ЗатратыПодразделенийОбороты.Подразделение,
           ЗатратыПодразделенийОбороты.НоменклатурнаяГруппа
       
       ОБЪЕДИНИТЬ ВСЕ
       
       ВЫБРАТЬ
           ЗатратыПодразделенийОбороты.Подразделение,
           ЗатратыПодразделенийОбороты.НоменклатурнаяГруппа,
           ЗатратыПодразделенийОбороты.СтатьяЗатрат,
           СУММА(ВЫБОР
                   КОГДА &Дт26
                       ТОГДА ЗатратыПодразделенийОбороты.Сумма26Оборот
                   ИНАЧЕ 0
               КОНЕЦ)
       {ВЫБРАТЬ
           Подразделение,
           НоменклатурныеГруппы,
           СтатьиЗатрат,
           СуммаОборотДт}
       ИЗ
           РегистрНакопления.ЗатратыПодразделений.Обороты(&ДатаНач, &ДатаКон, , ) КАК ЗатратыПодразделенийОбороты
       ГДЕ
           ЗатратыПодразделенийОбороты.Сумма26Оборот <> 0
           И ЗатратыПодразделенийОбороты.Подразделение <> &Подразделение
       {ГДЕ
           ЗатратыПодразделенийОбороты.НоменклатурнаяГруппа,
           ЗатратыПодразделенийОбороты.СтатьяЗатрат,
           ЗатратыПодразделенийОбороты.Подразделение}
       
       СГРУППИРОВАТЬ ПО
           ЗатратыПодразделенийОбороты.СтатьяЗатрат,
           ЗатратыПодразделенийОбороты.Подразделение,
           ЗатратыПодразделенийОбороты.НоменклатурнаяГруппа) КАК ВложенныйЗапрос
   ГДЕ
       ВложенныйЗапрос.СуммаОборотДт <> 0
   {ГДЕ
       ВложенныйЗапрос.Подразделение,
       ВложенныйЗапрос.НоменклатурныеГруппы,
       ВложенныйЗапрос.СтатьиЗатрат}
   
   СГРУППИРОВАТЬ ПО
       ВложенныйЗапрос.Подразделение,
       ВложенныйЗапрос.НоменклатурныеГруппы,
       ВложенныйЗапрос.СтатьиЗатрат) КАК ВложенныйЗапрос
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ВложенныйЗапрос.НоменклатурныеГруппы КАК НоменклатурныеГруппы,
           ВложенныйЗапрос.Подразделение КАК Подразделение,
           ВложенныйЗапрос.Сумма КАК Сумма,
           ВложенныйЗапрос.СтатьиЗатрат КАК СтатьиЗатрат
       ИЗ
           (ВЫБРАТЬ
               РеализацияТоваровУслугУслуги.Субконто КАК НоменклатурныеГруппы,
               ПОДСТРОКА(РеализацияТоваровУслугУслуги.Ссылка.Комментарий, 0, 1000) КАК Подразделение,
               РеализацияТоваровУслугУслуги.Сумма КАК Сумма,
               NULL КАК СтатьиЗатрат
           ИЗ
               Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги
           ГДЕ
               РеализацияТоваровУслугУслуги.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон
               И РеализацияТоваровУслугУслуги.Ссылка.Организация = &Организация) КАК ВложенныйЗапрос) КАК ВложенныйЗапрос1
       ПО ВложенныйЗапрос.НоменклатурныеГруппы = ВложенныйЗапрос1.НоменклатурныеГруппы
           И (ВложенныйЗапрос1.Подразделение ПОДОБНО "%" + ВложенныйЗапрос.Подразделение.Наименование + "%")
{ГДЕ
   ВложенныйЗапрос.Подразделение,
   ВложенныйЗапрос.НоменклатурныеГруппы,
   ВложенныйЗапрос.СтатьиЗатрат}

СГРУППИРОВАТЬ ПО
   ВложенныйЗапрос.НоменклатурныеГруппы,
   ВложенныйЗапрос.Подразделение,
   ВложенныйЗапрос.СтатьиЗатрат

УПОРЯДОЧИТЬ ПО
   НоменклатурныеГруппы,
   Подразделение,
   СтатьиЗатрат
ИТОГИ
   СУММА(Расходы),
   СУММА(Сумма)
ПО
   ОБЩИЕ,
   НоменклатурныеГруппы,
   Подразделение,
   СтатьиЗатрат
{ИТОГИ ПО
   Подразделение,
   НоменклатурныеГруппы,
   СтатьиЗатрат}
АВТОУПОРЯДОЧИВАНИЕ
4 kabv
 
15.06.12
09:46
Группировка  РеализацияТоваровУслугУслуги по 2 уровням вклинивается в "основной 3-х уровневый" и по недостающему третьему дублируется.
5 Рэйв
 
15.06.12
09:51
>>Получается из второго запроса одна сумма умножается на количество вариантов

Сколько раз соединение найдет в правой таблице строку удовлетворяющую условию, столько раз ее и присоединит. У тебя похоже ном группы равны везде.
6 kabv
 
15.06.12
09:54
Это я знаю, хитрушка етсть какая-нибуть, чтобы ее занулить для вариантов третьей?
7 Рэйв
 
15.06.12
09:56
добавляй какое нибудь условие для соединения, чтобы соединие было уникальным для каждой строки правой таблицы
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший