Требуется помощь - внешняя функция в Запросе
Есть такая конструкция
и эта конструкция в случае БезВозвратов = 1 возвращает в "Кол" и "СуммаСС" ОКРУГЛЕННОЕ до целых число - фича вобщем известная: если во внешнюю функцию передать в качестве параметров не просто числовые переменные запроса, а их значения, предварительно обработанные другими функциями запроса, то результат, возвращаемый внешней функцией всегда будет целым числом (точность 0).
Может кто знает КАК ПОБЕДИТЬ ФИЧУ!?!?! очень надо в Запросе в одну функцию собрать и Расход и Приход.
Или предложите красивый способ это обойти (брать разность из разных функций далее при обходе группировок запроса - НЕ ПРЕДЛАГАТЬ!)
Перем Запрос;
.................
.................
Функция ДляВозврата(лПоказатель)
Если лПоказатель = "Кол" Тогда
Возврат (Запрос.КолР - Запрос.КолП);
ИначеЕсли лПоказатель = "СуммаСС" Тогда
Возврат (Запрос.СуммаССР - Запрос.СуммаССП);
КонецЕсли;
КонецФункции // ДляВозврата
..................
..................
Если БезВозвратов = 0 Тогда
ТекстЗапроса =ТекстЗапроса+ "
|Функция Кол = Расход(лКол);
|Функция СуммаСС = Расход(лСуммаСС);
|"//}}ЗАПРОС
;
Иначе
//**** "БЕЗ ВОЗВРАТОВ" ****
ТекстЗапроса =ТекстЗапроса+ "
|Функция КолР = Расход(лКол);
|Функция КолП = Приход(лКол);
|Функция Кол = Сумма(ДляВозврата(""Кол""));
|Функция СуммаССР = Расход(лСуммаСС);
|Функция СуммаССП = Приход(лСуммаСС);
|Функция СуммаСС = Сумма(ДляВозврата(""СуммаСС""));
|"//}}ЗАПРОС
;
КонецЕсли;
Показатьи эта конструкция в случае БезВозвратов = 1 возвращает в "Кол" и "СуммаСС" ОКРУГЛЕННОЕ до целых число - фича вобщем известная: если во внешнюю функцию передать в качестве параметров не просто числовые переменные запроса, а их значения, предварительно обработанные другими функциями запроса, то результат, возвращаемый внешней функцией всегда будет целым числом (точность 0).
Может кто знает КАК ПОБЕДИТЬ ФИЧУ!?!?! очень надо в Запросе в одну функцию собрать и Расход и Приход.
Или предложите красивый способ это обойти (брать разность из разных функций далее при обходе группировок запроса - НЕ ПРЕДЛАГАТЬ!)
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Первый раз слышу о такой "фиче"...
Я бы сделал так:
Я бы сделал так:
Перем Запрос;
.................
.................
Функция ДляВозврата(Сумма1, Сумма2)
Возврат Сумма1 - Сумма2;
КонецФункции // ДляВозврата
..................
..................
Если БезВозвратов = 0 Тогда
ТекстЗапроса =ТекстЗапроса+ "
|Функция Кол = Расход(лКол);
|Функция СуммаСС = Расход(лСуммаСС);
|"//}}ЗАПРОС
;
Иначе
//**** "БЕЗ ВОЗВРАТОВ" ****
ТекстЗапроса =ТекстЗапроса+ "
|Функция КолР = Расход(лКол);
|Функция КолП = Приход(лКол);
|Функция Кол = Сумма(ДляВозврата(Запрос.КолР, Запрос.КолП));
|Функция СуммаССР = Расход(лСуммаСС);
|Функция СуммаССП = Приход(лСуммаСС);
|Функция СуммаСС = Сумма(ДляВозврата(Запрос.СуммаССР, Запрос.СуммаССП));
|"//}}ЗАПРОС
;
КонецЕсли;
Показать
(2)
или как у меня - это сути не меняет, проверь, кстати и убедись, что "фича" существует))
А у меня так сделано, т.к. в "ДляВозврата" не только разность двух переменных считается, я сюда написал покороче, для простоты восприятия
Сумма(ДляВозврата(Запрос.КолР, Запрос.КолП));
или как у меня - это сути не меняет, проверь, кстати и убедись, что "фича" существует))
А у меня так сделано, т.к. в "ДляВозврата" не только разность двух переменных считается, я сюда написал покороче, для простоты восприятия
Передай функции фиктивный параметр нужной точности
Функция СуммаСС = Сумма(ДляВозврата(""СуммаСС"",СуммаСС));
1С найдет с параметрах функции значение с двумя знаками после запятой и будет считать, что и результат функции имеет такую-же точность.
Функция СуммаСС = Сумма(ДляВозврата(""СуммаСС"",СуммаСС));
1С найдет с параметрах функции значение с двумя знаками после запятой и будет считать, что и результат функции имеет такую-же точность.
(7) не (5) брехня, а (6). Это (делить/умножать на 1000) я попробовал в первую очередь, когда столкнулся с подобной темой в прошлый раз.
Согласен с
а фича, да, как раз в том, чтобы отправить туда фиктивный параметр нужной точности
Согласен с
Ёпрст пишет:
А фичи никакой тут нет. Функция берёт точность из переменной текста запроса переданной в качестве аргумента. У вас в качестве аргумента некоторое выражение (в данном случае, обращение к итогам запроса) - соответственно неоткуда взять точность, точность = 0.
А фичи никакой тут нет. Функция берёт точность из переменной текста запроса переданной в качестве аргумента. У вас в качестве аргумента некоторое выражение (в данном случае, обращение к итогам запроса) - соответственно неоткуда взять точность, точность = 0.
а фича, да, как раз в том, чтобы отправить туда фиктивный параметр нужной точности
(5) Урраааааа!!!! Заработалаааа!!!! Спасибо, добрый человек!!! Ай Лав ИС!!!
Век живи, век учись.
только еще замечание - параметром этим должны быть переменная запроса, внешняя переменная
(типа ТочностьСуммы = 1234567890123.123;) не канает.
Вот так канает:
Век живи, век учись.
только еще замечание - параметром этим должны быть переменная запроса, внешняя переменная
(типа ТочностьСуммы = 1234567890123.123;) не канает.
Вот так канает:
|Функция СуммаССР = Расход(лСуммаСС);
|Функция СуммаССП = Приход(лСуммаСС);
|Функция СуммаСС = Сумма(ДляВозврата(Запрос.СуммаССР,Запрос.СуммаССП,лСуммаСС));
(0) Помножай на 100 в тексте запроса, в результатах дели на 100, будет точность до 2-х знаков... или на бооольшее число, если нужна бооольшая точность.
А фичи никакой тут нет. Функция берёт точность из переменной текста запроса переданной в качестве аргумента. У вас в качестве аргумента некоторое выражение (в данном случае, обращение к итогам запроса) - соответственно неоткуда взять точность, точность = 0.
А фичи никакой тут нет. Функция берёт точность из переменной текста запроса переданной в качестве аргумента. У вас в качестве аргумента некоторое выражение (в данном случае, обращение к итогам запроса) - соответственно неоткуда взять точность, точность = 0.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот