Ejemplos de extensiones de informes

Completado

En los siguientes ejemplos se explica cómo crear extensiones de informe.

Ejemplo de cómo agregar campos a elementos de datos

En este primer ejemplo se muestra cómo crear un nuevo informe, CustomerSales, basado en dos tablas: Customer y Cust. Ledger Entry.

En el siguiente ejemplo se muestra el código AL para el informe CustomerSales:


report 50100 CustomerSales
{
    UsageCategory = ReportsAndAnalysis;
    ApplicationArea = All;
    Extensible = true;
    RDLCLayout = 'src/CustomerSales.rdl';

    dataset
    {
        dataitem(Customer; Customer)
        {
            column(No_Customer; "No.")
            {
                IncludeCaption = true;
            }
            column(Name_Customer; Name)
            {
                IncludeCaption = true;
            }
            dataitem(customerLedger; "Cust. Ledger Entry")
            {
                DataItemLink = "Customer No." = field("No.");

                column(CustomerNo_customerLedger; "Customer No.")
                {
                    IncludeCaption = true;
                }
                column(PostingDate_customerLedger; "Posting Date")
                {
                    IncludeCaption = true;
                }
                column(AmountLCY_customerLedger; "Amount (LCY)")
                {
                    IncludeCaption = true;
                }
            }
        }
    }
}

Tal y como se observa en el ejemplo, el informe CustomerSales combina dos tablas, Customer y Cust. Ledger Entry, con una combinación en el número de cliente.

De la tabla Customer, se agregan los siguientes campos en el conjunto de datos:

  • No.

  • Name

De la tabla Cust. Ledger Entry, se agregan los siguientes campos en el conjunto de datos:

  • Customer No.

  • Posting Date

  • Amount (LCY)

En el diseño del informe, se ha agregado una tabla sencilla que incluye todos los campos.

Captura de pantalla del diseño del informe CustomerSales

Al ejecutar el informe, se obtendrá el diseño siguiente.

Captura de pantalla del informe Cust. Ledger Entry en formato tabular

En el siguiente ejemplo se muestra cómo crear una extensión de informe que agrega campos a los elementos de datos del informe CustomerSales.


reportextension 50100 CustomerSalesRepExt extends CustomerSales
{
    dataset
    {
        // Add changes to dataitems and columns here
        add(Customer)
        {
            column(City_Customer; City)
            {
                IncludeCaption = true;
            }
        }
        add(customerLedger)
        {
            column(Currency_Code;"Currency Code")
            {
                IncludeCaption = true;
            }
        }
    }
}

Copie el diseño original del informe CustomerSales en la carpeta (proyecto) de la extensión del informe, cámbiele el nombre, agregue una referencia al objeto de extensión del informe y empaquete (Ctrl + Mayús + B) el proyecto para actualizar el diseño.

Captura de pantalla de la referencia con el nombre cambiado en el diseño del informe

Ahora el diseño incluye los campos nuevos del conjunto de datos, y puede agregarlos a la tabla.

Captura de pantalla del diseño de los nuevos campos del conjunto de datos tal como aparecen en la tabla

Después de implementar la extensión del informe, abra la página Selección de diseño de informes y cambie el diseño integrado por el nuevo diseño de la extensión del informe.

Captura de pantalla de la página Selección de diseño de informes

Cuando ejecute el informe, debería obtener el diseño siguiente.

Captura de pantalla del diseño del informe actualizado en formato tabular

Ejemplo de cómo agregar un nuevo elemento de datos

En este ejemplo se explica cómo se puede agregar un elemento de datos a un informe ya existente. La primera tarea es crear un nuevo informe, CustomersAndVendors, con información de dos tablas: Customer y Vendor.


report 50101 CustomersAndVendors
{
    UsageCategory = ReportsAndAnalysis;
    ApplicationArea = All;
    RDLCLayout = 'src/CustomersAndVendors.rdl';

    dataset
    {
        dataitem(Customer; Customer)
        {
            column(dataitem_customer; 'dataitem_customer')
            { }
            column(No_Customer; "No.")
            { }
            column(Name_Customer; Name)
            { }
        }
        dataitem(Vendor; Vendor)
        {
            column(dataitem_vendor; 'dataitem_vendor')
            { }
            column(No_Vendor; "No.")
            { }
            column(Name_Vendor; Name)
            { }
        }
    }
}

El informe CustomersAndVendors combina las tablas Customer y Vendor. A continuación, puede agregar un diseño con una tabla que incluye todas las columnas, tal y como se muestra en el siguiente ejemplo.

Captura de pantalla del diseño de las tablas Customer y Vendor

El resultado del tiempo de ejecución del informe se muestra en la siguiente captura de pantalla.

Captura de pantalla del resultado del tiempo de ejecución del informe

Ahora puede agregar una extensión de informe con el siguiente código AL:


reportextension 50101 CustomersAndVendorsRepExt extends CustomersAndVendors
{
    RDLCLayout = 'src/CustomersAndVendorsRepExt.rdl';
    dataset
    {
        // Add changes to dataitems and columns here
        add(Customer)
        {
            column(City_Customer; City)
            { }
        }
        add(Vendor)
        {
            column(City_Vendor; City)
            { }
        }
        addlast(Vendor)
        {
            dataitem(Contact; Contact)
            {
                column(dataitem_contact; 'dataitem_contact')
                { }
                column(No_Contact; "No.")
                { }
                column(Name_Contact; Name)
                { }
                column(City_Contact; City)
                { }
            }
        }
    }
}

La extensión de informe CustomersAndVendorsRepExt agrega el campo City a los elementos de datos Customer y Vendor y también agrega un nuevo elemento de datos Contact al elemento de datos Vendor.

Cree el diseño de la extensión de informe CustomersAndVendorsRepExt y agregue todas las columnas del conjunto de datos a una tabla, tal y como se muestra en el siguiente ejemplo.

Captura de pantalla del diseño de extensión del informe Customer y Vendor

Cuando ejecute el informe, debería obtener el siguiente resultado.

Captura de pantalla de los resultados de la extensión del informe Customer y Vendor en una tabla

Las columnas del elemento de datos Contact se agregan a las columnas Vendor del conjunto de datos, y las filas Vendor se repiten para todos los contactos. Aunque esta acción crea un conjunto de datos real, puede que no sea el resultado previsto o deseado. Como tal, debe tener cuidado al agregar un elemento de datos a un informe ya existente.

Ejemplo de cómo agregar un campo a un informe y página de solicitud

En el ejemplo siguiente se explica cómo agregar un campo al conjunto de datos del informe Standard Sales - Invoice.

La siguiente extensión de informe agrega el campo N º de pedidoal informe Standard Sales - Invoice. También declara una nueva variable DisplayOrderInfo, que se agrega a la página de solicitud y al conjunto de datos.

reportextension 50102 StandardSalesInvoiceRepExt extends "Standard Sales - Invoice"
{
    RDLCLayout = './src/StandardSalesInvoiceExtended.rdlc';

    dataset
    {
        // Add changes to dataitems and columns here
        add(Line)
        {
            column(Order_No_Line_Lbl; Line.fieldCaption("Order No."))
            {}
            column(Order_No_Line; Line."Order No.")
            {}
            column(DisplayOrderInfo;DisplayOrderInfo)
            {}
        }
    }

    requestpage
    {
        // Add changes to the requestpage here
        layout
        {
            addlast(Options)
            {
                field(DisplayOrderInfo; DisplayOrderInfo)
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Show Order Information';
                    ToolTip = 'Specifies if you want Order Information to be shown on the document.';
                }
            }
        }
    }
    var
        DisplayOrderInfo: Boolean;
}

En el diseño del informe, el campo N.º de pedido (y la etiqueta) se agrega a la tabla de detalles, como se muestra en la siguiente captura de pantalla.

Captura de pantalla del campo Order Number agregado al diseño del informe

Además, la opción Row Visibility de la nueva fila de detalles de la tabla incluye la siguiente expresión.

Captura de pantalla de las expresiones New Details Row y Row Visibility en la tabla

Cuando ahora ejecute el informe Standard Sales - Invoice con el nuevo diseño, la página de solicitud tendrá el siguiente aspecto, tal y como se muestra en la siguiente captura de pantalla.

Captura de pantalla del diseño del informe Standard Sales - Invoice

En el informe, el campo N.º de pedido está visible cuando incluye datos.

Captura de pantalla de los datos incluidos en el campo Número de pedido de compra del informe Standard Sales - Invoice

Este es otro ejemplo de extensión de informe.

Este ejemplo muestra una extensión de tabla simplificada que agrega un nuevo campo a la tabla de clientes (MyField). Luego, la extensión de informe MyExtension agrega MyField y un campo adicional en la tabla Cliente original al informe Customer - Top 10 List y agrega un nuevo diseño de Excel al informe. En el ejemplo, también se muestra cómo se puede modificar un nuevo campo agregado a la extensión de informe mediante el desencadenador OnBeforeAfterGetRecord.

Este es un ejemplo de extensión de informe más avanzado.

El ejemplo muestra cómo se amplía una tabla y un informe existentes mediante el uso de objetos de extensión. Los fragmentos de código que se muestran en este ejemplo no proporcionan un escenario integral completo que se pueda implementar; el objetivo es mostrar la forma de ampliar la funcionalidad existente mediante el uso del objeto de extensión de tabla y el objeto de extensión de informe.