Переключение на Главную Страницу Страницы: 1 ... 6 7 [8] 9 10 11 ОтправитьПечать
Очень популярная тема (более 25 ответов) Динамич. создание классов и подкл. файл. реализац. (число прочтений - 52914 )
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Динамич. создание классов и подкл. файл. реали
Ответ #105 - 02. Марта 2007 :: 08:10
Печать  
sedmin писал(а) 02. Марта 2007 :: 07:12:
Вот пример файла класса:

Кстати, а подобная схема не работает Печаль
Код
Выбрать все
//#класс ТестовыйСлучай: ВыполняемыйМодуль

//#void AssertEquals();
Процедура AssertEquals() Экспорт
КонецПроцедуры

//#void AssertEquals2();
Процедура AssertEquals2() Экспорт
КонецПроцедуры
//#}
 


Не скомпилируется Печаль

Пройдет только так
Код
Выбрать все
//#класс ТестовыйСлучай: ВыполняемыйМодуль
//#{
//#void AssertEquals();
//#void AssertEquals2();
//#}
Процедура AssertEquals() Экспорт
КонецПроцедуры

Процедура AssertEquals2() Экспорт
КонецПроцедуры
 

  

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



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Динамич. создание классов и подкл. файл. реали
Ответ #106 - 02. Марта 2007 :: 08:59
Печать  
artbear писал(а) 02. Марта 2007 :: 08:04:
ОФФ - выложил бы класс или код подобной схемы Улыбка - ты где-то писал, но я ветку не помню.
ЗЫ сам метод, значит, нравится Улыбка ?
Я сам о нем несколько лет мечтал, но только недавно реализовал Улыбка

В обратном порядке:
1. Давно пора было сделать Улыбка
2. Метод нравится!
3. На кнопку у программера повешено:
Код
Выбрать все
Процедура ПриОткрытии()
	Если Вопрос("Сбросить кэш классов?", "Да+Нет") = "Да" Тогда
		Константа.ФлагСбросаКэшаКлассов = _GetPerformanceCounter();
		Meta = СоздатьОбъект("MetaInfoClasses");
		Meta.ОчиститьДанныеОптимизацииКлассов();
	КонецЕсли;
	СтатусВозврата(0);
	Возврат;
КонецПроцедуры
 


В гл обработке ожидания:
Код
Выбрать все
Значение = ВосстановитьЗначение("ФлагСбросаКэшаКлассов");
Если СокрЛП(Значение) <> СокрЛП(Константа.ФлагСбросаКэшаКлассов) Тогда
	MetaInfoClasses = СоздатьОбъект("MetaInfoClasses");
	MetaInfoClasses.ОчиститьДанныеОптимизацииКлассов();
	СохранитьЗначение("ФлагСбросаКэшаКлассов", Значение);
	Сообщить("Администратор произведел обновление программных модулей 1С. Конфигурация успешно обновлена.");
КонецЕсли;
 


Коду несколько строк, а удобства - масса.

artbear писал(а) 02. Марта 2007 :: 08:06:
Я специально не написал дефцлс.прм, чтобы вы не запутались, а вы все-таки спутали Улыбка
Речь идет именно о динамически подключаемом прм-файле через мой новый метод.
Народ, хоть кто-нибудь посмотрел мой новый метод, а ?


Артур, при описанной мной схеме, вообще не понадобится такой вариант...
Ты просто кладешь класс куда надо и все. Как такового подключения просто не нужно. Нет файла - выбросили исключение. Есть файл - подключили...
  
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Динамич. создание классов и подкл. файл. реали
Ответ #107 - 02. Марта 2007 :: 09:27
Печать  
Arta писал(а) 02. Марта 2007 :: 07:24:
Sedmin, ты с java работал?


Да, работал. И не надо мне Явой тыкать. Когда я начал работать с классами в 1С, мне тоже казалось, что в Яве все сделано хорошо, и не надо изобратать велосипед. Мне даже помнится, что в Багзилле есть моя заявка на эту тему.

Сейчас я понял, что не все так просто. Вот как я вижу ситуацию.

Основная различие в том, что для каждого приложения в Яве создается свое окружение - песочница. Для нее прописаны все пути, где что искать. У нас в 1С каждый отчет - это отдельное приложение. Но все они работают в одной песочнице, и классы у них лежат в одной куче. И не уверен, что для одного отчета надо искать классы в путях для всех отчетов.

Второе различие в том, что в Яве наработана огромная библиотека классов, и хранятся они в скомпилированном виде. У нас нет этой библиотеки, а если бы была, то ее компиляция снова бы стала проблемой. Дальше углуб##ться в эту тему желания нет. Скажу лишь, что отсюда следует, что снова - для каждого отчета нужы классы из разных мест.

