![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#1
|
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 14349 Регистрация: 12.10.2007 Из: Twilight Zone Пользователь №: 1 ![]() |
На днях решал тут одну задачу, пришлось столкнуться вот с чем. Допустим на форме у нас есть несколько десятков реквизитов, типа Строка, с именами, к примеру Строка1, Строка2, Строка3 и т.п. Хотелось бы получить доступ к значениям этих реквизитов по имени. Эксперименты с Форма.ПолучитьАтрибут("Строка1") собственно ничего не дали. Полез копаться дальше и накопал вот что. Оказывается в 1С есть крайне полезная функция Шаблон, которая возвращает строку, полученную по шаблону заменой встроенных выражений на значения и форматированием. Так вот, получить значение реквизита формы по его имени можно следующим образом:
Значение = Шаблон("["+ИмяРеквизитаФормы+"]"); Однако в этом случае возвращаемое значение всегда является строкой, т.е. если реквизит формы имеет тип справочника или любой другой агрегатный тип, то мы получим лишь его строковое представление. Для того чтобы обойти это ограничение, применим следующую конструкцию: Значение=ЗначениеИзСтрокиВнутр(Шаблон("[ЗначениеВСтрокуВнутр("+ИмяРеквизитаФормы+")]")); // - это чтение реквизита формы через шаблон Ну и напоследок самое вкусное. Две функции, которые можно прописать и в глобальном модуле, которые позволяют читать и записывать реквизит формы по его имени: //_______________________________________________________ Функция УстАтрибут(Атр,Зн) Атр = Зн; Возврат ""; КонецФункции// УстАтрибут(Атр,Зн) Процедура УстановитьАтрибут(Атр,Зн); Шаблон("[УстАтрибут("+ Атр + ",Зн)]"); КонецПроцедуры // УстановитьАтрибут(Атр,Зн); //_________________________________________________________ Функция ПолАтрибут(Атр,Зн) Зн = Атр; Возврат ""; КонецФункции// УстАтрибут(Атр,Зн) Процедура ПолучитьАтрибут(Атр,Зн); Шаблон("[ПолАтрибут("+ Атр + ",Зн)]"); КонецПроцедуры // УстановитьАтрибут(Атр,Зн); Использовать, естественно, через ПолучитьАтрибут(...) и УстановитьАтрибут(...) ... вот такой вот нестандартный подход. -------------------- |
|
|
![]()
Сообщение
#2
|
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 14349 Регистрация: 12.10.2007 Из: Twilight Zone Пользователь №: 1 ![]() |
Ну и вот интересная тема Обращение к метаданным во внешних обработках, собственно две последние функции в предыдущем посте взять из поста WaRDeR'а.
-------------------- |
|
|
![]()
Сообщение
#3
|
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 14349 Регистрация: 12.10.2007 Из: Twilight Zone Пользователь №: 1 ![]() |
Ну и собственно с использованием той же функции. Ответим на вопрос, как получить значение перечисления по его идентификатору?
//******************************************* Функция ПолАтрибут(Атр,Зн) Зн = Атр; Возврат ""; КонецФункции// УстАтрибут(Атр,Зн) Процедура ПолучитьАтрибут(Атр,Зн); Шаблон("[ПолАтрибут("+ Атр + ",Зн)]"); КонецПроцедуры //******************************************* Процедура Сформировать() ОчиститьОкноСообщений(); Для Номер = 1 По Метаданные.Перечисление("СтавкиНДС").Значение() Цикл Значение = ""; ПолучитьАтрибут("Перечисление.СтавкиНДС."+Метаданные.Перечисление("СтавкиНДС").Значение(Номер).Идентификатор,Значение); Сообщить(""+Значение+" ("+ТипЗначенияСтр(Значение)+")"); КонецЦикла; КонецПроцедуры Соответственно получаем результат: Код Без НДС (Перечисление) 10% (Перечисление) 20% (Перечисление) 9.09% (Перечисление) 16.67% (Перечисление) 20% / 120% (Перечисление) 10% / 110% (Перечисление) 18% (Перечисление) 18% / 118% (Перечисление) 15.25% (Перечисление) Стандартными методами то же самое можно получить следующим образом: Код Для Номер=1 По Перечисление.СтавкиНДС.КоличествоЗначений() Цикл
Значение = Перечисление.СтавкиНДС.ЗначениеПоНомеру(Номер); Сообщить(""+Значение+" ("+ТипЗначенияСтр(Значение)+")"); КонецЦикла; -------------------- |
|
|
![]() ![]() |
Текстовая версия | Сейчас: 15.3.2025, 3:30 | |
|