Опрос
Опрос Тема Опроса: Динам.свойства - нужна ли совместимость со старым кодом ?
bars   pie

Нет - пусть все будет просто и удобно    
  10 (47.6%)
Да - оставляем старый код и проблемы при его использ.    
  2 (9.5%)
Мне все равно, я не использую динам.свойства    
  9 (42.9%)




Всего голосов: 21
« Создано: artbear : 18. Марта 2008 :: 07:24 »
Переключение на Главную Страницу Страницы: 1 2 3 [4] 5  ОтправитьПечать
Очень популярная тема (более 25 ответов) Зачем нужны динамические свойства? (число прочтений - 21872 )
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #45 - 20. Мая 2008 :: 05:13
Печать  
Chieftain писал(а) 19. Мая 2008 :: 22:14:
avgreen писал(а) 19. Мая 2008 :: 19:25:
kms писал(а) 19. Мая 2008 :: 14:48:
avgreen писал(а) 19. Мая 2008 :: 13:14:
Но если в этом классе это хотя-бы теоретическти возможно, то в другом , который "Константы" и к которому я обращаюсь Константы.ИмяКонстанты и где "ИмяКонстанты" может быть абсолютно произвольное, отследить его никак не получится.    

Я бы метод использовал вместо свойства.


Ну у меня уже куча кода написана - переписывать облом

А если использовать метод, то тогда точно прападает весь смысл в динамических атрибутах
Т.к. в этом случае они практически статичны. Только определются не в момент компиляции/интерпретации а в момент исполнения. Но определять их таки нужно.

Это конечно глубокое IMHO Улыбка


тогда глубокое мое ИМХО... Если ты по коду обращаешься к "Константа.МоеНазваниеКонстанты" напрямую в коде, значит ты знаешь, что такое название "константы" должно существовать. В чем проблема прописать/определить его в классе?


Ну может существовать а может и не существовать Улыбка Но даже не это главное. Главное то, что этих констант может быть несколько сотен ..... а может и тысяч. Для каждой прописывать ДобавитьСовойство - задолбешся
Поясню что в данном контексте означает константа. Это не макроподстановка и не константа времени компиляции/интерпретации как в С++ к примеру. Это моя попытка заменить с помощью класса объект метаданных "Константа". Полностью переопределить как для документа или справочника у меня к сожалению не получилось, но примерно похоже..... в ГМ определена глобальная переменаая "Константы"
Константы = СоздатьОбъект("Константы");
А дальше в любом модуле пишу Константы.ЛюбоеИмяКонстанты. Т.е. отличается только последняя буква "а" и "ы" - а так все похоже на стандартное обращенеи к объекту метаданных  Улыбка  Теперь прийедтся все переписывать через Константы.ПолучитьАтрибут("ЛюбоеИмяКонстанты")

Цитата:
ЗЫ... Если мне память не изменяет в 1С-ке нет макроподстановок... Вот в фоксе-это да... Так что обратиться к "Константа.ХренЗнаетЧегоЯХочуДаЕщеИСПеременнымНазванием" вряд ли получится. Методом - это да. А остальное все равно статично


Жаль!  Плачущий Просто ДинамическиеАтрибуты сами на это напрашивались. А в нынешней реализации они врядли найдут применение. Если все прийдется через методы делать....

  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #46 - 20. Мая 2008 :: 05:19
Печать  
Nick писал(а) 20. Мая 2008 :: 00:44:
По поводу констант, что мешает добавлять свойства в конструкторе?

+1
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #47 - 20. Мая 2008 :: 05:30
Печать  
avgreen писал(а) 20. Мая 2008 :: 05:13:
Ну может существовать а может и не существовать Улыбка Но даже не это главное. Главное то, что этих констант может быть несколько сотен ..... а может и тысяч. Для каждой прописывать ДобавитьСовойство - задолбешся
Поясню что в данном контексте означает константа. Это не макроподстановка и не константа времени компиляции/интерпретации как в С++ к примеру. Это моя попытка заменить с помощью класса объект метаданных "Константа". Полностью переопределить как для документа или справочника у меня к сожалению не получилось, но примерно похоже..... в ГМ определена глобальная переменаая "Константы"
Константы = СоздатьОбъект("Константы");
А дальше в любом модуле пишу Константы.ЛюбоеИмяКонстанты. Т.е. отличается только последняя буква "а" и "ы" - а так все похоже на стандартное обращенеи к объекту метаданных  Улыбка  Теперь прийедтся все переписывать через Константы.ПолучитьАтрибут("ЛюбоеИмяКонстанты")

Жаль!  Плачущий Просто ДинамическиеАтрибуты сами на это напрашивались. А в нынешней реализации они врядли найдут применение. Если все прийдется через методы делать....


Еще раз - само название "Константы" подразумевает, что наименования и смысл этих констант известны на момент начала работы пользователя, т.е. их создание можно юзать в конструкторе.
Вопрос: ты ведь наверняка каким-то образом получаешь их реестр у себя в виде списка/таблицы/справочника или еще как-то, так что в цикле выполнить метод по добавлению наименований разве сложно ?
Дело твое, но переписывать клиентский код, когда можно обойтись правкой класса-сервера, это полный изврат Печаль
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #48 - 20. Мая 2008 :: 05:38
Печать  
avgreen писал(а) 19. Мая 2008 :: 13:01:
А его я получаю из Справочника.Константы в котором я могу найти константу а могу и не найти - и верну ПолучитьПустоеЗначение()

А Справочник.Константы  подчинен Справочнику.Пользователи. Т.е. у каждого есть свои константы, а если нету своей то ищется глобальная, и уже если ее нету - тогда ПолучитьПустоеЗначение()

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

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #49 - 20. Мая 2008 :: 08:01
Печать  
artbear писал(а) 20. Мая 2008 :: 05:38:
ИМХО тебе нужно просто преобразовать код постоянного поиска соответствующей константы в код по установке всех необходимых констант для пользователя и перенести этот код в конструктор Улыбка


Ну можно и так конечно.... просто бюсь памяти не будет это много занимать?

Но наверное таки  прийдется переделать, если я хочу вообще на тройку перейти Улыбка
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #50 - 20. Мая 2008 :: 08:08
Печать  
Цитата:
Ну можно и так конечно.... просто бюсь памяти не будет это много занимать?


Что в твоем понятии много памяти?
  
Наверх
ICQ  
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #51 - 20. Мая 2008 :: 11:54
Печать  
Nick писал(а) 20. Мая 2008 :: 08:08:
Цитата:
Ну можно и так конечно.... просто бюсь памяти не будет это много занимать?


Что в твоем понятии много памяти?


Ну ладно, уговорили, переделываю уже Улыбка
Все равно приходится переписывать не только это...... Там еще некоторое количество несовместимого кода оказалось - сейчас выгребаю Улыбка
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #52 - 20. Мая 2008 :: 11:55
Печать  
avgreen писал(а) 20. Мая 2008 :: 11:54:
Все равно приходится переписывать не только это...... Там еще некоторое количество несовместимого кода оказалось - сейчас выгребаю Улыбка

Описывай все расхождения, это очень интересная и полезная тема.
Жду
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #53 - 20. Мая 2008 :: 14:24
Печать  
artbear писал(а) 20. Мая 2008 :: 11:55:
avgreen писал(а) 20. Мая 2008 :: 11:54:
Все равно приходится переписывать не только это...... Там еще некоторое количество несовместимого кода оказалось - сейчас выгребаю Улыбка

Описывай все расхождения, это очень интересная и полезная тема.
Жду


1. Ну то что касается ДинамическихСвойств и особенностей работы с ними описнные в п.1 бага 3606 то это и так понятно что их устранили (эти самые особенности) а я, подстаиваясь под этот баг, через _ПриЧтенииСвойства и _ПриЗаписиСвойства обращался к статическим свойствам. Теперь исправляю эти куски кода .... что делаю Экспорт а что ДобавитьДинамическийАтрибут......

2. Перехватчик событий до сих пор работал с Событие_ПриОткрытии(Знач ФлагЧтенияНастроек) Экспорт как для Отчетов так и для Документов, Справочников, Журналов - хотя и не должен был-бы судя по обсуждениям в форуме. То-же касается и события Функция Событие_ВводНового(Знач ПризнКопирования, Знач ОбъектКопирования) Экспорт которое вороди как не должно было работать с отчетами - но работало. И я беззастенчиво пользовался этой глюкоподобной фичей Улыбка
В то-же время событие Функция Событие_ПриЗаписи(Знач СписокПериодическихРекв) Экспорт работало только со справочниками.
Ну не хотелось мне код для разных объектов растаскивать по разным классам. Было там кой-чего общего. Сразу предваряя предложения "нужно былосоздать общий класс родитель" - я так и сделал. Но мне не нравилась куча реквизитов Public, а Private не было..... и нету...... Теперь пришлось таки насоздавать классов, т.к. фичу убрали Улыбка Как говорится "сам виноват" Нефиг пользоваться недокументированными возможностями!  Смех
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #54 - 20. Мая 2008 :: 21:40
Печать  
avgreen писал(а) 20. Мая 2008 :: 14:24:
2. Перехватчик событий до сих пор работал с Событие_ПриОткрытии(Знач ФлагЧтенияНастроек) Экспорт как для Отчетов так и для Документов, Справочников, Журналов - хотя и не должен был-бы судя по обсуждениям в форуме.

С чего ты взял? Перехватчик перехватывает все штатные события формы. Эта вроде как штатная.
avgreen писал(а) 20. Мая 2008 :: 14:24:
То-же касается и события Функция Событие_ВводНового(Знач ПризнКопирования, Знач ОбъектКопирования) Экспорт которое вороди как не должно было работать с отчетами - но работало. И я беззастенчиво пользовался этой глюкоподобной фичей Улыбка

То же самое. Штатное событие. Так и должно быть.
avgreen писал(а) 20. Мая 2008 :: 14:24:
В то-же время событие Функция Событие_ПриЗаписи(Знач СписокПериодическихРекв) Экспорт работало только со справочниками.

Убрав отсутствующий у документов параметр в событии, ты с удивлением обнаружишь что работает и с документами.  Подмигивание
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #55 - 21. Мая 2008 :: 03:10
Печать  
Arta писал(а) 20. Мая 2008 :: 21:40:
avgreen писал(а) 20. Мая 2008 :: 14:24:
2. Перехватчик событий до сих пор работал с Событие_ПриОткрытии(Знач ФлагЧтенияНастроек) Экспорт как для Отчетов так и для Документов, Справочников, Журналов - хотя и не должен был-бы судя по обсуждениям в форуме.

С чего ты взял? Перехватчик перехватывает все штатные события формы. Эта вроде как штатная.
avgreen писал(а) 20. Мая 2008 :: 14:24:
То-же касается и события Функция Событие_ВводНового(Знач ПризнКопирования, Знач ОбъектКопирования) Экспорт которое вороди как не должно было работать с отчетами - но работало. И я беззастенчиво пользовался этой глюкоподобной фичей Улыбка

То же самое. Штатное событие. Так и должно быть.
avgreen писал(а) 20. Мая 2008 :: 14:24:
В то-же время событие Функция Событие_ПриЗаписи(Знач СписокПериодическихРекв) Экспорт работало только со справочниками.

Убрав отсутствующий у документов параметр в событии, ты с удивлением обнаружишь что работает и с документами.  Подмигивание