Относительно того, что мой пример не работает. Конечно не работает. Так хотелось бы, чтобы заработал.  Улыбка
  
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Динамич. создание классов и подкл. файл. реали
Ответ #108 - 02. Марта 2007 :: 09:30
Печать  
Цитата:
Лично я тру о том, чтобы вообще исключить из прикладного решения информацию о файлах классов. В МД и так черт ногу сломит, а ты еще предлагаешь захардкодить имена файлов!

Это - следующий этап. И его можно реализовать с использованием описанного атома.

Смысл атома в том, что это - минимальная операция. На его основе можно делать что угодно.

Я бы сказал, что смысл моего предложения в том, чтобы сделать удобныый/правильный формат описания класса. Чтобы, в первую очередь, можно было отказаться от того ужасного способа описания класса, который имеется сейчас.

То есть все описание класса лежит в одном файле класса. А как он подвязывается - дело десятое.
  
Наверх
 
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: Динамич. создание классов и подкл. файл. реали
Ответ #109 - 02. Марта 2007 :: 10:56
Печать  
sedmin
Цитата:
У нас в 1С каждый отчет - это отдельное приложение.

Да ну?! С чего бы это?

Цитата:
У нас нет этой библиотеки, а если бы была, то ее компиляция снова бы стала проблемой.

Цитата:
... для каждого отчета нужы классы из разных мест.

Безосновательные утверждения.

Цитата:
Смысл атома в том, что это - минимальная операция. На его основе можно делать что угодно.

Я предлагаю обойтись вообще без лишних телодвижений.

Цитата:
То есть все описание класса лежит в одном файле класса. А как он подвязывается - дело десятое.

Вот оно в чем дело! У меня описания классов лежат в файлах реализации уже года три, если не больше. А как подвязываются эти файлы - как раз самый первый вопрос.

зы: Приведу пример.
Предположим, есть некая конфигурация, назовем ее "ТоргуемВсем". В ней есть отчет ОтчетПоОстаткам (внешний или встроенный в МД - неважно). В коде конфиги используются следующие классы:
  • Система.Формы.РасширениеФормы
  • Система.Формы.ВалидаторДанныхБазовый
  • Система.Формы.ВалидаторДанныхРавенство : Система.Формы.ВалидаторДанныхБазовый
  • Система.Формы.ВалидаторДанныхДиапазон : Система.Формы.ВалидаторДанныхБазовый
  • ТоргуемВсем.ОтчетПоОстаткам.ГенераторПечатнойФормы
  • ТоргуемВсем.ОтчетПоОстаткам.ПоставщикДанных
  • ТоргуемВсем.ОтчетПоОстаткам.ВалидаторДанных : Система.Формы.ВалидаторДанныхРавенство


Причем, классы пространства имен Система не зависят от используемых компонент v7.7 и используются в любых конфигурациях, а классы пространства имен ТоргуемВсем используются только в одноименной конфиге, в соответствующем отчете.

Чтобы это работало, создаем где-то в сети расшареный каталог \\server\Классы1спп со следущим содержимым:

     Система\
          Формы\
               РасширениеФормы.ert
               ВалидаторДанныхБазовый.ert
               ВалидаторДанныхРавенство.ert
               ВалидаторДанныхДиапазон.ert
     ТоргуемВсем\
          ОтчетПоОстаткам\
               ГенераторПечатнойФормы.ert
               ПоставщикДанных.ert
               ВалидаторДанных.ert

Сообщаем нашей конфиге, что классы нужно искать в каталоге \\server\Классы1спп.
На этом вся работа по подключению классов заканчивается.
При первом создании экземпляра класса, скажем, ТоргуемВсем.ОтчетПоОстаткам.ГенераторПечатнойФормы, 1С++ обращается напрямую к файлу \\server\Классы1спп\ТоргуемВсем\ОтчетПоОстаткам\ГенераторПечатнойФормы.ert

При этом, также, конфига использует старые классы, описаные в defcls.prm и подключенные всевозможными динамическими способами - тут, надеюсь, пример не нужен.

При добавлении в МД, скажем, нового отчета, нам нужно будет только добавить файлы реализации  классов, аналогично приведенному примеру.
Конфигурация может быть безболезненно отчуждена путем копирования нужных файлов. Уникальность пространств имен обеспечивает отсутствие конфликтов.
  
Наверх
ICQ  
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Динамич. создание классов и подкл. файл. реали
Ответ #110 - 02. Марта 2007 :: 11:18
Печать  
Цитата:
Цитата:
То есть все описание класса лежит в одном файле класса. А как он подвязывается - дело десятое.

Вот оно в чем дело! У меня описания классов лежат в файлах реализации уже года три, если не больше. А как подвязываются эти файлы - как раз самый первый вопрос.

Вот оно в чем дело! Если тебе этого не нужно, то не надо говорить, что это никому не нужно. И если тебя устраивает кривой способ описания класса, то это не значит, что он всех устраивает. Ты же сам говорил: "Взгляните на вопрос по новому!"

