Имя: Пароль:
1C
1C 7.7
v7: Как проверить, есть функция или нет или как безопасно вызвать функцию
0 DJ Anthon
 
31.10.11
15:35
1. Забаньте этого идиота 43% (3)
2. Не интересно 29% (2)
3. Говори уже, давай! 29% (2)
4. Интересно 0% (0)
Всего мнений: 7

Была такая древняя тема...
Как проверить, есть функция или нет или как безопасно вызвать функцию.
так, чтобы обмануть синтаксический контроль.

Ответа не нашли. А я нашел. Прежде чем скажу, у кого какие будут идеи?
1 PuhUfa
 
31.10.11
15:39
А зачем?
2 Хряк
 
31.10.11
15:39
рассказывай
3 palpetrovich
 
31.10.11
15:44
вынести в ВК и через попытку :)  
давай колись?
4 filh
 
31.10.11
15:44
(1) наверно, чтобы не спотыкаться на ошибках.
5 1Сергей
 
31.10.11
15:45
нужно только синт.контроль обмануть или всё-таки узнать, есть ли функция или нет?
6 palpetrovich
 
31.10.11
15:46
забыл

Говори уже, давай!
7 aka AMIGO
 
31.10.11
15:48
функция конкретная, или любая?
8 skunk
 
31.10.11
15:48
шаблон
9 skunk
 
31.10.11
15:49
попытка
 шаблон("ЕстьтакаяФункция()")
 сообщить("есть");
исключение
 сообщить("неа");
конецпопытки
10 Wobland
 
31.10.11
15:50
Выполнить() в семёрке есть?
11 aka AMIGO
 
31.10.11
15:51
(9) зачем тут шаблон? просто обращайся в попытке - вот и сообщит, ага или неа :)
12 1Сергей
 
31.10.11
15:52
о, кажись придумал. щас
13 skunk
 
31.10.11
15:53
(11)синтакс контроль не даст
14 aka AMIGO
 
31.10.11
15:54
(13) а, да!
15 DJ Anthon
 
31.10.11
15:54
(9) выдаст сообщение. как избежать сообщения?
16 Ненавижу 1С
 
гуру
31.10.11
15:54
7.7 именно?
17 DJ Anthon
 
31.10.11
15:55
(16) ага..
18 Ненавижу 1С
 
гуру
31.10.11
15:55
1С++ ?
19 victuan1
 
31.10.11
15:56
(17) Уже взялся за свою нетленку? ;)
20 victuan1
 
31.10.11
15:57
собсно

Забаньте этого идиота
21 skunk
 
31.10.11
15:57
(15)какое сообщение
22 DJ Anthon
 
31.10.11
15:59
(19) готова. парсинг переделываю на автоматический, а не ручной.
23 victuan1
 
31.10.11
15:59
(21) Вот это наверное:
 сообщить("есть");
24 victuan1
 
31.10.11
15:59
(22) ВычисляемыйМодуль 1с++ используй.
25 skunk
 
31.10.11
16:00
(23)ну так оно сделано для особо понятливых ... а там есстественно ставь переменные и смотри за цветом месячных своей подруги
26 victuan1
 
31.10.11
16:04
(25) А если серьезно у тебя ошибка - [] пропущены:
попытка
 шаблон("[ЕстьтакаяФункция()]")
//  сообщить("есть");
исключение
 сообщить("неа");
конецпопытки

И соот-но, сообщение:
Функция не обнаружена (ЕстьтакаяФункция)
27 1Сергей
 
31.10.11
16:05
Хотел попробовать через обработку ожидания, но не фурычит
28 filh
 
31.10.11
16:05
сломать окно сообщений?
29 Ёпрст
 
31.10.11
16:07
(26) шаблон не даст исключения никогда
30 Ёпрст
 
31.10.11
16:07
(0) тебе штатно надо или с ВК ?
31 Ёпрст
 
31.10.11
16:08
а вообще, баян..
32 DJ Anthon
 
31.10.11
16:10
(30) штатно.. и очень порванный баян... но я так и не нашел ответа...
33 Starhan
 
31.10.11
16:11
(0)Ответа не нашли. А я нашел...
(32) штатно.. и очень порванный баян... но я так и не нашел ответа...

несрастухи какие то
34 DJ Anthon
 
31.10.11
16:11
не нашел в инете, пришлось самому искать. и у меня маленький побочный эффект есть неприятный. думал, может все-таки есть нормальные способы..
35 filh
 
31.10.11
16:12
ну тогда

Говори уже, давай!
36 1Сергей
 
31.10.11
16:15
с процедурами работает:

Функция ЕстьЛиПроцедура(ИмяФункции)
   Форма.ОбработкаОжидания(ИмяФункции,1);
   Если Форма.ОбработкаОжидания(,0)=ИмяФункции Тогда
       Возврат 1;
   Иначе
       Возврат 0;
   КонецЕсли;
КонецФункции // ЕстьЛиФункция
37 1Сергей
 
31.10.11
16:19
поправочка:

