23.12.2008, 17:46 | #1 |
Участник
|
Как передать параметр из 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; } |
|