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


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Подмена объектов метаданных (Документ,Справочник)
03. Апреля 2007 :: 07:50
Печать  
Есть мысль сделать динамическую подмену классов "Документ","Документ.ХХХ","Справочник","Справочник.ХХХ".
Цель - контроль программного изменения объектов.
Перед загрузкой 1С++ формируется файл "defcls.prm" след.содержания:
Код
Выбрать все
Класс Документ=Документ.txt:Document {};
Класс Документ.ПоступлениеТоваров=Документ.txt:Document.ПоступлениеТоваров {};
... и т.д. для всех объектов метаданных
 


Создание и подмена происходит на отлично.
Есть один момент-"ТипЗначенияСтр()" возвращает имя класса (напр. "Документ.ПоступлениеТоваров" а не "Документ").
Есть ли возможность обойти это?
И вообще - есть какие-нибудь подводные камни?
  
Наверх
ICQ  
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: Подмена объектов метаданных (Документ,Справочн
Ответ #1 - 03. Апреля 2007 :: 08:26
Печать  
Хотя можно в 1crcrus.dll можно заменить в ресурсе "106" "ТипЗначенияСтр" на "ТипЗначенияСтрокой" и определить глобальную функцию "ТипЗначенияСтр", которая и будет разбирать типы.
Тока хочется нормльного решения
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подмена объектов метаданных (Документ,Справочн
Ответ #2 - 03. Апреля 2007 :: 09:58
Печать  
Интересный вариант.
Всегда думал, что 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: Подмена объектов метаданных (Документ,Справочн
Ответ #3 - 03. Апреля 2007 :: 10:02
Печать  
Chieftain писал(а) 03. Апреля 2007 :: 07:50:
Есть один момент-"ТипЗначенияСтр()" возвращает имя класса (напр. "Документ.ПоступлениеТоваров" а не "Документ").
Есть ли возможность обойти это?

Если докажешь жизнеспособность и работоспособность 1-способа, то можно будет что-то придумать в 1С++ Улыбка
  

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


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: Подмена объектов метаданных (Документ,Справочн
Ответ #4 - 03. Апреля 2007 :: 10:16
Печать  
Ща сделаю небольшую конфу - покажу
  
Наверх
ICQ  
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: Подмена объектов метаданных (Документ,Справочн
Ответ #5 - 03. Апреля 2007 :: 10:42
Печать  
Попробуй - там классы динамически создаются.
« Последняя редакция: 03. Апреля 2007 :: 13:05 - Chieftain »  

test_002.rar ( 18 KB | Загрузки )
Наверх
ICQ  
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: Подмена объектов метаданных (Документ,Справочн
Ответ #6 - 03. Апреля 2007 :: 13:15
Печать  
Гонял это дело в копии рабочей - появился баг:

Переопределились классы (с новой процедурой "Записать", где идет запись журнала):
"Справочник.Номенклатура"
"Справочник.sys_ЖурналРегистрацииРеквизиты"

Есть класс "КонтрольИзменений" в котором идет анализ справочника "sys_ЖурналРегистрацииРеквизиты"

В простом цикле перебора справочника "Номенклатура" и их записью 1С падает без лишних слов...
Если не переопределять "Справочник.sys_ЖурналРегистрацииРеквизиты" - все ОК

Прикрепил вариант конфы стаким багом
  

Test_002.rar ( 21 KB | Загрузки )
Наверх
ICQ  
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: Подмена объектов метаданных (Документ,Справочн
Ответ #7 - 03. Апреля 2007 :: 14:47
Печать  
Понял - просто в бесконечном цикле крутится:
объект создает объект который создает объект который создает объект.....

В классах, которые используются в подменном классе надо или вообще не использовать объекты типа "Документ" или "Справочник", либо использовать английские названия "Document" или "Reference"
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подмена объектов метаданных (Документ,Справочн
Ответ #8 - 04. Апреля 2007 :: 05:29
Печать  
Не слишком универсальное решение получается Печаль
  

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


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: Подмена объектов метаданных (Документ,Справочн
Ответ #9 - 04. Апреля 2007 :: 05:31
Печать  
Вполне возможно...
Но меня устраивает "подмена" и на таком уровне.
Поможешь с обходом "ТипЗначенияСтр"?
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подмена объектов метаданных (Документ,Справочн
Ответ #10 - 04. Апреля 2007 :: 05:49
Печать  
Тут все очень не просто Улыбка
  

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


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: Подмена объектов метаданных (Документ,Справочн
Ответ #11 - 04. Апреля 2007 :: 06:19
Печать  
Но надежда есть? Улыбка
  
Наверх
ICQ  
IP записан
 
Deb
1c++ developer
Отсутствует


Sex, drugs and 1C

Сообщений: 41
Зарегистрирован: 21. Мая 2006
Re: Подмена объектов метаданных (Документ,Справочн
Ответ #12 - 04. Апреля 2007 :: 08:02
Печать  
Chieftain писал(а) 04. Апреля 2007 :: 05:31:
Вполне возможно...
Но меня устраивает "подмена" и на таком уровне.
Поможешь с обходом "ТипЗначенияСтр"?

Функция _ПолучитьКод()
Возврат "МоеИмяТипаКласса";
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подмена объектов метаданных (Документ,Справочн
Ответ #13 - 04. Апреля 2007 :: 08:06
Печать  
Черт, и как я мог забыть про эту фичу Печаль
  

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


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Подмена объектов метаданных (Документ,Справочн
Ответ #14 - 04. Апреля 2007 :: 08:12
Печать  
Deb писал(а) 04. Апреля 2007 :: 08:02:
Chieftain писал(а) 04. Апреля 2007 :: 05:31:
Вполне возможно...
Но меня устраивает "подмена" и на таком уровне.
Поможешь с обходом "ТипЗначенияСтр"?

Функция _ПолучитьКод()
Возврат "МоеИмяТипаКласса";

Не понял. Это разве для ТипЗначенияСтр()?

Всегда думал, что _ПолучитьКод() используется для получения строкового представления. То есть для Строка().
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать