Переключение на Главную Страницу Страницы: 1 [2] 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Баг - Сервис.ВыполнитьФункцию портит Контекст (число прочтений - 11103 )
fez
Forum Administrator
1c++ power user
Отсутствует


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Баг - Сервис.ВыполнитьФункцию портит Контекст
Ответ #15 - 24. Июня 2008 :: 12:35
Печать  
blindvic писал(а) 24. Июня 2008 :: 12:27:
А че, не работает тест, что прикрепил в теме в начале?

А че, вот это: http://www.1cpp.ru/forum/YaBB.pl?num=1214212876/11#11 ты не прочитал? Вторая обработка синтаксис-контроль не проходит.
  
Наверх
www  
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Баг - Сервис.ВыполнитьФункцию портит Контекст
Ответ #16 - 24. Июня 2008 :: 13:48
Печать  
Скачал 1с++ со встроенным формекс. баг не проявляется. Всем спасибо за внимание - похоже что моя проблема решена. Очень довольный
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Баг - Сервис.ВыполнитьФункцию портит Контекст
Ответ #17 - 24. Июня 2008 :: 14:33
Печать  
fez писал(а) 24. Июня 2008 :: 12:35:
blindvic писал(а) 24. Июня 2008 :: 12:27:
А че, не работает тест, что прикрепил в теме в начале?

А че, вот это: http://www.1cpp.ru/forum/YaBB.pl?num=1214212876/11#11 ты не прочитал? Вторая обработка синтаксис-контроль не проходит.


Прошу прощения, пропустил пост. Сервис - глобальный объект класса "Сервис".

РасположениеФайла - спасибо за совет.
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Баг - Сервис.ВыполнитьФункцию портит Контекст
Ответ #18 - 25. Июня 2008 :: 06:29
Печать  
Установил Рекомендованный стабильный релиз с раздельной загрузкой FormEx: 2.5.0.5
Formex 2.0.5.86

