Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема ВыполняемыйМодуль (число прочтений - 3662 )
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
ВыполняемыйМодуль
04. Июня 2007 :: 14:05
Печать  
Не как немогу въехать
Есть динамически получаемый текст Модуля.
Типа:
Перем Значение1;
Функция Проверить(Конт)
вПодходитУсловие=0;
Если (Конт.ВидТорговли = Значение1) Тогда
     вПодходитУсловие=1;
КонецЕсли;
возврат вПодходитУсловие;
КонецФункции
Причем
Перем Значение1;
............
Перем Значение5;
и соответственно будет меняться сама функция Проверить() в зависимости от количества переменных ЗначениеN
Их количество не определено
может быть и одна и 100.
Перед этим у меня есть список со строковыми представлениями и значениями этих переменных.
Как мне их передвть в ВыполняемыйМодуль?
  
Наверх
 
IP записан
 
Phoenix
Senior Member
****
Отсутствует


itpath.ru

Сообщений: 398
Местоположение: Москва
Зарегистрирован: 15. Июня 2006
Пол: Мужской
Re: ВыполняемыйМодуль
Ответ #1 - 04. Июня 2007 :: 14:30
Печать  
     Модуль = СоздатьОбъект("ВыполняемыйМодуль");
     Модуль.УстановитьМодуль(рПолеМодуля);
     Модуль.НазначитьКонтекст(Контекст); // вот тут передается контекст на тек.модуль.
     Модуль.КомпилироватьМодуль();
     Модуль.ВыполнитьМодуль();
---
надеюсь правильно понял тебя.
  

Лень двигатель прогресса.&&http://www.itpath.ru&&;
Наверх
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: ВыполняемыйМодуль
Ответ #2 - 04. Июня 2007 :: 14:34
Печать  
Несовсем.
вот кусок где я кое что делаю
     Пока ИТЗ.ПолучитьСтроку()=1 Цикл
           лАкция=ИТЗ.Акция;
           Если ИТЗ.НомерКолонки("тзПотомки")>0 Тогда
                 ИТЗГде=ИТЗ.тзПотомки;
                 ИТЗГде.ВыбратьСтроки();
                 Пока ИТЗГде.ПолучитьСтроку()=1 Цикл
                       СпЗначенияУсловий=СоздатьОбъект("СписокЗначений");
                       лГде=ИТЗГде.Где;
                       Если ИТЗГде.НомерКолонки("тзПотомки")>0 Тогда
                             ИТЗУсловия=ИТЗГде.тзПотомки;
                             ИТЗУсловия.ВыбратьСтроки();
                             Пока ИТЗУсловия.ПолучитьСтроку()=1 Цикл
                                   ЗначениеУсловия=ИТЗУсловия.Значение;
                                   Условие="(Конт."+ИТЗУсловия.Условие+" = Значение"+Строка(ИТЗУсловия.НомерУсловия)+")";
                                   НомерУсловия));
                                   Если ТипЗначенияСтр(ЗначениеУсловия)="Справочник" Тогда
                                         Если ЗначениеУсловия.ЭтоГруппа()=1 Тогда
                                               вия.НомерУсловия)+")=1)";
                                         КонецЕсли;
                                   КонецЕсли;
                                   Если ИТЗУсловия.НомерСтроки>1 Тогда
                                         лУсловия=лУсловия+" и "+Условие+"";
                                   Иначе
                                         лУсловия=Условие;
                                   КонецЕсли;
                             КонецЦикла;
                       КонецЕсли;
                       ВыполняемыйМодуль=СоздатьОбъект("ВыполняемыйМодуль");
                       Если лГде="Шапка" Тогда
                             Текст="";
                             Для н=1 По СпЗначенияУсловий.РазмерСписка() Цикл
                                   стр="";
                                   Значение=СпЗначенияУсловий.ПолучитьЗначение(н,стр);
                                   Текст=Текст+"
                                   |Перем "+стр+";";
                             КонецЦикла;
                             Текст=Текст+"
                             |Функция Проверить(Конт)
                             |вПодходитУсловие=0;
                             |Если "+лУсловия+" Тогда
                             |      вПодходитУсловие=1;
                             |КонецЕсли;
                             |возврат вПодходитУсловие;
                             |КонецФункции
                             |
                             |";
                             Сообщить(Текст);
                             ВыполняемыйМодуль.УстановитьМодуль(Текст);
                             ВыполняемыйМодуль.КомпилироватьИВыполнитьМодуль();
                       Иначе
                             
                       КонецЕсли;
                 КонецЦикла;
           КонецЕсли;
     КонецЦикла;
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: ВыполняемыйМодуль
Ответ #3 - 04. Июня 2007 :: 14:36
Печать  
Этот текст находиться в глобальнике
туда передается Конт как контекст проверяемого документа
ИТЗ это таблица с загруженными Условиями.
В условиях соответственно есть Значение1 и т.д.
я их загоняю в ТекстМодуля
но вот как мне присвоить им значения не въеду.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВыполняемыйМодуль
Ответ #4 - 05. Июня 2007 :: 05:36
Печать  
Передавай в ВыполняемыйМодуль как еще один параметр СписокЗначений и создавай в цикле по этому списку набор строк типа "Значение"+Номер +" = "+Список.ПолучитьЗначение("+Номер+");"
  

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


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: ВыполняемыйМодуль
Ответ #5 - 05. Июня 2007 :: 05:38
Печать  
Точно.
Я в принципе так и сделал.
Но уж больно не совсем красиво получилось.
вот окончательно что я сделал:
                       ВыполняемыйМодуль=СоздатьОбъект("ВыполняемыйМодуль");
                       Текст="";
                       Для н=1 По СпЗначенияУсловий.РазмерСписка() Цикл
                             стр="";
                             Значение=СпЗначенияУсловий.ПолучитьЗначение(н,стр);
                             Текст=Текст+"
                             |Перем "+стр+";";
                       КонецЦикла;
                       Текст=Текст+"
                       |Процедура ЗаполнитьЗначения(Сп)
                       |";
                       Для н=1 По СпЗначенияУсловий.РазмерСписка() Цикл
                             стр="";
                             СпЗначенияУсловий.ПолучитьЗначение(н,стр);
                             Текст=Текст+"
                             |"+стр+"=Сп.ПолучитьЗначение("+Строка(н)+");";
                       КонецЦикла;
                       Текст=Текст+"
                       |КонецПроцедуры
                       |";
                       Если лГде="Шапка" Тогда
                             Текст=Текст+"
                             |Функция Проверить(Конт)
                             |вПодходитУсловие=0;
                             |Если "+лУсловия+" Тогда
                             |      вПодходитУсловие=1;
                             |КонецЕсли;
                             |возврат вПодходитУсловие;
                             |КонецФункции
                             |";
                       Иначе
                             Текст=Текст+"
                             |Функция Проверить(Конт)
                             |вПодходитУсловие=0;
                             |Конт.ВыбратьСтроки();
                             |Пока Конт.ПолучитьСтроку()=1 Цикл
                             |Если "+лУсловия+" Тогда
                             |      вПодходитУсловие=1;
                             |КонецЕсли;
                             |КонецЦикла;
                             |возврат вПодходитУсловие;
                             |КонецФункции
                             |";
                       КонецЕсли;
                       ВыполняемыйМодуль.УстановитьМодуль(Текст);
                       ВыполняемыйМодуль.КомпилироватьИВыполнитьМодуль();
                       ВыполняемыйМодуль.ЗаполнитьЗначения(СпЗначенияУсловий);
                       Если ВыполняемыйМодуль.Проверить(Конт)=0 Тогда
                             Возврат;
                       КонецЕсли;
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ВыполняемыйМодуль
Ответ #6 - 05. Июня 2007 :: 05:50
Печать  
varelchik писал(а) 05. Июня 2007 :: 05:38:
Я в принципе так и сделал.
Но уж больно не совсем красиво получилось.

В этом случае тебе нужно избавиться от Значение1, .., ЗначениеН, и переделать код на массив/список/таблицу значений.
Тогда будет все очень просто и красиво Улыбка
  

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