Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Для тупых-2: ЗаменитьБазовыйОбъект() (число прочтений - 12865 )
Shurik71
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 20. Мая 2006
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #15 - 15. Ноября 2006 :: 08:23
Печать  
Неудобно то как Печаль
И непрозрачно. Не просматривается, где обращаться через .АктивныйРегистр, а где напрямую. Плодятся различные сущности.
  
Наверх
 
IP записан
 
Shurik71
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 20. Мая 2006
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #16 - 15. Ноября 2006 :: 08:24
Печать  
Да, и еще ненужное (пере)определение методов регистра.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #17 - 15. Ноября 2006 :: 08:57
Печать  
Shurik71 писал(а) 15. Ноября 2006 :: 08:23:
Неудобно то как Печаль
И непрозрачно. Не просматривается, где обращаться через .АктивныйРегистр, а где напрямую. Плодятся различные сущности.

Вот я тебе и написал, что АктивныйРегистр не должен быть виден снаружи, т.е. должен быть инкапсулирован, т.е быть без Экспорт!!
И все делается внутри класса, в его методах
  

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


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 20. Мая 2006
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #18 - 15. Ноября 2006 :: 09:08
Печать  
В этом случае я потеряю возможность обращаться к аттрибутам конкретного регистра, без ПолучитьАттрибут().

Есть, правда, еще один вариант - наследовать от Структуры.
Но в этом случае после каждого метода придется копировать измерения/реквизиты в структуру. Что вряд ли положительно скажется на производительности.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #19 - 15. Ноября 2006 :: 11:13
Печать  
Shurik71 писал(а) 15. Ноября 2006 :: 09:08:
В этом случае я потеряю возможность обращаться к аттрибутам конкретного регистра, без ПолучитьАттрибут().

Ничего не потеряешь - есть возможность работать с динамическими атрибутами (генеришь на лету) или контролировать чтение/запись реквизитов класса (тех, что в модуле класса объявлены как Экспорт).
Смотри в доке ПриЗаписи_ и ПриЧтении_
  

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


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #20 - 15. Ноября 2006 :: 17:11
Печать  
Arta, fez
Да, я такой!   Смех

Shurik71
Если ты делаешь аналог восьмерочного регистра сведений, зачем тогда доступ к реквизитам?
И вообще, вместо объекта Регистр, я бы использовал ODBCRecordSet.  Улыбка
  
Наверх
ICQ  
IP записан
 
Shurik71
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 20. Мая 2006
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #21 - 15. Ноября 2006 :: 22:49
Печать  
Так, в общем - всем большое спасибо.
Направили на путь истинный.
Переписал класс - кажется, работает. Надобно будет еще протестить...

2 artbear

Персональное спасибо - за тыканье носом в динамические свойства.
Кажись, понял, как с ними работать, хотя до конца не уверен, что понял правильно Улыбка
Но согласно альфа-тесту вроде бы работает..

2 Палыч
Персональное спасибо за указание направления "куда мне идти" Улыбка. Сначала я подумал, что это был такой прикол Улыбка

Цитата:
зачем тогда доступ к реквизитам

Срез получается позиционированием регистра на первую отфильтрованную запись движения. Затем извлеченный нужный реквизит регистра = ресурс регистра сведений.

Цитата:
я бы использовал ODBCRecordSet

На самом деле у меня 2 способа получения среза. Один как раз через ODBCRecordSet.
Но работает только на SQL. А вот второй (через регистр) работает и на ДБФ тоже.

На самом деле именно то, что у меня один из способов получения среза к методам регистров прямого отношения не имеет, помогло согласиться с инкапсуляцией Улыбка
Просто заклинило на мысли, что "если у объекта есть методы регистров, данные выдергиваются из регистра - то это и есть регистр" Улыбка
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #22 - 16. Ноября 2006 :: 11:06
Печать  
Shurik71 писал(а) 15. Ноября 2006 :: 22:49:
Просто заклинило на мысли, что "если у объекта есть методы регистров, данные выдергиваются из регистра - то это и есть регистр" Улыбка

Классика жанра. У танка есть методы пулемета, пули вылетают из пулемета, значит танк и есть пулемет. Улыбка
  
Наверх
www  
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #23 - 16. Ноября 2006 :: 12:00
Печать  
Shurik71
Цитата:
Срез получается позиционированием регистра на первую отфильтрованную запись движения. Затем извлеченный нужный реквизит регистра = ресурс регистра сведений.

Дык эта... Даже в восьмерке разделили данные и средства доступа к ним. Мотай на ус.
зы: имеет ли смысл повторять кривую объектную модель семерки?
  
Наверх
ICQ  
IP записан
 
Shurik71
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 20. Мая 2006
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #24 - 16. Ноября 2006 :: 12:27
Печать  
Цитата:
Shurik71
Цитата:
Срез получается позиционированием регистра на первую отфильтрованную запись движения. Затем извлеченный нужный реквизит регистра = ресурс регистра сведений.

Дык эта... Даже в восьмерке разделили данные и средства доступа к ним. Мотай на ус.
зы: имеет ли смысл повторять кривую объектную модель семерки?


Сложный вопрос. Думал над этим.
Для проектирования системы от "0" цикла и до конца - не стоит.
А для решения в рамках каких-либо уже существующих конфигураций каких-либо конкретных задач -- идеология системы то уже существует.  Я решил, что лучше для таких задач делать по схожей модели. Потому что на одной конфигурации использование разных подходов влечет за собой появление дополнительных ошибок.
У меня именно второй вариант.
  
Наверх
 
IP записан
 
Shurik71
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 20. Мая 2006
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #25 - 21. Ноября 2006 :: 20:26
Печать  
2 artbear:

В комментарии к ответу в багзилле.
Чтение этого ответа сподвигло на еще один обходной путь:
Код
Выбрать все
//#class Регистр = class_Регистр@MD : Регистры
//#{
//#}


//#class РегистрСведений = class_РегистрСведений@MD : Регистр
//#{
//#// назначение регистра
//#void Назначить (Строка ИмяРегистра);
// .. и т.п......
//#}
 



===================
Обработка class_РегистрСведений:
Код
Выбрать все
//..............
Процедура Назначить(ИмяРегистра) Экспорт
	Имя = ИмяРегистра; // контрольное имя
	НоваяБаза = СоздатьОбъект("Регистр."+ИмяРегистра);
	а=Сам().ЗаменитьБазовыйОбъект("Регистр", НоваяБаза);
КонецПроцедуры	//
//............
 



Как ни странно, работает на 2.5.
Интересно, является ли такая возможность багом?  Улыбка

Причем также и работает в этом случае (после описания промежуточного класса) и вариант с
Код
Выбрать все
а=Сам().ЗаменитьБазовыйОбъект("Регистры", НоваяБаза);
 


Улыбка
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #26 - 22. Ноября 2006 :: 06:18
Печать  
Да, интересно получилось Улыбка И это не баг, а фича Улыбка
Но так получится только с объектом "Регистр", потому что фактически у 1С нет такого объекта, а ты его создаешь.
  

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: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #27 - 22. Ноября 2006 :: 08:08
Печать  
Кстати, можно сделать и вот так:

Цитата:
//#class Регистр = class_Регистр@MD {}

Тоже будет работать. Только в модуль должен быть непустой. Хотя бы одна пустая строка.

artbear писал(а) 22. Ноября 2006 :: 06:18:
Но так получится только с объектом "Регистр", потому что фактически у 1С нет такого объекта, а ты его создаешь.

Нет такого класса, ты хотел сказать?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #28 - 22. Ноября 2006 :: 10:14
Печать  
Конечно, нет такого класса Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать