[
    SRSReportParameterAttribute(classStr(ReturnFormContract))
]
class ReturnFormDP extends SrsReportDataProviderPreProcess
{
    ReturnFormHeaderTmp   returnFormHeaderTmp;
    ReturnFormDetailsTmp  returnFormDetailsTmp;
    SalesTable              salesTable;
}
[
    SRSReportDataSetAttribute(tableStr(ReturnFormDetailsTmp))
]
public ReturnFormDetailsTmp getReturnFormDetailsTmp()
{
    select returnFormDetailsTmp;
    return returnFormDetailsTmp;
}
[
    SRSReportDataSetAttribute(tableStr(ReturnFormHeaderTmp))
]
public ReturnFormHeaderTmp getReturnFormHeaderTmp()
{
    select returnFormHeaderTmp;
    return returnFormHeaderTmp;
}
[SysEntryPointAttribute(true)]
public void processReport()
{
    SalesId                 salesId;
    ReturnFormContract    dataContract;
 
    dataContract    = this.parmDataContract();
    salesId         = dataContract.parmSalesId();
    salesTable      = SalesTable::find(salesId);
 
    this.setReturnFormHeaderTmp();
    this.setReturnFormDetailsTmp();
}
private void setReturnFormDetailsTmp()
{
    int         recCount        = 5,
                maxRecCount     = 25,
                a;
    SalesLine   salesLine;
 
    select count(RecId) from salesLine
        where salesLine.SalesId == salesTable.SalesId;
 
    if (recCount < salesLine.RecId)
    {
        recCount = int642int(salesLine.RecId);
    }
    if (recCount > maxRecCount)
    {
        recCount = maxRecCount;
    }
 
    for (a = 0; a < recCount; a++)
    {
        returnFormDetailsTmp.insert();
    }
}
private void setReturnFormHeaderTmp()
{
    InventParameters    inventParameters = InventParameters::find();
    Addressing          addressing;
    InventLocation      inventLocation;
    InventSite          inventSite;
    CompanyInfo         companyInfo = CompanyInfo::find();
    CustPackingSlipJour custPackingSlipJour;
 
    returnFormHeaderTmp.PrintLogo               = NoYes::Yes;
    returnFormHeaderTmp.CompanyName             = companyInfo.name();
    switch (inventParameters.ShipCarrierReturnTo)
    {
        case ShipCarrierReturnTo::Warehouse:
            inventLocation  = InventLocation::find(salesTable.InventLocationId);
            addressing      = inventLocation.logisticsPostalAddress().Address;
            break;
        case ShipCarrierReturnTo::Site:
            inventSite      = inventSite::find(salesTable.InventSiteId);
            addressing      = LogisticsLocationEntity::findPostalAddress(inventSite, LogisticsLocationRoleType::None).Address;
    }
    if (!addressing)
    {
        addressing                              = companyInfo.postalAddress().Address;
    }
    returnFormHeaderTmp.CompanyAddress          = addressing;
    returnFormHeaderTmp.CompanyPhone            = companyInfo.phone();
    returnFormHeaderTmp.CompanyTeleFax          = companyInfo.teleFax();
    returnFormHeaderTmp.CompanyCoRegNum         = companyInfo.CoRegNum;
    returnFormHeaderTmp.CompanyGiro             = companyInfo.Giro;
    returnFormHeaderTmp.CompanyEnterpriseNumber = companyInfo.EnterpriseNumber;
    returnFormHeaderTmp.CompanyLogo             = FormLetter::companyLogo();
    if (companyInfo.EnterpriseCode)
    {
        returnFormHeaderTmp.CompanyEnterpriseCode = companyInfo.EnterpriseCode;
    }
 
    addressing = '';
    select firstonly custPackingSlipJour
        order by RecId desc
        where custPackingSlipJour.SalesId == salesTable.SalesId;
    if (custPackingSlipJour)
    {
        addressing = custPackingSlipJour.deliveryAddress();
    }
    if (!addressing)
    {
        addressing = salesTable.deliveryAddressing();
    }
    returnFormHeaderTmp.CustomerName            = salesTable.customerName();
    returnFormHeaderTmp.CustomerAddress         = addressing;
    returnFormHeaderTmp.SalesId                 = salesTable.SalesId;
 
    returnFormHeaderTmp.insert();
}
Controller:class ReturnFormController extends SrsReportRunController
{
}
/// <summary>
///    Modifies the report query and parameters based on caller settings.
/// </summary>
protected void prePromptModifyContract()
{
    Common                          common;
    CustPackingSlipJour             journal;
    ReturnFormContract            contract;
    SalesPackingSlipJournalPrint    salesPackingSlipJournalPrint;
 
    contract    = this.parmReportContract().parmRdpContract() as ReturnFormContract;
 
    this.parmDialogCaption("@SLN6542");
 
    if (classIdGet(this.parmArgs().caller()) == classNum(SalesPackingSlipJournalPrint))
    {
        salesPackingSlipJournalPrint = this.parmArgs().caller() as SalesPackingSlipJournalPrint;
        this.parmReportContract().parmPrintSettings(new SRSPrintDestinationSettings(salesPackingSlipJournalPrint.ParmPrinterSettingsReturnForm()));
    }
 
    if (this.parmArgs().record())
    {
        common = this.parmArgs().record();
    }
    if (common.TableId == tableNum(CustPackingSlipJour))
    {
        journal = common;
        contract.parmSalesId(journal.SalesId);
    }
    else
    {
        checkFailed(strFmt("@SYS26348"));
        return;
    }
}
/// <summary>
///    Hides the dialog box, depending on the caller.
/// </summary>
protected void presentDialog()
{
    Args    localArgs = this.parmArgs();
    boolean presentDialog = true;
 
    if (classIdGet(localArgs.caller()) == classNum(SalesPackingSlipJournalPrint))
    {
        presentDialog = false;
    }
 
    this.parmShowDialog(presentDialog);
}
public static void main(Args _args)
{
    ReturnFormController    controller = new ReturnFormController();
 
    controller.parmReportName(ssrsReportStr(ReturnForm, Report));
    controller.parmArgs(_args);
    controller.presentDialog();
    controller.startOperation();
}
class ReturnFormContract
{
    SalesId salesId;
}
[DataMemberAttribute('SalesId')]
public SalesId parmSalesId(SalesId _salesId = salesId)
{
    salesId = _salesId;
    return salesId;
}
If you found value in what I share, I've set up a Buy Me a Coffee page as a way to show your support.
Buy Me a CoffeeNo comments. Be the first one to comment on this post.
DaxOnline.org is free platform that allows you to quickly store and reuse snippets, notes, articles related to Dynamics 365 FO.
Authors are allowed to set their own "buy me a coffee" link.
            Join us.