It is working corectly in logistics form, but not in second. Here is the code that is working in Logistics form:
public class ReportRun extends ObjectRun
{
DialogField dialogReportLanguageId;
LanguageId reportLanguageId;
container projIdsCon;
int rowNo;
boolean first;
InvoiceDate invoiceDate;
container otherNotes;
DataAreaId companyId;
#Define.CurrentVersion(2)
#LocalMacro.CurrentList
reportLanguageId
#EndMacro
}
//////////////
void initFromCaller(Args _args)
{
InventTransferId callerId;
QueryBuildDataSource queryBuildDataSource;
;
if (! _args ||
! _args.caller() ||
_args.dataset() != tablenum(GIR_Logistics) )
return;
callerId = _args.record().(fieldnum(GIR_Logistics, ProjId));
queryBuildDataSource = element.query().dataSourceTable(tablenum(GIR_Logistics));
if (! queryBuildDataSource.findRange(fieldnum(GIR_Logistics, ProjId)))
{
queryBuildDataSource.addRange(fieldnum(GIR_Logistics, ProjId));
}
queryBuildDataSource.findRange(fieldnum(GIR_Logistics, ProjId)).value(queryValue(callerId));
}
///////////////
boolean validate(Object calledFrom)
{
boolean ret = true;
;
if (reportLanguageId && !LanguageTable::exist(reportLanguageId))
{
ret = checkfailed(StrFmt("@GEE30055", reportLanguageId));
}
return ret;
}
//////////////
public boolean mustLoadSaveQuery()
{
return !conlen(projIdsCon);
}
/////////////
private void initFromArgs(Args args)
{
FormDataSource formDataSource;
GIR_Logistics logistics_args;
;
if( element.args() &&
element.args().dataset() &&
element.args().dataset() == tablenum(GIR_Logistics) &&
element.args().record().dataSource())
{
formDataSource = element.args().record().dataSource();
for(logistics_args = formDataSource.getFirst(true) ? formDataSource.getFirst(true): element.args().record();
logistics_args;
logistics_args = formDataSource.getNext())
{
projIdsCon += logistics_args.ProjId;
}
}
}
////////////////
public Query initQuery(Query _query)
{
QueryBuildDatasource qbdsLogistics;
QueryBuildRange qbrProjInvoiceId;
container subProjIdsCon;
int conI;
;
query = _query;
if(conlen(projIdsCon))
{
qbdsLogistics = element.query().dataSourceTable(tablenum(GIR_Logistics));
qbdsLogistics.clearRanges();
for(conI = 1; conI <= conlen(projIdsCon); conI++)
{
if(conlen(subProjIdsCon) >= 10)
{
qbrProjInvoiceId = qbdsLogistics.addRange(fieldnum(GIR_Logistics, ProjId));
qbrProjInvoiceId.value(con2str(subProjIdsCon, ‘,’));
subProjIdsCon = connull();
}
subProjIdsCon += conpeek(projIdsCon, conI);
}
if(conlen(subProjIdsCon))
{
qbrProjInvoiceId = qbdsLogistics.addRange(fieldnum(GIR_Logistics, ProjId));//
qbrProjInvoiceId.value(con2str(subProjIdsCon, ‘,’));
}
}
return query;
}
//////////////
public void run()
{
;
element.design().languageID(reportLanguageId);
super();
}
////////////
public boolean fetch()
{
boolean ret;
ret = super();
if(ret && !first)
{
if (conlen(otherNotes)) // RMT
{
element.execute(2);
}
else
{
element.execute(1);
}
}
return ret;
}
///////////
///Suiesko imone, su kuria pasirasyta logistikos apdorojimo sutartis
void findLogisticsCompany()
{
GIR_CustContract custContract;
;
////Imones informacija
custContract = GIR_CustContract::findByAgreementDate(GIR_Logistics.Orderer, GIR_Logistics.TerritoryInDate, GIR_AgreementType::Logistics);
if (custContract && custContract.CompanyId)
{
companyId = custContract.CompanyId;
}
else
{
companyId = curExt();
}
}
///////////
public void init()
{
;
first = true;
super();
this.initFromArgs(element.args());
}
//////////
public boolean send(Common _cursor, int _level=1, boolean _triggerOffBody=TRUE, boolean _newPageBeforeBody=FALSE)
{
boolean ret;
if(_cursor.TableId == tablenum(GIR_Logistics))
{
if(!first)
{
element.execute(1);
element.newPage();
rowNo = 0;
}
else
{
first = false;
}
}
ret = super(_cursor, _level, _triggerOffBody, _newPageBeforeBody);
return ret;
}
///////////
public void initParmDefault()
{
;
reportLanguageId = CompanyInfo::languageId();
}
///////////
public Object dialog(Object _dialog)
{
DialogRunbase dialog;
;
dialog = super(_dialog);
dialog.addGroup("@SYS7764");
dialogreportLanguageId = dialog.addFieldValue(typeId(GIR_LanguageId), reportLanguageId, “@SYS93120”, “@GEE30054”);
return dialog;
}
////////////
public boolean getFromDialog()
{
;
reportLanguageId = dialogReportLanguageId.value();
return true;
}
///////////
public container pack()
{
return [#CurrentVersion, #CurrentList];
}
/////////
public boolean unpack(container _packedClass)
{
boolean ret;
Version version = RunBase::getVersion(_packedClass);
switch (version)
{
case #CurrentVersion :
[version, #CurrentList] = _packedClass;
ret = true;
break;
default :
ret = false;
}
return ret;
}
So, What i should change, because in you example, there is no initFromArgs and InitQuery methods which i tried to change to anorther form.
thanks a lot.