Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Нестандартные группировки по СКД

Нестандартные группировки по СКД
Я
   vasiliy_oren
 
03.09.20 - 09:08
Друзья, доброго времени суток.
Необходима Ваша помощь.
Думаю, что кто-либо сталкивался уже с таким:
По сути мне необходим именно такой алгоритм, который указан в статье http://catalog.mista.ru/public/1103319/, но с одним условием - структура отчета не фиксирована.
То есть использование "ВычислитьВыражениеСГруппировкойМассив("Максимум(Значение)","Лево, Верх")" мне не подходит, так как пользователь может поменять иерархию как угодно.
То есть пример - нужно соединить 2 РН - "Товары переданные" и "Товары полученные". На самом нижнем уровне начальный остаток - сумма начальных остатков переданных и полученных, далее приход и расход (стандартная сальдовка).
Но на вышестоящих уровнях должна быть сумма начальных и конечных остатков предыдущего уровня.

Пытался в ресурсе сделать выражение типа "ВЫБОР КОГДА УРОВЕНЬ()=2 Тогда НачальныйОстаток ИНАЧЕ Сумма(НачальныйОстаток) КОНЕЦ" (просто пример), но тогда СКД вышестоящих уровней суммирует все значения нижестоящей, а не значения группировок.

Если бы отчет был фиксированный, проблем бы не было.

Нашел описание подобной же проблемы: https://forum.infostart.ru/forum9/topic201440/, но там описывается общий принцип без конкретики.

Если кто то сможет натолкнуть на правильный вариант, был бы премного благодарен :)
   toypaul
 
1 - 03.09.20 - 09:18
слишком много букв и мало картинок
   vasiliy_oren
 
2 - 03.09.20 - 09:37
Добрый.
Спасибо за интерес :)
Привожу пример: https://cloud.mail.ru/public/3bbd/3N51vWj4k
Принцип какой - самая нижняя группировка (в данном случае - номенклатура - выделена красной стрелкой) - цифры должны подставляться фиксированные. Все вышестоящие группировки должны получать сумму из нижестоящих группировок (выделены зеленой стрелкой).
Проблема в том, что такая структура (иерархия) не должна быть фиксированной, соответственно мне необходимо программно или с помощью вычисляемых полей определять, что это самая низшая группировка и выводить одни данные, во всех остальных - сумму нижестоящей группировки.
Смотрел на Вычислить выражение, но там необходимо указывать название группировки :(

В принципе могу сбросить сам отчет.
   toypaul
 
3 - 03.09.20 - 09:49
Не совсем понимаю почему не устраивает просто Сумма(НачальныйОстаток). По своей природе он должен вроде таким образом и считаться. Может роль у поля стоит неверно
   toypaul
 
4 - 03.09.20 - 09:50
(2) я же не просил картинок чужих. надо свои картинки. здесь написано как правильно задавать вопросы https://wiki.programstore.ru/kak-pravilno-zadavat-vopros-svyazannyj-s-podsistemoj-skd-v-1s/
   vasiliy_oren
 
5 - 03.09.20 - 09:56
Это мои картинки, просто переименовал организацию и номенклатуру.
   vasiliy_oren
 
6 - 03.09.20 - 09:58
Ок, выкладываю само отчет: https://cloud.mail.ru/public/2QGh/H7QZjAg8k
   vasiliy_oren
 
7 - 03.09.20 - 09:58
Последний вариант - собираю запросами ТЗ и прогружаю ее в СКД.
   vasiliy_oren
 
8 - 03.09.20 - 10:01
Отчет, думаю, запуститься на любой управленческой конфигурации, так как оба РН есть в этих конфах.
   toypaul
 
9 - 03.09.20 - 10:13
чтобы на нижнем уровне получился остаток, а на уровнях выше него сумма остатков нужно наоборот убрать роль у полей остатков. тогда будет работать именно таким образом
   vasiliy_oren
 
10 - 03.09.20 - 10:15
Убирал. Результат тот же.
Просто уже мысли закончились, поэтому и пишу :(
   toypaul
 
11 - 03.09.20 - 10:16
(10) тогда надо сделать как написано в (4)
   vasiliy_oren
 
12 - 03.09.20 - 10:20
Вот так?

https://cloud.mail.ru/public/eaut/56LPgorbB - настройки
https://cloud.mail.ru/public/3HnB/2PtMzn1H9 - результат
   toypaul
 
13 - 03.09.20 - 10:21
да. а теперь картинку как надо
   vasiliy_oren
 
14 - 03.09.20 - 10:22
   toypaul
 
15 - 03.09.20 - 10:22
затем вкладка ресурсов. ну и запрос
   toypaul
 
16 - 03.09.20 - 10:26
Уровень()=2 это какая группировка - договор или номенклатура?
   vasiliy_oren
 
17 - 03.09.20 - 10:28
Уже просто извращаюсь, так как не могу прийти к нужному результату.
Изначально было объединение двух запросов
   vasiliy_oren
 
18 - 03.09.20 - 10:29
Наверное действительно визуально сложно понять проблему. Вот здесь думаю лучше: https://cloud.mail.ru/public/3gCS/Jm4jHQuPr
   toypaul
 
19 - 03.09.20 - 10:30
понял
   vasiliy_oren
 
20 - 03.09.20 - 10:31
В группировке договора (договор поставки) и в группировке организации в столбце "Начальный остаток" должны быть суммы 1457. Это сумма 1367 группировки первой номенклатуры (Метал.) и 90 второй номенклатуры (евро). СКД же суммирует все строки регистратора
   toypaul
 
21 - 03.09.20 - 10:32
ну вообще-то не надо было собирать в ТЗ. не надо было извращаться. просто запрос к регистру. по регистратору остаток будет как есть. по номенклатуре и вышестоящим группировкам сумма начального остатка
   vasiliy_oren
 
22 - 03.09.20 - 10:37
В том то и дело, что тогда неверные значения нач, кон остатков и движений.
Смотрите, у меня 2 РН (Товары переданные и товары полученные).
В результате алгоритм должен быть следующим:
1) Получаем начальный остаток обоих РН на дату начала отчета
2) Получаем все записи обоих РН (у них реквизиты Организация и контрагент одинаковые, а договоры разные)
3) Сортируем список (2) по периоду
4) Последовательно проходим по всем отсортированным записям и, если запись из РН товары полученные, остаток увеличиваем на сумму записи, если товары переданные, уменьшаем

Простым объединением двух запросов к двум РН такого сделать не получилось, поэтому и пошел по извращенному варианту :(
   vasiliy_oren
 
23 - 03.09.20 - 10:38
Был бы один регистр, проблем вообще не было бы :)
   vasiliy_oren
 
24 - 04.09.20 - 09:37
Друзья, в общем уже двумя вариантами попытался сделать, так и не получилось :(

Еще раз вкратце что необходимо:
Смотрите, у меня 2 РН (Товары переданные и товары полученные).
В результате алгоритм должен быть следующим:
1) Получаем начальный остаток обоих РН на дату начала отчета
2) Получаем все записи обоих РН (у них реквизиты Организация и контрагент одинаковые, а договоры разные)
3) Сортируем список (2) по периоду
4) Последовательно проходим по всем отсортированным записям и, если запись из РН товары полученные, остаток увеличиваем на сумму записи, если товары переданные, уменьшаем.

В результате получается типовой отчет (нач остаток, приход, расход, кон остаток).

Все было бы просто если бы не несколько условий:
1) Иерархия отчета может строиться произвольно. То есть пользователь может убрать, например, договор, контрагента, а возможно и номенклатуру;
2) Ресурсы “Приход” и “Расход” по вышестоящим группировкам суммируются (здесь проблем нет, штатный механизм), а вот ресурсы “Начальный остаток” и “Конечный остаток” должны вести себя по-иному:
“Начальный остаток” – сумма группировки по первому значению (первая строка в группировке)
“Конечный остаток” – сумма группировки по последнему значению (последняя строка в группировке)

В общем вот такой нестандартный отчет :(

Чтобы было более понятно, приложил скрин:
https://cloud.mail.ru/public/5JGT/2gwm5A4N7

По вышестоящим группировкам начальный остаток должен быть 1457 (1367 первой строки номенклатуры Матал + 90 первой строки номенклатуры (евро))
конечный остаток – 1268 (1188 последней строки номенклатуры Матал + 80 последней строки номенклатуры (евро))

В общем что только я не пробовал, никак не получается каменный цветок.

Пробовал вычислять строки, добавлять их в ТЗ, а потом передавать в СКД, пробовал объединять 2 запроса и выводить строки с помощью

IsNull(ВЫЧИСЛИТЬВЫРАЖЕНИЕ("КонечныйОстаток", , , "Предыдущая", "Предыдущая"),НачальныйОстаток)
Ни один из вариантов не подошел :(

Может кто-нибудь сталкивался с подобным заданием и уже победил?
Был бы очень благодарен за советы :)
   toypaul
 
25 - 04.09.20 - 10:37


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.