Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
24 июн 2021, 20:50

помощь в разборе листининга запроса

Автор Maus74, 19 мар 2017, 17:50

0 Пользователей и 1 гость просматривают эту тему.

Maus74

Добрый день всем, помогите разобрать  листинг запроса. Там есть в одну строчку прописаные нули, я нашел даже некую закономерность, но до конца пока не могу определоить как она используется. Прошу разжевать максмиально подробно. Спасибо большое заранее. Листинг:

|            ВложенныйЗапрос.Контрагент КАК Контрагент,
|      СУММА(ВложенныйЗапрос.СуммаУслуг) КАК Услуги,
|      СУММА(ВложенныйЗапрос.СуммаОплаты) КАК Оплата,
|      СУММА(ВложенныйЗапрос.ОплатаНачало - ВложенныйЗапрос.УслугиНачало) КАК НачальноеСальдо,
|      СУММА(ВложенныйЗапрос.ОплатаНачало - ВложенныйЗапрос.УслугиНачало + ВложенныйЗапрос.СуммаОплаты - ВложенныйЗапрос.СуммаУслуг) КАК ДолгПереплата
|      ИЗ
|            (ВЫБРАТЬ
|                  Оплата.Подразделение КАК Подразделение,
|                  Оплата.Вид КАК Вид,
|                  Оплата.Контрагент КАК Контрагент,
|                  СУММА(Оплата.Сумма) КАК СуммаУслуг,
|                  0 КАК СуммаОплаты,
|                  0 КАК УслугиНачало,
|                  0 КАК ОплатаНачало
|            ИЗ
|                  РегистрНакопления.Оплата КАК Оплата
|            ГДЕ
|                  Оплата.ВидДвижения = &Расход
|                  И (Оплата.Контрагент.ЮрФизЛицо = &ЮрФизЛицо
|                              ИЛИ (Оплата.ДоговорСсылка.ВидДоговора = &ВКГО
|                                    И Оплата.Вид = &Вид5))
|                  И Оплата.Период >= &НачалоПериода
|                  И Оплата.Период <= &КонецПериода
|           
|            СГРУППИРОВАТЬ ПО
|                  Оплата.Подразделение,
|                  Оплата.Вид,
|                  Оплата.Контрагент
|           
|           
|            ОБЪЕДИНИТЬ
|           
|            ВЫБРАТЬ
|                  Оплата.Подразделение,
|                  Оплата.Вид,
|                  Оплата.Контрагент,
|                  0,
|                  СУММА(Оплата.Сумма),
|                  0,
|                  0
|            ИЗ
|                  РегистрНакопления.Оплата КАК Оплата
|            ГДЕ
|                  Оплата.ВидДвижения = &Приход
|                  И Оплата.Период >= &НачалоПериода
|                  И Оплата.Период <= &КонецПериода
|                  И ((Оплата.Вид = &Вид5
|                                    И Оплата.ДоговорСсылка.ВидДоговора = &ВКГО)
|                              ИЛИ Оплата.Контрагент.ЮрФизЛицо = &ЮрФизЛицо)
|           
|            СГРУППИРОВАТЬ ПО
|                  Оплата.Подразделение,
|                  Оплата.Вид,
|                  Оплата.Контрагент
|           
|           
|            ОБЪЕДИНИТЬ
|           
|            ВЫБРАТЬ
|                  Оплата.Подразделение,
|                  Оплата.Вид,
|                  Оплата.Контрагент,
|                  0,
|                  0,
|                  СУММА(Оплата.Сумма),
|                  0
|            ИЗ
|                  РегистрНакопления.Оплата КАК Оплата
|            ГДЕ
|                  Оплата.ВидДвижения = &Расход
|                  И (Оплата.Контрагент.ЮрФизЛицо = &ЮрФизЛицо
|                              ИЛИ (Оплата.ДоговорСсылка.ВидДоговора = &ВКГО
|                                    И Оплата.Вид = &Вид5))
|                  И Оплата.Период >= &Дата
|                  И Оплата.Период < &НачалоПериода
|           
|            СГРУППИРОВАТЬ ПО
|                  Оплата.Подразделение,
|                  Оплата.Вид,
|                  Оплата.Контрагент
|           
|            ОБЪЕДИНИТЬ
|           
|            ВЫБРАТЬ
|                  Оплата.Подразделение,
|                  Оплата.Вид,
|                  Оплата.Контрагент,
|                  0,
|                  0,
|                  0,
|                  СУММА(Оплата.Сумма)
|            ИЗ
|                  РегистрНакопления.Оплата КАК Оплата
|            ГДЕ
|                  Оплата.ВидДвижения = &Приход
|                  И Оплата.Период >= &Дата
|                  И Оплата.Период < &НачалоПериода
|                  И ((Оплата.Вид = &Вид5
|                                    И Оплата.ДоговорСсылка.ВидДоговора = &ВКГО)
|                              ИЛИ Оплата.Контрагент.ЮрФизЛицо = &ЮрФизЛицо)
|           
|            СГРУППИРОВАТЬ ПО
|                  Оплата.Подразделение,
|                  Оплата.Вид,
|                  Оплата.Контрагент) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
|      ВложенныйЗапрос.Подразделение,
|      ВложенныйЗапрос.Вид,
|      ВложенныйЗапрос.Контрагент
|) КАК ВложенныйЗапрос
|            ГДЕ
|                  ВложенныйЗапрос.ДолгПереплата < 0
|ИТОГИ
|      СУММА(Услуги),
|      СУММА(Оплата),
|      СУММА(НачальноеСальдо),
|      СУММА(ДолгПереплата)
|ПО
|      Подразделение,
|      Вид";

