|
Как узнать о наличии определенной глобальной переменной? Чтобы не было синт. ошибки? | ☑ | ||
---|---|---|---|---|
0
DJ Anthon
03.02.10
✎
15:25
|
Требуется запустить обработку на произвольной базе (может быть любая конфигурация, даже самописная), в конфиге может присутствовать некий набор функций и переменных. в случае, если они присутствуют, необходимо использовать их, иначе - аналоги в форме обработки (по типу DirectX )).
Как узнать, что такая-то функция/переменная определена и взять ее значение? Попытка не выручает - ошибка синтаксического контроля.. (( П.С. Конфиги править нельзя и пихать в базу лишние файлы тоже... |
|||
1
Fragster
гуру
03.02.10
✎
15:26
|
попытка Шаблон(...)
|
|||
2
DJ Anthon
03.02.10
✎
15:29
|
вот над этим и думаю. не получаццо.
|
|||
3
Ненавижу 1С
гуру
03.02.10
✎
15:30
|
придумай свое пространство имен как бы (префикс для переменных) и используй
моясуперкрутаяобработкаЗначение = 10; |
|||
4
DJ Anthon
03.02.10
✎
15:31
|
(1) она одинаково отрабатывает как существующую, так и несуществующую переменную, если у нее нестроковый тип данных, возвращает "" и никакой ошибки / сообщения ((
|
|||
5
DJ Anthon
03.02.10
✎
15:32
|
(3) это сделано. вот только если в конфиге еще нет -
моясуперкрутаяобработкаЗначение = 10; КАК МНЕ ЭТО ПРОГРАММНО УЗНАТЬ? )) |
|||
6
Ненавижу 1С
гуру
03.02.10
✎
15:33
|
(5) будь уверен )) придумывай имена покруче
|
|||
7
Ненавижу 1С
гуру
03.02.10
✎
15:34
|
блин, сорри, я не о том
|
|||
8
Ёпрст
03.02.10
✎
15:36
|
(0) Шаблон
|
|||
9
DJ Anthon
03.02.10
✎
15:36
|
короче говоря, есть что-нибудь подобное как в формах и таблицах
попытка ПолучитьИзБазы = ПолучитьАтрибут("ХренЗнаетКакаяФункция") исключение сообщить("а вот нема такой функции!"); ПолучитьИзБазы = 0; конецпопытки а то принципиально невозможно использовать неописанную переменную, это я понимаю. но нужно это как-то обыграть. пока спасает Метаданные.Обработка("ВсеТакиЭтоМояКонфига").Выбран() но глобальную функцию трудно выполнить, неописав ее. |
|||
10
DJ Anthon
03.02.10
✎
15:37
|
(8) переменная типа Контекст. шаблон возвращает ее значение как "". ДАЖЕ ЕСЛИ ЕЕ НЕТ ((((( вот если бы знать, что ее нет! мне факт нужен, что ее нет!, а уже потом ее значение....
|
|||
11
ProxyInspector
03.02.10
✎
15:38
|
(0) Пока это никому не удавалось сделать штатными средствами.
|
|||
12
Ёпрст
03.02.10
✎
15:39
|
ща вспомню. был метод. Причем штатный.
|
|||
13
ASU_Diamond
03.02.10
✎
15:39
|
если у тебя аналог в форме обработки, то зачем пользовать встроенные в конфигу?
|
|||
14
DJ Anthon
03.02.10
✎
15:40
|
решение есть с помощью допмодуля FormEx, но он очень нестабильный, 1ска постоянно ложится, после двух-трех подключений, использовать не получается. а на форуме по формексу этот глюк игнорируют, он трудновыловимый.
|
|||
15
DJ Anthon
03.02.10
✎
15:42
|
(13) самый прикол! в разных конфигах реализация функций отличается, более того, версия функции в конфиге может быть позже, а также код может там меняться произвольно (и довольно часто). те конфиги, которые не мои (( мне править низя... а функция эта может вообще отсутствовать
|
|||
16
Ёпрст
03.02.10
✎
15:43
|
||||
17
DJ Anthon
03.02.10
✎
15:43
|
ща попробую вариант - попытка открыть обработку, в которой идет обращение к этой переменной...
|
|||
18
Волшебник
03.02.10
✎
15:43
|
ИмяПеременной = "блаблабла";
Попытка а = Вычислить(ИмяПеременной); Сообщить("Есть переменная " + ИмяПеременной); Исключение Сообщить("Нет переменной " + ИмяПеременной); КонецПопытки; По мотивам Книга знаний: Метод Рупора |
|||
19
Fragster
гуру
03.02.10
✎
15:44
|
(18) это восьмерка
|
|||
20
Sadovnikov
03.02.10
✎
15:45
|
(18) Ты на письма принципиально не отвечаешь или, просто, давно в почту не заглядывал?
|
|||
21
Волшебник
03.02.10
✎
15:45
|
(19) Ну в 7.7 через Шаблон
|
|||
22
ProxyInspector
03.02.10
✎
15:45
|
Может быть
Попытка ОткрытьФорму(ВнешняяОбработка); Исключение Сообщить("Проблемы"); КонецПопытки; |
|||
23
ProxyInspector
03.02.10
✎
15:46
|
(16) Мне очень понравилось
глКаталогПечФорм=глКаталогПечФорм; Если ТипЗначения(глКаталогПечФорм) = 0 Тогда Сообщить("Переменной нету") КонецЕсли; |
|||
24
DJ Anthon
03.02.10
✎
15:46
|
(18) ! это и ежу понятно! у меня такая функциия есть:
Функция Выполнить(Код, Конт = 0) Экспорт Если глСервис = 0 Тогда Возврат 0; КонецЕсли; Старый = глМодуль; глКод = "Функция ВыполнитьДополнительно" + Старый + "() Экспорт " + РазделительСтрок + Код + РазделительСтрок + "Возврат 1; КонецФункции"; глМодуль = глСервис.ДобавитьГлобальныйМодуль(глКод); глКод = Код; Если глМодуль = 0 Тогда Сообщить("Невозможно запустить код. Ошибка: " + ОписаниеОшибки()); Возврат 0; КонецЕсли; Если Шаблон("[ВыполнитьДополнительно" + Старый + "()]") = "1" Тогда Сообщить("Выполнение завершено успешно. Код модуля: " + глМодуль); // глСервис.УдалитьГлобальныйМодуль(глМодуль); Возврат 1; КонецЕсли; Сообщить("Выполнение завершено с ошибками. Код модуля: " + глМодуль, "!!"); // глСервис.УдалитьГлобальныйМодуль(глМодуль); Возврат 0; КонецФункции но она нестабильная |
|||
25
DJ Anthon
03.02.10
✎
15:47
|
выполняет произвольный код в 7.7! )) но не канает
|
|||
26
DJ Anthon
03.02.10
✎
15:48
|
(22)=(17) по хочу вариант, только громоздкий...
|
|||
27
DJ Anthon
03.02.10
✎
15:48
|
по ходу*
|
|||
28
Sadovnikov
03.02.10
✎
15:48
|
(25) А зачем так-то?
Модуль = СоздатьОбъект("ВыполняемыйМодуль"); Модуль.УстановитьМодуль(" |Функция ПолучитьЗначение() | Возврат "+ИдентЭлемДиалога+" |КонецФункции | |Процедура УстановитьЗначение(НовЗнач) | "+ИдентЭлемДиалога+" = НовЗнач; |КонецПроцедуры | |Функция ВыборГруппы() | Возврат ?(Форма."+ИдентЭлемДиалога+".ВыборГруппы() = 1, 1, 0); |КонецФункции |"); Модуль.НазначитьКонтекст(Конт); Модуль.КомпилироватьМодуль(); Модуль.ВыполнитьМодуль(); ЗначениеЭлемента = Модуль.ПолучитьЗначение(); |
|||
29
ProxyInspector
03.02.10
✎
15:48
|
(25) Так ты (16) попробовал?
|
|||
30
DJ Anthon
03.02.10
✎
15:49
|
(29) зашел, посмотрел. все это я знаю. а задача все равно другая
|
|||
31
DJ Anthon
03.02.10
✎
15:50
|
(28) как сумел, так написал. а это
СоздатьОбъект("ВыполняемыйМодуль") откуда? |
|||
32
Sadovnikov
03.02.10
✎
15:51
|
(31) 1С++. Причем, работает стабильно.
|
|||
33
DJ Anthon
03.02.10
✎
15:51
|
так и думал... мне 1cpp использовать нельзя... не мое решение, просто табу (((((
|
|||
34
Sadovnikov
03.02.10
✎
15:52
|
(33) О как... Формэкс - можно, а 1С++ - низя? Странная религия...
|
|||
35
DJ Anthon
03.02.10
✎
15:53
|
(34) да. я на формекс-то не знаю как убедил прогеров, я с ними в симбиозе, пишу им доработочки, с их условиями. а они мне - денюфку...
|
|||
36
Sadovnikov
03.02.10
✎
15:54
|
(35) Пошарь на инфостарте - там был пример, как в обработку ВК засовывать. И офцы целы и 1С++ у тебя есть :)
|
|||
37
DJ Anthon
03.02.10
✎
15:58
|
(29) - этот вариант (22) по ходу проканает. все равно использую одну внешнюю обработочку, вот в ней попробую сделать обращение к нужным функциям. если проканает, тогда
попытка КонтФормы = открыть форму внешнего отчета Сервис.ВыполнитьПроцедуру(КонтФормы, "ВотТакаяДолбанутаяФункция") исключение сообщить("что ж, придется вызывать местные..."); конецпопытки обидно, что тогда она по идее отваливается )) и тогда подключить доп. глобальный модуль. просто и гениально (((( какой-то метод разрушений (36) мне себя не обмануть ) это принципиально надо решить, засунуть я что угодно кому угодно могу. как-то раз в ert-шник запихивал сертификаты подлинности, вот смеху-то было.... Ладно, спасибо за советы |
|||
38
DJ Anthon
03.02.10
✎
16:04
|
http://www.infostart.ru/public/16943/ - Епрст! спасибо! гениально!
|
|||
39
ProxyInspector
03.02.10
✎
16:14
|
(16) Гениальный способ и работает.
Процедура ПопробоватьУстановитьПеременную() глКаталогПечФорм = "Ура!" КонецПроцедуры Процедура Проверка() глКаталогПечФорм=глКаталогПечФорм; Если ТипЗначения(глКаталогПечФорм) = 0 Тогда ПопробоватьУстановитьПеременную(); Если глКаталогПечФорм <> "Ура!" Тогда Сообщить("Переменной нету") Иначе глКаталогПечФорм = ПолучитьПустоеЗначение() //Вернем как было КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
40
DJ Anthon
03.02.10
✎
16:44
|
(39) может быть. мне хватило
Сервис = 0; Если 1 = 0 Тогда глСервис = 0 КонецЕсли; Если ТипЗначения(глСервис) = 100 Тогда Сервис = глСервис; КонецЕсли; Если Сервис = 0 Тогда .... мне типа не жалко и свою переменную использовать. просто метод и дальше работает )) и с контекстами, и с массивами, супер |
|||
41
DJ Anthon
03.02.10
✎
16:45
|
* массивами = таблицами и списками
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |