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


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 20. Мая 2006
Для тупых-2: ЗаменитьБазовыйОбъект()
14. Ноября 2006 :: 09:43
Печать  
В общем, делаю очередную попытку перейти на свежие версии 1с++.

Исходные данные.

Имеем классы:

1)

class РегистрСведений = @CLASSES\РегистрСведений.ert    :  Регистры

// назначение регистра
void Назначить (Строка ИмяРегистра);

// получение среза последних. Позиционирует регистр.
Число ПолучитьПоследнее(Дата ДатаСреза)  ;

.... // далее несущественно                                           
}                                                                           

///// кусок кода метода ///////////////////////

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

Функция ПолучитьСрез(ДатаСреза, Последнее = 0)   
     
     ....

     Конт = Сам();
     Если ТипЗначенияСтр(Фильтр) = "СписокЗначений" Тогда
           Для ц=1 По Фильтр.РазмерСписка() Цикл
                 _Измерение      = "";
                 _Значение      = Фильтр.ПолучитьЗначение(ц,_Измерение);
                  Конт.УстановитьЗначениеФильтра(_Измерение,_Значение);      
           КонецЦикла;      
      .......................

/////////////////////////////////////////////

2)
class ОЭПО.ДокСчет = @CLASSES\ОЭПО_ДокСчет.ert : Документ.Счет
{
     Void Печать();         
     Строка Акта();
     Документ ВыбратьПодчиненныйДокумент(Строка ВидДокумента, Число НуженСписок=0, Неопределенный СписокДокументов=0) Экспорт
      .... // далее несущественно
}
// завершение определения класса !!

Имеем исходный /версия 1с++ 2.0.2.2/ работающий код:

а) форма документа "Счет"

Функция Печать()                         
                                            
     _Сам = СоздатьОбъект("ОЭПО.ДокСчет");
     _Сам.ЗаменитьБазовыйОбъект("Документ.Счет",Конт);
     _Сам.Печать();
     _Сам = 0;
     Возврат 1;

КонецФункции//Печать()

б) в другом классе
     РегСв = СоздатьОбъект("РегистрСведений");
     РегСв.Назначить("рсПодписки");
       ....
     РегСв.УстановитьФильтр("Контрагент",_База);
     РегСв.УстановитьФильтр("ЗаМесяц",ДатаПодписки);
     Если РегСв.ПолучитьПоследнее(ДатаПроверки)=0 Тогда
       .......


Результат.

1) Версия 1с++ 2.0.3.1 /или 2.0.3.1 последняя ночная/

Не работает форма документа счет /класс ОЭПО.ДокСчет/
( не отработывает код
_Сам.ЗаменитьБазовыйОбъект("Документ.Счет",Конт);
т.е. возвращает 0;)

Насколько я понимаю - считает форму документа счет наследником группового контекста, а не наследником документа.

2) Версия 1с++ 2.5.0.0 от 2006-10-26

форма документа счет работает (ЗаменитьБазовыйОбъект() возвращает 1),
но не отрабатывает класс РегистрСведений

а=Сам().ЗаменитьБазовыйОбъект("Регистры", НоваяБаза);      
возвращает 0 и отсутствуют методы регистров,
вываливается на ПолучитьСрез() в момент
Конт.УстановитьЗначениеФильтра(_Измерение,_Значение);      

Насколько я понимаю - считает, что "Регистры" и "Регистр.ХХХ" это два принципиально разных класса.

Итого:
Кто виноват (ну это я знаю - я сам Улыбка ) и что делать?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #1 - 14. Ноября 2006 :: 11:48
Печать  
Пиши в багзиллу об ошибках (есть на заглавной странице 1спп.ру)
И жди исправления в релизе 2.5
В ЗаменитьБазовыйОбъект Регистры я просто не проверял Печаль
Исправления в 2031 пока гарантировать не могу, слишком много изменилось в 2.5 по сравнению с 2031 именно при работе с классами.
  

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: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #2 - 14. Ноября 2006 :: 11:50
Печать  
Не уверен, но попробуй временный способ
если в файле описания класса унаследовать не от РегистрЫ, а от Регистр без указания вида !
Интересно, пройдет вариант или нет Улыбка
  

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: ЗаменитьБазовыйОбъект()
Ответ #3 - 14. Ноября 2006 :: 12:16
Печать  
Цитата:
Не уверен, но попробуй временный способ
если в файле описания класса унаследовать не от РегистрЫ, а от Регистр без указания вида !


Увы...
Базовый класс: Регистр для класса: РегистрСведений не создан!

Я уже начал было делать простую тестовую базу.
Надо?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #4 - 14. Ноября 2006 :: 12:53
Печать  
Конечно, сделай и выложи.
Так будет проще и быстрее всего.
ЗЫ хотя я в любом случае буду тестировать на нашей конфе тестирования 1С++, где уже 600 различных тестов Улыбка
  

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: ЗаменитьБазовыйОбъект()
Ответ #5 - 14. Ноября 2006 :: 13:02
Печать  
Shurik71 писал(а) 14. Ноября 2006 :: 09:43:
...и что делать?

Отказаться от наследования. Подмигивание
  
Наверх
ICQ  
IP записан
 
Shurik71
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 20. Мая 2006
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #6 - 14. Ноября 2006 :: 21:17
Печать  
Цитата:
Shurik71 писал(а) 14. Ноября 2006 :: 09:43:
...и что делать?

Отказаться от наследования. Подмигивание



Спасибо. Добрый ты Улыбка
  
Наверх
 
IP записан
 
Shurik71
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 20. Мая 2006
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #7 - 14. Ноября 2006 :: 21:20
Печать  
Записал в Багзиллу пару багов.
Приложил ссылку на базу-пример
http://sh1902.narod.ru/files/BugDemoTest1cpp.zip
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #8 - 14. Ноября 2006 :: 22:12
Печать  
Shurik71 писал(а) 14. Ноября 2006 :: 21:17:
Спасибо. Добрый ты Улыбка


Обычно устами Палыча глаголит истина Улыбка
  
Наверх
 
IP записан
 
Shurik71
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 20. Мая 2006
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #9 - 14. Ноября 2006 :: 23:12
Печать  
Arta писал(а) 14. Ноября 2006 :: 22:12:
Shurik71 писал(а) 14. Ноября 2006 :: 21:17:
Спасибо. Добрый ты Улыбка


Обычно устами Палыча глаголит истина Улыбка


Да я верю Улыбка  но можно я попробую как-нибудь все же с наследованием? Улыбка
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #10 - 15. Ноября 2006 :: 06:41
Печать  
Shurik71 писал(а) 14. Ноября 2006 :: 21:17:
Цитата:
Shurik71 писал(а) 14. Ноября 2006 :: 09:43:
...и что делать?

Отказаться от наследования. Подмигивание

Спасибо. Добрый ты Улыбка

Он не только добрый, но еще и умный Подмигивание
  
Наверх
www  
IP записан
 
Shurik71
Junior Member
**
Отсутствует


I Love YaBB 2!

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

Но все равно не понимаю, как без наследования сделать объект, который мог бы
- оперировать методами регистров
- оперировать своими методами
- обращаться к измерениям/реквизитам/ресурсам конкретного регистра.
- и при этом не плодить лишних объектов..

Может, кто-нибудь наставит меня на путь истинный?
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #12 - 15. Ноября 2006 :: 06:57
Печать  
С помощью инкапсуляции.
  
Наверх
www  
IP записан
 
Shurik71
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 20. Мая 2006
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #13 - 15. Ноября 2006 :: 07:29
Печать  
Я правильно понимаю, что предлагается примерно так:
---------
Класс РегистрСведений : Регистры
{
// мои методы
void Инит(Имя)
Неопределенный ПолучитьПоследнее(МоментВремени)
...
// и переопределение методов 1С
void УстановитьФильтр(..);
Число ВыбратьДвижения(..)
....
}
---------
Перем АктивныйРегистр Экспорт;

//Иниц-я
Процедура Инит(Имя)
АктивныйРегистр = Сам().ПолучитьАтрибут(Имя)
КонецПроцедуры


....

//переопределения 1С
Функция ВыбратьДвижения(...)
  Возврат АктивныйРегистр.ВыбратьДвижения(..);
КонецФункции

//мои методы
Функция ПолучитьПоследнее(МоментВремени)
   // мой код
КонецФункции

????


И обращение к атрибутам примерно так
МойРС = СоздатьОбъект("РегистрСведений");
МойРС.Инит(ИмяРегистра);
....
ЗначениеИзмерения = МойРС.АктивныйРегистр.МоеИзмерение?

???

Я правильно мысль понял?

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для тупых-2: ЗаменитьБазовыйОбъект()
Ответ #14 - 15. Ноября 2006 :: 07:49
Печать  
Да, переопределяешь все методы Регистра.
И наследование вида
Класс РегистрСведений : Регистры
не нужно
нужно просто
Класс РегистрСведений = файлкласса
а внутри
Перем АктивныйРегистр;
Проц Инит(Вид)
  АктивныйРегистр = СоздатьОбъект("Регистр."+Вид);
КонецПроцедуры
  

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