Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Help me please... ВыполняемыйМодуль (число прочтений - 3452 )
kentavr27
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 40
Зарегистрирован: 04. Июня 2008
Help me please... ВыполняемыйМодуль
13. Февраля 2011 :: 02:27
Печать  
Подскажите, кто знает. Есть такая конструкция

[code]Процедура Сформировать()
     ВМ = СоздатьОбъект("ВыполняемыйМодуль");
     Атрибут = СоздатьОбъект("Справочник.Клиенты");
     ТекстМодуля = "
     |ТекущийВид = Атрибут.Вид();
     |Сообщить(ТипЗначенияСтр(Атрибут));
     |";
     ВМ.УстановитьМодуль(ТекстМодуля);
     ВМ.КомпилироватьМодуль();
     ВМ.ВыполнитьМодуль();
     Сообщить(ВМ.ТекущийВид);
КонецПроцедуры
[/code]

Как правильно в текст выполняемого модуля передать переменную "Атрибут"?
пишет
(3)Сообщить(ТипЗначенияСтр(Атрибут)<<?>>);      Неопознанный оператор

Хотя в результате должен получить:
Справочник
Клиенты

  
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Help me please... ВыполняемыйМодуль
Ответ #1 - 13. Февраля 2011 :: 03:28
Печать  
вариант 1
Код
Выбрать все
Перем Атрибут;

Процедура Сформировать()
	ВМ = СоздатьОбъект("ВыполняемыйМодуль");
	Атрибут = СоздатьОбъект("Справочник.Контрагенты");


	ТекстМодуля = "
	|ТекущийВид = Атрибут.Вид();
	|Сообщить(ТипЗначенияСтр(Атрибут));
	|";

	ВМ.УстановитьМодуль(ТекстМодуля);
	ВМ.НазначитьКонтекст(Контекст);
	ВМ.КомпилироватьМодуль();
	ВМ.ВыполнитьМодуль();
	Сообщить(ВМ.ТекущийВид);
КонецПроцедуры 



вариант 2

Код
Выбрать все
Процедура Сформировать()
	ВМ = СоздатьОбъект("ВыполняемыйМодуль");
	Атрибут = СоздатьОбъект("Справочник.Контрагенты");


	ТекстМодуля = "
	|Процедура Проц1(Парам)
	|	ТекущийВид = Парам.Вид();
	|	Сообщить(ТипЗначенияСтр(Парам));
	|КонецПроцедуры
	|";

	ВМ.УстановитьМодуль(ТекстМодуля);
	ВМ.КомпилироватьМодуль();
	ВМ.ВыполнитьМодуль();
	ВМ.Проц1(Атрибут);
КонецПроцедуры 

  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
kentavr27
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 40
Зарегистрирован: 04. Июня 2008
Re: Help me please... ВыполняемыйМодуль
Ответ #2 - 13. Февраля 2011 :: 16:42
Печать  
Спасибо.  Очень довольный
Хотя несколько сложнее чем ожидалось, но тем не менее в такой реализации работает.
1-ый вариант гораздо удобней, но он не годиться для ГМ.
2-ой гдится, но более муторный Улыбка
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Help me please... ВыполняемыйМодуль
Ответ #3 - 14. Февраля 2011 :: 06:00
Печать  
Вариант 3.
Код
Выбрать все
ВМ = СоздатьОбъект("ВыполняемыйМодуль");
Атрибут = СоздатьОбъект("Справочник.Клиенты");
ТекстМодуля = "
|ТекущийВид = Вид();
|Сообщить(ТипЗначенияСтр(Контекст));
|";
ВМ.УстановитьМодуль(ТекстМодуля);
ВМ.НазначитьКонтекст(Атрибут);
ВМ.КомпилироватьМодуль();
ВМ.ВыполнитьМодуль();
 

  
Наверх
 
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Help me please... ВыполняемыйМодуль
Ответ #4 - 14. Февраля 2011 :: 11:58
Печать  
orefkov писал(а) 14. Февраля 2011 :: 06:00:
Вариант 3.
Код
Выбрать все
ВМ = СоздатьОбъект("ВыполняемыйМодуль");
Атрибут = СоздатьОбъект("Справочник.Клиенты");
ТекстМодуля = "
|ТекущийВид = Вид();
|Сообщить(ТипЗначенияСтр(Контекст));
|";
ВМ.УстановитьМодуль(ТекстМодуля);
ВМ.НазначитьКонтекст(Атрибут);
ВМ.КомпилироватьМодуль();
ВМ.ВыполнитьМодуль();
 


Ух ты блин! А я такого и не подозревал! Думал что только ГК можно назначит. Спасибо за науку!
  
Наверх
ICQ  
IP записан
 
