Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Если атрибут класса массив (число прочтений - 4074 )
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Если атрибут класса массив
11. Марта 2009 :: 07:14
Печать  
В потомке вот такая конструкция не работает:

База = This().ПолучитьБазовыйКласс("Родитель");
ТЗ = База.ТЗ[1];

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Если атрибут класса массив
Ответ #1 - 11. Марта 2009 :: 07:35
Печать  
Ты полный пример приведи, иначе непонятно.
  

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



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Если атрибут класса массив
Ответ #2 - 11. Марта 2009 :: 07:53
Печать  
======Родитель======
Перем ТЗ[2] Экспорт;

Функция GetThis(Конт) Возврат Конт; КонецФункции
Функция This() Возврат GetThis(Контекст); КонецФункции

Процедура ИницТЗ() Экспорт
     ТЗ[1] = СоздатьОбъект("ТаблицаЗначений");
     ТЗ[1].НоваяКолонка("Колонка1");
     
     ТЗ[1].НоваяСтрока();
     ТЗ[1].Колонка1 = "Родитель";
     
     Message(ТЗ[1].Колонка1);
КонецПроцедуры

Процедура Иниц() Экспорт
     This().ИницТЗ();
КонецПроцедуры
======Родитель======

======Потомок=======
Функция GetThis(Конт) Возврат Конт; КонецФункции
Функция This() Возврат GetThis(Контекст); КонецФункции


Процедура ИницТЗ() Экспорт
     ТЗ = This().ПолучитьБазовыйКласс("Проба").ТЗ[1] = СоздатьОбъект("ТаблицаЗначений");
     ТЗ.НоваяКолонка("Колонка1");
     
     ТЗ.НоваяСтрока();
     ТЗ.Колонка1 = "Потомок";
     
     Message(ТЗ.Колонка1);
КонецПроцедуры
======Потомок=======
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Если атрибут класса массив
Ответ #3 - 11. Марта 2009 :: 11:51
Печать  
chessman писал(а) 11. Марта 2009 :: 07:53:
ТЗ = This().ПолучитьБазовыйКласс("Проба").ТЗ[1] = СоздатьОбъект("ТаблицаЗначений");

Это как??
Опечатка или что??
  

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



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Если атрибут класса массив
Ответ #4 - 11. Марта 2009 :: 12:01
Печать  
artbear писал(а) 11. Марта 2009 :: 11:51:
chessman писал(а) 11. Марта 2009 :: 07:53:
ТЗ = This().ПолучитьБазовыйКласс("Проба").ТЗ[1] = СоздатьОбъект("ТаблицаЗначений");

Это как??
Опечатка или что??


Сорри.
Правильно так.

ТЗ = This().ПолучитьБазовыйКласс("Проба").ТЗ[1];
ТЗ = СоздатьОбъект("ТаблицаЗначений");
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Если атрибут класса массив
Ответ #5 - 11. Марта 2009 :: 12:32
Печать  
Что-то мне подсказывает, что метод ПолучитьБазовыйКласс тебе не нужен. Попробуй без него.
Код
Выбрать все
ТЗ = This().ТЗ[1]; 



Только два замечания.
1. Не надо называть локальную переменную так же, как и поле суперкласса. Будет путаница.
2. Если у тебя второй строчкой идет
Код
Выбрать все
ТЗ = СоздатьОбъект("ТаблицаЗначений"); 


то совершенно без разницы, что у тебя написано строкой выше. Хоть ПолучитьБазовыйКласс, хоть "=0", хоть вообще этой строки не будет.
  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Если атрибут класса массив
Ответ #6 - 11. Марта 2009 :: 12:33
Печать  
Если же тебе нужно в первый элемент массива (который является полем суперкласса) запихнуть таблицу значений, то это делается примерно так
Код
Выбрать все
This().ТЗ[1] = СоздатьОбъект("ТаблицаЗначений"); 

  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Если атрибут класса массив
Ответ #7 - 11. Марта 2009 :: 12:34
Печать  
И так, просто мне для справки, сколько лет на 1С программируешь? И сколько лет программируешь вообще? На эти вопросы можно не отвечать.
  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Если атрибут класса массив
Ответ #8 - 11. Марта 2009 :: 12:38
Печать  
Чтобы твой пример заработал - он должен выглядеть примерно так:

Код
Выбрать все
======Родитель======
Перем ТЗ[2] Экспорт;

Функция GetThis(Конт) Возврат Конт; КонецФункции
Функция This() Возврат GetThis(Контекст); КонецФункции

Процедура ИницТЗ() Экспорт
     This().ТЗ[1] = СоздатьОбъект("ТаблицаЗначений");
     This().ТЗ[1].НоваяКолонка("Колонка1");

     This().ТЗ[1].НоваяСтрока();
     This().ТЗ[1].Колонка1 = "Родитель";

     Message(This().ТЗ[1].Колонка1);
КонецПроцедуры

Процедура Иниц() Экспорт
     This().ИницТЗ();
КонецПроцедуры
======Родитель======

======Потомок=======
Функция GetThis(Конт) Возврат Конт; КонецФункции
Функция This() Возврат GetThis(Контекст); КонецФункции


Процедура ИницТЗ() Экспорт
     This().ТЗ[1] = СоздатьОбъект("ТаблицаЗначений");
     This().ТЗ[1].НоваяКолонка("Колонка1");

     This().ТЗ[1].НоваяСтрока();
     This().ТЗ[1].Колонка1 = "Потомок";

     Message(This().ТЗ[1].Колонка1);
КонецПроцедуры
======Потомок======= 

  
Наверх
www  
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Если атрибут класса массив
Ответ #9 - 11. Марта 2009 :: 12:57
Печать  
This().ТЗ<<?>>[1] = СоздатьОбъект("ТаблицаЗначений");  :Неопознанный оператор
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Если атрибут класса массив
Ответ #10 - 11. Марта 2009 :: 13:41
Печать  
работа с массивом [] через контекст не взлетит
  

1&&2&&3
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Если атрибут класса массив
Ответ #11 - 11. Марта 2009 :: 13:54
Печать  
trad писал(а) 11. Марта 2009 :: 13:41:
работа с массивом [] через контекст не взлетит


Спасибо, Вот это и  хотел понять.
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Если атрибут класса массив
Ответ #12 - 16. Марта 2009 :: 07:19
Печать  
Чтобы сохранить похожий синтаксис, можно в базовом классе создать функцию

Функция ТЗ(Индекс) Экспорт
     Возврат ТЗ[Индекс];
КонецФункции

тогда в потомке можно обращаться к массиву так:

This().ТЗ(1).НоваяСтрока();
This().ТЗ(1).Колонка1 = "Потомок";

Все это конечно работает, если изначально массив инициализирован ТаблицейЗначений. Это как раз мой вариант.

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