Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   СКД и значения полей группировок (http://forums.kuban.ru/f1040/skd_i_znacheniya_polej_gruppirovok-5581898.html)

war 03.04.2014 06:29

СКД и значения полей группировок
 
Допустим есть 2 группировки: Склад и Товар.
Интересует как при описании пользовательских полей проверить, для какой группировки рассчитывается значение пользовательского поля. Как организовать подобную проверку?

Хочу сделать поле, значение которого будет производиться только для группировки товар.
Например подобным образом:
ВЫБОР
КОГДА Товар ЕСТЬ NULL ТОГДА 0
ИНАЧЕ КоличествоОстаток
КОНЕЦ
Но так не работает.

Настройка состава авто-полей не совсем устраивает, потому что группировку товар можно поставить выше склада (1. Товар, 2. Склад), и в таком случае в группировке по складу будет присутствовать значение товара.

roma n 03.04.2014 07:31

Ни фига не понял. Зачем пользовательское поле? Чем не устраивает перечень группировок для расчета ресурса?.

war 03.04.2014 08:06

Расчет ресурсов не устраивает потому, что:
1) В ресурсах есть начальный и конечный остатки.
2) Идет разделение значения ресурсов (нач.ост. и кон.ост.) на 2 колонки: положительные значения ресурсов в одной колонке, отрицательные колонки - в другой.
3) Используется детализация отчета до регистраторов.

Всего перечисленного достаточно, чтобы у расчета остатков "снесло крышу" и он начал выводить некорректную информацию о начальном и конечном остатке.
Некорректный расчет я "вылечиваю" пользовательскими полями: сначала рассчитывается значение ресурса, потом в пользовательском поле проверяется значение на больше-меньше нуля.

Соответственно надо решить другую задачу - как реализовать вывод значений пользовательских полей только для определенных группировок.

war 03.04.2014 08:14

Можно отредактировать для каждой из группировок состав выводимых в ней полей (развернуть авто-поле и удалить "лишнее"), но это решение устраивает не на 100%, т.к. если поднять группировку, для которой должен выполняться расчет вверх, то получается, что расчет можно выполнить и для группировок ниже уровнем.

roma n 03.04.2014 08:35

2-WAR >
[em]Всего перечисленного достаточно, чтобы у расчета остатков "снесло крышу"[/em] - у твоего СКД какая-то неправильная психическая организация.
В сторону: в выражении ресурса можно чёрти чего написать. Например Сумма(КоличествоНачОстаток - КоличествоКонОстаток) и даже Сумма(ВычислитьВыражение("бла-бла-бла"))

war 03.04.2014 11:13

4-roma n > У моего СКД она как раз правильная. Скорей всего ты с ней просто мало и узконаправленно работал.

То, что ты пишешь: в выражении ресурса можно чёрти чего написать. Например Сумма(КоличествоНачОстаток - КоличествоКонОстаток) и даже Сумма(ВычислитьВыражение("бла-бла-бла")) все оно верно ровно до тех пор, пока не пытаешься получить остатки в разрезе до документов движения.

roma n 03.04.2014 12:04

5-WAR > ИТС. Типичные проблемы при расчете остатков. ИМХО

war 03.04.2014 12:16

6-roma n > Но мы обсуждаем нетипичные проблемы.
Мне бы чего-нибудь по сабжу, ибо другого пути реализации я не вижу.

roma n 03.04.2014 12:31

7-WAR > Ты читал? Расчёт остатков на позицию регистратора [b]самая [/b]типичная проблема

war 03.04.2014 12:35

8-roma n > Я по теме СКД [b]много чего[/b] перечитал.
Ответа на свой вопрос не нашел.

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

roma n 03.04.2014 12:59

9-WAR > Возможно, я просто не понимаю сути проблемы?

Я правильно понимаю, что вывод остатка ресурса на документ движения трудностей не вызывает? Но нужен не просто вывод остатка, а вывод в различные колонки в зависимости от знака?
В этом случае бери в выборку данные дважды, и определи для этой пары ресурсов свои макеты с примерно таким выражением для параметра
Выбор когда СуммаВзаиморасчетовКонечныйОстаток>0 Тогда СуммаВзаиморасчетовКонечныйОстаток иначе 0 Конец
Не?

war 03.04.2014 13:05

[quote=roma n;34758326] 9-WAR > Возможно, я просто не понимаю сути проблемы? Я правильно понимаю, что вывод остатка ресурса на документ движения трудностей не вызывает? Но нужен не просто вывод остатка, а вывод в различные колонки в зависимости от знака? В этом случае бери в выборку данные дважды, и определи для этой пары ресурсов свои макеты с примерно таким выражением для параметра Выбор когда СуммаВзаиморасчетовКонечныйОстаток>0 Тогда СуммаВзаиморасчетовКонечныйОстаток иначе 0 Конец Не? [/quote]
Такой вариант я еще не пробовал. И пару одинаковых ресурсов, кстати, создавать не обязательно. Достаточно будет и одного.
Спасибо!

war 03.04.2014 14:11

10-roma n > Попробовал. Получилось. Пусть не совсем в точности так, как ты описал, но ты, получается, навел меня на мысль, и за это тебе большое спасибо!

Итак, способ решения.
Мне нужно разделить остатки по взаиморасчетам на нашу задолженность (отрицательная сумма) и задолженность контрагентов (положительная сумма).
Запросом (остатки и обороты) получаю начальный и конечный остатки.
Т.к. на этапе выполнения запроса чревато вмешиваться в его работу (даже соединение с другой таблицей может привести к некорректному расчету остатков), то туда и не лезу. Единственное что дополнительно делаю - указываю группировки, по которым надо рассчитывать ресурсы (в моем случае это Договор, ВалютаВзаиморасчетов договора и Регистратор).

Создаю 4 "фиктивных" вычисляемых поля (наш долг и долг клиента на начало и конец), чтобы их можно было добавить в ресурсы. Почему "фиктивных" - потому что в выражении у них "0".

Добавляю эти 4 вычисляемых поля в ресурсы и в выбранные поля. Таким образом СуммаНачальныйОстаток и СуммаКонечныйОстаток напрямую в отчете не выводятся.

А далее создаю под вычисляемые поля 4 макета поля.
В поле пишется выражение вида:
ВЫБОР КОГДА СуммаНачальныйОстаток < 0 ТОГДА -СуммаНачальныйОстаток ИНАЧЕ 0 КОНЕЦ (наш долг начальный остаток).

Все, профит.


Текущее время: 10:33. Часовой пояс GMT +3.