Функция ЕстьЛиПроцедура(ИмяФункции)
   // сначала проверяем локальные
   Форма.ОбработкаОжидания(ИмяФункции,1);
   Если Форма.ОбработкаОжидания(,0)=ИмяФункции Тогда
       Возврат 1;
   Иначе
       // затем глобальные
       ОбработкаОжидания(ИмяФункции,1);
       Если ОбработкаОжидания(,0)=ИмяФункции Тогда
           Возврат 1;
       Иначе
           Возврат 0;
       КонецЕсли;
   КонецЕсли;
КонецФункции // ЕстьЛиФункция
38 1Сергей
 
31.10.11
16:19
а вот функции не ловит :(
39 Лефмихалыч
 
31.10.11
16:23
а нахрена это?
40 Ёпрст
 
31.10.11
16:24
(0)
Рез=Шаблон("[Вася()]")
Если Рез="[Вася()]" Тогда
  Сообщить("Нету функции Вася");
КонецЕсли;
41 Byasha
 
31.10.11
16:24
Круто, и эти люди хотят "от статышь"

Забаньте этого идиота
42 Ёпрст
 
31.10.11
16:28
ну, или так:

Информатор = СоздатьОбъект("Информатор");
Сообщить(Информатор.ЯвляетсяФункцией(Контекст,"ИмяМоейФункции"));
43 1Сергей
 
31.10.11
16:29
(40) а так, чтобы не выполнять функцию?
44 1Сергей
 
31.10.11
16:31
(40) кстати, эта шняга ошибку-то всё-равно выдаёт
45 Ёпрст
 
31.10.11
16:31
(39) это погоня за универсальностью и не желание использовать ВК для этого.
46 Ёпрст
 
31.10.11
16:32
(44) очиститьОкноСообщений и привет, код-то при этом не прерывается
47 1Сергей
 
31.10.11
16:33
(46) ога, и ЗакрытьОкноСообщений()
48 DJ Anthon
 
31.10.11
17:16
ладно, можете смеяться надо мной. решение получилось непрактичное, поэтому я не стал его использовать. по ОЛЕ подключаюсь к этой же базе, предварительно переименовав юзердеф, чтобы пароль не вводить, затем открываю обработку фунцкцией

Рез = База.ExecuteBatch("ОткрытьФорму(""Отчет"", , """ + ПутьКОбработке + "Проверка.ert"")");

с таким текстом (кидаю приблизительно, потому что уже затер):

Процедура ПриОткрытии()
   Если 1 = 0 Тогда
       МояФункция(1);
       СтатусВозврата(0);
       Возврат;
   КонецЕсли;
   СохранитьЗначение("УдалосьОткрыть", 1);
   СтатусВозврата(0);
КонецЕсли;    


текст можно загружать из файла.
затем читаем по оле это значение, закрываем соединение и возвращаем на место юзердеф.
не проканывает с монопольным режимом, отсутствием доступа к юзердеф и требует пары секунд...

от сообщений не избавиться, но они при этом улетают в окно ОЛЕ, а оно невидимое ;)

дело в том, что другой способ который у меня почти получился, не проканал, я там вообще перемудрил.
проще окно сообщений очищать.

так что уже

Не интересно
49 Ёпрст
 
31.10.11
18:43
(48) месье знает толк в извращениях
:)
50 ЧеловекДуши
 
31.10.11
19:01
Зачем вообще это?

Забаньте этого идиота
51 Ёпрст
 
31.10.11
19:27
(50) см. (45)
52 DJ Anthon
 
31.10.11
19:45
(49) да согласен, просто у меня была еще одна идейка, но она не взлетела, а ведь было рядом... жаль, конечно
53 Читатель
 
31.10.11
19:47
!

Не интересно
54 ЧеловекДуши
 
31.10.11
19:49
(51)Это твой ответ, забавней было бы услышать от автора :D
55 Ёпрст
 
31.10.11
19:49
(52) как в (40) чем не катит ?
разве что окошко сообщений чистить.
Лучше конечно, в (42)
56 Sk0rp
 
31.10.11
19:51
(48) Интересно посмотреть как это в монопольном режиме сработает.
ИМХО обернуть как-то (37) и (40) в одну функцию круче будет.
57 Sk0rp
 
31.10.11
19:56
+(56) Сории, про монопольный режим автор уже сам сказал.
Тогда добавлю к (48), что еще очень клёво будет упасть после убийства юзердеф, что бы он не вернулся обратно - пользователи будут рады.
58 DJ Anthon
 
31.10.11
19:59
(57) ну это ж я просто в качестве икспиримента )) на деле я не дурак так делать.

вот только что доделал обработку мд из самой 1Ски ))) ща тестю, вроде работает. оставил пользователю одно задание - запустить 1Ску заново. так как не знаю, каким ехешником запущена 1Ска изначально. да и пофиг на него...
59 DJ Anthon
 
31.10.11
21:16
(49) а вот и она... https://1cers.ru/topic.php?upd&id=577708
60 vde69
 
31.10.11
21:54
вообще вот такая конструкция имеет право на жизнь


если не ЗначениеЗаполнено(ИмяОбщегоМодуля.ИмяФункцииИлиПроцедуры) тогда
сообщить("ошибка");
иначе
ИмяОбщегоМодуля.ИмяФункцииИлиПроцедуры(параметр1)
конецЕсли

обращаю внимание что в первом случае используется без скобок
61 Ёпрст
 
31.10.11
22:04
(60) в сабже речь про клюшки, ежели чего..
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс