Переключение на Главную Страницу Страницы: 1 2 [3]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Вылетает 1С при загрузке 1С++. (число прочтений - 15359 )
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: Вылетает 1С при загрузке 1С++.
Ответ #30 - 25. Апреля 2008 :: 10:42
Печать  
artbear писал(а) 25. Апреля 2008 :: 10:41:
Chieftain писал(а) 25. Апреля 2008 :: 09:44:
Может подумаешь на тем, чтобы по запросу выдавать текст любого модуля?

Эту задачу быстро не решить, поэтому отложим ее на будущее, т.е. для 3.0
В текущий релиз 2.5 она не попадет

Главное, что она зафиксирована в багзилле Улыбка

ок
  
Наверх
ICQ  
IP записан
 
Alex_Spb
Junior Member
**
Отсутствует



Сообщений: 43
Местоположение: Санкт-Петербург
Зарегистрирован: 21. Февраля 2008
Пол: Мужской
ПолучитьТекстТекущегоМодуля
Ответ #31 - 30. Апреля 2008 :: 10:14
Печать  
artbear писал(а) 25. Апреля 2008 :: 10:31:
Класс "Информатор"
     [+] новый метод ПолучитьТекстТекущегоМодуля


Для 2.5 бинарник можно взять завтра, для 3.0 - когда будет выложена очередная сборка.

Важно: метод работает только для одного уровня вложенности!
если в обработке вызвать метод, будет показан ее текст.
Если в обработке вызвать метод класса, который вызывает этот метод, будет показан текст класса !!
Это специально сделано так просто, для более сложных (более одного уровня вложенности) зависимостей используйте другие методы - например, ФормЕкс.


Мне кажется это не совсем правильно
Например я создаю класс  унаследованный от Информатор
Код
Выбрать все
Функция Сам(Конт) Возврат Конт; КонецФункции

Процедура Конструктор()
    Инф=Сам(Контекст).ПолучитьБазовыйКласс("Информатор");
КонецПроцедуры

Процедура Деструктор()
   Инф=0;
КонецПроцедуры

Функция GetModuleSource() Экспорт
    Возврат Инф.ПолучитьТекстТекущегоМодуля();
КонецФункции
 


соответственно я ожидаю, что методы класса наследника работали также как
и у класса родителя, а в итоге  метод базового класса вернет одно значение,
а метод наследника при тех же условиях другое.
А в моём конкретном случае придётся переписывать код т.к. переопределить GetModuleSource()
я получается не смогу.

Возможно ли реализовать, чтобы хотя бы при первом наследовании метод работал также как и класс родителя,
т.е. возвращал текст модуля формы из которой он вызван, а не текст класса наследника ?



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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вылетает 1С при загрузке 1С++.
Ответ #32 - 30. Апреля 2008 :: 10:28
Печать  
Да, простым путем пойти не получилось, а так хотелось Улыбка Печаль
Буду думать дальше
  

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



Сообщений: 43
Местоположение: Санкт-Петербург
Зарегистрирован: 21. Февраля 2008
Пол: Мужской
Re: Вылетает 1С при загрузке 1С++.
Ответ #33 - 30. Апреля 2008 :: 10:32
Печать  
artbear писал(а) 30. Апреля 2008 :: 10:28:
Да, простым путем пойти не получилось, а так хотелось Улыбка Печаль
Буду думать дальше


А у автора формекса Альфа'a код открытый ?
Или может он поделится тем как он это реализовал в классе Расширение формы,
взять код его метода ТекстМодуля и дело с концом  Подмигивание
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вылетает 1С при загрузке 1С++.
Ответ #34 - 30. Апреля 2008 :: 12:24
Печать  
Исправлено и в 2.5, и в 3.0

Класс Информатор

Цитата:
ПолучитьТекстМодуля / GetModuleText
------------------------------------------------
     **Синтаксис:** ПолучитьТекстМодуля(КонтФормыИлиКласса)

     **Параметры:**
           - **КонтФормыИлиКласса** - тип: Агрегатный. Контекст формы или контекст пользовательского класса.

    **Возвращает:** тип: Строка. Полученная строка с текстом модуля формы или класса.

     **Описание:** Получает текст модуля для указанного контекста.
  

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: Вылетает 1С при загрузке 1С++.
Ответ #35 - 30. Апреля 2008 :: 12:31
Печать  
Alex_Spb писал(а) 30. Апреля 2008 :: 10:32:
artbear писал(а) 30. Апреля 2008 :: 10:28:
Да, простым путем пойти не получилось, а так хотелось Улыбка Печаль
Буду думать дальше


А у автора формекса Альфа'a код открытый ?
Или может он поделится тем как он это реализовал в классе Расширение формы,
взять код его метода ТекстМодуля и дело с концом  Подмигивание

Для меня открытый Улыбка - т.к. я являюсь также одним из разработчиков ФормЕкс Улыбка
Его способ использовать не могу, потому что у него идет привязка к спец.объекту РасширениеФормы, который не хочется дублировать в 1С++.

Я сделал чуть проще, с использованием явной передачи контекста, текст чьего модуля хотим узнать.
Возможно, это тебе также не очень поможет, т.к. я вижу у тебя неявные обращения к используемым контекстам, от чего мы в 1С++ отходим.

Для тебя возможно использовать метод КОП::ПолучитьКонтекстОкружения в сочетании с моим методом, но учти, что данный метод получает контекст, в котором объект класса был создан, а не в котором выполняется текущий метод объекта класса.
  

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: Вылетает 1С при загрузке 1С++.
Ответ #36 - 30. Апреля 2008 :: 12:32
Печать  
Примеры кода
Код
Выбрать все
Процедура Тест_ПолучитьТекстМодуляДляКласса() Экспорт
	Сам = Сам();

	Информатор = Информатор();
	ТекстМодуля = Информатор.ПолучитьТекстМодуля(Сам);

	Сам.ПроверитьТипЗначения(ТекстМодуля, "Строка");
	Сам.ПроверитьРавенство(Найти(ТекстМодуля, "// сигнатура для теста ПолучитьТекстТекущегоМодуля - НЕ ИЗМЕНЯТЬ"), 1);
КонецПроцедуры

Процедура Тест_ПолучитьТекстМодуляДляФормы() Экспорт
	Сам = Сам();

	Информатор = Информатор();
	ДелегатФормы = СоздатьОБъект("ДелегатФормы");
	КонтФормы = ДелегатФормы.ОткрытьФорму("Отчет",, КаталогИБ()+"ExtForms\ОтчетНовый1.ert");

	ТекстМодуля = Информатор.ПолучитьТекстМодуля(КонтФормы);

	Сам.ПроверитьТипЗначения(ТекстМодуля, "Строка");
	Сам.ПроверитьБольшеИлиРавно(Найти(ТекстМодуля, "Перем АтрибутМодуля;"), 1);
КонецПроцедуры
 

  

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



Сообщений: 43
Местоположение: Санкт-Петербург
Зарегистрирован: 21. Февраля 2008
Пол: Мужской
Re: Вылетает 1С при загрузке 1С++.
Ответ #37 - 30. Апреля 2008 :: 12:41
Печать  
artbear писал(а) 30. Апреля 2008 :: 12:24:
Исправлено и в 2.5, и в 3.0

Класс Информатор

Цитата:
ПолучитьТекстМодуля / GetModuleText
------------------------------------------------
     **Синтаксис:** ПолучитьТекстМодуля(КонтФормыИлиКласса)

     **Параметры:**
           - **КонтФормыИлиКласса** - тип: Агрегатный. Контекст формы или контекст пользовательского класса.

   **Возвращает:** тип: Строка. Полученная строка с текстом модуля формы или класса.

     **Описание:** Получает текст модуля для указанного контекста.


Спасибо большое  Очень довольный.

А можно как нибудь в конструкторе класса получить контекст в котором создаётся класс ?

т.е. я хочу сделать функцию которая всегда бы возвращала текст модуля в котором создан экземпляр класса

Код
Выбрать все
Перем ГдеСозданКласс; // контекст формы в которой мы создали класс

Функция Сам(Конт) Возврат Конт; КонецФункции

Процедура Конструктор() // наследуемся от Информатор
    Инф=Сам(Контекст).ПолучитьБазовыйКласс("Информатор");
    ГдеСозданКласс = ? (нужно получить контекст где создан класс ) ;
КонецПроцедуры

Функция GetModuleSource() Экспорт
    Возврат Инф.ПолучитьТекстТекущегоМодуля(ГдеСозданКласс);
КонецФункции

Процедура Деструктор()
   Инф=0;
КонецПроцедуры

 

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вылетает 1С при загрузке 1С++.
Ответ #38 - 30. Апреля 2008 :: 12:42
Печать  
Я протелепатировал и уже ответил Улыбка
  

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