alex0402

Цитата: Maus74 от 19 мар 2017, 17:50СУММА(Оплата.Сумма) КАК СуммаУслуг, |                  0 КАК СуммаОплаты, |                  0 КАК УслугиНачало, |                  0 КАК ОплатаНачало

первый запрос выбирает Услуги, Второй - оплаты и т.д.
Спасибо за Сказать спасибо

Maus74

Цитата: alex0402 от 19 мар 2017, 18:02
Цитата: Maus74 от 19 мар 2017, 17:50СУММА(Оплата.Сумма) КАК СуммаУслуг, |                  0 КАК СуммаОплаты, |                  0 КАК УслугиНачало, |                  0 КАК ОплатаНачало

первый запрос выбирает Услуги, Второй - оплаты и т.д.

все равно не пойму. Сначала:
Оплата.Подразделение,
|                  Оплата.Вид,
|                  Оплата.Контрагент,
|                  0,
|                  СУММА(Оплата.Сумма),
|                  0,
|                  0

затем
Оплата.Подразделение,
|                  Оплата.Вид,
|                  Оплата.Контрагент,
|                  0,
|                  0,
|                  СУММА(Оплата.Сумма),
|                  0

затем
Оплата.Подразделение,
|                  Оплата.Вид,
|                  Оплата.Контрагент,
|                  0,
|                  0,
|                  0,
|                  СУММА(Оплата.Сумма)


почему 0 подряд стоят? и что они дают?

alex0402

|ИТОГИ
|      СУММА(Услуги),
|      СУММА(Оплата),
|      СУММА(НачальноеСальдо),
|      СУММА(ДолгПереплата)
|ПО
|      Подразделение,
|      Вид";


итоги соберут в конце
Услуги + 0 + 0 + 0
0 + Оплата + 0 + 0
и т.д.
Спасибо за Сказать спасибо

Maus74

Я правильно понимаю, что в данном запросе 0 - это такая условная переменная, которая в первом запросе принимает 1 вид, потом 2 вид, потом 3 вид, и потом это всё складывается? (объяснил как мог, я ещё тот Кличко :D)

Norfolk

Цитата: Maus74 от 19 мар 2017, 19:26
Я правильно понимаю, что в данном запросе 0 - это такая условная переменная, которая в первом запросе принимает 1 вид, потом 2 вид, потом 3 вид, и потом это всё складывается? (объяснил как мог, я ещё тот Кличко :D)
Это не условная переменная. Это НОЛЬ. Для того, чтобы СКД смогла сложить необходимые поля. Если в одном подзапросе есть некое поле, а в другом например его нет (при этом запросы именно объединяются), то для корректного сложения нужно поставить 0.