Не срабатывает Сервис.ВыполнитьФункцию().

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Баг - Сервис.ВыполнитьФункцию портит Контекст
Ответ #19 - 25. Июня 2008 :: 06:33
Печать  
Используй ВыполняемыйМодуль из 1С++, там есть аналогичные функции без данной проблемы.
  

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



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Баг - Сервис.ВыполнитьФункцию портит Контекст
Ответ #20 - 25. Июня 2008 :: 08:11
Печать  
Спасибо. Использовал это:
Код
Выбрать все
ВыпМодуль = СоздатьОбъект("ВыполняемыйМодуль");
Если ТипЗначенияСтр(Значение) <> "СписокЗначений" Тогда Значение = СоздатьОбъект("СписокЗначений"); КонецЕсли;
ВыпМодуль.ВыполнитьФункциюКонтекста(Контекст, ... 


Работает.
А как работать с переменной имя к-й заранее не известно? В доках нашел только это:
Цитата:
<ИмяПеременной>

   Доступ: чтение и запись.

   Тип: Любой.

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


И вообще, куда мне лучше постить эти вопросы? И где мне лучше искать эти ответы, если они есть, а то документация скудная и иногад непонятная. Есть ли какая-нибудь демо конфа со всеми фичами?
Я, например, пытался протестировать внешнюю обработку отсюда (http://www.1cpp.ru/forum/YaBB.pl?num=1153516819/3#3) с примером активикс-браузер. Выдает ошибку
Цитата:
p=createObject("СервисРасшФормы");
{D:\WWW.AX.TEST.V3.ERT(189)}: Неудачная попытка создания объекта (СервисРасшФормы)

Пошарил на форуме, увидел упоминание о том, что надо заменить "СервисРасшФормы" на "Сервис". Не помогает:
Цитата:
p.ЗагрузитьМодуль();  
{D:\WWW.AX.TEST.V3.ERT(190)}: Поле агрегатного объекта не обнаружено (ЗагрузитьМодуль)
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Баг - Сервис.ВыполнитьФункцию портит Контекст
Ответ #21 - 25. Июня 2008 :: 09:45
Печать  
Иди в поиск по "ВыполнитьМодуль" и смотри примеры использования ВыполняемыйМодуль.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Баг - Сервис.ВыполнитьФункцию портит Контекст
Ответ #22 - 25. Июня 2008 :: 09:46
Печать  
ЗагрузитьМодуль из примера удали - этот метод устарел и удален за ненужностью.
  

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



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Баг - Сервис.ВыполнитьФункцию портит Контекст
Ответ #23 - 25. Июня 2008 :: 13:52
Печать  
Насчет АктивиКса, к-й на форме отображает страницу браузера. У меня получилось. Может кому пригодится:
Код
Выбрать все
	_Форма = СоздатьОбъект("Форма");
	_Форма.УстановитьФорму(Форма);
	m_ptr = _Форма.СоздатьЭлементУправления(СоздатьОбъект("АктивИкс"), "axWBrowser");
	m_ptr.СоздатьЭУ("Shell.Explorer.2"); 

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



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Баг - Сервис.ВыполнитьФункцию портит Контекст
Ответ #24 - 26. Июня 2008 :: 16:19
Печать  
Код
Выбрать все
//Вернет значение реквизита формы
Функция ПолучитьЗначениеРеквизита(НаименРеквизита)
	Модуль = СоздатьОбъект("ВыполняемыйМодуль");

	ТекстМод = Шаблон("
	|Функция ПолучитьАтрибут()
	|	Возврат [НаименРеквизита];
	|КонецФункции
	|");
	Модуль.РазрешитьИсключения();
	Модуль.НазначитьКонтекст(Контекст);
	Попытка
		Модуль.УстановитьМодуль(ТекстМод);
		Модуль.КомпилироватьИВыполнитьМодуль();
	Исключение
		Сообщить("Не вернуть атрибут. Сообщите программисту.");
		Возврат ""
	КонецПопытки;
	Возврат Модуль.ПолучитьАтрибут();
КонецФункции // ПолучитьЗначениеРеквизита(НаименРеквизита)
 



Значит получить занчение переменной контекста - только там образом?
Нету чего-нибудь вроде ВыполняемыМодуль.ПолучитьЗначениеПеременной(ИмяПеременной) ?
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Баг - Сервис.ВыполнитьФункцию портит Контекст
Ответ #25 - 26. Июня 2008 :: 17:58
Печать  
blindvic писал(а) 26. Июня 2008 :: 16:19:
Значит получить занчение переменной контекста - только там образом?

Если загрузить 1С++, то можно использовать встроенный туда TurboBL и обратиться напрямую, КонтекстФормы.Переменная
  
Наверх
www  
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Баг - Сервис.ВыполнитьФункцию портит Контекст
Ответ #26 - 27. Июня 2008 :: 06:02
Печать  
fez писал(а) 26. Июня 2008 :: 17:58:
blindvic писал(а) 26. Июня 2008 :: 16:19:
Значит получить занчение переменной контекста - только там образом?

Если загрузить 1С++, то можно использовать встроенный туда TurboBL и обратиться напрямую, КонтекстФормы.Переменная

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Баг - Сервис.ВыполнитьФункцию портит Контекст
Ответ #27 - 27. Июня 2008 :: 06:08
Печать  
Тогда все просто через ВМ без всяких извращенных Шаблонов
Код
Выбрать все
Функция ПолучитьЗначениеРеквизита(КонтФормы, НаименРеквизита)
	Модуль = СоздатьОбъект("ВыполняемыйМодуль");

	ТекстМод =  
	|Функция ПолучитьАтрибут(КонтФормы)
	|	Возврат КонтФормы."+НаименРеквизита+";
	|КонецФункции
	|");

	Модуль.УстановитьМодуль(ТекстМод);
	Модуль.КомпилироватьИВыполнитьМодуль();

	Возврат Модуль.ПолучитьАтрибут(КонтФормы);
КонецФункции // ПолучитьЗначениеРеквизита(НаименРеквизита)
 



Причем так можно обратиться как к Переменным модуля формы, так и к атрибутам самой формы

ЗЫ ВМ как раз для подобных хитростей и был спроектирован Улыбка
  

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



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Баг - Сервис.ВыполнитьФункцию портит Контекст
Ответ #28 - 03. Июля 2008 :: 10:03
Печать  
artbear писал(а) 27. Июня 2008 :: 06:08:
Тогда все просто через ВМ без всяких извращенных Шаблонов
Код
Выбрать все
Функция ПолучитьЗначениеРеквизита(КонтФормы, НаименРеквизита)
	Модуль = СоздатьОбъект("ВыполняемыйМодуль");

	ТекстМод =  
	|Функция ПолучитьАтрибут(КонтФормы)
	|	Возврат КонтФормы."+НаименРеквизита+";
	|КонецФункции
	|");

	Модуль.УстановитьМодуль(ТекстМод);
	Модуль.КомпилироватьИВыполнитьМодуль();

	Возврат Модуль.ПолучитьАтрибут(КонтФормы);
КонецФункции // ПолучитьЗначениеРеквизита(НаименРеквизита)
 



Причем так можно обратиться как к Переменным модуля формы, так и к атрибутам самой формы

ЗЫ ВМ как раз для подобных хитростей и был спроектирован Улыбка


У меня что-то не получается установить значение переменой. Мой код:
Код
Выбрать все
Процедура глУстановитьПеременнуюКонтекста(Конт, ИмяПеременной, Значение)
	Модуль = СоздатьОбъект("ВыполняемыйМодуль");
	Модуль.УстановитьМодуль("Процедура УстановитьПеременную(Значение)"
		"" + ИмяПеременной + " = Значение;"
		"КонецПроцедуры");
	Модуль.НазначитьКонтекст(Конт);
	Модуль.КомпилироватьИВыполнитьМодуль();
	Модуль.УстановитьПеременную(Значение);
КонецПроцедуры 


Ошибок не выдает, но значение реквизата форма остается неизменным.
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Баг - Сервис.ВыполнитьФункцию портит Контекст
Ответ #29 - 03. Июля 2008 :: 10:17
Печать  
Такое тоже не работает:
Код
Выбрать все
Процедура глУстановитьПеременнуюКонтекста(Конт, ИмяПеременной, Значение)
	Модуль = СоздатьОбъект("ВыполняемыйМодуль");
	Модуль.УстановитьМодуль("Процедура УстановитьПеременную(Конт, Значение)"
		"Конт." + ИмяПеременной + " = Значение;"
		"КонецПроцедуры");
	Модуль.НазначитьКонтекст(Конт);
	Модуль.КомпилироватьИВыполнитьМодуль();
	Модуль.УстановитьПеременную(Конт, Значение);
КонецПроцедуры 

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