kentavr27
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 40
Зарегистрирован: 04. Июня 2008
Re: Help me please... ВыполняемыйМодуль
Ответ #5 - 14. Февраля 2011 :: 18:07
Печать  
orefkov писал(а) 14. Февраля 2011 :: 06:00:
Вариант 3.
Код
Выбрать все
ВМ = СоздатьОбъект("ВыполняемыйМодуль");
Атрибут = СоздатьОбъект("Справочник.Клиенты");
ТекстМодуля = "
|ТекущийВид = Вид();
|Сообщить(ТипЗначенияСтр(Контекст));
|";
ВМ.УстановитьМодуль(ТекстМодуля);
ВМ.НазначитьКонтекст(Атрибут);
ВМ.КомпилироватьМодуль();
ВМ.ВыполнитьМодуль();
 



вариант вроде самый оптимальный, но тока не работает.
что-то в нем не так...

(3)Сообщить(ТипЗначенияСтр(Контекст)<<?>>);      Неопознанный оператор
  
Наверх
 
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: Help me please... ВыполняемыйМодуль
Ответ #6 - 14. Февраля 2011 :: 18:32
Печать  
Но это же был набросок!!!
Сделай вот так например:
ВМ = СоздатьОбъект("ВыполняемыйМодуль");
     Атрибут = СоздатьОбъект("Справочник.Контрагенты");
     ТекстМодуля = "
     |Функция ВернутьКонтекст(Конт)
     |Возврат Конт;
     |КонецФункции
     |ТекущийВид = Вид();
     |Сообщить(""ТекущийВид=""+ТекущийВид);
     |Сообщить(""ТипЗначенияСтр=""+ТипЗначенияСтр(ВернутьКонтекст(Контекст)));
     |";
     ВМ.УстановитьМодуль(ТекстМодуля);
     ВМ.НазначитьКонтекст(Атрибут);
     ВМ.КомпилироватьМодуль();
     ВМ.ВыполнитьМодуль();
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Help me please... ВыполняемыйМодуль
Ответ #7 - 15. Февраля 2011 :: 08:49
Печать  
zk96 писал(а) 14. Февраля 2011 :: 18:32:
Но это же был набросок!!!
Сделай вот так например:
ВМ = СоздатьОбъект("ВыполняемыйМодуль");
     Атрибут = СоздатьОбъект("Справочник.Контрагенты");
     ТекстМодуля = "
     |Функция ВернутьКонтекст(Конт)
     |Возврат Конт;
     |КонецФункции
     |ТекущийВид = Вид();
     |Сообщить(""ТекущийВид=""+ТекущийВид);
     |Сообщить(""ТипЗначенияСтр=""+ТипЗначенияСтр(ВернутьКонтекст(Контекст)));
     |";
     ВМ.УстановитьМодуль(ТекстМодуля);
     ВМ.НазначитьКонтекст(Атрибут);
     ВМ.КомпилироватьМодуль();
     ВМ.ВыполнитьМодуль();

Точно, забыл, что в ТипЗначенияСтр нельзя просто передать Контекст (тупой компилятор блин)
Но обычно в типовых есть в ГМ глВзятьКонтекст, либо тогда просто в глобальнике добавить эту функцию (ВернутьКонтекст), тогда в ВыполняемомМодуле ее можно не описывать
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Help me please... ВыполняемыйМодуль
Ответ #8 - 15. Февраля 2011 :: 08:55
Печать  
avgreen писал(а) 14. Февраля 2011 :: 11:58:
Ух ты блин! А я такого и не подозревал! Думал что только ГК можно назначит. Спасибо за науку!

Да любой объект можно назначить контекстом модулю.
И тогда в нем возможен доступ к методам и свойствам объекта без точки, можно сэкономить время на их разыменовывании, тк номера методов и свойств компилятор вычислит один раз при компиляции, а не каждый раз при выполнении.
Хотя эффект скорее всего будет заметен только на каких-либо длительных циклах, например, 1000 раз строку в ТЗ добавить.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Help me please... ВыполняемыйМодуль
Ответ #9 - 15. Февраля 2011 :: 13:09
Печать  
orefkov писал(а) 15. Февраля 2011 :: 08:55:
avgreen писал(а) 14. Февраля 2011 :: 11:58:
Ух ты блин! А я такого и не подозревал! Думал что только ГК можно назначит. Спасибо за науку!

Да любой объект можно назначить контекстом модулю.
И тогда в нем возможен доступ к методам и свойствам объекта без точки, можно сэкономить время на их разыменовывании, тк номера методов и свойств компилятор вычислит один раз при компиляции, а не каждый раз при выполнении.
Хотя эффект скорее всего будет заметен только на каких-либо длительных циклах, например, 1000 раз строку в ТЗ добавить.

Эту функцию твоя ТурбоБЛ в составе 1С++ уже выполняет,так что функционал не нужен.
  

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
ОтправитьПечать