Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Класс - наследник справочника, либо документа (число прочтений - 6388 )
фанат 1с
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 09. Июля 2009
Класс - наследник справочника, либо документа
09. Июля 2009 :: 06:29
Печать  
Подскажите, кто знает. Появилась необходимость создать свой класс, который бы наследовал определенный документ и имел бы расширенный функционал. Например есть в системе Документ.перемещение. Я создаю класс-наследник и называю его например МоеПеремещение и дописываю нужные мне дополнительные методы, например, ЗагрузитьИзXML(). Это все понятно, но я не могу понять, как мне потом после создания объекта моего класса открыть форму этого моего нового документа. Например, делаем:

Док=СоздатьОбъект("МоеПеремещение");
Док. Новый();

а потом нужно чтобы открылось окно этого документа, чтобы пользователь мог вносить информацию, и потом записать.
Слышал, что классы не имеют форм, но неужели в таком случае нет возможности создавать классы, являющиеся наследниками справочников и документов???
  
Наверх
 
IP записан
 
фанат 1с
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 09. Июля 2009
Re: Класс - наследник справочника, либо документа
Ответ #1 - 09. Июля 2009 :: 08:15
Печать  
Неужели никто не наследовал документы или справочники? Если кто знает напишите, заранее спасибо.
  
Наверх
 
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс - наследник справочника, либо документа
Ответ #2 - 09. Июля 2009 :: 08:19
Печать  
Если ты имеешь представление о 1С8, то скажу так: Создание класса- наследника от справочника или документа определенного вида будет аналогично созданию МодуляОбъекта в 1С8. Улавливаешь разницу? Модуль формы к классу не имеет отношения.
  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
фанат 1с
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 09. Июля 2009
Re: Класс - наследник справочника, либо документа
Ответ #3 - 09. Июля 2009 :: 08:37
Печать  
Т.е. если я правильно понял, нормально унаследовать справочник, т.е. создать свой класс-справочник с расширенным функционалом на основе существующего, невозможно? Получается, что в своем классе я могу использовать все методы базового класса, но например открыть форму своего документа, не могу, т.к. из модуля объекта нельзя открыть форму объекта? Если ошибаюсь поправьте, т.к. работаю с 7.7 и 1С 8 знаю пока только понаслышке
  
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Класс - наследник справочника, либо документа
Ответ #4 - 09. Июля 2009 :: 11:29
Печать  
фанат 1с писал(а) 09. Июля 2009 :: 08:15:
Неужели никто не наследовал документы или справочники? Если кто знает напишите, заранее спасибо.


Ну, функционал объектов, создаваемых функцией СоздатьОбъект() можно расширить запросто. И из них форма объекта открываться будет нормально.

А вот как расширить функционал формы и модуля проведения - это да. Это вопрос.

Правда, если представить, что я это сделал - возникает следующий вопрос: как его использовтать из кода, оставшегося в модулеформы и модулепроведения?
  
Наверх
ICQ  
IP записан
 
фанат 1с
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 09. Июля 2009
Re: Класс - наследник справочника, либо документа
Ответ #5 - 09. Июля 2009 :: 11:44
Печать  
dnp писал(а) 09. Июля 2009 :: 11:29:
Ну, функционал объектов, создаваемых функцией СоздатьОбъект() можно расширить запросто. И из них форма объекта открываться будет нормально.

Можно привести пример? Потому что мне так и нужно чтобы форма объекта (в данном случае документа) открывалась. Как это сделать?  
Потому что форма открывается системной процедурой ОткрытьФорму(<ОписательОбъекта>,<КонтекстФормы>,<ДокументОснование>). Только вот возникает вопрос, какой ОписательОбъекта передать? Обычно это например "Документ.Перемещение" например. А мне нужно открыть форму объекта моего класса. По идеям ООП так оно и должно было бы быть, но как я понял, у классов нет никаких форм, и даже когда у базового класса есть форма, то класс ее никак не наследует.

Если есть мысли, то буду рад. Потому что это очень удобно было бы использовать ООП для наследования объектов конфигурации. Приведу пример: есть док "Перемещение" и помимо всего еще к примеру должен быть реализован функционал загрузки документов этого типа из XML. Так вот вместо того, чтобы отдельно писать какую-то внешнюю обработку для загрузки, было бы красивее создать класс-наследник документа "Перемещение", и написать конструктор который при получении в качестве параметра XML-файл, создавая объект (документ), загружает его из XML
  
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Класс - наследник справочника, либо документа
Ответ #6 - 09. Июля 2009 :: 12:00
Печать  
фанат 1с писал(а) 09. Июля 2009 :: 11:44:
dnp писал(а) 09. Июля 2009 :: 11:29:
Ну, функционал объектов, создаваемых функцией СоздатьОбъект() можно расширить запросто. И из них форма объекта открываться будет нормально.

Можно привести пример? Потому что мне так и нужно чтобы форма объекта (в данном случае документа) открывалась. Как это сделать?  
Потому что форма открывается системной процедурой ОткрытьФорму(<ОписательОбъекта>,<КонтекстФормы>,<ДокументОснование>). Только вот какой ОписательОбъекта передать? Обычно это например "Документ.Перемещение" например. А мне нужно открыть форму объекта моего класса. По идеям ООП так оно и должно было бы быть, но как я понял, у классов нет никаких форм, и даже когда у базового класса есть форма, то класс ее никак не наследует.

Если есть мысли, то буду рад. Потому что это очень удобно было бы использовать ООП для наследования объектов конфигурации.


Хе. Извиняюсь, ошибся я. ОткрытьФорму(...) не работает с КОПами. Есть ещё одна форма этой функции - ОткрытьФорму(<Документ>,<КонтекстФормы>,<РежимПросмотра>)
Назначение:
Открывает визуальную форму существующего документа или элемента
где <Документ> это объект а не строка.

я надеялся на неё, но фиг... то есть только использовать метод самого класса (реализовав его, ессно). но при этом открываемая форма снова не будет нужного типа, и вопрос остается открытым.

Смущённый
  
Наверх
ICQ  
IP записан
 
фанат 1с
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 09. Июля 2009
Re: Класс - наследник справочника, либо документа
Ответ #7 - 09. Июля 2009 :: 12:06
Печать  
dnp писал(а) 09. Июля 2009 :: 12:00:
я надеялся на неё, но фиг... то есть только использовать метод самого класса (реализовав его, ессно). но при этом открываемая форма снова не будет нужного типа, и вопрос остается открытым. Смущённый

Вот и я про то же, все равно открыть форму СВОЕГО класса не получится, потому как у него по ходу просто нет этой формы. Наверно это связано с тем, что язык 1С изначально не разрабатывался для работы в рамках ООП. Я так понял, что нормально наследовать объекты конфы, у которых есть форма невозможно. Интересно, почему никто не задавался этим вопросом на форуме? Потому как для этого классы и нужны в первую очередь, имхо.
  
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Класс - наследник справочника, либо документа
Ответ #8 - 09. Июля 2009 :: 12:11
Печать  
фанат 1с писал(а) 09. Июля 2009 :: 12:06:
Я так понял, что нормально наследовать объекты конфы, у которых есть форма невозможно. Интересно, почему никто не задавался этим вопросом на форуме? Потому как для этого классы и нужны, имхо.

приведи пример, как (будь оно реализовано) это можно было бы использовать :
1. в самом модуле формы (или его не трогаем, и он о новшествах не знает?)
2. эээ... в открывшем форму контексте? (хм. мы так часто открываем формы документов программно, чтобы имело смысл расширять их функционал?)
  
Наверх
ICQ  
IP записан
 
фанат 1с
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 09. Июля 2009
Re: Класс - наследник справочника, либо документа
Ответ #9 - 09. Июля 2009 :: 12:21
Печать  
Приведу пример: есть док "Перемещение" и помимо всего еще к примеру должен быть реализован функционал загрузки документов этого типа из XML. Так вот вместо того, чтобы отдельно писать какую-то внешнюю обработку для загрузки, было бы красивее создать класс-наследник документа "Перемещение", и написать конструктор который при получении в качестве параметра XML-файл, создавая объект (документ), загружает его из XML

dnp писал(а) 09. Июля 2009 :: 12:11:
приведи пример, как (будь оно реализовано) это можно было бы использовать :
1. в самом модуле формы (или его не трогаем, и он о новшествах не знает?)
2. эээ... в открывшем форму контексте? (хм. мы так часто открываем формы документов программно, чтобы имело смысл расширять их функционал?)


Модуль формы есть (в данном примере) у базового класса - документа "Перемещение", мы его вообще не трогаем. У нас есть класс-наследник "МоеПеремещение", а про "Документ.ПЕремещение" забыли вообще, его заменил наследник с бОльшим количеством методов. С ним и работаем как с нормальным документом, он наследует все методы документа "Перемещение". И вот когда доходим до этого момента, понимаем, что наш класс никогда не станет полноценным наследником и не будет использоваться как настоящий документ, потому что мы не можем открыть форму этого самого документа
  
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Класс - наследник справочника, либо документа
Ответ #10 - 09. Июля 2009 :: 12:31
Печать  
фанат 1с писал(а) 09. Июля 2009 :: 12:21:
Приведу пример: есть док "Перемещение" и помимо всего еще к примеру должен быть реализован функционал загрузки документов этого типа из XML. Так вот вместо того, чтобы отдельно писать какую-то внешнюю обработку для загрузки, было бы красивее создать класс-наследник документа "Перемещение", и написать конструктор который при получении в качестве параметра XML-файл, создавая объект (документ), загружает его из XML


То есть МоеПеремещение живет от момента создания и до момента открытия формы? И - умеет КОП заполнять Перемещение из XML, но исходный функционал Перемещения не использует? Я, собственно, почему занудствую - я тоже давно думаю как же отнаследоваться от формы, правда до сих пор не задумывался - *зачем*.

Сейчас задумался, и не пока вижу смысла. Пример с заполнением не убедил, наследование тут, кмк, излишне...
  
Наверх
ICQ  
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Класс - наследник справочника, либо документа
Ответ #11 - 09. Июля 2009 :: 12:34
Печать  
фанат 1с писал(а) 09. Июля 2009 :: 12:21:
Модуль формы есть (в данном примере) у базового класса - документа "Перемещение", мы его вообще не трогаем. У нас есть класс-наследник "МоеПеремещение", а про "Документ.ПЕремещение" забыли вообще, его заменил наследник с бОльшим количеством методов. С ним и работаем как с нормальным документом, он наследует все методы документа "Перемещение"


Выходит, что после ОткрытьФорму( МоеПеремещение ) весь новый функционал засыпает, форма-то о нем ни чего не знает?
  
Наверх
ICQ  
IP записан
 
фанат 1с
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 09. Июля 2009
Re: Класс - наследник справочника, либо документа
Ответ #12 - 09. Июля 2009 :: 12:41
Печать  
dnp писал(а) 09. Июля 2009 :: 12:31:
То есть МоеПеремещение живет от момента создания и до момента открытия формы? И - умеет КОП заполнять Перемещение из XML, но исходный функционал Перемещения не использует?

Как раз нет... живет он от момента создания объекта и до его деструкции. А создаешь ли ты его форму или нет во время его жизни это вопрос второй, класс-наследник должен ПОЛНОЦЕННО заменять базовый документ. И исходный функционал "Перемещения" так же должен использовать на все 100 плюс свои методы
  
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Класс - наследник справочника, либо документа
Ответ #13 - 09. Июля 2009 :: 12:53
Печать  
фанат 1с писал(а) 09. Июля 2009 :: 12:41:
dnp писал(а) 09. Июля 2009 :: 12:31:
То есть МоеПеремещение живет от момента создания и до момента открытия формы? И - умеет КОП заполнять Перемещение из XML, но исходный функционал Перемещения не использует?

Как раз нет... живет он от момента создания объекта и до его деструкции. А создаешь ли ты его форму или нет во время его жизни это вопрос второй, класс-наследник должен ПОЛНОЦЕННО заменять базовый документ. И исходный функционал "Перемещения" так же должен использовать на все 100 плюс свои методы

Если пользователь ни чего не жмет - то ни какие методы не вызываются вообще, кроме ПриОткрытии() ВводНового() ВводНаОсновании().
А если пользователь в форме документа жмет кнопки - то вызываются, опять же, предопределенные или формулы элементов диалога. Ни те ни дргие не знают о новом функционале (по условиям задачи Улыбка ). Кто тогда его (функционал) будет использовать?
  
Наверх
ICQ  
IP записан
 
фанат 1с
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 09. Июля 2009
Re: Класс - наследник справочника, либо документа
Ответ #14 - 09. Июля 2009 :: 12:54
Печать  
Хотя не знаю, может я и ошибаюсь....  Со сжатыми губами
По идее после Док=СоздатьОбъект(МоеПеремещение) у него должны были бы быть доступны через точку как стандартные методы документа (Выбрать(), Вид()), так и плюс те методы которые ты вписал в классе, независимо от создания формы. Хотя повторюсь, возможно, я запутался...
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать