Формирование текста выражения вычисляемого поля
Пример создан для простоты понимания:
Есть внешний отчет с запросом:
//-------------------------------------------
ВЫБРАТЬ
"Контрагент 1" КАК Контрагент,
5 КАК Сумма
//-------------------------------------------
Необходимо создать вычисляемое поле:
- Текст выражения необходимо генерировать в функции общего модуля.
1. Как нужно (НЕ РАБОТАЕТ)
- Вычисляемое поле: Вычислить(ПолучитьТекстВыражения())
Функция ПолучитьТекстВыражения() Экспорт
Возврат "ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")";
КонецФункции
2. Но если писать так (Так работает)
- Вычисляемое поле: Вычислить("ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")")
Для чего:
Передавать в функцию разрезы ("Контрагент", "Договор", "Номенклатура" и т.д) и формировать текст выражения
Так же немного упрощено(но код выражения примерно такой V )
Выбор Когда ВычислитьВыражение("Количество(Контрагент)", , , "Предыдущая", "Текущая", "Контрагент Возр, Договор Возр, Номенклатура Возр") = 1 Тогда
СуммаНДС
Иначе
Выбор Когда ВычислитьВыражение("Количество(Различные Контрагент)", , , "Предыдущая", "Текущая", "Контрагент Возр, Договор Возр, Номенклатура Возр") = 2 ИЛИ
ВычислитьВыражение("Количество(Различные Договор)", , , "Предыдущая", "Текущая", "Контрагент Возр, Договор Возр, Номенклатура Возр") = 2 ИЛИ
ВычислитьВыражение("Количество(Различные Номенклатура)", , , "Предыдущая", "Текущая", "Контрагент Возр, Договор Возр, Номенклатура Возр") = 2
Тогда
СуммаНДС
Конец
Конец
Есть внешний отчет с запросом:
//-------------------------------------------
ВЫБРАТЬ
"Контрагент 1" КАК Контрагент,
5 КАК Сумма
//-------------------------------------------
Необходимо создать вычисляемое поле:
- Текст выражения необходимо генерировать в функции общего модуля.
1. Как нужно (НЕ РАБОТАЕТ)
- Вычисляемое поле: Вычислить(ПолучитьТекстВыражения())
Функция ПолучитьТекстВыражения() Экспорт
Возврат "ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")";
КонецФункции
2. Но если писать так (Так работает)
- Вычисляемое поле: Вычислить("ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")")
Для чего:
Передавать в функцию разрезы ("Контрагент", "Договор", "Номенклатура" и т.д) и формировать текст выражения
Так же немного упрощено(но код выражения примерно такой V )
Выбор Когда ВычислитьВыражение("Количество(Контрагент)", , , "Предыдущая", "Текущая", "Контрагент Возр, Договор Возр, Номенклатура Возр") = 1 Тогда
СуммаНДС
Иначе
Выбор Когда ВычислитьВыражение("Количество(Различные Контрагент)", , , "Предыдущая", "Текущая", "Контрагент Возр, Договор Возр, Номенклатура Возр") = 2 ИЛИ
ВычислитьВыражение("Количество(Различные Договор)", , , "Предыдущая", "Текущая", "Контрагент Возр, Договор Возр, Номенклатура Возр") = 2 ИЛИ
ВычислитьВыражение("Количество(Различные Номенклатура)", , , "Предыдущая", "Текущая", "Контрагент Возр, Договор Возр, Номенклатура Возр") = 2
Тогда
СуммаНДС
Конец
Конец
Прикрепленные файлы:



По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
просто возвращает строку.
Соответственно в вычисляемое поле просто подставится эта строка без возможности выполнения.
Функция ПолучитьТекстВыражения() Экспорт
Возврат "ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")";
КонецФункции
Возврат "ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")";
КонецФункции
просто возвращает строку.
Соответственно в вычисляемое поле просто подставится эта строка без возможности выполнения.
(2)
Модуль глобальный, не нужно указывать название модуля(пробовал и не глобальным итог тот же)
Ошибка формата не найдено поле "Сумма" и т.д, она возникает не на уровне функции, а при выполнении функции Вычислить().
В самой функции не работают такие функции как ВычислитьВыражение() и т.д., так не обратишься к пред. строке и т.д.
а передавать в функцию вычислитьвыражение() и т.д. ничего не поменяет, а тут суть сделать универсально и компактно.
(3)
Так вот такой формат работает, т.е. там тоже строка
Вычислить("ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")")(2) (2)
Модуль глобальный, не нужно указывать название модуля(пробовал и не глобальным итог тот же)
Ошибка формата не найдено поле "Сумма" и т.д, она возникает не на уровне функции, а при выполнении функции Вычислить().
В самой функции не работают такие функции как ВычислитьВыражение() и т.д., так не обратишься к пред. строке и т.д.
а передавать в функцию вычислитьвыражение() и т.д. ничего не поменяет, а тут суть сделать универсально и компактно.
(3)
Так вот такой формат работает, т.е. там тоже строка
Вычислить("ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")")(2) (2)
(4)
Там уже не строка а выражение.
Найдите отличия с:
"ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")"
Можете попробовать в само поле эту строку записать. Именно так, со всеми кавычками.
PS. да, не увидел, что в поле стоит Вычислить.
Тогда как именно не работает?
Так вот такой формат работает, т.е. там тоже строка
Вычислить("ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")")
Вычислить("ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")")
Найдите отличия с:
"ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")"
Можете попробовать в само поле эту строку записать. Именно так, со всеми кавычками.
PS. да, не увидел, что в поле стоит Вычислить.
Тогда как именно не работает?
(2) в новой парадигме "стандартов" разработки нет необходимость указывать в именах методов
популярные глаголы, т.е.
так уже не делают
ПолучитьТекстВыражения(Контрагент, Сумма)
РассчитатьСуммуВыражения(Контрагент)
а верно так
популярные глаголы, т.е.
так уже не делают
а верно так
ТекстВыражения(Контрагент, Сумма)
СуммаВыражения(Контрагент)
Сначала по теме - IMHO не взлетит. Сомнительно, что СКД в постобработке предусмотрело такое динамическое формирование самого текста вычисляемого поля.
Сомнительно, тк. сильно просаживало бы производительность.
(6)
- Петька! Приборы!
- 25!
- Чего 25?
- А чего приборы?
Пришел очередной методист и волшебным образом правильное стало не правильным.
Бедный Роберт Мартин.
Огорчает, когда вместо технической информации идет "гуманитарщина".
"популярные глаголы" - это какие глаголы нынче в моде?
И значит ли это, что ежели методисту докажут, что тот или иной глагол имеет смысл - он просто объявит его не таким уж популярным? Или "популярным в особых случаях"? Или "популярный или нет, это комиссия по присвоению "1С совместимо" будет решать"?
ПолучитьГодовойПлатеж, РассчитатьГодовойПлатеж, АктуализироватьГодовойПлатеж, ЗаблокироватьГодовойПлатеж и т.п. Какой глагол объявим "популярным"?
"Получить"?
Чего это программисты запомнили, что "Имена методов представляют собой глаголы или глагольные словосочетания:"?
Давайте-как им подсунем исключения, да еще порасплывчатей, "шоб" не так быстро код писали.
P.S.
Я отчасти сам такой методист. Например, вместо ПолучитьТекстЗапроса, пишу ТекстЗапроса.
Убивает не это, а то, что частные случаи пытаются пропихнуть в стандарт, в котором и так много спорных моментов.
Сомнительно, тк. сильно просаживало бы производительность.
(6)
нет необходимость указывать в именах методов популярные глаголы
- Петька! Приборы!
- 25!
- Чего 25?
- А чего приборы?
Пришел очередной методист и волшебным образом правильное стало не правильным.
Бедный Роберт Мартин.
Огорчает, когда вместо технической информации идет "гуманитарщина".
"популярные глаголы" - это какие глаголы нынче в моде?
И значит ли это, что ежели методисту докажут, что тот или иной глагол имеет смысл - он просто объявит его не таким уж популярным? Или "популярным в особых случаях"? Или "популярный или нет, это комиссия по присвоению "1С совместимо" будет решать"?
ПолучитьГодовойПлатеж, РассчитатьГодовойПлатеж, АктуализироватьГодовойПлатеж, ЗаблокироватьГодовойПлатеж и т.п. Какой глагол объявим "популярным"?
"Получить"?
Чего это программисты запомнили, что "Имена методов представляют собой глаголы или глагольные словосочетания:"?
Давайте-как им подсунем исключения, да еще порасплывчатей, "шоб" не так быстро код писали.
P.S.
Я отчасти сам такой методист. Например, вместо ПолучитьТекстЗапроса, пишу ТекстЗапроса.
Убивает не это, а то, что частные случаи пытаются пропихнуть в стандарт, в котором и так много спорных моментов.
(5)
1. Как нужно (НЕ РАБОТАЕТ)
- Вычисляемое поле: Вычислить(ПолучитьТекстВыражения())
т.е. мне нужно генерировать тот же текст (Условно) "ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")"
но в функции, т.е. функцию я делаю универсальной, чтобы генерировалось выражение в разных разрезах
1. Как нужно (НЕ РАБОТАЕТ)
- Вычисляемое поле: Вычислить(ПолучитьТекстВыражения())
т.е. мне нужно генерировать тот же текст (Условно) "ВычислитьВыражение(""Количество(Сумма)"", , , ""Предыдущая"", ""Текущая"")"
но в функции, т.е. функцию я делаю универсальной, чтобы генерировалось выражение в разных разрезах
(9)
ПолучитьГодовойПлатеж, РассчитатьГодовойПлатеж, АктуализироватьГодовойПлатеж
в именах выше сначала идет второстепенное, а только затем главное, верно?
В именах ниже, сначала идет главное, только затем второстепенное
Ставить телегу впереди лошади - путь в никуда)
в именах выше сначала идет второстепенное, а только затем главное, верно?
В именах ниже, сначала идет главное, только затем второстепенное
ГодовойПлатеж, ГодовойПлатежРасчет, ГодовойПлатежОбновление
Ставить телегу впереди лошади - путь в никуда)
(11) Не уверен, что говорить как мастер Йода: "Деньги мне давай. Годовой платеж обновляй" - это хорошо.
По сути же не нравится только, когда частное мнение возводится в стандарт.
Хотя мода меняется, подозреваю, что кто-то, помимо 1С, счел модным именно такой вариант.
Или по какой-то причине отказ от прямого вызова геттеров и сеттеров был "прокинут" и к остальным методам, не знаю.
И то, только потому, что стандарт меняется долго и трудно.
Я просто хочу писать:
Запрос.Текст = ТекстЗапроса(), но ОбновитьГодовойПлатеж, или даже ГодовойПлатежОбновить, и при этом не быть нарушителем стандарта.
Читается IMHO все вышеприведенное равно легко.
P.S.
Кстати "ГодовойПлатежОбновление" <> ОбновитьГодовойПлатеж. В первом случае я бы ожидал просто получение обновленного (где-то еще) годового платежа, а во втором случае именно действия по его обновлению. Т.е. таки нужен именно глагол, пусть и на желаемом вами месте.
По сути же не нравится только, когда частное мнение возводится в стандарт.
Хотя мода меняется, подозреваю, что кто-то, помимо 1С, счел модным именно такой вариант.
Или по какой-то причине отказ от прямого вызова геттеров и сеттеров был "прокинут" и к остальным методам, не знаю.
И то, только потому, что стандарт меняется долго и трудно.
Я просто хочу писать:
Запрос.Текст = ТекстЗапроса(), но ОбновитьГодовойПлатеж, или даже ГодовойПлатежОбновить, и при этом не быть нарушителем стандарта.
Читается IMHO все вышеприведенное равно легко.
P.S.
Кстати "ГодовойПлатежОбновление" <> ОбновитьГодовойПлатеж. В первом случае я бы ожидал просто получение обновленного (где-то еще) годового платежа, а во втором случае именно действия по его обновлению. Т.е. таки нужен именно глагол, пусть и на желаемом вами месте.
(9)
Если вдруг не откроется скриншот:
Генерировать текст можно:
Вычислить(ПолучитьТекстВыражения())
Функция ПолучитьТекстВыражения() Экспорт
Возврат "2+2";
КонецФункции
Итогом выйдет 4
Но тут вопрос скорее как работать с переменной из результата запроса(СКД), т.е. если этот пример брать то Сумма+2
Если вдруг не откроется скриншот:
Генерировать текст можно:
Вычислить(ПолучитьТекстВыражения())
Функция ПолучитьТекстВыражения() Экспорт
Возврат "2+2";
КонецФункции
Итогом выйдет 4
Но тут вопрос скорее как работать с переменной из результата запроса(СКД), т.е. если этот пример брать то Сумма+2
Прикрепленные файлы:

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