+1
Особенно про отсутствующий параметр !
Обрати внимание: Перехватчик работает со штатными событиями, практически ничего к ним не добавляя, кроме событий ГМ. Т.е. при перехвате штатного события нужно читать Синтакс-помощник и помнить, что у 1С события с одним названием для разных форм могут иметь разные параметры Печаль
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #56 - 21. Мая 2008 :: 04:56
Печать  
Arta писал(а) 20. Мая 2008 :: 21:40:
avgreen писал(а) 20. Мая 2008 :: 14:24:
2. Перехватчик событий до сих пор работал с Событие_ПриОткрытии(Знач ФлагЧтенияНастроек) Экспорт как для Отчетов так и для Документов, Справочников, Журналов - хотя и не должен был-бы судя по обсуждениям в форуме.

С чего ты взял? Перехватчик перехватывает все штатные события формы. Эта вроде как штатная.

Да никто-ж и не спорит - штатная! А не должно было работать по количеству параметров Цитата:
avgreen писал(а) 20. Мая 2008 :: 14:24:
То-же касается и события Функция Событие_ВводНового(Знач ПризнКопирования, Знач ОбъектКопирования) Экспорт которое вороди как не должно было работать с отчетами - но работало. И я беззастенчиво пользовался этой глюкоподобной фичей Улыбка

То же самое. Штатное событие. Так и должно быть.
avgreen писал(а) 20. Мая 2008 :: 14:24:
В то-же время событие Функция Событие_ПриЗаписи(Знач СписокПериодическихРекв) Экспорт работало только со справочниками.

Убрав отсутствующий у документов параметр в событии, ты с удивлением обнаружишь что работает и с документами.  Подмигивание

Нет! Я удивлен что раньше работало и с этим параметром а не тем что сейчас перестало работать. И тем более не тем что при удалении параметра снова начинает работать.

  
Наверх
ICQ  
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #57 - 21. Мая 2008 :: 05:08
Печать  
artbear писал(а) 21. Мая 2008 :: 03:10:
+1
Особенно про отсутствующий параметр !
Обрати внимание: Перехватчик работает со штатными событиями, практически ничего к ним не добавляя, кроме событий ГМ. Т.е. при перехвате штатного события нужно читать Синтакс-помощник и помнить, что у 1С события с одним названием для разных форм могут иметь разные параметры Печаль


Ну это-то я заметил......позже.... когда достаточно разобрался с перехватчиком Улыбка
А по началу то что заработало - как говорится и слава Богу. А то что не работало - все вычислял методом научного тыка. 1С ведь ничего не говорит по поводу лишних или недостающих параметров. Она тупо падает не успев ничего сказать. А то что при открытии отчета вызывается метод "ВводНового" я даже подумать не мог!  Ужас
Это сейчас я уже знаю куда рыть в этом случае. А так, незная, поствил новую версию 1с++ - 1С падает. Все, сразу-же скороспелый вывод - "Новая версия глюкавая!"  Смех
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #58 - 21. Мая 2008 :: 06:28
Печать  
avgreen писал(а) 21. Мая 2008 :: 05:08:
Все, сразу-же скороспелый вывод - "Новая версия глюкавая!"  Смех

Либо наоборот пофиксены баги, и убрано поведение, которое могло привести к вылетам.
Ищи ветку про параметры, данная фича обсуждалась не один день.
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Зачем нужны динамические свойства?
Ответ #59 - 12. Августа 2008 :: 15:26
Печать  
fez писал(а) 28. Февраля 2008 :: 13:26:
Собсна субж.
Причем я не прикалываюсь, мне реально интересно.


Для себя придумал два случая.

1. Реализация класса типа ТаблицыЗначений. Когда класс не знает о том, какие у него будут колонки, и на 100% отдает эту задачу клиенту. Кстати, в этом случае очевидна необходимость возможности удаления динамических атрибутов.

2. Наследование от класса с публичным атрибутом. Рефакторинг "Замещение наследования агрегированием". Для того, чтобы не переписывать клиентский код, который работает с публичным атрибутом базового класса - можно добавить наследнику динамический атрибут. Особо актуально в ситуации, когда клиентский код недоступен (например если эти классы входят в состав опубликованной библиотеки).
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 3 [4] 5 
ОтправитьПечать