AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.12.2008, 17:46   #1  
Yury J is offline
Yury J
Участник
Аватар для Yury J
 
11 / 34 (2) +++
Регистрация: 30.10.2007
Как передать параметр из Job-a в Class с возможностью перезаписи?
Всем доброго времени суток!
У меня такая проблема:
Я запускаю сценарий (Job) из класса. Но передать значение переменной (даже при использовании системных классов) после первого "захода" в Job не получается. Предыдущее значение не перезаписывается.
Вариант временно хранить в таблице не подходит. Требование Клиента.

Уважаемые коллеги, подскажите, как мне решить эту проблему.

Исходные данные:

Job:

X++:
static AmountMST ScenarioScript134218100335()
{
/////////////////////////////////////// Системное объявление переменных. Не редактировать! -->
Date                                             startDate;               // Начальная дата для пересчета сценария
Date                                             endDate;                // Конечная дата для пересчета сценария
AmountMST                                 reslt;                      // Промежуточный результат пересчета сценария
JobName                                      jobName;              // Название сценария \Data Dictionary\Extended Data Types\JobName
LedgerRRGOperationTable_RU  ledgerRRGOperationTable; // Запись таблицы "Оперции над ячейкой отчета"
LedgerRRGCellTable_RU           ledgerRRGCellTable;      // Запись таблицы "Ячейки отчетов"
LedgerPeriodCode                      ledgerPeriodCode;        // Запись таблицы "Интервалы дат"
RefRecId                                      RRecId;    // RecId записи таблицы "Оперции над ячейкой отчета"
job                                                jb = new Job();          // Экземпляр сценария
JobName                                      rr;                      // Значение RecId
AmountMST                                 result;      // Промежуточный результат пересчета сценария
AmountMST                                 relt;      // Результат пересчета сценария
/////////////////////////////////////// Системное объявление переменных. Не редактировать! <--
// USER VARIABLES -->
CustTable  ct;
CustTrans  ctr;
VendTable  vt;
VendTrans  vtr;
AmountMst Amount;
// USER VARIABLES <--
;
////////////////////////////////////// Системная инициализация переменных. Не редактировать! -->
jobName = funcname();
// Выбор записи таблицы "Оперции над ячейкой отчета"
ttsbegin;
select firstonly forupdate ledgerRRGOperationTable
where ledgerRRGOperationTable.CIT_JobName == jobName;
// Выбор записи таблицы "Ячейки отчетов"
select firstonly forupdate ledgerRRGCellTable
where ledgerRRGCellTable.RecId == ledgerRRGOperationTable.CellRecId;
// Если в записи таблицы "Оперции над ячейкой отчета" определен интервал дат из таблицы "Интервалы дат"
if(ledgerRRGOperationTable.LedgerPeriodCode)
{
select firstonly forupdate ledgerPeriodCode
where ledgerPeriodCode.Code == ledgerRRGOperationTable.LedgerPeriodCode;
startDate = ledgerPeriodCode.StartFixedDate;
endDate = ledgerPeriodCode.EndFixedDate;
}
else
{
// В противном случае определяем интервал дат из таблиц "Ячейки отчетов" и "Интервалы дат"
select firstonly forupdate ledgerPeriodCode
where ledgerPeriodCode.Code == ledgerRRGCellTable.LedgerPeriodCode;
startDate = ledgerPeriodCode.StartFixedDate;
endDate = ledgerPeriodCode.EndFixedDate;
}
rr = substr(jobName,23,10); // Определение значения RecId записи таблицы "Оперции над ячейкой отчета"
RRecId = str2int64(rr);
////////////////////////////////////// Системная инициализация переменных. Не редактировать! <--
// USER CODE -->
Amount=0;
while select  *  from ct
WHERE  ct.CustGROUP == "UPS"      ||
       ct.CustGROUP == "REGION"
{
  select sum(AmountMst) from ctr
  WHERE  ctr.ACCOUNTNUM ==ct.ACCOUNTNUM &&
 (ctr.TRANSDATE >=startdate  &&  ctr.transDATE<= endDATE);
  IF (ctr.AmountMst < 0)   AMOUNT+=ABS(ctr.AmountMst );
}
while select  * from  vt 
WHERE  vt .VendGroup   == "PUMA"          ||
                 vt .VendGroup  == "SERIAL"
{
   select sum(amountMst) from vtr
   WHERE  vtr.AccountNum == vt.ACCOUNTNUM &&
    (vtr.TRANSDATE >=startdate &&  vtr.transDATE<= endDATE);
   IF (vtr.AmountMst < 0)   AMOUNT+=ABS(vtr.AmountMst );
}
relt=amount;
// USER CODE <--
//////////////////////////////// Присвоение значения результата пересчета сценария. Не редактировать! -->
ledgerRRGOperationTable.CIT_Result = relt; //  \Data Dictionary\Tables\LedgerRRGOperationTable_RU\Fields\ Result добавленное поле где мы временно храним значение переменной
ledgerRRGOperationTable.update();
appl.parmResssy(relt);  // Здесь проблемное место. Передаем значение переменной во вновь созданный метод \Classes\Application\parmResssy для \Classes\Application\classDeclaration: AmountMST resssy;
ttscommit;
//////////////////////////////// Присвоение значения результата пересчета сценария. Не редактировать! <--
return relt;
}

\Classes\LedgerRRGRunReport_RU\CIT_ScenarioScriptVend:

X++:
protected AmountMST CIT_ScenarioScriptVend(LedgerRRGAccountNumMap_RU _ScenarioAccountNumMap,  // Таблица настроек Генератора
                                           DateCode                  _ScenarioDateCode,       // Скрипт сценария (Не нужно)
                                           CIT_JobName               _JobName,                // Название job-а
                                           FreeTxt                   _ScenarioFreeTxt)        // Скрипт сценария (Не нужно)
{
    #AOT
    AmountMST                   resultVend;
    AmountMST                   ressst;
    job                         j= new Job();
    str                         jobName;                  // Название job-а
    LedgerRRGOperationTable_RU  ledgerRRGOperationTable;  // Таблица настроек Генератора
    ;
    jobName = _JobName;
    j = TreeNode::findNode(#JobsPath + "\\" + JobName);
    if(j)
    j.AOTrun();
    resultVend = appl.parmResssy(); // Проблемное место. Не перезаписывается значение переменной.
    return resultVend;
}

\Classes\Application\parmResssy:

X++:
public AmountMST parmResssy(AmountMST _resssy = resssy)
{
    ;
    resssy = _resssy;
    return resssy;
}
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Kashperuk Ivan: Description of ClassBuild class:Today I want to ... Blog bot DAX Blogs 0 26.01.2007 05:51
Передать контейнер в job через COM sao DAX: Программирование 5 21.02.2006 19:34
Можно ли передать котрол формы как параметр метода? nicky DAX: Программирование 6 23.05.2005 18:40
Передать параметр Hobo DAX: Программирование 2 05.03.2004 19:18
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:59.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.