Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Manejo de parametros con QTRpt



  • Necesito saber de que manera especifico por codigo en el boton de impresion usando QtRpt, que estoy cambiando el Data-Group-Header para definir el nuevo grupo de datos del Master-Band, el codigo estandar que tengo es :

    QtRPT *reporte= new QtRPT(this);
    reporte->loadReport(":/impresiones/cajadiaria_consultas.xml");
    reporte->recordCount.append(ui->t_caja->rowCount());
    connect(reporte,&QtRPT::setValue,[&](const int recNo,const QString paramName,QVariant &paramValue,const int reportPage)
    {
        (void) reportPage;
    
        // datos del encabezado  de la Caja
        if(paramName=="persona") //nombre del usuario que esta trabajando
        {paramValue=Nombre_de_persona;}
        if(paramName=="sucursal")
        {paramValue=ui->c_sucursales->currentText();}
    
        ///  Datos de la caja
        //Factura;Sucursal;Tipo;Afiliado;Documento;Monto;Fecha;Habilitada;
        // modificar para una matriz multidimensional que debe contener todas las cajas
    
    
        if(paramName=="numero_orden")
        {paramValue=ui->t_caja->item(recNo,0)->text();}
        if(paramName=="documento")
        {paramValue=ui->t_caja->item(recNo,4)->text();}
        if(paramName=="nombre")
        {paramValue=ui->t_caja->item(recNo,3)->text();}
        if(paramName=="fecha_orden")
        {paramValue=ui->t_caja->item(recNo,6)->text();}
        if(paramName=="codigo_tipo")
        {paramValue=ui->t_caja->item(recNo,2)->text();}
        if(paramName=="importe")
        {paramValue=ui->t_caja->item(recNo,5)->text();}
        if(paramName=="anulado")
        {paramValue=ui->t_caja->item(recNo,7)->text();}
        if(paramName=="ccpago")
        {paramValue=ui->t_caja->item(recNo,14)->text();}
    
        //datos de los resultados
        // orden de consulta
        if(paramName=="total_oc")
        {paramValue=ui->l_total_consultas->text();}
        if(paramName=="total_oc_cc")
        {paramValue=ui->l_total_cc_oc->text();}
        if(paramName=="total_oc_a")
        {paramValue=ui->l_total_anuladas_oc->text();}
        // orden odontologica
        if(paramName=="total_od")
        {paramValue=ui->l_total_odontologica->text();}
        if(paramName=="total_od_cc")
        {paramValue=ui->l_total_cc_oo->text();}
        if(paramName=="total_od_a")
        {paramValue=ui->l_total_anuladas_oo->text();}
        // orden de practica
        if(paramName=="total_op")
        {paramValue=ui->l_total_op->text();}
        if(paramName=="total_op_cc")
        {paramValue=ui->l_total_cc_op->text();}
        if(paramName=="total_op_a")
        {paramValue=ui->l_total_anuladas_op->text();}
    
        //monto total de la operacion
        if(paramName=="monto_total")
        {paramValue=ui->l_total_general->text();}
    
        //periodos de informe
        if(paramName=="fecha_desde")
        {paramValue=fecha_seleccionada;}
        if(paramName=="fecha_hasta")
        {paramValue=fecha_fin;}
    
    });
    reporte->printExec();
    

    Esto, hace lo que necesito, pero solo funciona para un grupo de datos.
    En estar caso yo tengo 4 grupos que quiero añadir al mismo formulario de impresion.
    Pero en otro caso esos grupos pueden ser variables, como ejemplo dejo lo siguiente

    Grupo Argentina

    item, detalle,precio

    Grupo Bolivia

    item, detalle,precio

    Grupo Chile

    item, detalle,precio
    ......

    Y asi. alguien tiene un ejemplo algo claro de esto?. Se que es posible pues existe una muestra en el sitio de QtRpt, pero no esta codificada.



  • La respuesta es Esta:

        QString valores[4];
        valores[0]="primero";
         valores[1]="segundo";
          valores[2]="tercero";
           valores[3]="cuarto";
    
        QtRPT *reporte= new QtRPT(this);
        reporte->loadReport(":/impresiones/prueba.xml");
        reporte->recordCount.append(4);
        connect(reporte,&QtRPT::setValue,[&](const int recNo,const QString paramName,QVariant &paramValue,const int reportPage)
        {
            (void) reportPage;
    
           
            if(paramName=="grupo")
            {
                if(recNo>=2)
                {paramValue="Grupo 2";}
                else
                {paramValue="Grupo 1";}
    
            }
            if(paramName=="dato1")
            {paramValue=valores[recNo];}
    
        });
        reporte->printExec();

Log in to reply