|
|
|
v7: Проверить существование переменной по имени, если есть - получить значение | ☑ | ||
|---|---|---|---|---|
|
0
Злопчинский
16.06.24
✎
16:33
|
Например, запускаем универсальную обработку в неизвестной конфигурации.
. В коде обработки хочется узнать - 1. а есть ли в этой конфигурации глобальная переменная с именем "глПользователь" ..? 2. Если есть - вернуть значение переменной . хочется как-нить максимально штатно, при этом чтобы в окно сообщений никаких исключений не выдавалось, если штатно не получается - можно заюзать 1С++ и Formex |
|||
|
1
maxab72
16.06.24
✎
16:39
|
Через Попытка Исключение годится?
и еще Шаблон() |
|||
|
2
Aleksey
16.06.24
✎
16:41
|
глКаталогПечФорм=глКаталогПечФорм;
Если ТипЗначения(глКаталогПечФорм) = 0 Тогда Сообщить("Переменной нету") КонецЕсли; |
|||
|
3
Aleksey
16.06.24
✎
16:42
|
первая строка нужна чтобы небыло ошибки при компелляции
|
|||
|
4
Злопчинский
16.06.24
✎
16:48
|
(2) так и я умею, я так и сделал
глПользователь = глПользователь; Пользователь = ?(ТипЗначенияСтр(глПользователь)="","<значение недоступно>",глПользователь); в принципе покатит, вариант что переменная описана, но не инициализирована - маловероятен |
|||
|
5
Злопчинский
16.06.24
✎
16:49
|
(1) не получится, выругается на синтаксис
|
|||
|
6
Aleksey
16.06.24
✎
17:09
|
||||
|
7
Злопчинский
16.06.24
✎
20:38
|
(6) А универсальный алгоритм, для произвольного количества переменных по их именам...
|
|||
|
8
Aleksey
16.06.24
✎
22:54
|
А какой смысл? Имя переменной тебе и так известно. Ты же имя не собираешь, типа имяпеременной = "перем" + й;
Поэтому можно и без вашего универсализма |
|||
|
9
Злопчинский
16.06.24
✎
23:39
|
ну вот хочу на "вход" дать имя переменной, а на выходе результат.
Имя переменой м.б. в принципе любое: "глПользователь", "глКаталог", итд.. тогда я могу код применять без его дополнительного дописывания |
|||
|
10
MarySue
17.06.24
✎
04:00
|
(7) ну видимо нужно весь тот код завернуть в Шаблон, и в параметр того шаблона подавать нужное имя
|
|||
|
11
Злопчинский
17.06.24
✎
04:32
|
(10) Попробуй... Шаблон будет в итоге исполняться, встретит неинициализированную переменную и выругается...
|
|||
|
12
MarySue
17.06.24
✎
05:00
|
(11) да, точно. Не сработало. Должно быть в явном виде объявление переменной.
|
|||
|
13
victuan1
17.06.24
✎
08:00
|
(7) Такой универсальный алгоритм тоже есть, но он требует использования объекта ВыполняемыйМодуль 1с++.
ИмяПроизвольнойПеременной = ПарамВход.Получить("ИмяПеременной");
Модуль = СоздатьОбъект("ВыполняемыйМодуль");
Модуль.УстановитьМодуль("т = "+ИмяПроизвольнойПеременной);
Попытка
//Модуль.РазрешитьИсключения();
Модуль.КомпилироватьМодуль();
ПеременнаяОбъявлена = 1;
Исключение
ПеременнаяОбъявлена = 0;
КонецПопытки; |
|||
|
14
Злопчинский
17.06.24
✎
12:00
|
Точно.
Думал в эту сторону Но не дотумкал что можно успех компиляции отлавлиаать |
|||
|
15
Chai Nic
17.06.24
✎
13:04
|
Да проверить/получить то легко. Через formex тот же.
Сложнее обратная задача. Задать/установить переменную контекста, если она не была до этого объявлена в коде.. |
|||
|
16
Злопчинский
17.06.24
✎
13:30
|
(15) в 1с++ там вроде для выполняемого модуля есть возможность назначить контекст
|
|||
|
17
Chai Nic
17.06.24
✎
13:34
|
(16) Как это поможет объявить новую переменную в заданном контексте?
|
|||
|
18
victuan1
17.06.24
✎
14:12
|
(15) Это тоже легко.
|
|||
|
19
victuan1
17.06.24
✎
14:17
|
(15) Например:
Функция ЗагрузитьДопГлМодуль(Сервис)
Если 1=0 Тогда
глМ_аисВерсияРелизаДляПроверки = ""
КонецЕсли;
Если ПустоеЗначение(глМ_аисВерсияРелизаДляПроверки)=0 Тогда
глМ_Загружен = 1;
Возврат 1
Иначе
Если Сервис.ДобавитьГлобальныйМодуль(ТекстМодуля) = 0 Тогда
Сообщить("Попытка загрузки доп. гл. модуля не удалась!","!!",1);
Возврат -1; //не удалось создать доп. гл. модуль
КонецЕсли;
//Сообщить("доп гл. модуль смогли загрузить");
Возврат 1;
КонецЕсли;
КонецФункции // ЗагрузитьДопГлМодуль |
|||
|
20
Chai Nic
17.06.24
✎
14:17
|
(18) Можно пример кода?
|
|||
|
21
Chai Nic
17.06.24
✎
14:18
|
(19) Я не понял смысла этого фрагмента. Мне надо:
1. Есть некий контекст, полученный тем или иным способом 2. В этом контексте я хочу создать новую переменную (её изначально нет) и присвоить ей значение, чтобы оно стало доступным далее Как это сделать? |
|||
|
22
victuan1
17.06.24
✎
14:27
|
(21) "Контекст" это что такое? Какой объект данных?
|
|||
|
23
victuan1
17.06.24
✎
15:13
|
(21) Ну пусть контекст это текущий Контекст ))
Тогда в продолжение примера в (13) через вспомогательную переменную ПеременнаяОбъявлена мы знаем есть ли переменная в контексте, если ее нет, то объявим ее и присвоим ей некое значение: Функция глПрисвоить(Кому,Что) Кому = Что КонецФункции
...
Если ПеременнаяОбъявлена = 0 Тогда
НовоеЗначение = "Привет, о, мир!";
Шаблон("[глПрисвоить(ИмяПроизвольнойПеременной, НовоеЗначение)]");
КонецЕсли; |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |