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

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

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

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

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

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

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

Простым объединением двух запросов к двум РН такого сделать не получилось, поэтому и пошел по извращенному варианту :(
23 vasiliy_oren
 
03.09.20
10:38
Был бы один регистр, проблем вообще не было бы :)
24 vasiliy_oren
 
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(ВЫЧИСЛИТЬВЫРАЖЕНИЕ("КонечныйОстаток", , , "Предыдущая", "Предыдущая"),НачальныйОстаток)
Ни один из вариантов не подошел :(

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