AsadRoman

Цитата: Maus74 от 19 мар 2017, 17:50
Добрый день всем, помогите разобрать  листинг запроса. Там есть в одну строчку прописаные нули, я нашел даже некую закономерность, но до конца пока не могу определоить как она используется. Прошу разжевать максмиально подробно. Спасибо большое заранее. Листинг:

|            ВложенныйЗапрос.Контрагент КАК Контрагент,
|      СУММА(ВложенныйЗапрос.СуммаУслуг) КАК Услуги,
|      СУММА(ВложенныйЗапрос.СуммаОплаты) КАК Оплата,
|      СУММА(ВложенныйЗапрос.ОплатаНачало - ВложенныйЗапрос.УслугиНачало) КАК НачальноеСальдо,
|      СУММА(ВложенныйЗапрос.ОплатаНачало - ВложенныйЗапрос.УслугиНачало + ВложенныйЗапрос.СуммаОплаты - ВложенныйЗапрос.СуммаУслуг) КАК ДолгПереплата
|      ИЗ
|            (ВЫБРАТЬ
|                  Оплата.Подразделение КАК Подразделение,
|                  Оплата.Вид КАК Вид,
|                  Оплата.Контрагент КАК Контрагент,
|                  СУММА(Оплата.Сумма) КАК СуммаУслуг,
|                  0 КАК СуммаОплаты,
|                  0 КАК УслугиНачало,
|                  0 КАК ОплатаНачало
|            ИЗ
|                  РегистрНакопления.Оплата КАК Оплата
|            ГДЕ
|                  Оплата.ВидДвижения = &Расход
|                  И (Оплата.Контрагент.ЮрФизЛицо = &ЮрФизЛицо
|                              ИЛИ (Оплата.ДоговорСсылка.ВидДоговора = &ВКГО
|                                    И Оплата.Вид = &Вид5))
|                  И Оплата.Период >= &НачалоПериода
|                  И Оплата.Период <= &КонецПериода
|           
|            СГРУППИРОВАТЬ ПО
|                  Оплата.Подразделение,
|                  Оплата.Вид,
|                  Оплата.Контрагент
|           
|           
|            ОБЪЕДИНИТЬ
|           
|            ВЫБРАТЬ
|                  Оплата.Подразделение,
|                  Оплата.Вид,
|                  Оплата.Контрагент,
|                  0,
|                  СУММА(Оплата.Сумма),
|                  0,
|                  0
|            ИЗ
|                  РегистрНакопления.Оплата КАК Оплата
|            ГДЕ
|                  Оплата.ВидДвижения = &Приход
|                  И Оплата.Период >= &НачалоПериода
|                  И Оплата.Период <= &КонецПериода
|                  И ((Оплата.Вид = &Вид5
|                                    И Оплата.ДоговорСсылка.ВидДоговора = &ВКГО)
|                              ИЛИ Оплата.Контрагент.ЮрФизЛицо = &ЮрФизЛицо)
|           
|            СГРУППИРОВАТЬ ПО
|                  Оплата.Подразделение,
|                  Оплата.Вид,
|                  Оплата.Контрагент
|           
|           
|            ОБЪЕДИНИТЬ
|           
|            ВЫБРАТЬ
|                  Оплата.Подразделение,
|                  Оплата.Вид,
|                  Оплата.Контрагент,
|                  0,
|                  0,
|                  СУММА(Оплата.Сумма),
|                  0
|            ИЗ
|                  РегистрНакопления.Оплата КАК Оплата
|            ГДЕ
|                  Оплата.ВидДвижения = &Расход
|                  И (Оплата.Контрагент.ЮрФизЛицо = &ЮрФизЛицо
|                              ИЛИ (Оплата.ДоговорСсылка.ВидДоговора = &ВКГО
|                                    И Оплата.Вид = &Вид5))
|                  И Оплата.Период >= &Дата
|                  И Оплата.Период < &НачалоПериода
|           
|            СГРУППИРОВАТЬ ПО
|                  Оплата.Подразделение,
|                  Оплата.Вид,
|                  Оплата.Контрагент
|           
|            ОБЪЕДИНИТЬ
|           
|            ВЫБРАТЬ
|                  Оплата.Подразделение,
|                  Оплата.Вид,
|                  Оплата.Контрагент,
|                  0,
|                  0,
|                  0,
|                  СУММА(Оплата.Сумма)
|            ИЗ
|                  РегистрНакопления.Оплата КАК Оплата
|            ГДЕ
|                  Оплата.ВидДвижения = &Приход
|                  И Оплата.Период >= &Дата
|                  И Оплата.Период < &НачалоПериода
|                  И ((Оплата.Вид = &Вид5
|                                    И Оплата.ДоговорСсылка.ВидДоговора = &ВКГО)
|                              ИЛИ Оплата.Контрагент.ЮрФизЛицо = &ЮрФизЛицо)
|           
|            СГРУППИРОВАТЬ ПО
|                  Оплата.Подразделение,
|                  Оплата.Вид,
|                  Оплата.Контрагент) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
|      ВложенныйЗапрос.Подразделение,
|      ВложенныйЗапрос.Вид,
|      ВложенныйЗапрос.Контрагент
|) КАК ВложенныйЗапрос
|            ГДЕ
|                  ВложенныйЗапрос.ДолгПереплата < 0
|ИТОГИ
|      СУММА(Услуги),
|      СУММА(Оплата),
|      СУММА(НачальноеСальдо),
|      СУММА(ДолгПереплата)
|ПО
|      Подразделение,
|      Вид";


                    И Оплата.Период >= &Дата
|                  И Оплата.Период < &НачалоПериода

Вот это что за зверь?

Norfolk



                    И Оплата.Период >= &Дата
|                  И Оплата.Период < &НачалоПериода

Вот это что за зверь?
[/quote]
Задается период, по которому будут выводиться данные из регистра Оплата. Обороты за период между "Дата" и "НачалоПериода".

AsadRoman

Цитата: Norfolk от 20 мар 2017, 10:22


                    И Оплата.Период >= &Дата
|                  И Оплата.Период < &НачалоПериода

Вот это что за зверь?
Задается период, по которому будут выводиться данные из регистра Оплата. Обороты за период между "Дата" и "НачалоПериода".
[/quote]

И Оплата.Период >= &НачалоПериода
|                  И Оплата.Период <= &КонецПериода
А это тогда что за период?
Добавлено: 20 мар 2017, 12:10


Получается что-о типа: пять пишем - два в уме, потом еще четыре прибавим. Может сначала обычными словами объясните что хотите от этого запроса? С какого перепугу два периода? Зачем столько объединений? В одном запросе нельзя использовать конструкцию Выбор - когда - тогда - иначе - конец?

ef0din

Цитата: AsadRoman от 20 мар 2017, 12:06
Цитата: Norfolk от 20 мар 2017, 10:22


                    И Оплата.Период >= &Дата
|                  И Оплата.Период < &НачалоПериода

Вот это что за зверь?
Задается период, по которому будут выводиться данные из регистра Оплата. Обороты за период между "Дата" и "НачалоПериода".

И Оплата.Период >= &НачалоПериода
|                  И Оплата.Период <= &КонецПериода
А это тогда что за период?
Добавлено: 20 мар 2017, 12:10


Получается что-о типа: пять пишем - два в уме, потом еще четыре прибавим. Может сначала обычными словами объясните что хотите от этого запроса? С какого перепугу два периода? Зачем столько объединений? В одном запросе нельзя использовать конструкцию Выбор - когда - тогда - иначе - конец?
[/quote]



Такое впечатление, что услуги и оплаты выбираются за период (НачалоПериода, КонецПериода), а начальноеСальдо и ДолгПереплата - на период перед начальным, на момент оплаты(Дата, НачалоПериода). Вроде и логику в этом можно найти.

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск