СКД - выражение на основе вычисляемых или пользовательских полей

1. DWZ2 24.05.22 03:17 Сейчас в теме
Добрый день!

В отчёте на СКД требуется многократно использовать одни поля в выражениях для вычисления других. Например, вычислить из имени файла период, затем найти дельту между 2 такими периодами, затем разность между 2 таким дельтами, вычисляемыми по различным алгоритмам. Поскольку в вычисляемом поле использовать другое вычисляемое поле нельзя, решил выкрутиться через пользовательские поля, но и там ругается на знак "-" в выражении (см. рис. 1-3).

Можно ли как-то выкрутиться или только как в запросе выражения громоздить?
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ZergKRSK 129 24.05.22 05:23 Сейчас в теме
(1) попробуйте использовать заголовки полей, оформив их квадратными скобками
9. DWZ2 24.05.22 07:14 Сейчас в теме
(2) Ругается, что поле не найдено. Выкрутился через ВычислитьВыражение()
3. spacecraft 24.05.22 06:05 Сейчас в теме
(1) типы данных получаемых в выражениях это же тип ДатаВремя?
Для пользовательских полей действуют такие же правила, как и для вычисляемых полей. Даты нельзя математически вычитать. Используйте РазностьДат
РАЗНОСТЬДАТ([Имя минимального периода], [Имя максимального периода], "ДЕНЬ")

Имена периодов подставить так, как они указаны в Заголовок.
4. ZergKRSK 129 24.05.22 06:15 Сейчас в теме
(3) разве даты нельзя просто вычитать?
5. spacecraft 24.05.22 06:20 Сейчас в теме
(4) в запросе, в вычисляемых выражениях и пользовательских полях - нет.
Смотрите справку по запросам и по языку вычисляемых выражений.
Именно для вычислений по датам и существует функция РазностьДат.
6. DWZ2 24.05.22 06:30 Сейчас в теме
(3)
типы данных получаемых в выражениях это же тип ДатаВремя?


Нет, числа.
7. spacecraft 24.05.22 06:38 Сейчас в теме
(6) проверьте тип, добавив новое пользовательское поле:
ТипЗначения([Мин период])
8. spacecraft 24.05.22 06:53 Сейчас в теме
(6) именно в вычисляемых выражениях тип число? МинПериодИзИмениTSФайла получает тип Число?
10. DWZ2 24.05.22 07:26 Сейчас в теме
(8) Тут проблема в другом. Выражение в одном пользовательском поле не видит другое пользовательское поле. Что-нибудь можно с этим сделать, кроме как выражения накручивать?
11. spacecraft 24.05.22 07:43 Сейчас в теме
(10) они и не должны видеть друг друга. Как и Вычисляемые поля, так же не видят друг друга.

Но выражение в Пользовательском поле может видеть Вычисляемое поле, если оно добавлено в выбранные поля отчета. Но видит оно его по заголовку поля.
12. DWZ2 24.05.22 08:08 Сейчас в теме
(11)
если оно добавлено в выбранные поля отчета


А, вот оно что! А то у меня то видит, то не видит. Вообще система чудес. Добавил пользовательское поле на одноименной закладке, иду на закладку "Выбранные поля", разворачиваю папку "Пользовательские поля", а его там нет! Ещё раз переключился туда-сюда - появилось. На минус ругалось, сделал через ВычислитьВыражение() - работает. Попробовал по совету с квадратными скобками - прямо в диалоговом окне ругается, что не видит поля. Чёрт меня дёрнул использовать имена полей без ВычислитьВыражение() заработало, но с тормозами, вернул ВычислитьВыражение() - по-прежнему тормозит. Чудеса!

То есть организовать цепочку вычислений через пользовательские поля совсем-совсем никак?
13. spacecraft 24.05.22 08:13 Сейчас в теме
(12)
Попробовал по совету с квадратными скобками - прямо в диалоговом окне ругается, что не видит поля.

Идем на закладку Поля (рядом с пользовательские поля) и смотрим как называется интересуемое поле. Копируем его. В выражение пользовательского поля вставляем скопированное значение и окружаем его квадратными скобками.
16. DWZ2 24.05.22 08:33 Сейчас в теме
(13)
на закладку Поля (рядом с пользовательские поля)


А где такая? У меня такой нет :(
Прикрепленные файлы:
17. spacecraft 24.05.22 08:40 Сейчас в теме
(16) я предполагал, что пользовательское поле добавляете в режиме предприятия.
Если в режиме конфигуратора, тогда поля доступны напрямую по имени.
18. DWZ2 24.05.22 08:47 Сейчас в теме
(17) И какое же имя у пользовательского поля? У меня только заголовок, а на него (в квадратных скобках) ругается, что не видит
21. spacecraft 24.05.22 08:49 Сейчас в теме
(18) не нужны квадратные скобки в режиме конфигуратора. Должен видель имя вычисляемого поля. Попробуйте скопировать само имя вычисляемого поля и подставить его в выражение пользовательского поля.
23. DWZ2 24.05.22 08:58 Сейчас в теме
(21) Вычисляемого - да, пользовательского - нет
24. spacecraft 24.05.22 09:03 Сейчас в теме
(23) т.е. пытаетесь пользовательское поле добавить в выражение другого пользовательского поля? Так уже было сказано, что так нельзя.
19. spacecraft 24.05.22 08:47 Сейчас в теме
(6) если из метода общего модуля приходит точно число, то можете попробовать принудительно указать Тип Число для этого вычисляемого поля.
Сама ошибка из (0) говорит о том, что происходит попытка вычитания для не числовых типов.
20. DWZ2 24.05.22 08:48 Сейчас в теме
(19) Тут теперь другая проблема проблема - требуется организовать цепочку вычислений, а никак :(
22. spacecraft 24.05.22 08:50 Сейчас в теме
(20) нам не видно отсюда...
25. DWZ2 24.05.22 09:04 Сейчас в теме
(22) Есть три вычисляемых поля, грубо Длина1, Длина2, Длина3. Требуется вычислить
Дельта1=Длина2-Длина1,
Дельта2=Длина3-Длина1
Процент1=Дельта1/Длина1*100
Процент2=Дельта2/Длина1*100

Можно ли как-то сделать, чтобы одно пользовательское поле использовалось в выражении для другого?
26. spacecraft 24.05.22 09:07 Сейчас в теме
(25) нельзя. Только полная вставка выражения самого поля, вместо поля, которое хотите использовать.
14. spacecraft 24.05.22 08:22 Сейчас в теме
(1) если все равно используется метод общего модуля, не проще добавить еще метод, который и будет вычислять нужные данные сразу?

Или сразу вычислять:
МетодПолученияПериода(МаксПериод) - МетодПолученияПериода(МинПериод)
15. DWZ2 24.05.22 08:27 Сейчас в теме
(14) Ну, у меня сразу и вычисляется. Здесь вопрос в том, как организовать цепочку вычислений, чтобы по 100 раз не вычислять одно и то же.
27. Kilka_v_Kepke 24.05.22 09:12 Сейчас в теме
(15)как говорил мой начальник, когда я на чем-то долго зависал, пытаясь сделать слишком красиво, давай без максимализма)
28. DWZ2 24.05.22 09:28 Сейчас в теме
(27) Максимализм - это когда наоборот из-за невозможности использовать промежуточные переменные получаются монстры вида

ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ТВ_Программа.Период, ЧАС, -6), МЕСЯЦ), ЧАС, ЧАС(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ТВ_Программа.Период, ЧАС, -6), МЕСЯЦ), ЧАС, ДЕНЬ(ДОБАВИТЬКДАТЕ(ТВ_Программа.Период, ЧАС, -6)) + ЧАС(ДОБАВИТЬКДАТЕ(ТВ_Программа.Период, ЧАС, -6)) - 1))), ЧАС, 6), МИНУТА, 47) КАК ЭталонныйПериод


но ту хотя бы через временные таблицы можно разжевать.
29. Kilka_v_Kepke 24.05.22 09:32 Сейчас в теме
Максимализм (от лат. «величайший») — впадение в крайность при требовании чего-то чрезмерного.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот