📄 pub_prtlib.c
字号:
#define EXTERNEXEC SQL include "acccore.h";EXEC SQL include "pub.h";EXEC SQL include "dbbuf.h";EXEC SQL include "accnet.h";#define PZDYJ 0 /*凭证打印机*/#define BBDYJ 1 /*报表打印机*/static struct esbxx stPsbxx[2];/***外部使用函数*/int PubPrint(struct accjz *); /*打印主控函数*/int Pub_SockPrint(int, char*, char *, char *, char *, int); /*套打主控函数*/int Pub_SockPrint1(int, char*, char *, char *, char *, int); /*套打主控函数*/int Pub_TablePrint(int, char *, char *, char *, int, int, int, int,\ int, int, char*, int, char*, int);/*报表打印主控函数*/int Pub_TspzPrint(int, char*, char*, char*, int, char*, int);/*特殊凭证打印*/int Pub_PrtHead(FILE *,char *,int); /*写打印前台流程控制信息*//***内部使用函数*/static int _read_prtdata(char *, char **); /*读打印数据函数*/ static int _read_fmtdata(char *, SOCKDATA **); /*读格式数据函数*/ static void _getprtdata(char *,char *, long *);/*解析打印数据函数*//*生成套打打印文件 */static int _create_prtoutfile(SOCKDATA *, char *,char*,char*);/*生成套打串口打印文件*/static int _create_prtauxoutfile(SOCKDATA*,char*,char*,char*);static void _adjust_rowlen(char, FILE *); /*调整行距为 n/120 inch*/static int _sock_deal(struct edyrw ,long); /*套打打印处理*/static int _table_deal(struct edyrw ,long); /*报表打印处理*/static int _pzdy_deal(struct edyrw ,long); /*凭证打印处理*//*************************函数名称 PubPrint()函数功能 后台打印主控流程入参 ptBuf 报文结构出参 ptBuf 报文结构返回 0 成功 其他 失败**************************/int PubPrint(struct accjz *ptBuf){ EXEC SQL BEGIN DECLARE SECTION; struct edyrw tDyrw; /*打印任务表结构*/ char strJym[7]; /*交易码*/ char strJygn[2]; /*交易功能*/ EXEC SQL END DECLARE SECTION; char strDataFile[100]; /*打印数据文件名*/ char strOutFile[100]; /*打印输出文件名*/ PubStrTrim(ptBuf -> p_jym); strcpy(strJym, ptBuf -> p_jym); /*交易简码*/ PubStrncpy(strJygn,ptBuf ->p_jygn,1); /*交易功能*/ EXEC SQL declare DYRW_cur cursor for select * into :tDyrw from edyrw where jym = :strJym and jygn = :strJygn order by rwh; EXEC SQL open DYRW_cur; if(sqlca.sqlcode != 0) { PubErr(-1,__FILE__,__LINE__,PXYM,"打开DYRW_cur错[sqlcode=%d]", sqlca.sqlcode); return -1; } for(;;) { EXEC SQL fetch DYRW_cur; if(sqlca.sqlcode != 0) { if(sqlca.sqlcode == 100) { EXEC SQL close DYRW_cur; EXEC SQL free DYRW_cur; break; } EXEC SQL close DYRW_cur; EXEC SQL free DYRW_cur; PubErr(-1,__FILE__,__LINE__,PXYM,"读表edyrw错[sqlcode=%d]", sqlca.sqlcode); return -1; } if(tDyrw.dylx == 0) /*套打任务*/ { if(_sock_deal(tDyrw ,ptBuf -> p_zjls) < 0) { PLOG("PubPrint()调用_sock_deal()错"); EXEC SQL close DYRW_cur; EXEC SQL free DYRW_cur; return -1; } } else if(tDyrw.dylx == 1) /*报表打印任务*/ { if(_table_deal(tDyrw, ptBuf -> p_zjls) < 0) { PLOG("PubPrint()调用_table_deal()错"); EXEC SQL close DYRW_cur; EXEC SQL free DYRW_cur; return -1; } } else if( tDyrw.dylx == 2) /*凭证打印*/ { if(_pzdy_deal(tDyrw, ptBuf -> p_zjls) < 0) { PLOG("PubPrint()调用_table_deal()错"); EXEC SQL close DYRW_cur; EXEC SQL free DYRW_cur; return -1; } } else if( tDyrw.dylx == 3) /*交易已生成打印文件*/ { char filename[1024], filename1[1024], buf[4096]; FILE *fp, *fp1; PubStrTrim(pTrInfo -> xcwj); PubStrTrim(tDyrw.sjwjm); PubStrTrim(tDyrw.dywjm); if(strlen(tDyrw.dywjm) != 0) sprintf(strOutFile,"%s%-6.6ld", tDyrw.dywjm, \ ptBuf -> p_zjls); else { if(strlen(tDyrw.sjwjm) != 0) { sprintf(strOutFile,"%s%-6.6ld", tDyrw.sjwjm,\ ptBuf -> p_zjls); sprintf(tDyrw.dywjm, tDyrw.sjwjm); } else { PubErr(-1,__FILE__,__LINE__,PXYM,\ "打印任务表中数据文件名和打印输出文件名不能都空"); EXEC SQL close DYRW_cur; EXEC SQL free DYRW_cur; return -1; } } sprintf ( filename, "%s/%s", getenv("PRINTERDIR"), strOutFile ); sprintf ( filename1, "%s.prn", filename ); strcat ( strOutFile, ".prn" ); if ( (fp = fopen( filename, "r" )) == NULL ) { continue; } if ( (fp1 = fopen( filename1, "w" )) == NULL ) { PubErr(-1,__FILE__,__LINE__,PXYM, "打开文件错filename=%s",filename1); EXEC SQL close DYRW_cur; EXEC SQL free DYRW_cur; return -1; } PubStrTrim(tDyrw.dyts); if(strlen(tDyrw.dyts) == 0) { if(Pub_PrtHead(fp1, NULL, tDyrw.cdkz) < 0) { PLOG("Pub_TspzPrint()调用Pub_PtrHead()错"); EXEC SQL close DYRW_cur; EXEC SQL free DYRW_cur; return -1; } } else { if(Pub_PrtHead(fp1, tDyrw.dyts, tDyrw.cdkz) < 0) { PLOG("Pub_TspzPrint()调用Pub_PtrHead()错"); EXEC SQL close DYRW_cur; EXEC SQL free DYRW_cur; return -1; } } while ( fgets(buf, 4096, fp) ) fprintf(fp1, "%s", buf); fclose(fp); fclose(fp1); /*下传文件*/ if(strlen(pTrInfo -> xcwj) == 0) strcpy(pTrInfo -> xcwj, strOutFile); else { strcat(pTrInfo -> xcwj, "+"); strcat(pTrInfo -> xcwj, strOutFile); } } } return 0;} /*************************函数名称 _sock_print()函数功能 后台打印 套打处理入参 tDyrw 打印任务结构 lZjls 交易流水号 出参 无 返回 0 成功 其他 失败**************************/static int _sock_deal(struct edyrw tDyrw ,long lZjls){ FILE * fp; char strDataFile[200]; char strOutFile[200]; char strFmtFile[200]; int iRet; PubStrTrim(tDyrw.sjwjm); PubStrTrim(tDyrw.gswjm); PubStrTrim(tDyrw.dywjm); PubStrTrim(tDyrw.dyts); /*判别打印数据文件是否存在*/ sprintf(strDataFile,"%s/%s%-6.6ld",getenv("PRINTERDIR"),tDyrw.sjwjm,lZjls); if((fp = fopen(strDataFile, "r")) == NULL) { if(errno == 2) { PubErr(0,__FILE__,__LINE__,"000", "打印数据文件[%s]不存在", strDataFile); return 0; } else { PubErr(-1,__FILE__,__LINE__,PXYM,"读打开文件[%s]错[%s]",\ strDataFile, strerror(errno)); return -1; } } fclose(fp); /*生成打印文件*/ sprintf(strDataFile,"%s%-6.6ld", tDyrw.sjwjm, lZjls); sprintf(strFmtFile,"%s", tDyrw.gswjm); if(strlen(tDyrw.dywjm) == 0) /*未配置打印文件名*/ sprintf(strOutFile,"%s%-6.6ld.prn", tDyrw.sjwjm, lZjls); else sprintf(strOutFile,"%s%-6.6ld.prn", tDyrw.dywjm, lZjls); if(strlen(tDyrw.dyts) == 0) /*没有打印提示*/ iRet = Pub_SockPrint(pTrInfo -> pzdyjxh, strFmtFile, \ strDataFile, strOutFile, NULL, tDyrw.cdkz); else iRet = Pub_SockPrint(pTrInfo -> pzdyjxh, strFmtFile, \ strDataFile, strOutFile, tDyrw.dyts, tDyrw.cdkz); if(iRet < 0) { PLOG("_sock_deal()调用Pub_SockPrint()错"); return -1; } /*下传文件*/ if(strlen(pTrInfo -> xcwj) == 0) strcpy(pTrInfo -> xcwj, strOutFile); else { strcat(pTrInfo -> xcwj, "+"); strcat(pTrInfo -> xcwj, strOutFile); } return 0;} /*************************函数名称 _table_print()函数功能 后台打印 报表打印处理入参 tDyrw 打印任务结构 lZjls 交易流水号 出参 无 返回 0 成功 其他 失败**************************/static int _table_deal(struct edyrw tDyrw ,long lZjls){ FILE * fp; char strDataFile[200]; char strOutFile[200]; char strFmtFile[200]; int TBLNUM_col; /*每页横向表数*/ int TBLNUM_row; /*每页表数*/ int PageNum; /*表内每页行数*/ int LineFlag; /*横线标志*/ int TBL_Space; /*表间换行数*/ int VarFlag; /*替换标志*/ char sYscs[32]; /*压缩参数*/ char *tmpptr, *tmpptr1; short sLeftMargin = 0; int iRet; PubStrTrim(tDyrw.sjwjm); PubStrTrim(tDyrw.gswjm); PubStrTrim(tDyrw.dywjm); PubStrTrim(tDyrw.dyts); /*判别打印数据文件是否存在*/ sprintf(strDataFile,"%s/%s%-6.6ld",getenv("PRINTERDIR"),tDyrw.sjwjm,lZjls); if((fp = fopen(strDataFile, "r")) == NULL) { if(errno == 2) { PubErr(0,__FILE__,__LINE__,"000", "打印数据文件[%s]不存在", strDataFile); return 0; } else { PubErr(-1,__FILE__,__LINE__,PXYM,"读打开文件[%s]错[%s]",\ strDataFile, strerror(errno)); return -1; } } fclose(fp); /*生成打印文件*/ sprintf(strDataFile,"%s%-6.6ld", tDyrw.sjwjm, lZjls); sprintf(strFmtFile,"%s.gs", tDyrw.gswjm); if(strlen(tDyrw.dywjm) == 0) /*未配置打印文件名*/ sprintf(strOutFile,"%s%-6.6ld.prn", tDyrw.sjwjm, lZjls); else sprintf(strOutFile,"%s%-6.6ld.prn", tDyrw.dywjm, lZjls); /*准备打印参数*/ PubStrTrim(tDyrw.dycs); TBLNUM_col = atoi(tDyrw.dycs); tmpptr = strstr(tDyrw.dycs,"|"); if(tmpptr == NULL) { PubErr(-1,__FILE__,__LINE__,PXYM,"报表打印dycs格式错"); return -1; } tmpptr ++; TBLNUM_row = atoi(tmpptr); tmpptr = strstr(tmpptr,"|"); if(tmpptr == NULL) { PubErr(-1,__FILE__,__LINE__,PXYM,"报表打印dycs格式错"); return -1; } tmpptr ++; PageNum = atoi(tmpptr); tmpptr = strstr(tmpptr,"|"); if(tmpptr == NULL)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -