Report/Tabella

7.1/4
Segue un esempio di come realizzare una tabella (report) con il powerDoc.

I passi per realizzare un report sono i seguenti

Crezione del documento

Attraverso il preset iniziale dei parametri è possibile definire le caratteristiche generali del documento ed il suo layout.
Se si desidera intervenire sul report in modo personalizzato si può usare la funzione esterna di notifica che viene invocata per l'header, body e footer di ogni pagina.
	EH_PWD	* psPower;

	psPower=PowerDoc(WS_CREATE,PUM_MM,NULL);
//	psPower->funcNotify=pwdFuncExt; (Vedi sotto funzione di notifica)
	psPower->enCharEncode=SE_ANSI;// ANSI "UTF-8"
	strcpy(szServ,progenesiTemp("Powerdoc"));
	psPower->pszTempFolder=strDup(szServ);//"c:\\Progenesi\\Temp\\Powerdoc";
	if (!fileCheck(psPower->pszTempFolder)) dirCreate(psPower->pszTempFolder,NULL);
	psPower->pszDeviceDefine=_s.pszPrinterDefine;
	psPower->enLayStyle=PWD_LAYTYPE1;	// Tipo di Layout

	psPower->umHeadHeight=pwdUm(PUM_STD,200); // Altezza dell'header
	psPower->umFootHeight=pwdUm(PUM_STD,50);
	psPower->umRowHeight=pwdUm(PUM_STD,35); // 53 Altezza di una linea
	psPower->umTitleHeight=pwdUm(PUM_STD,40); // Altezza della descrizione del campo
	psPower->fLineHorzField=true;

	psPower->pszFontTitleDefault="Tahoma";			// Font del titolo
	psPower->pszFontBodyDefault="Arial";//Times New Roman"; // Font del corpo

	psPower->rumMargin.left=pwdUm(PUM_MM,3);
	psPower->rumMargin.top=pwdUm(PUM_MM,3);
	psPower->rumMargin.right=pwdUm(PUM_MM,3);
	psPower->rumMargin.bottom=pwdUm(PUM_MM,3);
	psPower->fDate=true; // Visualizza la data in stampa
	psPower->fPag=true; // Visualizza il numero di pagina ( in basso a destra)
//



Definizione delle colonne

Questa sezione definisce una tantum il formato dei dati e le colonne della tabella in stampa.
	pwdColBegin();

	pwdColAdd(ALFA,PDA_CENTER,8.0,	"Data");
	pwdColAdd(ALFA,PDA_LEFT,8.0,	"Lotto");
	pwdColAdd(ALFA,PDA_LEFT,6.0,	"Codice");
	pwdColAdd(ALFA,PDA_LEFT,0.0,	"Descrizione");
	pwdColAdd(ALFA,PDA_CENTER,3.0,	"Mag");
	pwdColAdd(ALFA,PDA_LEFT,  16.0,	"Causale");
	pwdColAdd(ALFA,PDA_CENTER,5.0,	"Ciclo");
	pwdColAdd(ALFA,PDA_RIGHT,5.0,	"Um");

	psField=(PWD_FIELD * ) pwdColAdd(NUME,PDA_RIGHT,8.0,"Quantità");
	psField->iDec=sSetup.iDecimali;
	psField->fSep=true;

	pwdColEnd();




Popolare la tabella con i dati

Di seguito un esempio di come popolare i dati con pwdSet e pwsSetEx
	sql_query("%s",pszQuery);
	rsSet=sql_store();
	while (sql_fetch(rsSet)) {

		double dValore;

		pwsRowBegin(); // <-- Inizio riga

		pwdSet(0,dateFor(sql_ptr(rsSet,"DATAMOVI"),"/")); // Data
		pwdSet(1,sql_ptr(rsSet,"CODBA")); // Lotto
		pwdSet(2,sql_ptr(rsSet,"MAGART")); // Magazzino
		pwdSet(3,sql_ptr(rsSet,"DEPAR")); // Descrizione
		.
		.
		.

		dValore=sql_num(rsSet,"QTA")*iSegno; 
		pwdSetEx(8,&dValore,(iSegno<0)?PDC_RED:PDC_BLACK,PDC_TRASP,STYLE_NORMAL,PDA_RIGHT);
		
		pwdRowEnd(); // <-- Fine riga

				
	}
	sql_free(rsSet);


Conclusione Preview e Stampa

	PowerDoc(WS_CLOSE,true,"View");

L'esempio usa funzioni e macro recenti, ma i vecchi sorgenti che usano solo PowerDoc() sono compatibili con il sistema.

Notifica

void * fatNotify(EN_MESSAGE enMess, LONG info,void *ptr)
{

	PWD_NOTIFY * psNotify=(PWD_NOTIFY *) ptr;
	switch (enMess) {

		case WS_DO: 

			psNotify=ptr;
			switch (psNotify->enType)
			{
				//
				// Intestazione della pagina | Invocazione in apertura pagina
				//
				case PDN_HEAD: 
					fatHeaderPage(psNotify);
					break;

				//
				// Stampa del piede del documento
				//
				case PDN_FOOT : 
					fatFooterPage(psNotify);
					break;

			}
			break;
	}

	return NULL;
}

Easyhand C/C++: Report/Tabella | Last modified: 22/02/2021 16.24.48 Europe/Rome | #1.2205
P.. 1133
Easyhand C/C++
Una mano alle tue idee.
Privacy Policy