El problema es que por algun motivo que desconosco mis PrintDatagrid no se llenan por comleto (no todos) faltan arrays (filas) en PrintDatagrid, lo cual es raro ya que siempre antes de utilizar addObject, creo dinamicamente mi Printdatagrid y al dataprovider de dicho printDataGrid le traspaso lo que hay en Arraycollecion.
Pd:
Antes de agregar el PirntDatagrid los vuelvo a instanciar como nuevo objeto para que no sobreescriva o remplaze el ultimo printdagrid agregado con el metodo addchild de la clase vista o layout creado por mi.
El código...
Código ActionScript :
public function libroVentas(event:ResultEvent):void
{
if(http.lastResult.toString()=="vacio")
{
cursorManager.removeBusyCursor();
Alert.show("Por el momento no se puede generar el reporte ya que no se encontraron Ventas.", "Mensaje");
return;
}
var result:Object=event.result;
if(result.ventas.venta is ObjectProxy)
dataProvider=new ArrayCollection([{
fecha: result.ventas.venta.fecha,
folio: result.ventas.venta.folio,
rut: result.ventas.venta.rut,
razon_social: result.ventas.venta.razon_social,
neto: result.ventas.venta.neto,
iva: result.ventas.venta.iva,
total: result.ventas.venta.total,
netoNota: result.ventas.venta.netoNota,
ivaNota: result.ventas.venta.ivaNota,
totalNota: result.ventas.venta.totalNota
}]);
else
dataProvider=http.lastResult.ventas.venta;
var printJob:FlexPrintJob = new FlexPrintJob();
if(printJob.start())
{
var thePrintView:layoutLibroVentas=new layoutLibroVentas();
Application.application.addChild(thePrintView);
thePrintView.width=printJob.pageWidth;
thePrintView.height=printJob.pageHeight;
var inicioTemp:Number=0;
var cont:Number=0;
var cont2:Number=0;
var dataTemp:Object=new Object();
dataTemp[cont]=new ArrayCollection();
for(var i:Number=0; i<dataProvider.length; i++)
{
cont2++;
var neto:Number=0;
var iva:Number=0;
var total:Number=0;
var netoNota:Number=0;
var ivaNota:Number=0;
var totalNota:Number=0;
var j:Number;
var vars:Object=new Object();
vars.fecha=dataProvider.getItemAt(i).fecha;
vars.folio=dataProvider.getItemAt(i).folio;
vars.tipo_documento=dataProvider.getItemAt(i).tipo_documento;
vars.rut=dataProvider.getItemAt(i).rut;
vars.razon_social=dataProvider.getItemAt(i).razon_social;
vars.neto=dataProvider.getItemAt(i).neto;
vars.iva=dataProvider.getItemAt(i).iva;
vars.total=dataProvider.getItemAt(i).total;
dataTemp[cont].addItem(vars);
if(cont2==18)
{
crearDataGrid(dataTemp[cont], thePrintView, "principal");
printJob.addObject(thePrintView);
thePrintView.removeAllChildren();
cont++;
cont2=0;
dataTemp[cont]=new ArrayCollection();
}
else if(i<dataProvider.length-1)
{
if(dataProvider.getItemAt(i).fecha!=dataProvider.getItemAt(i+1).fecha)
{
for(j=inicioTemp; j<=i; j++)
{
neto+=Number(dataProvider.getItemAt(j).neto.toString().replace(",", ""));
iva+=Number(dataProvider.getItemAt(j).iva.toString().replace(",", ""));
total+=Number(dataProvider.getItemAt(j).total.toString().replace(",", ""));
netoNota+=Number(dataProvider.getItemAt(j).netoNota.toString().replace(",", ""));
ivaNota+=Number(dataProvider.getItemAt(j).ivaNota.toString().replace(",", ""));
totalNota+=Number(dataProvider.getItemAt(j).totalNota.toString().replace(",", ""));
}
crearDataGrid(dataTemp[cont], thePrintView, "principal");
crearDataGrid(new ArrayCollection([{
titulo: "Total Facturas y Boletas:",
neto: myFormatter.format(neto),
iva: myFormatter.format(iva),
total: myFormatter.format(total)
},
{
titulo: "Total Notas Créditos:",
neto: myFormatter.format(netoNota),
iva: myFormatter.format(ivaNota),
total: myFormatter.format(totalNota)
},
{
titulo: "Total del Día:",
neto: myFormatter.format(neto+netoNota),
iva: myFormatter.format(iva+ivaNota),
total: myFormatter.format(total+totalNota)
}
]), thePrintView, "secundario");
cont++;
cont2+=3;
inicioTemp=i+1;
dataTemp[cont]=new ArrayCollection();
}
}
else if(i==dataProvider.length-1)
{
for(j=inicioTemp; j<=i; j++)
{
neto+=Number(dataProvider.getItemAt(j).neto.toString().replace(",", ""));
iva+=Number(dataProvider.getItemAt(j).iva.toString().replace(",", ""));
total+=Number(dataProvider.getItemAt(j).total.toString().replace(",", ""));
netoNota+=Number(dataProvider.getItemAt(j).netoNota.toString().replace(",", ""));
ivaNota+=Number(dataProvider.getItemAt(j).ivaNota.toString().replace(",", ""));
totalNota+=Number(dataProvider.getItemAt(j).totalNota.toString().replace(",", ""));
}
crearDataGrid(dataTemp[cont], thePrintView, "principal");
crearDataGrid(new ArrayCollection([{
titulo: "Total Facturas y Boletas:",
neto: myFormatter.format(neto),
iva: myFormatter.format(iva),
total: myFormatter.format(total)
},
{
titulo: "Total Notas Créditos:",
neto: myFormatter.format(netoNota),
iva: myFormatter.format(ivaNota),
total: myFormatter.format(totalNota)
},
{
titulo: "Total del Día:",
neto: myFormatter.format(neto+netoNota),
iva: myFormatter.format(iva+ivaNota),
total: myFormatter.format(total+totalNota)
}
]), thePrintView, "secundario");
printJob.addObject(thePrintView);
}
}
Application.application.removeChild(thePrintView);
printJob.send();
}
cursorManager.removeBusyCursor();
}
public function crearDataGrid(data:ArrayCollection, view:VBox, tipo:String):void
{
var PrintData:PrintDataGrid
var PrintColum:DataGridColumn;
var columnas:Array;
if(tipo=="secundario")
{
PrintData=new PrintDataGrid();
PrintData.width=390;
PrintData.setStyle("height", "100%");
PrintData.showHeaders=false;
columnas=PrintData.columns;
PrintColum=new DataGridColumn();
PrintColum.dataField="titulo";
PrintColum.width=200;
PrintColum.setStyle("fontSize", 9);
columnas.push(PrintColum);
PrintColum=new DataGridColumn();
PrintColum.dataField="neto";
PrintColum.width=80;
PrintColum.setStyle("fontSize", 9);
PrintColum.setStyle("textAlign", "right");
columnas.push(PrintColum);
PrintColum=new DataGridColumn();
PrintColum.dataField="iva";
PrintColum.width=80;
PrintColum.setStyle("fontSize", 9);
PrintColum.setStyle("textAlign", "right");
columnas.push(PrintColum);
PrintColum=new DataGridColumn();
PrintColum.dataField="total";
PrintColum.width=80;
PrintColum.setStyle("fontSize", 9);
PrintColum.setStyle("textAlign", "right");
columnas.push(PrintColum);
PrintData.columns=columnas;
PrintData.dataProvider=data;
view.addChild(PrintData);
}
else if(tipo=="principal")
{
PrintData=new PrintDataGrid();
PrintData.width=726;
PrintData.setStyle("height", "100%");
columnas=PrintData.columns;
PrintColum=new DataGridColumn();
PrintColum.headerText="Fecha";
PrintColum.dataField="fecha";
PrintColum.width=90;
PrintColum.setStyle("fontSize", 9);
columnas.push(PrintColum);
PrintColum=new DataGridColumn();
PrintColum.headerText="Nª Documento";
PrintColum.dataField="folio";
PrintColum.width=100;
PrintColum.setStyle("fontSize", 9);
columnas.push(PrintColum);
PrintColum=new DataGridColumn();
PrintColum.headerText="Tipo Documento";
PrintColum.dataField="tipo_documento";
PrintColum.width=100;
PrintColum.setStyle("fontSize", 9);
columnas.push(PrintColum);
PrintColum=new DataGridColumn();
PrintColum.headerText="Rut";
PrintColum.dataField="rut";
PrintColum.width=90;
PrintColum.setStyle("fontSize", 9);
columnas.push(PrintColum);
PrintColum=new DataGridColumn();
PrintColum.headerText="Cliente";
PrintColum.dataField="razon_social";
PrintColum.width=200;
PrintColum.setStyle("fontSize", 9);
columnas.push(PrintColum);
PrintColum=new DataGridColumn();
PrintColum.headerText="Neto";
PrintColum.dataField="neto";
PrintColum.width=80;
PrintColum.setStyle("fontSize", 9);
PrintColum.setStyle("textAlign", "right");
columnas.push(PrintColum);
PrintColum=new DataGridColumn();
PrintColum.headerText="Iva";
PrintColum.dataField="iva";
PrintColum.width=80;
PrintColum.setStyle("fontSize", 9);
PrintColum.setStyle("textAlign", "right");
columnas.push(PrintColum);
PrintColum=new DataGridColumn();
PrintColum.headerText="Total";
PrintColum.dataField="total";
PrintColum.width=80;
PrintColum.setStyle("fontSize", 9);
PrintColum.setStyle("textAlign", "right");
columnas.push(PrintColum);
PrintData.columns=columnas;
PrintData.dataProvider=data;
view.addChild(PrintData);
}
}
Aclaración:
En el objeto dataTemp[] voy guardado mis distintos arrayCollection, ya que al asignar un arraycollecion al dataprovider del printdatagrid, el printdatagrid mantiene una referencia hacia el arrayCollection original, esto quiere decir que si modifico el arrayCollection original se modifican los dataprovider de todos mis PrintDataGrid, en conclusión cada PrintDataGrid tiene como dataProvider su propio arraycollecion.
Verifico cada Arracollection de mi dataTemp[] y no falta ningun array, pero al imprimir si desparecen algunas arrays, generarlmete los ultimos arrays de cada arraycollection, demasiado raro.
Utilizo esta forma para imprimir ya que el formato como se logra apreciar es un poco complicado, es un libro de venta en contabilidad, de hecho me falta agregar el total acumulado del mes
Desde ya muchas gracias... help help debe un pequeño error
