Версия для печати темы (https://pro1c.org.ua/index.php?s=907960a2dfc5dc7d08dbcb194003723e&showtopic=56245)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Система компоновки данных _ Выводятся значения колонки не за тот период

Автор: bruslan 10.01.20, 14:50

Помогите разобраться с проблемой.
Конфигурация УТП.
Формирую отчет "Сравнительный анализ оборота по подразделению" за разные периоды, следующего вида

Период Месяц.................... СуммаОборот1 СуммаОборот2
1......... Обороты за Январь ...... 39 245 ......65 567
2......... Обороты за Февраль ... 117 402 ....56 524
3......... Обороты за Март .......... 99 053 ......2 240


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

Параметры: Период1: 01.01.2019 - 31.12.2019
Период2: 01.01.2018 - 31.12.2018
Контрагент: Магазин Кировский

Период Месяц.................. Сумма оборот1 Сумма оборот2
1......... Обороты за Январь ......39 245,00 ....... 39 245,00
2......... Обороты за Февраль ...117 402,00 ... 117 402,00
3......... Обороты за Март .........99 053,00 ....... 99 053,00

Внешний отчет можно скачать тут https://pro1c.org.ua/redirect.php?https://drive.google.com/open?id=1cqoV5jIgIGbAZPwNcERk-tn-oV1RfPhp

Сам запрос
ВЫБРАТЬ
ВложенныйЗапрос.Период КАК Период,
ВложенныйЗапрос.Месяц,
ВложенныйЗапрос.Контрагент КАК Контрагент,
СУММА(ВложенныйЗапрос.СуммаОборот1) КАК СуммаОборот1,
СУММА(ВложенныйЗапрос.СуммаОборот2) КАК СуммаОборот2
ИЗ
(ВЫБРАТЬ
Период_1.Период КАК Период,
Период_1.Месяц КАК Месяц,
Период_1.Контрагент КАК Контрагент,
Период_1.СуммаОборот1 КАК СуммаОборот1,
Период_2.СуммаОборот2 КАК СуммаОборот2
ИЗ
(ВЫБРАТЬ
ВложенныйЗапрос.Период КАК Период,
ВложенныйЗапрос.Месяц КАК Месяц,
СУММА(ВложенныйЗапрос.СуммаОборотКт) КАК СуммаОборот1,
ВложенныйЗапрос.субконто1 КАК Контрагент
ИЗ
(ВЫБРАТЬ
движения.СчетУчета КАК СчетУчета,
движения.субконто1 КАК субконто1,
движения.субконто2 КАК субконто2,
движения.СуммаОборотКт КАК СуммаОборотКт,
движения.КорСчет КАК КорСчет,
движения.Месяц КАК Месяц,
движения.Период КАК Период
ИЗ
(ВЫБРАТЬ
ХозрасчетныйОбороты.Счет КАК СчетУчета,
ХозрасчетныйОбороты.Субконто1 КАК субконто1,
ХозрасчетныйОбороты.Субконто2 КАК субконто2,
ХозрасчетныйОбороты.СуммаОборотКт КАК СуммаОборотКт,
ХозрасчетныйОбороты.КорСчет КАК КорСчет,
ВЫБОР
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 1
ТОГДА "Обороты за Январь"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 2
ТОГДА "Обороты за Февраль"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 3
ТОГДА "Обороты за Март"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 4
ТОГДА "Обороты за Апрель"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 5
ТОГДА "Обороты за Май"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 6
ТОГДА "Обороты за Июнь"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 7
ТОГДА "Обороты за Июль"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 8
ТОГДА "Обороты за Август"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 9
ТОГДА "Обороты за Сентябрь"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 10
ТОГДА "Обороты за Октябрь"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 11
ТОГДА "Обороты за Ноябрь"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 12
ТОГДА "Обороты за Декабрь"
КОНЕЦ КАК Месяц,
МЕСЯЦ(ХозрасчетныйОбороты.Период) КАК Период
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, Регистратор, Счет = &Счет361, &ВидыСубконтоНС, , КорСчет В (&Счет), ) КАК ХозрасчетныйОбороты) КАК движения) КАК ВложенныйЗапрос
ГДЕ
ВложенныйЗапрос.КорСчет <> &Корсчет

СГРУППИРОВАТЬ ПО
ВложенныйЗапрос.Месяц,
ВложенныйЗапрос.Период,
ВложенныйЗапрос.субконто1) КАК Период_1
ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ВложенныйЗапрос.Период КАК Период,
ВложенныйЗапрос.Месяц КАК Месяц,
СУММА(ВложенныйЗапрос.СуммаОборотКт) КАК СуммаОборот2,
ВложенныйЗапрос.субконто1 КАК Контрагент
ИЗ
(ВЫБРАТЬ
движения.СчетУчета КАК СчетУчета,
движения.субконто1 КАК субконто1,
движения.субконто2 КАК субконто2,
движения.СуммаОборотКт КАК СуммаОборотКт,
движения.КорСчет КАК КорСчет,
движения.Месяц КАК Месяц,
движения.Период КАК Период
ИЗ
(ВЫБРАТЬ
ХозрасчетныйОбороты.Счет КАК СчетУчета,
ХозрасчетныйОбороты.Субконто1 КАК субконто1,
ХозрасчетныйОбороты.Субконто2 КАК субконто2,
ХозрасчетныйОбороты.СуммаОборотКт КАК СуммаОборотКт,
ХозрасчетныйОбороты.КорСчет КАК КорСчет,
ВЫБОР
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 1
ТОГДА "Обороты за Январь"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 2
ТОГДА "Обороты за Февраль"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 3
ТОГДА "Обороты за Март"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 4
ТОГДА "Обороты за Апрель"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 5
ТОГДА "Обороты за Май"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 6
ТОГДА "Обороты за Июнь"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 7
ТОГДА "Обороты за Июль"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 8
ТОГДА "Обороты за Август"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 9
ТОГДА "Обороты за Сентябрь"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 10
ТОГДА "Обороты за Октябрь"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 11
ТОГДА "Обороты за Ноябрь"
КОГДА МЕСЯЦ(ХозрасчетныйОбороты.Регистратор.Дата) = 12
ТОГДА "Обороты за Декабрь"
КОНЕЦ КАК Месяц,
МЕСЯЦ(ХозрасчетныйОбороты.Период) КАК Период
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода_2, &КонецПериода_2, Регистратор, Счет = &Счет361, &ВидыСубконтоНС, , КорСчет В (&Счет), ) КАК ХозрасчетныйОбороты) КАК движения) КАК ВложенныйЗапрос
ГДЕ
ВложенныйЗапрос.КорСчет <> &Корсчет

