Etiquetado: report, Visual Studio Code
- Este debate tiene 6 respuestas, 2 mensajes y ha sido actualizado por última vez el hace 1 año, 6 meses por
juanjo.mauriz.
¿Porque no se actualiza el valor de una variable en onPreReport() ?
-
juanjo.maurizParticipantejuanjo.maurizBuenas 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!!!
4 marzo 2022 a las 21:12 #1020555
oscarmingteParticipante4 marzo 2022 a las 22:20 #1020556
juanjo.maurizParticipantejuanjo.maurizHola, 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;
beginMessage(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!!!
5 marzo 2022 a las 15:41 #1020557
oscarmingteParticipanteoscarmingteHola , 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.
5 marzo 2022 a las 18:20 #1020558
juanjo.maurizParticipantejuanjo.maurizBuenas 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!!!
5 marzo 2022 a las 21:21 #1020559
oscarmingteParticipanteoscarmingteHola , 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
6 marzo 2022 a las 11:26 #1020560
juanjo.maurizParticipante7 marzo 2022 a las 00:01 #1020561
Debe iniciar sesión para responder a este tema.