Имя: Пароль:
1C
1С v8
вопрос по оператору ВЫПОЛНИТЬ
0 jurayed
 
07.08.18
14:48
Выполнить("БонусПоДоговору = " + ФормулаРасчета);
формулуРасчета заполняет пользователь типа:
Если ОбъемПродажПоМенеджеру > 10000000 Тогда
МаржаПоДоговору * 0,2 Иначе .... КонецЕслИ;
Не проходит, пишет "Ожидается выражение" ...
Помогите решить .... пользователь заполняет формулу расчета бонусов, а как ее выполнить ???
1 FIXXXL
 
07.08.18
14:50
ФормулаРасчета - текст?
2 lucbak
 
07.08.18
14:50
(0) Покажи форму расчета ...
3 jurayed
 
07.08.18
14:50
(1) да
4 lucbak
 
07.08.18
14:51
Если ОбъемПродажПоМенеджеру > 10000000 Тогда
БонусПоДоговору = МаржаПоДоговору * 0,2 Иначе .... КонецЕслИ;
5 polosov
 
07.08.18
14:51
БонусПоДоговору = Если ОбъемПродажПоМенеджеру > 10000000 Тогда........


Ну ну.
6 lucbak
 
07.08.18
14:51
т.е. переменная должна быть внутри модуля сразу
7 lucbak
 
07.08.18
14:53
и будешь писАть просто
Выполнить(ФормулаРасчета);
8 jurayed
 
07.08.18
14:54
(4) я пробовал так - все равно не проходит
9 Михаил Козлов
 
07.08.18
14:54
(6) Либо через оператор ?()
10 jurayed
 
07.08.18
14:55
есть где пример использования ВЫПОЛНИТЬ с ЕСЛИ ?
копался в интернете - не нашел
11 Михаил Козлов
 
07.08.18
14:55
(8) Переменная БонусПоДоговору не видна.
12 jurayed
 
07.08.18
14:56
(9) вот это то идея - надо попробовать, но потом переучивать Менеджера переписывать формулу ... (((
13 jurayed
 
07.08.18
14:57
(11) я объявил ее в начале процедуры !
Перем БонусПоДоговору;
ВСе равно не помогло
14 lucbak
 
07.08.18
14:57
(8) (13) не помогло то, что? это работает 146%
15 FIXXXL
 
07.08.18
14:59
(10) а ты напиши этот код (5) в модуле и посмотри как это отработает
16 jurayed
 
07.08.18
15:00
(15) В коде отрабатывает - все ок
17 FIXXXL
 
07.08.18
15:01
(16) скопируй сюда код, котрый 100% работет без Выполнить()
18 lucbak
 
07.08.18
15:02
(17) Ты ведь не думаешь, что тебе сейчас скопируют

БонусПоДоговору = Если ОбъемПродажПоМенеджеру > 10000000 Тогда
МаржаПоДоговору * 0,2 Иначе .... КонецЕслИ;

))))

тебе скопируют

Если ОбъемПродажПоМенеджеру > 10000000 Тогда
МаржаПоДоговору * 0,2 Иначе .... КонецЕслИ;
19 jurayed
 
07.08.18
15:03
(17) Если МаржаПоДоговору  > 10000000 Тогда
        БонусПоДоговору = МаржаПоДоговору / 2;
    ИначеЕсли МаржаПоДоговору  > 5000000 Тогда
        БонусПоДоговору = МаржаПоДоговору;
    КонецЕсли;
20 jurayed
 
07.08.18
15:04
(17) Выполнить("Если МаржаПоДоговору  > 10000000 Тогда
        БонусПоДоговору = МаржаПоДоговору / 2;
    ИначеЕсли МаржаПоДоговору  > 5000000 Тогда
        БонусПоДоговору = МаржаПоДоговору;
    КонецЕсли;)
дает ошибку
21 lucbak
 
07.08.18
15:04
(19) А теперь посмотри (4) а потом сразу (7)
22 jurayed
 
07.08.18
15:04
даже переменные объевил в процедуре
Перем БонусПоДоговору, МаржаЗаПериод, МаржаПоДоговору, ОбъемЗаПериод, ОбъемПоДоговору;
23 lucbak
 
07.08.18
15:08
Покажи ошибку целиком
24 Волшебник
 
07.08.18
15:09
вместо Выполнить надо Вычислить
25 Волшебник
 
07.08.18
15:10
БонусПоДоговору = Вычислить(ФормулаРасчета);
26 jurayed
 
07.08.18
15:11
(23) тупо через Shift+F9 пробую Выполнить("ЕСЛИ 1=1 Тогда БонусПоДоговору = 2; Иначе БонусПоДоговору = 3; КОНЕЦЕСЛИ;")    {(1,1)}: Ожидается выражение
27 jurayed
 
07.08.18
15:13
(25) Вычислить("ЕСЛИ 1=1 Тогда 2; Иначе 3; КОНЕЦЕСЛИ;")    {(1)}: Ошибка компиляции при вычислении выражения или выполнении фрагмента кода
28 lucbak
 
07.08.18
15:13
(26) убил...
29 lucbak
 
07.08.18
15:14
(26) Как ты думаешь, что отладка тебе должна вернуть при выполнение кода по Shift+F9 ?
30 jurayed
 
07.08.18
15:14
(28) может в этом и есть моя проблема, опиши ...
31 Deon
 
07.08.18
15:14
(26) Ты же вычисляешь в (0) не это. Ты вычисляешь присвоение переменной. И пытаешься ей присвоить Если.

Тут уж замени Если на ?(,,), либо используй правильный оператор Вычислить()
32 Волшебник
 
07.08.18
15:14
(26) слишком много точек с запятой
33 lucbak
 
07.08.18
15:16
(30) просто сделай то, что я тебе сказал и запусти предприятие (а не в отладке смотри..."Выполнить" это не функция, что бы она тебе в отладке значение возвращала)
34 Deon
 
07.08.18
15:18
(32) Нормально там всё с точками и с запятыми. Он в отладчике пытается выполнить код
35 jurayed
 
07.08.18
15:20
Удалил объявление переменных, просто перед циклом БонусПоДоговору = 0 присвоил ... и вот заработал такой код:
Выполнить("Если МаржаПоДоговору  > 10000000 Тогда БонусПоДоговору = МаржаПоДоговору / 2; Иначе БонусПоДоговору = МаржаПоДоговору; КонецЕсли;");
36 jurayed
 
07.08.18
15:21
Всем спасибо , придали уверенности в том, что это должно работать ...
37 Deon
 
07.08.18
15:23
(36) Осталось сделать как в (25) и вообще счастье будет
38 jurayed
 
07.08.18
15:26
(37) Так и сделал ... уже взлетело
39 Eiffil123
 
07.08.18
15:53
Делай как в нормальных системах:

Результат = 0;
Выполнить(ФормулаРасчета);
БонусПоДоговору = Результат;

// А в формуле расчета пользователь должен присвоить нужное значение переменной результат
40 polosov
 
07.08.18
20:18
(15) Написал. Синтаксическая ошибка.
Это юмор у тебя какой-то?