СГРУППИРОВАТЬ ПО
ВложенныйЗапрос.Месяц,
ВложенныйЗапрос.Период,
ВложенныйЗапрос.субконто1) КАК Период_2
ПО Период_1.Период = Период_2.Период
И Период_1.Контрагент = Период_2.Контрагент) КАК ВложенныйЗапрос
ГДЕ
ВложенныйЗапрос.Контрагент = &Контрагент

СГРУППИРОВАТЬ ПО
ВложенныйЗапрос.Контрагент,
ВложенныйЗапрос.Месяц,
ВложенныйЗапрос.Период

УПОРЯДОЧИТЬ ПО
Контрагент,
Период

Параметры в СКД - https://pro1c.org.ua/redirect.php?https://drive.google.com/open?id=1E-o_705WMF6EB-VtdMHG3nF6jAoVEyQb

Настройки в СКД - https://pro1c.org.ua/redirect.php?https://drive.google.com/open?id=1o5EPikaTV4m2LKdsq5uwo7xBo8D-J1nr

https://pro1c.org.ua/redirect.php?https://drive.google.com/open?id=1aqNttMXxONE04pTl0i8h38dEk1VY9R-3


Помогите разобраться, уже что только не перепробовал, все равно выводит первый период.

Автор: fly 10.01.20, 15:43

bruslan @ Сегодня, 14:50 * ,
у вас по запросу берется только одна таблица
Период_1.СуммаОборот
Период_2.СуммаОборот
....
соединение ПО
...
Период_1.Период = Период_2.Период

где Период_1.Период = МЕСЯЦ(ХозрасчетныйОбороты.Период) - а это значит 01.01.18
где Период_2.Период= МЕСЯЦ(ХозрасчетныйОбороты.Период) - а это значит 01.01.19

fly @ Сегодня, 15:32 * ,
у вас по запросу берется только одна таблица
Период_1.СуммаОборот

имелось ввиду Таблица Период_1

вторая Период_2 не попадет, так как соединение по Периоду не работает, там периоды разные

Автор: pablo 10.01.20, 15:45

fly, Вы не внимательно смотрели запрос. Поле Период содержит номер месяца

Автор: fly 10.01.20, 15:48

pablo @ Сегодня, 15:45 * ,
тогда ВЫРАЗИТЬ(МЕСЯЦ(ХозрасчетныйОбороты.Период) КАК ЧИСЛО(2,0))

pablo @ Сегодня, 15:45 * ,
МЕСЯЦ(ХозрасчетныйОбороты.Период) = тип дата
и является "201901010000...."

Автор: pablo 10.01.20, 15:51

Навскидку в гугле: https://pro1c.org.ua/redirect.php?https://codernote.ru/1c/funkcii-yazyka-zaprosov-1s-rabota-s-datami/

Автор: bruslan 10.01.20, 17:43

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

Автор: fly 10.01.20, 19:13

Цитата(pablo @ 10.01.20, 15:45) *
fly, Вы не внимательно смотрели запрос. Поле Период содержит номер месяца

не прав +
перепутал НачалоПериода(Дата, Месяц)

Автор: fly 10.01.20, 20:56

Цитата(bruslan @ 10.01.20, 17:43) *
Возможно в отчете с СКД где-то ошибки в компановке или в задании параметров?


не будет запрос выдавать полную информацию, даже не в СКД

так как в первой таблице, если данные отсутствуют за какой то месяц строки из второй таблицы

ВЫБРАТЬ
ВложенныйЗапрос.Период КАК Период,
ВложенныйЗапрос.Месяц,
ВложенныйЗапрос.Контрагент КАК Контрагент,

заполнит как Null - будут пустые строки, или из второй таблицы не берет - вообще

у Контрагента стоит измерение
+
Игнорировать значения NULL – если установлено, то в результат не нужно включать групповые записи по данному полю в случае, если поле содержит значение NULL.
- приведет, что отбор на Параметр Контрагент может не сработать.



Далее
в СКД нет полного соединения, оно все равно остается Левым,
неявным образом задается таблица - система как то сама определяет, какая будет левой - какая правой. Может поэтому лепит одни и те же цифры в обе колонки (НаборДанных с обоих таблиц подставляет в одни и те же поля).


по сути если нужны общие цифры за периоды, вообще использовать можно одну таблицу добавив поле Год а в макете прописать колонки Год.
либо на худой конец объединение, или два НабораДанных

Автор: bruslan 11.01.20, 21:01

Цитата(fly @ 10.01.20, 21:56) *
по сути если нужны общие цифры за периоды, вообще использовать можно одну таблицу добавив поле Год


Спасибо за ценную информацию. насчет отсутствия полного соединения в СКД.
Попробую использовать одну таблицу, так думаю будет более правильно, и отчет будет работать быстрее.

Автор: bruslan 14.01.20, 10:44

Всем спасибо, все получилось. Сделал выборку за оба периода во временную таблицу, и затем из нее выбрал за отдельные года. Так и отчет работает заметно быстрее.

вот и сам запрос:

ВЫБРАТЬ
ХозрасчетныйОбороты.Субконто1 КАК Контрагент,
СУММА(ХозрасчетныйОбороты.СуммаОборотКт) КАК СуммаОборот,
МЕСЯЦ(ХозрасчетныйОбороты.Период) КАК Месяц,
ГОД(ХозрасчетныйОбороты.Период) КАК Год
ПОМЕСТИТЬ ВТ
ИЗ
РегистрСведений.НастройкиПринадлежностиКонтрагентаКПодразделению КАК НастройкиПринадлежностиКонтрагентаКПодразделению
ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, Регистратор, Счет = &Счет361, &ВидыСубконтоНС, , КорСчет В (&Счет), ) КАК ХозрасчетныйОбороты
ПО НастройкиПринадлежностиКонтрагентаКПодразделению.Контрагент = ХозрасчетныйОбороты.Субконто1
ГДЕ
НастройкиПринадлежностиКонтрагентаКПодразделению.Подразделение = &Подразделение

СГРУППИРОВАТЬ ПО
ХозрасчетныйОбороты.Субконто1,
ГОД(ХозрасчетныйОбороты.Период),
МЕСЯЦ(ХозрасчетныйОбороты.Период)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЕСТЬNULL(Год_1.Контрагент, Год_2.Контрагент) КАК Контрагент,
ЕСТЬNULL(Год_1.ПериодМесяц1, Год_2.ПериодМесяц2) КАК ПериодМесяц,
ЕСТЬNULL(Год_1.Месяц, Год_2.Месяц) КАК Месяц,
Год_1.СуммаОборот1 КАК СуммаОборот1,
Год_2.СуммаОборот2 КАК СуммаОборот2,
ЕСТЬNULL(Год_2.СуммаОборот2, 0) - ЕСТЬNULL(Год_1.СуммаОборот1, 0) КАК Разница
ИЗ
(ВЫБРАТЬ
ВТ.Контрагент КАК Контрагент,
ВТ.СуммаОборот КАК СуммаОборот1,
ВТ.Месяц КАК Месяц,
ВТ.Год КАК Год1,
ВЫБОР
КОГДА ВТ.Месяц = 1
ТОГДА "Обороты за Январь"
КОГДА ВТ.Месяц = 2
ТОГДА "Обороты за Февраль"
КОГДА ВТ.Месяц = 3
ТОГДА "Обороты за Март"
КОГДА ВТ.Месяц = 4
ТОГДА "Обороты за Апрель"
КОГДА ВТ.Месяц = 5
ТОГДА "Обороты за Май"
КОГДА ВТ.Месяц = 6
ТОГДА "Обороты за Июнь"
КОГДА ВТ.Месяц = 7
ТОГДА "Обороты за Июль"
КОГДА ВТ.Месяц = 8
ТОГДА "Обороты за Август"
КОГДА ВТ.Месяц = 9
ТОГДА "Обороты за Сентябрь"
КОГДА ВТ.Месяц = 10
ТОГДА "Обороты за Октябрь"
КОГДА ВТ.Месяц = 11
ТОГДА "Обороты за Ноябрь"
КОГДА ВТ.Месяц = 12
ТОГДА "Обороты за Декабрь"
КОНЕЦ КАК ПериодМесяц1
ИЗ
ВТ КАК ВТ
ГДЕ
ВТ.Год = &Год1) КАК Год_1
ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ВТ.Контрагент КАК Контрагент,
ВТ.СуммаОборот КАК СуммаОборот2,
ВТ.Месяц КАК Месяц,
ВТ.Год КАК Год2,
ВЫБОР
КОГДА ВТ.Месяц = 1
ТОГДА "Обороты за Январь"
КОГДА ВТ.Месяц = 2
ТОГДА "Обороты за Февраль"
КОГДА ВТ.Месяц = 3
ТОГДА "Обороты за Март"
КОГДА ВТ.Месяц = 4
ТОГДА "Обороты за Апрель"
КОГДА ВТ.Месяц = 5
ТОГДА "Обороты за Май"
КОГДА ВТ.Месяц = 6
ТОГДА "Обороты за Июнь"
КОГДА ВТ.Месяц = 7
ТОГДА "Обороты за Июль"
КОГДА ВТ.Месяц = 8
ТОГДА "Обороты за Август"
КОГДА ВТ.Месяц = 9
ТОГДА "Обороты за Сентябрь"
КОГДА ВТ.Месяц = 10
ТОГДА "Обороты за Октябрь"
КОГДА ВТ.Месяц = 11
ТОГДА "Обороты за Ноябрь"
КОГДА ВТ.Месяц = 12
ТОГДА "Обороты за Декабрь"
КОНЕЦ КАК ПериодМесяц2
ИЗ
ВТ КАК ВТ
ГДЕ
ВТ.Год = &Год2) КАК Год_2
ПО Год_1.Контрагент = Год_2.Контрагент
И Год_1.Месяц = Год_2.Месяц

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua