Grouping TablaDate

Este debate contiene 5 respuestas, tiene 2 mensajes y lo actualizó  Diego A. hace 2 meses, 1 semana.

Viendo 6 publicaciones - del 1 al 6 (de un total de 6)
  • Autor
    Publicaciones
  • #13095

    Diego A.
    Participante

    Buenos dias,

    Una consulta por si se hayan topado con similar escenario, cuales son las opciones de Group by que tenemos dentro de C/AL?  el equivalente al Group By de SQL? dentro de las propiedades de la tabla en el Dev al menos no encuentro ninguna opcion, he conseguido un resultado parecido utilizando SETCURRENTKEY pero creo que no es exactamente la forma, alguna sugerencia?, otra consulta hay posibilidad de que alguien muestre la forma de recorrer una query desde C/AL he repasado uno de los cursos pero se centra mas bien en la declaración que en la manipulación de la query desde un report como abrir, recorrer cerrar, etc, muchas gracias de antemano.

     

    saludos

    #13144

    Cristina Nicolàs
    Jefe de claves

    Hola,

    En C/AL lo de las agrupaciones no es trivial.
    El SETCURRENTKEY te permite ordenar de una forma determinada, pero te devuelve todos los registros uno a uno. Las agrupaciones después te las tendrías que hacer tu.

    El único objeto que puede hacer agrupaciones es precisamente la Query.

    Para después recorrer la query, seria algo así:

    MyFirstQuery.OPEN;
    WHILE MyFirstQuery.READ DO
    OutputData(MyFirstQuery.Item_No,
    MyFirstQuery.Month_Posting_Date,
    MyFirstQuery.Sum_Quantity,
    MyFirstQuery.Source_No,
    MyFirstQuery.Description,
    MyFirstQuery.Name,
    MyFirstQuery.Customer_Posting_Group);

    La función OutputData seria una función que te definirías para después procesar el resultado. Era una mera forma de ver como acceder a los valores de cada una de las columnas de la Query.

    También podría agrupar datos el report, en su layout. En los dataitems y al crear el dataset se le pasan todos los datos, pero después, a la hora de definir el layout, Reporting Services tiene opciones de agrupación.

    ¿Quieres conocer las últimas novedades sobre Business Central? Dynamics ScaleUp 2019.

    Consulta fechas en
    DynamicsScaleUp.com

    #13146

    Cristina Nicolàs
    Jefe de claves

    Te paso un ejemplo de una query que desarrollé con NAV2013 a modo de pruebas, que es la que precisamente después recorro con ese código de la respuesta anterior.

    OBJECT Query 50000 My First Query
    {
    OBJECT-PROPERTIES
    {
    Date=04/11/12;
    Time=21:23:26;
    Modified=Yes;
    Version List=;
    }
    PROPERTIES
    {
    }
    ELEMENTS
    {
    { 1100286000;;DataItem; ;
    DataItemTable=Table32;
    DataItemTableFilter=Entry Type=CONST(Sale) }

    { 1100286002;1;Column; ;
    DataSource=Item No. }

    { 1100286003;1;Column; ;
    DataSource=Posting Date;
    MethodType=Date;
    Method=Month }

    { 1100286004;1;Column; ;
    DataSource=Quantity;
    ReverseSign=Yes;
    MethodType=Totals;
    Method=Sum }

    { 1100286005;1;Column; ;
    DataSource=Source No. }

    { 1100286001;1;DataItem; ;
    DataItemTable=Table27;
    DataItemLink=No.=Item_Ledger_Entry.»Item No.» }

    { 1100286006;2;Column; ;
    DataSource=Description }

    { 1100286007;2;DataItem; ;
    DataItemTable=Table18;
    DataItemLink=No.=Item_Ledger_Entry.»Source No.» }

    { 1100286008;3;Column; ;
    DataSource=Name }

    { 1100286009;3;Column; ;
    DataSource=Customer Posting Group }

    }
    CODE
    {

    BEGIN
    END.
    }
    }

    Y la función que la recorre:

    PROCEDURE QueryFunction@1100286001();
    VAR
    MyFirstQuery@1100286000 : Query 50000;
    BEGIN
    MyFirstQuery.OPEN;
    WHILE MyFirstQuery.READ DO
    OutputData(MyFirstQuery.Item_No,
    MyFirstQuery.Month_Posting_Date,
    MyFirstQuery.Sum_Quantity,
    MyFirstQuery.Source_No,
    MyFirstQuery.Description,
    MyFirstQuery.Name,
    MyFirstQuery.Customer_Posting_Group);
    END;

    PROCEDURE OutputData@1100286000(ItemNo@1100286006 : Code[10];Month@1100286000 : Integer;QuantitySum@1100286001 : Decimal;SourceNo@1100286002 : Code[10];ItemDescription@1100286003 : Text[50];CustomerName@1100286004 : Text[50];CustomerPostingGroup@1100286005 : Code[10]);
    BEGIN
    Counter := Counter + 1;
    END;

    ¿Quieres conocer las últimas novedades sobre Business Central? Dynamics ScaleUp 2019.

    Consulta fechas en
    DynamicsScaleUp.com

    #13150

    Diego A.
    Participante

    Buenos dias Cristina,

    Muchas gracias estaré probando el código, efectivamente, las agrupaciones las estoy haciendo desde el Layout en RS, pero de pronto demora mucho en la carga del reporte por ello me gustaría probar agrupándolo directamente desde el dataset, gracias de nuevo

     

    saludos

    #13151

    Cristina Nicolàs
    Jefe de claves

    Hola Diego,

    Pues si tienes un problema de lentitud, realmente el hecho de optar por una query es lo suyo.

    Cuando hice esta prueba de esta query que te he pasado, hice también una función con puro C/AL recorriendo los mismos datos y haciendo las mismas agrupaciones, y hice la comparación de tiempos.
    Recorrer los datos con un FINDSET y después REPEAT UNTIL, y ir haciéndome las sumas que necesitaba, me tardaba 14 segundos.
    Recorrer los mismos datos y hacer las mismas agrupaciones pero con una Query, me tardaba 150 milisegundos.
    Una diferencia abismal.

    Un saludo,
    Cristina Nicolàs

    ¿Quieres conocer las últimas novedades sobre Business Central? Dynamics ScaleUp 2019.

    Consulta fechas en
    DynamicsScaleUp.com

    #13153

    Diego A.
    Participante

    Totalmente Cristina, de ahí mi interes en probarlo desde la Query, se que tu codigo nos servira a varios en la comunidad

     

    saludos

Viendo 6 publicaciones - del 1 al 6 (de un total de 6)

Debes estar registrado para responder a este debate.

Members Currently Active: 3
laura, softymax, ajferez
Keymaster | Moderator | Participant | Spectator | Blocked
Additional Forum Statistics
Threads: 913, Posts: 2.943, Members: 919
Welcome to our newest member, softymax
Most users ever online was 15 on 5 April, 2019 9:31 am