• Este debate tiene 6 respuestas, 2 mensajes y ha sido actualizado por última vez el hace 1 año, 6 meses por juanjo.mauriz.
Viendo 7 entradas - de la 1 a la 7 (de un total de 7)

¿Porque no se actualiza el valor de una variable en onPreReport() ?



  • juanjo.mauriz
    Participante
    juanjo.mauriz

    Buenas tardes.

    Seguro que es una pregunta absurda para los técnicos, pero vengo de C++ y estoy bastante verde con el AL.
    He creado un combo en mi “requestpage” con varios datos que llamo desde un procedimiento y según elijo una opción u otra se visibilizan unas opciones u otras y a la vez se ponen las opciones en true o false, ya que las necesito para según los “trues” hacer unos filtros u otros, además de una variable que se actualiza con un valor “text” según el valor del combo elegido.

    Hasta hay lo hace todo correcto.

    El problema radica en el momento que llego al OnPreReport(), que pongo un “message” y siempre me pone los valores iniciales que están en el OnInitReport(), pero nunca se actualizan los datos y variables que he pasado por el requestpage y no entiendo porque, ya que la lógica me dice que todo lo que cambie dentro del requestpage (filtros, datos, fechas, valores, etc.) deben actualizarse los datos en el OnPreReport(), que por eso es un “Pre”, pero no hace nada de los cambios de los combos, ni de la variable.

    Por otro lado, si pongo un “message” dentro del combo si que me muestra los “true” y “false” correctos y el valor de la variable. Por si sirve de algo este dato.

    ¿En que me puedo estar equivocando?, porque ya me he quedado sin ideas y seguro que es una tontería, pero para mi me es un buen quebradero de cabeza.

    Siento si es una pregunta muy sencilla y de principiante, pero en C++/Qt si que se como hacerlo, pero no aquí y tampoco se como buscarlo en Internet, porque encuentro poca documentación de AL.

    Saludos y gracias!!!

     

     

    #1020555

    oscarmingte
    Participante
    oscarmingte

    Hola , sin ver el código es complicado pero a lo mejor al llamar al report desde el código tienes que crear una función para hacer un ser de las variables,  la función tiene que ser global y haces report.setvaor(true).

    Espero que te sirva.

     

    Un saludo

    #1020556

    juanjo.mauriz
    Participante
    juanjo.mauriz

    Hola, buenas tardes.

    Gracias por contestar y perdón por no poner el código, pero me pillo la mente saturada y lo primero que hay que hacer, no lo hice. Sorry.

    Te paso el código y ya me dices, si es posible, donde me falta algo o que me sobra jejeje

    En el  “OnInitReport”…

    trigger OnInitReport()
    begin
            …

            xVisible1 := true;
            xVisible2 := true;
            xVisible3 := true;
            xVisible4 := true;
            xVisible5 := true;
            xVisible6 := true;  

            …

    end;

    En el “procedure” global…

    local procedure CambiarVisibleF(pOption: Option)
    begin
    xVisible1 := false;
    xVisible2 := false;
    xVisible3 := false;
    xVisible4 := false;
    xVisible5 := false;
    xVisible6 := false;
    case pOption of
    0:
    begin
    xVisible1 := true;
    xVisible2 := true;
    xVisible3 := true;
    xVisible4 := true;
    xVisible5 := true;
    xVisible6 := true;
    TipoFiltro := ‘A’;
    end;
    1:
    begin
    xVisible1 := true;
    TipoFiltro := ‘B’;
    end;
    2:
    begin
    xVisible2 := true;
    TipoFiltro := ‘C’;
    end;
    3:
    begin
    xVisible3 := true;
    TipoFiltro := ‘D’;
    end;
    4:
    begin
    xVisible4 := true;
    TipoFiltro := ‘E’;
    end;
    5:
    begin
    xVisible5 := true;
    TipoFiltro := ‘F’;
    end;
    6:
    begin
    xVisible6 := true;
    TipoFiltro := ‘G’;
    end;
    end;
    end;

    En las “Var” globales…

    var

    xOption: Option A,B,C,D,E,F,G;
    xVisible1: boolean;
    xVisible2: boolean;
    xVisible3: boolean;
    xVisible4: boolean;
    xVisible5: boolean;
    xVisible6: boolean;
    xReferencia: Code[20];
    xCliente: Code[20];
    xZona: Code[20];
    xComercial: Code[20];
    xGrupo_compras: Code[20];
    xFamilia: Code[20];
    TipoFiltro: Text;

    En el requestpage…

    requestpage
    {
    SaveValues = true;
    layout
    {
    area(Content)
    {


    group(GroupName)
    {
    caption = ‘Filtros de busqueda’;
    field(OptionGrupos; xOption)
    {
    ApplicationArea = all;
    caption = ‘Elegir grupo para filtro’;
    OptionCaption = ‘Todos,Referencia,Cliente,Zona,Comercial,Grupo de compras,Familia’;
    trigger OnValidate()
    begin
    CambiarVisibleF(xOption);
    Message(Format(xVisible1) + Format(xVisible2) + Format(xVisible3) + Format(xVisible4) + Format(xVisible5) +                                                          Format(xVisible6) + TipoFiltro);  //   <——- ESTE “MESSAGE” SACA LOS DATOS CORRECTOS
    RequestOptionsPage.Update();
    end;

    }
    group(Articulo)
    {
    Visible = xVisible1;
    caption = ‘Referencia’;
    field(Campo1; xReferencia)
    {
    ApplicationArea = all;
    Caption = ‘Referencia de articulo’;
    ToolTip = ‘Referencia de articulo’;
    Lookup = true;
    TableRelation = Item;
    }
    }
    group(Cliente)
    {
    Visible = xVisible2;
    caption = ‘Cliente’;
    field(Campo2; xCliente)
    {
    ApplicationArea = all;
    Caption = ‘Código de cliente’;
    ToolTip = ‘Código de cliente’;
    Lookup = true;
    TableRelation = Customer;
    }
    }

    //Y así con el resto de grupos a mostrar, donde esto lo hace perfectamente.

    }
    }
    }
    actions
    {
    area(processing)
    {
    action(ActionName)
    {
    ApplicationArea = All;
    }
    }
    }

    Y por último en el “OnPreReport” que es donde me falla…

    trigger OnPreReport()
    var
    rlItem: record Item;
    rlItemledgerEntry: record “Item Ledger Entry”;
    xTotalActual: decimal;
    xTotalAnterior: decimal;
    begin

    Message(Format(xVisible1) + Format(xVisible2) + Format(xVisible3) + Format(xVisible4) + Format(xVisible5) + Format(xVisible6) +

    TipoFiltro); // <———- SIEMPRE PONE LOS VALORES DEL “OnInitReport” y  no los modificados en el “Resquetpage”.

    Fecha := Format(StartDate) + ‘..’ + Format(EndDate);
    Fecha1 := Format(StartDate1) + ‘..’ + Format(EndDate1);
    if rlItem.FindSet(false) then begin
    repeat

    if TipoFiltro = ‘A’ then begin
    rlItem.setfilter(“No.”, xReferencia);
    rlitemledgerentry.setfilter(“Source No.”, xCliente);
    rlitemledgerentry.setfilter(“Global Dimension 2 Code”, xZona);
    rlitemledgerentry.setfilter(“Shortcut Dimension 5 Code”, xComercial);
    rlitemledgerentry.setfilter(“Global Dimension 1 Code”, xGrupo_Compras);
    rlitemledgerentry.setfilter(“Item Category Code”, xFamilia);
    end;
    if TipoFiltro = ‘B’ then begin
    rlItem.setfilter(“No.”, xReferencia);
    end;
    if TipoFiltro = ‘C’ then begin
    rlitemledgerentry.setfilter(“Source No.”, xCliente);
    end;
    if TipoFiltro = ‘D’ then begin
    rlitemledgerentry.setfilter(“Global Dimension 2 Code”, xZona);
    end;
    if TipoFiltro = ‘E’ then begin
    rlitemledgerentry.setfilter(“Shortcut Dimension 5 Code”, xComercial);
    end;
    if TipoFiltro = ‘F’ then begin
    rlitemledgerentry.setfilter(“Global Dimension 1 Code”, xGrupo_Compras);
    end;
    if TipoFiltro = ‘G’ then begin
    rlitemledgerentry.setfilter(“Item Category Code”, xFamilia);
    end;


    rTableAxuliarReport.Init();
    xlinea += 1;
    rTableAxuliarReport.CodProducto := rlitem.”No.”;
    rTableAxuliarReport.descripcion := rlitem.Description;
    rTableAxuliarReport.Cantidad1 := xTotalActual;
    rTableAxuliarReport.Cantidad2 := xTotalAnterior;
    rTableAxuliarReport.Insert(false);
    until rlItem.Next() = 0;
    end;
    end;

    Y hay se me acaban las ideas…

    Gracias por tu colaboración, creo que no me he dejado nada de código que forme parte de lo que quiero hacer.

    NOTA: El código no esta depurado, solo es para que funcione, luego ya vendré con las depuraciones para que sea mas legible y rápido, pero ahora solo es para que funcione, ya que AL no entiendo y tengo que hacerlo lo mas detallado posible para poder enterderlo.

    Saludos y espero tus comentarios con agradecimiento!!!

    #1020557

    oscarmingte
    Participante
    oscarmingte

    Hola , a lo mejor es mejor que pongas el report entero hecho en al y no solo los trocos para que sea más fácil probarlo , diría que te esta afectando o el requestpage.update o el savevalues , puede que en una de las 2 estes volviendo al oninitreport , prueba a quitar las 2 y a ver si así te funciona.

    Un saludo.

    #1020558

    juanjo.mauriz
    Participante
    juanjo.mauriz

    Buenas tardes.

    Muchas gracias por la información, que me ha servido para resolver el problema.

    Es el “Savevalues”, lo que hace que no funcione correctamente, pero es un listado que va a ser impreso varias veces por eso puse que se quedarán los datos para seguir sacando informes sin poner los datos otra vez, solo cambiando un dato.

    ¿Es posible hacerlo de otra manera?

    Muchas gracias y saludos!!!

    #1020559

    oscarmingte
    Participante
    oscarmingte

    Hola , pero es que si haces save vaques pierde el sentido de que se muestren unas cosas u otras ya que es el usuario el que selecciona lo que quiere ver y si pone save values  se guardara su configuración y si por ejemplo es otro usuario  te cargaría la anterior , se puede hacer de otra forma pero tendría que saber que quieres hacer y ver el código ¿tienes LinkedIn? Si quieres pasarlo y lo comentamos por ahí.

     

    Un saludo

    #1020560

    juanjo.mauriz
    Participante
    juanjo.mauriz

    Hola.

    Muchas gracias por el interés.

    A ver si está semana que viene, te lo paso por linkedin y lo vemos.

    Gracias de verdad.

    Saludos!!!

    #1020561
Viendo 7 entradas - de la 1 a la 7 (de un total de 7)

Debe iniciar sesión para responder a este tema.