Цитата:
Цитата:
У нас в 1С каждый отчет - это отдельное приложение.

Да ну?! С чего бы это?

Если ты этого не используешь, то это не значит, что этого никто не использует.

Не надо ограничиваться своей кочкой зрения.
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Динамич. создание классов и подкл. файл. реали
Ответ #111 - 02. Марта 2007 :: 11:27
Печать  
sedmin писал(а) 02. Марта 2007 :: 11:18:
своей кочкой зрения.


Sedmin, не торопись, не торопись... Улыбка
  
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Динамич. создание классов и подкл. файл. реали
Ответ #112 - 02. Марта 2007 :: 11:28
Печать  
Цитата:
Цитата:
... для каждого отчета нужы классы из разных мест.

Безосновательные утверждения.

Ну почему я все классы должен сваливать в один каталог? У меня каждый отчет может быть со своими классами. Может я его из личной папки запускаю. Почему я куда-то на сервер должен сложить классы для него?

В конце концов, в Яве есть CLASSPATH, я для каждого приложения-отчета я могу его настроить так как захочу. И также классы могут искаться в текущей папке. Почему я не могу желать того же.

Встречный вопрос: вы работали в Яве?
  
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Динамич. создание классов и подкл. файл. реали
Ответ #113 - 02. Марта 2007 :: 11:30
Печать  
Arta писал(а) 02. Марта 2007 :: 11:27:
sedmin писал(а) 02. Марта 2007 :: 11:18:
своей кочкой зрения.

Sedmin, не торопись, не торопись... Улыбка

А я и не тороплюсь. Написал то, что хотел написать.  Улыбка
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Динамич. создание классов и подкл. файл. реали
Ответ #114 - 02. Марта 2007 :: 11:32
Печать  
Sedmin, я работал на Яве, я работал и работаю как на Линухе так и на винде.
Я программлю на разных языках (отчего часто путаюсь). И при этом не являюсь программером.
Но это не мешает мне понимать, что ВСЕ свои каталоги с классами ты можешь вставить в classpath.
Это проблема?
  
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Динамич. создание классов и подкл. файл. реали
Ответ #115 - 02. Марта 2007 :: 11:35
Печать  
Arta писал(а) 02. Марта 2007 :: 11:32:
Но это не мешает мне понимать, что ВСЕ свои каталоги с классами ты можешь вставить в classpath.

У каждого отчета будет свой classpath?
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Динамич. создание классов и подкл. файл. реали
Ответ #116 - 02. Марта 2007 :: 11:42
Печать  
sedmin писал(а) 02. Марта 2007 :: 11:35:
У каждого отчета будет свой classpath?

Arta писал(а) 23. Февраля 2007 :: 20:42:
3. Смотрим (по аналогии с java) %classpath%. classpath можем прописать в ини, может установить методом, как угодно в общем. В classpath конечно может быть несколько путей.

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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Динамич. создание классов и подкл. файл. реали
Ответ #117 - 02. Марта 2007 :: 11:51
Печать  
Совсем запутался, как хотите сделать.
Правильно ли я понял - перехватываем СоздатьОбъект("ИмяТипа") и ищем "ИмяТипа.ert" в спецпапке?
А если я кину в папку для классов файл "Word.Document.ert", а в коде напишу СоздатьОбъект("Word.Document") ?
  
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Динамич. создание классов и подкл. файл. реали
Ответ #118 - 02. Марта 2007 :: 12:08
Печать  
Arta
А как какой-то отчет может повлиять на classpath в уже запущенной 1C?

Может я не догоняю? Вот сейчас какая ситуация: ты приходишь, приносишь отчет на дискетке, говоришь "Сейчас покажу.", и паказываешь.

А у тебя как будет? Ты приходишь, говоришь: "Давайте ка запишем эти классы на сервер, ну или поменяем classpath. Но тогда 1С надо будет перезапустить."

Так что ли?

orefkov
А знаешь, что мне на подобный вопрос АЛьФ ответил? "А ты не пиши СоздатьОбъект("Word.Document")."  Улыбка
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Динамич. создание классов и подкл. файл. реали
Ответ #119 - 02. Марта 2007 :: 12:13
Печать  
orefkov писал(а) 02. Марта 2007 :: 11:51:
Совсем запутался, как хотите сделать.
Правильно ли я понял - перехватываем СоздатьОбъект("ИмяТипа") и ищем "ИмяТипа.ert" в спецпапке?
А если я кину в папку для классов файл "Word.Document.ert", а в коде напишу СоздатьОбъект("Word.Document") ?

1. Да, верно
2. Вариант Палыча - через точку обозначется пространство имен, т.е. отдельный каталог. Мне лично так не совсем удобно.
У меня также много классов с несколькими точками в классах.
  

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