Имя: Пароль:
1C
1С v8
Имя функции в строку и обратно
,
0 Масянька
 
26.06.19
17:01
День добрый!
Есть задумка...
Процедура, в которой вызывается другая процедура-функция.
Вариант - ту фигню, что вызывается передать в качестве параметра?
На пальцах:

Процедура Сделать(СделатьФигню)
  ...
  Ответ = СделатьФигню(...);
КонецПроцедуры
.......
Функция СделатьФигню()
....
КонецФункции

Спсаибо.
1 МихаилМ
 
26.06.19
17:04
Выполнить (Execute)
Синтаксис:
Выполнить(<Строка>)

Параметры:
<Строка>
Строка, содержащая текст исполняемого кода.

Описание:
Позволяет выполнить фрагмент кода, который передается ему в качестве строкового значения.

Примечание:
В режиме запуска веб-клиент оператор не поддерживается, при его вызове будет сгенерировано исключение.

В режимах запуска мобильного приложения оператор не поддерживается в операционной системе iOS
2 novichok79
 
26.06.19
17:06
внезапно.
выполнить() или вычислить().
если сделатьфигню() вызывать из сделатьфигню(), то мне кажется стек вызовов 1С переполнится, о чем сообщит платформа.
3 PiotrLoginov
 
26.06.19
17:08
(0) давно уже в БСП есть что-то вроде "ВыполнитьМетодКакойтоТам"
4 Масянька
 
26.06.19
17:08
(1) (2) Да, нет же...
Из одной процедуры вызываются разные функции, которые передаются, как параметр...
5 dka80
 
26.06.19
17:12
Выполнить("Ответ="+СделатьФигню+"()");
6 Garykom
 
гуру
26.06.19
17:14
(4) Строкой передавай имя функции блин.
7 Вафель
 
26.06.19
17:17
но зачем это?
8 Mikeware
 
26.06.19
17:19
Масянька чего-то начиталась..
9 novichok79
 
26.06.19
17:19
(7) у себя в нетленке я загружаю эксель-файлы, есть некий справочник с кодом на 1С для преобразования значения в колонках. для исполнения кода используется "выполнить".
10 novichok79
 
26.06.19
17:19
(9) это как вариант использования.
11 novichok79
 
26.06.19
17:19
в формулах видов расчета в ЗУП кажется тоже было подобное.
12 Sserj
 
26.06.19
17:20
(7) Как зачем, это же паттерн Шаблонный метод, кто-то пришел из "сурьезных языков" :)
13 Mikeware
 
26.06.19
17:20
(7) как зачем? СделатьФигню®!
14 dka80
 
26.06.19
17:20
(7) например, у меня была форма с кучей страниц и одной кнопкой "Выполнить". В зависимости от имени текущей открытой страницы программно вызывалась соответствующая процедура и не нужно было делать на каждой странице кнопку "Выполнить".
15 Mikeware
 
26.06.19
17:21
(12) неееее... сурьезных языков у Масяньки в анамнезе не числится...
16 dka80
 
26.06.19
17:21
+14 причем имя процедуры определялось автоматически по имени открытой страницы.
17 Вафель
 
26.06.19
17:21
(9) типо КД2 ?
18 Mikeware
 
26.06.19
17:23
(14) почему б не ?
проц Выполнить()
Если ОткрытаяСтраница="бла" тогда
ДелаемКу();
иначеесли ОткрытаяСтраница="бла-бла" тогда
ДелаемКу(2);
иначе
ДелаемКю();
...

?
19 Масянька
 
26.06.19
17:24
Выполнить не работает, поскольку не видит потом переменную, которую присваивает в выполнить.
20 novichok79
 
26.06.19
17:24
(17) да, есть справочник с туевой хучей колонок + характеристики, пользакам предоставляют большие объемы данных в xls, и надо это все загрузить в 1С более-менее универсально.
21 Масянька
 
26.06.19
17:25
(18) Ну, да... В серьезном языке - одна строчка, а в эске куча условий...
Но, главное, ляпнуть. И ляпнуть - уверенно.
22 Mikeware
 
26.06.19
17:25
кстати, а вот "обратно" - это уже интересно.
Это типа приходит куда-то структура, а там поля с именами функций, которые эту структуру выродили, обработали....
23 dka80
 
26.06.19
17:28
(18) нет. все проще
ИмяТД = Сред(Элементы.Страницы.ТекущаяСтраница.Имя, 9);
Выполнить("ЗагрузитьДанныеНаСервере" + ИмяТД);
24 Mikeware
 
26.06.19
17:28
(21) каждому овощу - свой фрукт.
Я могу там где надо применять кучу условий, а там, где надо - применять вызов через вычислить.
зы. я еще твой Объект Периодический не забыл...
25 novichok79
 
26.06.19
17:31
(21) в эксе тоже есть "выполнить()"
26 Asmody
 
26.06.19
17:31
(0) Написать в 1С, чтобы реализовали в языке функции первого класса
27 Масянька
 
26.06.19
17:32
(24) И?
Там, вообще-то, был реквизит. Но для тебя - одно и тоже.
28 novichok79
 
26.06.19
17:32
(19) я делал вот так
Результат = Неопределено
выполнить("Результат = 4;");

Сообщить(Результат) дает 4.
29 Mikeware
 
26.06.19
17:32
(23) такое надо только либо при автогенерации страниц (когда ты не знаешь, сколько и каких страниц будет сделано), либо при некоей же автоматической генерации процедур.
это плохо с той точки зрения, что нет статического контроля - т.е. ты можешь попытаться вызвать несуществующую функцию.
в остальных случаях сокращение кода в ущерб надежности и читаемости - не есть хорошо...
30 Масянька
 
26.06.19
17:32
(26) :(
31 hhhh
 
26.06.19
17:32
(19) видит она эту переменную
32 Mikeware
 
26.06.19
17:33
(27) и? неужели ты за прошедшее время не научилась отличать массив от функции?
33 Масянька
 
26.06.19
17:33
(31) У меня пишет: переменная не определена.
34 Масянька
 
26.06.19
17:33
(32) Не засоряй ветку бессмысленными сообщениями.
35 hhhh
 
26.06.19
17:34
(33) так ты определи ее перед выполнить.
36 Mikeware
 
26.06.19
17:34
(34) так бы и писала - "не научилась и не буду"
37 Asmody
 
26.06.19
17:38
Можно делать как "a la java": делать обработки, как бы "реализующие определенный интерфейс" с одним методом, например, "Запустить" (ибо ВЫполнить уже занято), и передавать в нужную функцию экземпляр обработки.
38 Масянька
 
26.06.19
17:39
(35) Спасибо большое!
39 Mikeware
 
26.06.19
17:39
(37) а почему бы и нет?
40 Масянька
 
26.06.19
17:39
Остальным (кроме, не будем показывать пальцем) тоже спасибо.
41 Масянька
 
26.06.19
17:40
(37) Мечтать не вредно. Ешьте, что дают. :(
42 Mikeware
 
26.06.19
17:41
(41) мы даже из того, что дают, умеем приготовить...
43 Asmody
 
26.06.19
17:41
(39) Ну так всякие ВПФ и др извращения в типовых так и работают
44 Mikeware
 
26.06.19
17:56
(43) прочитал "БПФ". задумался... :-)
Программист всегда исправляет последнюю ошибку.