PDF with tubolar data - Error template heading

alessapan

Member
DaDaBIK version 10.3-Manarola enterprise, installed on 27/08/2020 ), the latest version of DaDaBIK is 10.3-Manarola released on 26/08/2020

System info
PHP Version: 7.2.33
mysql version: 5.7.29-32-log
Web server: Apache
Client: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36

Ciao, Eugenio
ho trovato questo post che descrive lo stesso problema che ho incontrato io: https://dadabik.com/forum/read.php?1,23020,23026#msg-23026

Ho provato a fare un pò di debugging utilizzando solo pochissime righe per far comparire i campi e capire dove possa essere l'errore.
Per poter stampare più record ho utilizzato anche un file prova_settings.php per poter ottenere più record . La prova l'ho eseguita anche senza per verificare che l'errore non nascesse proprio da li.
Se utilizzo un unico file prova.html il documento, anche con più pagine, viene correttamente creato. Se spezzo il file nelle tre parti prova_header.html, prova.html e prova_footer.html anche a me esce l'errore "Error template heading".
Ho utilizzato tutte le accortezze richiamate nel precedente post, ma non ne esco proprio.
Devo assolutamente creare un report (necessario per elencare i rimborsi di missione) che nel suo corpo elenchi i record in forma tabellare.

Grazie


Alessandro

incollo di seguito i vari file utilizzati per la prova
pagina HTML SENZA Tubolar data FUNZIONANTE


<html lang="en">
<head>
<meta charset="utf-8" />
</head>

<body>

<h1>Rimborso missioni</h1>

<table>
<thead>
<tr><th>colonna 1</th><th>colonna 2</th></tr>
</thead>
<tbody>

<tr><td>dadabik_field Causale dadabik_field</td><td>dadabik_field Motivo dadabik_field</td></tr>

</tbody>
</table>
</body>
</html>

pagina con tubolar data in ERRORE:

file prova_header.htlm


<html lang="en">
<head>
<meta charset="utf-8" />
</head>

<body>

<h1>Rimborso missioni</h1>

<table>
<thead>
<tr><th>colonna 1</th><th>colonna 2</th></tr>
</thead>
<tbody>

file prova.html


<tr><td>dadabik_field Causale dadabik_field</td><td>dadabik_field Motivo dadabik_field</td></tr>

file prova_footer.html


</tbody>
</table>
</body>
</html>

file di settings:
prova_settngs.php

<?php
// PDF parameters
$export_to_pdf_feature = 1;
$pdf_creation_time_limt = 30;
$pdf_max_number_records = 100;
$add_pdf_page_for_each_record = 1;
$pdf_page_orientation = 'L';
$parse_pdf_php_template_even_if_export_pdf_disable = 0;
$use_sort_for_pdf = 1;
?>
 

alessapan

Member
A beneficio di tutti vi descrivo la SOLUZIONE trovata funzionante.

in questo caso è un bug dell'attuale versione. E' stato sufficiente rinominare i file .HTML in .PHP senza fare nulla come suggerito dal supporto di dadabik.

Il problema ora era diventato però che nell'HEADER e nel FOOTER non si possono usare i campi. Nei report tabulari il "fetch" dei record avviene dopo la valutazione del template header ed è contestuale all'utilizzo, per ogni record, del template item.
Il template header, quindi, non conosce i valori dei record.

Per riuscire ad utilizzare quindi campi nell'HEADER e nel FOOTER bisogna quindi eseguire una SQL inserendo il codice nel file nometemplate_settings.php.

Non è stato facile perchè nelle mie tabelle avevo molti campi da inserire sia sopra che sotto al corpo del report.
Incollo qui il codice che ho creato utilizzando anche un richiamo ad una funzione dinamica per evitare di dover utilizzare una funzione per ogni campo da importare. Sicuramente ci saranno altre soluzioni più eleganti, ma per un neofita del PHP come me......(bei tempi quelli del VBA)....

Grazie al team di dadabik che mi ha messo sulla buona strada!!!!

<?php
// PDF parameters
//.........tralascio il codice per il setting della pagina PDF

// definisco le variabili con la desinenza $_cp_NOMEVAR

$_cp_owner=$_SESSION['logged_user_infos_ar']["username_user"];
$_cp_field_in = "Mese_contabilita";
// richiamo una funzione che userò anche per gli altri campi con 2 variabili, una che viene inviata alla function ed una per il risultato
$_cp_mese = dadabik_get_field($_cp_field_in, $_cp_field_out);
//assegno alla variabie che verrà passata la funzione il nome del campo della tabella del DB
$_cp_field_in = "nome";
$_cp_nome= dadabik_get_field($_cp_field_in, $_cp_field_out);

//......... si può replicare per tutti i campi necessari
//....ecco la funcion che recupera i dati con una SQL dove il legame avviene con il codice fiscale utilizzato anche per l'accesso

function dadabik_get_field($_cp_field_in, $_cp_field_out)
{
global $conn;
$_cp_owner=$_SESSION['logged_user_infos_ar']["username_user"];
// ho utilizzato la funzione MAX per avere un unico dato altrimenti ripetuto in tutti i record corrispondenti - dentro alla parentesi c'è scritto '".$_cp_field_in."'
$sql = "SELECT MAX( '".$_cp_field_in."') AS Risultato
FROM `rimborsi`
WHERE `codice_fiscale` = '".$_cp_owner."'";
$res_prepare = prepare_db($conn, $sql);
$res_bind = bind_param_db($res_prepare, ':codice_fiscale', $_cp_owner );
$res = execute_prepared_db($res_prepare,0);
$row = fetch_row_db($res_prepare);
$_cp_field_out= $row['Risultato'];
return $_cp_field_out;
}
?>
 

alessapan

Member
dimenticavo

nei file nometemplate_header.php per inserire il campo bisogna scrivere questo codice:
<td style="width: 190px;"><?php echo 'scrivi quello che vuoi ' .$_cp_NOMEVAR; ?></td>
 
Top