Формирование текста выражения вычисляемого поля

1. G_102426349127578293852 07.05.24 10:34 Сейчас в теме
Пример создан для простоты понимания:

Есть внешний отчет с запросом:
//-------------------------------------------
ВЫБРАТЬ
"Контрагент 1" КАК Контрагент,
5 КАК Сумма
//-------------------------------------------

Необходимо создать вычисляемое поле:
- Текст выражения необходимо генерировать в функции общего модуля.

1. Как нужно (НЕ РАБОТАЕТ)
- Вычисляемое поле: Вычислить(ПолучитьТекстВыражения())

Функция ПолучитьТекстВыражения() Экспорт
Возврат "ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")";
КонецФункции


2. Но если писать так (Так работает)
- Вычисляемое поле: Вычислить("ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")")


Для чего:
Передавать в функцию разрезы ("Контрагент", "Договор", "Номенклатура" и т.д) и формировать текст выражения


Так же немного упрощено(но код выражения примерно такой V )

Выбор Когда ВычислитьВыражение("Количество(Контрагент)", , , "Предыдущая", "Текущая", "Контрагент Возр, Договор Возр, Номенклатура Возр") = 1 Тогда
СуммаНДС
Иначе
Выбор Когда ВычислитьВыражение("Количество(Различные Контрагент)", , , "Предыдущая", "Текущая", "Контрагент Возр, Договор Возр, Номенклатура Возр") = 2 ИЛИ
ВычислитьВыражение("Количество(Различные Договор)", , , "Предыдущая", "Текущая", "Контрагент Возр, Договор Возр, Номенклатура Возр") = 2 ИЛИ
ВычислитьВыражение("Количество(Различные Номенклатура)", , , "Предыдущая", "Текущая", "Контрагент Возр, Договор Возр, Номенклатура Возр") = 2

Тогда
СуммаНДС
Конец
Конец
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Pavel Rodinchenko 07.05.24 10:59 Сейчас в теме
(1)а в первом варианте перед названием функции напишите название общего модуля и уберите "вычислить"
должно быть что-то вроде ОбщийМодуль.ПолучитьТекстВыражения(Контрагент, Сумма)

а в самой функции уже работайте с переданными параметрами
3. spacecraft 07.05.24 11:34 Сейчас в теме
(1)
Функция ПолучитьТекстВыражения() Экспорт
Возврат "ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")";
КонецФункции


просто возвращает строку.
Соответственно в вычисляемое поле просто подставится эта строка без возможности выполнения.
4. G_102426349127578293852 07.05.24 12:22 Сейчас в теме
(2)
Модуль глобальный, не нужно указывать название модуля(пробовал и не глобальным итог тот же)
Ошибка формата не найдено поле "Сумма" и т.д, она возникает не на уровне функции, а при выполнении функции Вычислить().
В самой функции не работают такие функции как ВычислитьВыражение() и т.д., так не обратишься к пред. строке и т.д.
а передавать в функцию вычислитьвыражение() и т.д. ничего не поменяет, а тут суть сделать универсально и компактно.

(3)
Так вот такой формат работает, т.е. там тоже строка
Вычислить("ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")")(2) (2)
5. spacecraft 07.05.24 12:40 Сейчас в теме
(4)
Так вот такой формат работает, т.е. там тоже строка
Вычислить("ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")")

Там уже не строка а выражение.
Найдите отличия с:
"ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")"

Можете попробовать в само поле эту строку записать. Именно так, со всеми кавычками.


PS. да, не увидел, что в поле стоит Вычислить.
Тогда как именно не работает?
6. VmvLer 07.05.24 14:15 Сейчас в теме
(2) в новой парадигме "стандартов" разработки нет необходимость указывать в именах методов
популярные глаголы, т.е.

так уже не делают
ПолучитьТекстВыражения(Контрагент, Сумма)
РассчитатьСуммуВыражения(Контрагент)

а верно так
ТекстВыражения(Контрагент, Сумма)
СуммаВыражения(Контрагент)
9. booksfill 07.05.24 15:34 Сейчас в теме
Сначала по теме - IMHO не взлетит. Сомнительно, что СКД в постобработке предусмотрело такое динамическое формирование самого текста вычисляемого поля.
Сомнительно, тк. сильно просаживало бы производительность.

(6)
нет необходимость указывать в именах методов популярные глаголы


- Петька! Приборы!
- 25!
- Чего 25?
- А чего приборы?

Пришел очередной методист и волшебным образом правильное стало не правильным.
Бедный Роберт Мартин.

Огорчает, когда вместо технической информации идет "гуманитарщина".
"популярные глаголы" - это какие глаголы нынче в моде?
И значит ли это, что ежели методисту докажут, что тот или иной глагол имеет смысл - он просто объявит его не таким уж популярным? Или "популярным в особых случаях"? Или "популярный или нет, это комиссия по присвоению "1С совместимо" будет решать"?

ПолучитьГодовойПлатеж, РассчитатьГодовойПлатеж, АктуализироватьГодовойПлатеж, ЗаблокироватьГодовойПлатеж и т.п. Какой глагол объявим "популярным"?
"Получить"?
Чего это программисты запомнили, что "Имена методов представляют собой глаголы или глагольные словосочетания:"?
Давайте-как им подсунем исключения, да еще порасплывчатей, "шоб" не так быстро код писали.

P.S.
Я отчасти сам такой методист. Например, вместо ПолучитьТекстЗапроса, пишу ТекстЗапроса.
Убивает не это, а то, что частные случаи пытаются пропихнуть в стандарт, в котором и так много спорных моментов.
7. G_102426349127578293852 07.05.24 15:07 Сейчас в теме
(5)
1. Как нужно (НЕ РАБОТАЕТ)
- Вычисляемое поле: Вычислить(ПолучитьТекстВыражения())
т.е. мне нужно генерировать тот же текст (Условно) "ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")"
но в функции, т.е. функцию я делаю универсальной, чтобы генерировалось выражение в разных разрезах
8. spacecraft 07.05.24 15:24 Сейчас в теме
(7) ну, наверно так не прокатит.
10. VmvLer 07.05.24 15:37 Сейчас в теме
(9) Я не методист. Считаю, что новый стандарт короче и понятнее.

К чему ваша лирика, финал КВН через неделю?
11. VmvLer 07.05.24 15:44 Сейчас в теме
(9)

ПолучитьГодовойПлатеж, РассчитатьГодовойПлатеж, АктуализироватьГодовойПлатеж
в именах выше сначала идет второстепенное, а только затем главное, верно?

В именах ниже, сначала идет главное, только затем второстепенное
ГодовойПлатеж, ГодовойПлатежРасчет, ГодовойПлатежОбновление


Ставить телегу впереди лошади - путь в никуда)
12. booksfill 07.05.24 16:36 Сейчас в теме
(11) Не уверен, что говорить как мастер Йода: "Деньги мне давай. Годовой платеж обновляй" - это хорошо.

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

Хотя мода меняется, подозреваю, что кто-то, помимо 1С, счел модным именно такой вариант.
Или по какой-то причине отказ от прямого вызова геттеров и сеттеров был "прокинут" и к остальным методам, не знаю.

И то, только потому, что стандарт меняется долго и трудно.

Я просто хочу писать:
Запрос.Текст = ТекстЗапроса(), но ОбновитьГодовойПлатеж, или даже ГодовойПлатежОбновить, и при этом не быть нарушителем стандарта.

Читается IMHO все вышеприведенное равно легко.

P.S.
Кстати "ГодовойПлатежОбновление" <> ОбновитьГодовойПлатеж. В первом случае я бы ожидал просто получение обновленного (где-то еще) годового платежа, а во втором случае именно действия по его обновлению. Т.е. таки нужен именно глагол, пусть и на желаемом вами месте.
13. G_102426349127578293852 08.05.24 07:33 Сейчас в теме
(9)

Если вдруг не откроется скриншот:
Генерировать текст можно:

Вычислить(ПолучитьТекстВыражения())

Функция ПолучитьТекстВыражения() Экспорт
Возврат "2+2";
КонецФункции

Итогом выйдет 4

Но тут вопрос скорее как работать с переменной из результата запроса(СКД), т.е. если этот пример брать то Сумма+2
Прикрепленные файлы:
14. booksfill 08.05.24 09:14 Сейчас в теме
(13)
Генерировать текст можно:

О, это полезные сведения, спасибо.
15. G_102426349127578293852 08.05.24 12:50 Сейчас в теме
(14)
понять бы как взаимодействовать с полями(Запроса-СКД)
Оставьте свое сообщение

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