Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема ExecuteModule доступ к модулю контекста (число прочтений - 5213 )
Wasa
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 5
Зарегистрирован: 14. Ноября 2006
ExecuteModule доступ к модулю контекста
14. Ноября 2006 :: 12:04
Печать  
Доброго всем.
Объясните плз. глупому, каким образом организовать доступ к переменным текущей процедуры/функции при использовании  класса "ВыполняемыйМодуль".
Что нужно:
На форме есть таблица значений. В нее необходимо в цикле записывать новые строки, при этом  некие значения переменных, определенных в процедуре обработки, должны менять свои значения при выполнении ExecuteModule,  созданного в этой же процедуре. После чего (там же) происходит запись значения переменных по колонкам строки таблицы.
Пример кода:

// Переменная Табл содержит таблицу значений, 2 колонки Номенклатура и Количество
// Переменная Номенклатура содержит ссылку на элемент справочника

Процедура ОбработатьКомплектацию(Табл, Номенклатура)
     
     ВыполняемыйМодуль=СоздатьОбъект("ExecuteModule");
     
     СправКомплектации  = СоздатьОбъект("Справочник.Комплектация");   //подчиненный Номенклатуре справочник
     СправКомплектации.ИспользоватьВладельца(Номенклатура);
     СправКомплектации.ВыбратьЭлементы();
     Пока СправКомплектации.ПолучитьЭлемент()=1 Цикл
           
           Количество=СправКомплектации.Количество;
           
           
           ВыбСтрока="Перем Количество; Количество=1;";  // код для выполнения в  "ВыполняемыйМодуль" 
           
           
           Если НЕ (СокрЛП(ВыбСтрока)="") Тогда
                 
                 ВыполняемыйМодуль.УстановитьМодуль(ВыбСтрока);
                 
                 Если ВыполняемыйМодуль.Compile()=0 тогда
                       Предупреждение("Ошибка");
                 Иначе
                       ВыполняемыйМодуль.ПрисоединитьТекущийМодуль();  //ну, на всякий  Круглые глаза
                       ВыполняемыйМодуль.Количество=Количество;
                       
                       ВыполняемыйМодуль.Execute();
                       //***********************************
                       //Вот на этом месте мне нужно получить значение перем. Количество, переопределенное
                       //в ВыполняемыйМодуль. Как это сделать?
                       

                       
                 КонецЕсли;
           КонецЕсли;

           Табл.НоваяСтрока();
           табл.Количество=Количество;
           Табл.Номенклатура=Номенклатура; //Собственно, результат который нужен.      С правильным количеством.      

     КонецЦикла;   
     
     
КонецПроцедуры


Внимание, ответ:

                       //***********************************
                       //Вот на этом месте мне нужно получить значение перем. Количество, переопределенное
                       //в ВыполняемыйМодуль. Как это сделать?
Количество=ВыполняемыйМодуль.Количество;

И всего то пустяков  Класс
« Последняя редакция: 14. Ноября 2006 :: 13:57 - Wasa »  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ExecuteModule доступ к модулю контекста
Ответ #1 - 14. Ноября 2006 :: 12:13
Печать  
ИМХО какой ты изврат хочешь Печаль
Неужели обычными процедурами ничего нельзя решить?
Типа вызов
ИзменениеКоличества(Количество), а внутри процедуры меняешь количество как хочешь. Ведь у 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: ExecuteModule доступ к модулю контекста
Ответ #2 - 14. Ноября 2006 :: 12:15
Печать  
А вызываеешь так
ВМ.ИзменитьКоличество(Количество)

ЗЫ не забудь написать процедуру ИзменитьКоличество как Экспортную Улыбка
не помню, обязателен экспорт или нет Печаль
  

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


I Love YaBB 2!

Сообщений: 5
Зарегистрирован: 14. Ноября 2006
Re: ExecuteModule доступ к модулю контекста
Ответ #3 - 14. Ноября 2006 :: 12:25
Печать  
Данная строка в первом посте приведена как пример того, что может выполняться в "ВыполняемыйМодуль":

ВыбСтрока="Перем Количество; Количество=1;";  // код для выполнения в  "ВыполняемыйМодуль"   

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

Гораздо больше интересует ответ "как" а не вопрос "зачем"
  
Наверх
 
IP записан
 
Wasa
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 5
Зарегистрирован: 14. Ноября 2006
Re: ExecuteModule доступ к модулю контекста
Ответ #4 - 14. Ноября 2006 :: 12:32
Печать  
artbear писал(а) 14. Ноября 2006 :: 12:13:
Или расскажи задачу поподробнее, что тебе нужно - зачем менять количество?


Рассказываю:  Класс

1. Количество ни причем. Взято просто как пример.
2. Комплектация на самом деле тоже ни при чем.  Класс
3. А реальная задача для решения такова: Возможность расчета неких параметров комплектации исходя из параметров готового изделия.  Чтобы была возможность задав предопределенные параметры готового изделия вывести параметры всех его компонентов по формулам, хранящимся в самих комплектующих. Причем сами формулы могут быть произвольными а комплекты разными.
  
Наверх
 
IP записан
 
Wasa
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 5
Зарегистрирован: 14. Ноября 2006
Re: ExecuteModule доступ к модулю контекста
Ответ #5 - 14. Ноября 2006 :: 12:37
Печать  
artbear писал(а) 14. Ноября 2006 :: 12:13:
Решение для тебя есть и с помощью ВМ.
ВыбрСтрока = "Процедура ИзменитьКоличество(Количество) Количество = 1; КонецПроцедуры";

Это вариант. но параметров много. И хочется красиво  Подмигивание
  
Наверх
 
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: ExecuteModule доступ к модулю контекста
Ответ #6 - 14. Ноября 2006 :: 12:48
Печать  
Wasa
А почему классы не применяешь?
зы: в смысле, классы позволяют сделать "красиво".
  
Наверх
ICQ  
IP записан
 
Wasa
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 5
Зарегистрирован: 14. Ноября 2006
Re: ExecuteModule доступ к модулю контекста
Ответ #7 - 14. Ноября 2006 :: 13:54
Печать  
Есть!!!
Спасибо artbear, подсказал светлую мысль:

Итак, в моем примере Количество после выполнения ВМ надо получать через

Количество=ВыполняемыйМодуль.Количество;

И всего то пустяков  Смех

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ExecuteModule доступ к модулю контекста
Ответ #8 - 14. Ноября 2006 :: 13:57
Печать  
Точку после ВМ забыл Улыбка
  

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