|
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 Тогда НовоеЗначение = "Привет, о, мир!"; Шаблон("[глПрисвоить(ИмяПроизвольнойПеременной, НовоеЗначение)]"); КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |