Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Динамические атрибуты. Кто нибудь юзал? (число прочтений - 10343 )
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Динамические атрибуты. Кто нибудь юзал?
24. Мая 2007 :: 06:23
Печать  
Нашел в документации упоминание о динамических свойствах. А кто-нибудь на практике использовал их? Очень бы хотелось посмотреть на живой пример. В репозитарии классов я ничего не нашел, может плохо искал
  

Константин
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #1 - 25. Мая 2007 :: 07:39
Печать  
Тогда может разработчики мне объяснят, чем отличаются просто атрибуты от ДИНАМИЧЕСКИХ? В моем понятии (может это и не верно) динамические - значит создаваемые Run-Time. Тогда почему при добавлении в модуль класса методов _ПриЧтенииСвойства и _ПриЗаписиСвойства они начинают перехватывать обращение к свойсвам, объявленным в модуле? Пример простейший:
Код
Выбрать все
Перем Атр Экспорт;
//_____________________________________________________________________________
Процедура Конструктор()
	Атр = 7;
КонецПроцедуры //Конструктор
//_____________________________________________________________________________
Функция _ПриЧтенииСвойства(стрИмяАтрибута)
	сообщить(стрИмяАтрибута);
КонецФункции //_ПриЧтенииСвойства
//_____________________________________________________________________________
Процедура _ПриЗаписиСвойства(стрИмяАтрибута, НовоеЗначениеАтриб)
	сообщить(стрИмяАтрибута);
	сообщить(НовоеЗначениеАтриб);
КонецПроцедуры //_ПриЗаписиСвойства 

При попытке прочитать/записать извне свойство "Атр" выдается сообщение об имени атрибута, к которому я обращаюсь, а сам атрибут остается неизменным и класс ничего не возвращает. Поэтому приходится писать Если стрИмяАтрибута="Атр" и т.д.. Тогда все работает.
Подскажите пожалуйста.
  

Константин
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #2 - 25. Мая 2007 :: 07:51
Печать  
Цитата:
Поэтому приходится писать Если стрИмяАтрибута="Атр" и т.д.

ИМХО, для такого использования динамические свойства и задумывались Улыбка
Можно использовать произвольное количество свойств, неизвестное в момент написания кода.
Еще можно использовать для выполнения некоторых дополнительных действий в момент получения/установки свойства.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
desty
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Апреля 2007
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #3 - 25. Мая 2007 :: 07:55
Печать  
Я так понимаю, НЕ проверял, просто так понял документацию
Перем Атр Экспорт; - это Атрибут класса НЕДинамический, а определенный !!! "атрибута класса "

А вот Динамическое.... хмм.. это к примеру...

Ты в коде обработке пишешь

Код
Выбрать все
_Класс = создатьОбъект("КлассСДинамическимиПараметрами");
Сообщить(_Класс.ДинамическийАтрибут);
 



А в классе у тебя НЕТ атрибута с таким наименованием,
НО тебе в процедуру _ПриЧтенииСвойства (стрИмяАтрибута) пришел сам факт обращения к нему

ну а дальше в коде отрабатывай
Код
Выбрать все
Процедура _ПриЧтенииСвойства (стрИмяАтрибута)
     Если стрИмяАтрибута ="ДинамическийАтрибут" Тогда
                 Возврат "Опа-на Динамический";
     КонецЕсли;

КонецПроцедуры

 



  
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #4 - 25. Мая 2007 :: 09:07
Печать  
steban писал(а) 25. Мая 2007 :: 07:51:
Цитата:
Поэтому приходится писать Если стрИмяАтрибута="Атр" и т.д.

ИМХО, для такого использования динамические свойства и задумывались Улыбка
Можно использовать произвольное количество свойств, неизвестное в момент написания кода.
Еще можно использовать для выполнения некоторых дополнительных действий в момент получения/установки свойства.
Да я понял для чего все это создано. Замечательная задумка, и рабоет ведь. Просто эти методы работают как с динамическими, так и со всеми атрибутами, которые под руку подвернутся. Неудобства возникают: для элементарных атрибутов типа А,Б,В и т.д. приходится прописывать условия. Вот флаг бы какой-нибудь типа "Если СписокАтрибутов.НайтиЗначение(ИмяАтр) = 1 Тогда ФСО = 0. Это был бы класс. А то ну прямо все сгребает
  

Константин
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #5 - 25. Мая 2007 :: 09:47
Печать  
Цитата:
steban писал(а) 25. Мая 2007 :: 07:51:
Цитата:
Поэтому приходится писать Если стрИмяАтрибута="Атр" и т.д.

ИМХО, для такого использования динамические свойства и задумывались Улыбка
Можно использовать произвольное количество свойств, неизвестное в момент написания кода.
Еще можно использовать для выполнения некоторых дополнительных действий в момент получения/установки свойства.
Да я понял для чего все это создано. Замечательная задумка, и рабоет ведь. Просто эти методы работают как с динамическими, так и со всеми атрибутами, которые под руку подвернутся. Неудобства возникают: для элементарных атрибутов типа А,Б,В и т.д. приходится прописывать условия. Вот флаг бы какой-нибудь типа "Если СписокАтрибутов.НайтиЗначение(ИмяАтр) = 1 Тогда ФСО = 0. Это был бы класс. А то ну прямо все сгребает


Попробуй применить класс "Информатор" к своему классу)
  
Наверх
ICQ  
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #6 - 25. Мая 2007 :: 09:51
Печать  
Плюс к информатору:
"ПолучитьПеременнуюКонтекста"+"УстановитьПеременнуюКонтекста" из FormEx
  
Наверх
ICQ  
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #7 - 25. Мая 2007 :: 10:15
Печать  
Chieftain писал(а) 25. Мая 2007 :: 09:51:
Плюс к информатору:
"ПолучитьПеременнуюКонтекста"+"УстановитьПеременнуюКонтекста" из FormEx

Да Вы меня не поняли! Список переменных получить совсем не проблема. Проблема в том, чтобы заставлять методы _ПриЗаписиСвойства и _ПриЧтенииСвойства отключаться, когда они не надо!
  

Константин
Наверх
 
IP записан
 
desty
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Апреля 2007
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #8 - 25. Мая 2007 :: 10:50
Печать  
Цитата:
Да Вы меня не поняли! Список переменных получить совсем не проблема. Проблема в том, чтобы заставлять методы _ПриЗаписиСвойства и _ПриЧтенииСвойства отключаться, когда они не надо!


Код
Выбрать все
Процедура _ПриЧтенииСвойства (стрИмяАтрибута)

_Информатор = создатьОбъект("Информатор");
тз = _Информатор.ПолучитьТаблицуСвойств(Сам()); //Динамический свойств здесь не будет
Если тз.НайтиЗначение(ИмяСвойства,1)=0 Тогда //Если свойство не найдено значит оно динамическое
          //Обрабатываем чтение динамического свойства
          //... модуль обработки чтения

Иначе
       //Попали на установку свойства класса, которое определено в модуле класса
КонецЕсли

КонецПроцедуры
 



Может так получиться... в качестве идеи
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #9 - 25. Мая 2007 :: 11:27
Печать  
Во, фигню написал)) При использовании "_ПриЧтенииСвойства" или "_ПриЗаписиСвойства" информатор не дает информации по переменным класса...
Можно такой вариант, опять же в качестве идеи

Код
Выбрать все
Функция Установить(Переменная,Значение)
	Переменная=Значение;
КонецФункции	// Установить
Функция _ПриЧтенииСвойства(Имя)
	Если СписокАтрибутов.НайтиЗначение(Имя)=0 Тогда
		Значение		= "";
		Шаблон("[Установить(Значение,"+Имя+")]");
		Возврат Значение;
	КонецЕсли;
	Возврат СписокЗначенийАтрибутов.Получить(Имя);
КонецФункции	// _ПриЧтенииСвойства
Процедура _ПриЗаписиСвойства(Имя,НовЗнач)
	Если СписокАтрибутов.НайтиЗначение(Имя)=0 Тогда
		Шаблон("[Установить("+Имя+",НовЗнач)]");Возврат;
	КонецЕсли;
	СписокЗначенийАтрибутов.Установить(Имя,НовЗнач);
КонецПроцедуры	// _ПриЗаписиСвойства 

  
Наверх
ICQ  
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #10 - 25. Мая 2007 :: 11:46
Печать  
Цитата:
//Попали на установку свойства класса, которое определено в модуле класса
ВО! То-то и оно, что если переменная даже и определена в модуле класса, то она не будет обрабатываться без указания в тех-же _ПриЧтении/Записи. Посмотрите на мой первый код. Там определена Перем Атр, так вот если в этих _При не прописать, что Атр = Значение и Возврат Атр, то ее как-будто и нет! Разговор именно об отом
  

Константин
Наверх
 
IP записан
 
desty
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Апреля 2007
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #11 - 25. Мая 2007 :: 11:48
Печать  
Цитата:
Цитата:
//Попали на установку свойства класса, которое определено в модуле класса
ВО! То-то и оно, что если переменная даже и определена в модуле класса, то она не будет обрабатываться без указания в тех-же _ПриЧтении/Записи


Вопрос в том считать ли это БАГом  Подмигивание
  
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #12 - 25. Мая 2007 :: 11:49
Печать  
[quote//Попали на установку свойства класса, которое определено в модуле класса] [/quote]Да не баг это вовсе, просто недоделка.
  

Константин
Наверх
 
IP записан
 
desty
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Апреля 2007
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #13 - 25. Мая 2007 :: 12:17
Печать  
Цитата:
Да не баг это вовсе, просто недоделка.


Да я не против..., только я вот сейчас попробовал то о чем ты говоришь... и действительно увидел вхождение в процедуры вроде как предназначеные для Динамических атрибутов

Кстати обнаружено Одновременное использование Процедур
1. ПриЗаписи_<ИмяАтрибута>,ПриПолучении__<ИмяАтрибута>
и
2. _ПриЧтенииСвойства(стрИмяАтрибута),  _ПриЗаписиСвойства(стрИмяАтрибута, НовоеЗначениеАтриб)

Класс отработает только последние, а первые у меня не захотел (пока я не закоментировал вторые )
  

TesDynamicProp.ert ( 26 KB | Загрузки )
Наверх
 
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Динамические атрибуты. Кто нибудь юзал?
Ответ #14 - 25. Мая 2007 :: 12:31
Печать  
Цитата:
Класс отработает только последние, а первые у меня не захотел (пока я не закоментировал вторые )
Я об этом и талдычу:" После добавления в модуль методов _ПриЗаписиСвойства и _ПриЧтенииСвойства ВСЕ переменные контекста перестают реагировать на что-либо, кроме прописанного в этих методах".
  

Константин
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать