Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Функция в запросе в 1с 7.7

v7: Функция в запросе в 1с 7.7
Я
   Лиза777
 
26.04.18 - 13:01
Функция ЛитрыНалИзСовместнойОплатыСБонусами = Сумма ((СуммаПокупки*100)/((ОплаченоБонусами/10+СуммаПокупки)*Литры/100)) 

вылетает программа на выполнении такого запроса. Пробовала упрощать до (Сумма+10) - так нормально, но как только ставлю (Сумма+10) * 100 вылетает 1с-ка. Никак такое не запихать в функцию?
 
 
   Kigo_Kigo
 
1 - 26.04.18 - 13:04
А нолик там деление не втесался?
   Лиза777
 
2 - 26.04.18 - 13:07
тоже думала про это, поэтому стала упрощать.
   Лиза777
 
3 - 26.04.18 - 13:07
Функция Сумма((СуммаПокупки+10) * 100)
тоже вылетает
   aka AMIGO
 
4 - 26.04.18 - 13:12
Переменные все известны?
   Лиза777
 
5 - 26.04.18 - 13:16
вроде бы да... А вообще должна работать такая конструкция сложная в функции сумма? Я чёт засомневалась, что там деление и умножение и всё это в функции "сумма"
   Kigo_Kigo
 
6 - 26.04.18 - 13:21
Что мешает это считать не в запросе?
   Масянька
 
7 - 26.04.18 - 13:22
(6) Потому что нужно (в соседней ветке почему-то тебя это не заботило).
   Масянька
 
8 - 26.04.18 - 13:23
(5) А если без этой строки вывести показатели, которые участвуют в запросе - точно ноля нет?
И вылетает молча?
   Лиза777
 
9 - 26.04.18 - 13:23
(7)   ))))
ладно буду проверять данные. Значит в них всё таки дело.
   Лиза777
 
10 - 26.04.18 - 13:23
молча вылетает
 
 Рекламное место пустует
   Масянька
 
11 - 26.04.18 - 13:24
(9) Не факт. Но понять стоит.
   2S
 
12 - 26.04.18 - 13:26
(0) опиши свою функцию отдельно с расчетами и вызывай ее
   Cool_Profi
 
13 - 26.04.18 - 13:27
(12) Опередил ((
   Kigo_Kigo
 
14 - 26.04.18 - 13:27
(7) Не переваливайте со здоровой головы на больную(с) для любителей пословиц
   Масянька
 
15 - 26.04.18 - 13:28
(12) Лучший вариант.
(14) Лечите голову.
   Franchiser
 
16 - 26.04.18 - 13:29
Покажи сам запрос.
М.б. надо писать Запрос.Литры и тд.
   Kigo_Kigo
 
17 - 26.04.18 - 13:29
(15) С моей все в порядке
   Franchiser
 
18 - 26.04.18 - 13:33
СуммаПокупки - это функция уже просуммированная в запросе? зачем ее в Сумму() еще пихать?
ОплаченоБонусами И Литры - это что?
   Franchiser
 
19 - 26.04.18 - 13:34
Попробуй так
ЛитрыНалИзСовместнойОплатыСБонусами = (запрос.СуммаПокупки*100)/((Сумма(ОплаченоБонусами)/10+Запрос.СуммаПокупки)*Сумма(Литры)/100)
   Лиза777
 
20 - 26.04.18 - 13:36
(18) суммапокупки - это реквизит документа "сумма". и те тоже  реквизиты документа
   Franchiser
 
21 - 26.04.18 - 13:39
Может быть у тебя переменные где то в коде встречаются с такими же названиями СуммаПокупки, ОплаченоБонусами, Литры
   Franchiser
 
22 - 26.04.18 - 13:40
Покажи весь запрос, какие в запросе Функции есть кроме этой?
   Lazy Stranger
 
23 - 26.04.18 - 13:45
хот и не совсем в тему:
а зачем в одном и том же выражении сначала умножать на 100, а потом делить на те же 100?
   Franchiser
 
24 - 26.04.18 - 13:52
100/Что-то/100 =10000/что-то
   aka AMIGO
 
25 - 26.04.18 - 14:20
Еще разочек.. (12) +100500 © миста..
Отдельная функция - милое дело, можно сколь угодно сложную написать..
   aka AMIGO
 
26 - 26.04.18 - 14:21
+25 заодно и отладочку разлюбезную включить, да проследить по ней
   Карст
 
27 - 26.04.18 - 14:42
Функция (блабла)

возврат ляля

угу типа 
а в запросе например 
Условие Функция(документиззапроса)=1
   2S
 
28 - 26.04.18 - 15:03
(24) бред, канает только для целых чисел
   Franchiser
 
29 - 26.04.18 - 23:12
(28) ты не согласен с математикой?
   Zmich
 
30 - 27.04.18 - 05:48
(29). Неверно. Свойства ассоциативности у операции деления нет. Т.е. все зависит от того, как поставить скобки: 100/(Что-то/100) = 10000/Что-то, однако (100/Что-то)/100 = 1/Что-то. Поэтому такая запись, как у тебя, некорректна.
   Franchiser
 
31 - 27.04.18 - 10:21
(30) да ладно, если скобок нет то первыми выполняются умножения и деления, а потом сложение и вычитание это первый класс.
1+2:3:5 =
   Ёпрст
 
32 - 27.04.18 - 10:24
(0) формат базы какой ? SQL ? DBF ?
   Franchiser
 
33 - 27.04.18 - 10:24
И скобки в операциях деления/умножения никакого смысла не имеют. Ты видимо пропустил уроки в школе по сокращению дробей.
 
 
   Ёпрст
 
34 - 27.04.18 - 10:25
ну и покажи весь текст запроса целиком
   Franchiser
 
35 - 27.04.18 - 10:26
(100/Что-то)/100 = 1/Что-то
Это чушь
   Zmich
 
36 - 27.04.18 - 10:28
(35). Как чушь? например, "Что-то" возьмем равным 2. (100/2)/100 = 50/100 = 1/2.
   Zmich
 
37 - 27.04.18 - 10:30
(36)+ А теперь скобки поставим иначе: 100/(2/100) = 100/0.02 = 5000 = 10000/2. Ну и кто пропустил уроки в школе по сокращению дробей?
   Franchiser
 
38 - 27.04.18 - 10:31
Ладно, если скобок нет то операция выполняется в порядке следования
   Ёпрст
 
39 - 27.04.18 - 10:35
100/0.02 =5
   Franchiser
 
40 - 27.04.18 - 10:35
Деление на 100 происходит в знаменателе и он рассчитывается первым
   Franchiser
 
41 - 27.04.18 - 10:36
Так что будет по варианту 10000 в числителе
   Zmich
 
42 - 27.04.18 - 10:36
(38). Это кто сказал? И кстати, тем более: если в порядке следования, тогда в (24) у тебя ерунда написана. Вот еще пример: a^b^c - в каком порядке должно идти возведение в степень? Ассоциативности у этой операции также нету.
(39). Разделить, а не умножить
   Ёпрст
 
43 - 27.04.18 - 10:38
(42) :)

так и знал, что щас достанут калькуляторы проверять :))))
   Franchiser
 
44 - 27.04.18 - 10:40
Сначала выполняем по порядку (слева направо) умножение и деление, а затем сложение и вычитание.
https://interneturok.ru/matematika/3-klass/tema-umnozhenie-i-delenie/poryadok-vypolneniya-deystviy-v-vyrazheniyah-bez-skobok-i-so-skobkami-2
   Zmich
 
45 - 27.04.18 - 10:48
(44). Если слева направо, то в таком случае 100/Что-то/100 = 1/Что-то, а не 10000/Что-то
   Franchiser
 
46 - 27.04.18 - 10:58
Согласен
   Franchiser
 
47 - 27.04.18 - 11:01
Но у ТС после случай когда выражение после  первого деления в скобках, для его примера  это 2-й случай т.е. 10000
   1Сергей
 
48 - 27.04.18 - 11:05
Эта. А что, никто ещё не предложил отказаться от черных запросов в пользу прямых?
   Franchiser
 
49 - 27.04.18 - 11:05
(40), (41) относилось к формуле ТС
 
 Рекламное место пустует
   Franchiser
 
50 - 27.04.18 - 11:06
(48) потому что Лиза вряд ли будет их писать
   Franchiser
 
51 - 27.04.18 - 11:11
Скорее всего ТС ошибся Литры/100 нужно взять в скобки
   Лиза777
 
52 - 11.05.18 - 05:45
Весь запрос
   Лиза777
 
53 - 11.05.18 - 05:45
ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)

    |Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;
    |ТекущийДокумент = Документ.Отчет.ТекущийДокумент; 
    |ДатаДок =  Документ.Отчет.ДатаДок;
    |АЗС = Документ.Отчет.АЗС;    
    |ГСМ = Документ.Отчет.ГСМ.ТекущийЭлемент;    
    |КодПредприятия = Документ.Отчет.Предприятие.Код;
    |Бонусы = Документ.Отчет.ОплаченоБонусами;
    |Литры = Документ.Отчет.Литры;
    |Цена = Документ.Отчет.Цена;
    |СуммаПокупки = Документ.Отчет.Сумма;
    |без Итогов;        
    |Функция ЛитрыНалИзСовместнойОплатыСБонусами = Сумма ((((СуммаПокупки*100)/(Бонусы/10+СуммаПокупки))*Литры)/100) Когда (((СокрЛП(КодПредприятия)=""100"") ИЛИ (СокрЛП(КодПредприятия)=""101"")) И ((Бонусы > 0) И (СуммаПокупки>0)));
    |Функция ЛитрыБонусы        = Сумма(Литры) Когда ((СуммаПокупки = 0) И (Бонусы>0));
    |Группировка АЗС без групп;
    |";
   Лиза777
 
54 - 11.05.18 - 07:08
(50) считаю при обработке результата запроса уже. Но долго считает, буду всё-таки на прямой запрос переделывать
   GreyK
 
55 - 11.05.18 - 07:24
(53) Сделай так:
Функция МояФункцияПодсчета(СуммаПокупки,Бонусы,Литры,КодПредприятия)
  //Здесь высчитываешь результат

КонецФункции

....
|Функция ЛитрыНалИзСовместнойОплатыСБонусами = Сумма (Литры + МояФункцияПодсчета(СуммаПокупки,Бонусы,Литры,КодПредприятия) - Литры);
)
   Лиза777
 
56 - 11.05.18 - 08:35
(55) так весь смысл функции в запросе, что мне нужна сумма результата функции. А так мне придётся при обработке результата запроса перебирать строки документа (добавить тогда надо группировку по документу в запрос и возможно группировку по строкам). И при таком переборе для каждой стоки вызывать эту функцию - как-то не очень.
   GreyK
 
57 - 11.05.18 - 08:45
(56) Вот это функция в запросе:

|Функция ЛитрыНалИзСовместнойОплатыСБонусами = Сумма (Литры + МояФункцияПодсчета(СуммаПокупки,Бонусы,Литры,КодПредприятия) - Литры);

Просто она обращается к внешней функции.
   Сияющий в темноте
 
58 - 11.05.18 - 10:35
Попробуйте условия и вычисления отделить от суммы
не забываем,что сумма вычисляется по всему запросу


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует