📄 cmsb16.sqc
字号:
/******************************************************************** ** 源码文件名称 : cmsB16.SQC ** 函数名称 : cms21B016 ** 所属子系统 : CMS ** 当前文件版本 : 1.0.0.0 ** 作 者 : XuZy ** 版本创建日期 : 2004/10/14 ** 功能描述 : 卡存款余额统计表 ** 修改记录 : ** 修改人 修改日期 修改日期*********************************************************************/#include "sysdefine.h"#include <stdio.h>#include "pubcom.h"#include "funcapi.h"#include "code.h"#include "attrdef.h"#include "cmscode.h"#include "cmsreport03.h"#include "cmsmerchantinfo.h"#include "pubbranchinfo.h"#include "errlog.h"EXEC SQL INCLUDE sqlca;#define OVERPAGE 31 /* 满页行数 */ #define OVERLINE 5 /* 换行行数 */ #define LIMIT 36struct prtdata{ char acCardKindComm[BIT31_LEN +1]; /* 卡种描述 */ char acPrdName[70 + 1]; /* 帐户类型 */ char acCardAmt[TXAMT_LEN +1]; /* 余额 */};#define PRTLINE \ if( prtline( fp, acFmtFile,acPrtData ) ) \ FUNCERR_PRO \ iLineCount++;/* 打印表头 */#define PRTHEAD \ memset( acPrtData, 0x00, sizeof( acPrtData ) ); \ prtline( fp,"title:" ); \ iLineCount++; \ memset( acPrtData, 0x00, sizeof( acPrtData ) ); \ prtline( fp,"title2:%s", acBankname ); \ iLineCount++; \ memset( acPrtData, 0x00, sizeof( acPrtData ) ); \ prtline( fp,"title3:" ); \ iLineCount++; \ memset( acPrtData, 0x00, sizeof( acPrtData ) ); \ prtline( fp, "title0:%s|%s",pstPubcom->acBrc,acPrtBrc); \ iLineCount++; \ memset( acPrtData, 0x00, sizeof( acPrtData ) ); \ prtline( fp, "title1:%s|%s|%s|%s", \ acCcyComm, acYear,acMonth,acDate); \ iLineCount++; \ memset( acPrtData, 0x00, sizeof( acPrtData ) ); \ prtline( fp, "head:" ); \ iLineCount++; \ iLine ++ ;/* 打印数据 */#define PRTBODY \ memset( acPrtData, 0x00, sizeof( acPrtData ) ); \ prtline( fp, "body:" ); \ iLineCount++; \ memset( acPrtData, 0x00, sizeof( acPrtData ) ); \ prtline( fp, "body0:%s|%s|%s", \ stPrtdata.acCardKindComm, stPrtdata.acPrdName, \ stPrtdata.acCardAmt); \ iLineCount++; \ iLine++; \ iNum++;/* 打印页表尾 */#define PRTFOOT \ memset( acPrtData, 0x00, sizeof( acPrtData ) ); \ prtline( fp, "foot:" ); \ iLineCount++; \ memset( acPrtData, 0x00, sizeof( acPrtData ) ); \ prtline( fp, "foot0:%s", acAmt ); \ iLineCount++;#define PRTFOOTO \ memset( acPrtData, 0x00, sizeof( acPrtData ) ); \ prtline( fp, "footo:" ); \ iLineCount++; \ prtline( fp, "foot2:%s", acTAmt ); \ iLineCount++; \ prtline( fp, "foot3:" ); \ iLineCount++; \ iLine = 0 ; #define BOTTM \ memset( acPrtData, 0x00, sizeof( acPrtData ) ); \ prtline( fp, "bottm:%s|%s", \ acPage, pstPubcom->acTeller); \ iLineCount++; \ iPage ++ ; iLine = 0 ; int cms21B016(pstPubcom)struct pubcom *pstPubcom;{ EXEC SQL BEGIN DECLARE SECTION; char acBrc[BRC_LEN +1]; /* 机构代码 */ char acBeginDate[DATE_LEN + 1 ]; /* 交易日期 */ char acPrdName[70 + 1 ]; /* 产品代码 */ char acCardKind[BIT9_LEN + 1 ]; /* 卡片种类 */ char acCcy[BIT4_LEN + 1 ]; /* 币种 */ char acCcyComm[16 + 1 ]; /* 币种名称 */ char acCardKindComm[70 + 1 ]; /* 卡类说明 */ char acSelStr[512]; char acSelStr1[512]; char acPrdCod[8]; double dCardAmt = 0.00; /* 余额 */ short dCardAmt_id = 0; /* 余额指示符 */ EXEC SQL END DECLARE SECTION; double dAmt = 0.0; /* 交易金额小计 */ double dTAmt = 0.0; /* POS交易金额小计 */ FILE *fp, *fmtfp; /* 文件指针 */ int iLineCount = 0 ; int i, iPage , iLine, iNum, iFlag; char acBrc1[BRC_LEN + 1]; /* 机构码 */ char acPrtBrc[BRC_LEN + 1]; char acWhrStr[ 512 ]; char acFileName[ 101 ]; char acFmtFile[ 101 ]; char acPrtData[ 4096 ]; char acPage[ 5 ]; char acAmt[ 18 ]; char acTAmt[ 18 ]; char acTNumber[ 8 ]; char acNumber[ 5 ]; char acBankname[ 41 ]; char acTmpCcy[BIT4_LEN + 1]; char acTmpCardKind[BIT9_LEN + 1]; char acTmpMctMcc[BIT5_LEN + 1]; char acYear[BIT5_LEN + 1]; char acMonth[BIT3_LEN + 1]; char acDate[BIT3_LEN + 1]; struct prtdata stPrtdata; memset( acSelStr, 0x00, sizeof( acSelStr ) ); memset( acWhrStr, 0x00, sizeof( acWhrStr ) ); memset( acBrc, 0x00, sizeof( acBrc ) ); memset( acBrc1, 0x00, sizeof( acBrc1 ) ); memset( acPage, 0x00, sizeof( acPage ) ); memset( &stPrtdata, 0x00, sizeof( struct prtdata )); memset( acBankname, 0x00, sizeof( acBankname ) ); memset( acYear, 0x00, sizeof( acYear ) ); memset( acMonth, 0x00, sizeof( acMonth ) ); memset( acDate, 0x00, sizeof( acDate ) ); if ( pubGetBaseInfo("BANKNAME", acBankname ) ) FUNCERR_PRO strpack(acBankname); sprintf( g_acTrcMsg, "acBankname[%s]", acBankname ); TRCLOG4 /* 取数据字典 */ getstring( "BeginDate1", acBeginDate ); getstring( "Brc1", acBrc1 ); strpack(acBeginDate); strpack(acBrc1); sprintf( g_acTrcMsg, "BeginDate1[%s]acBrc1[%s]", acBeginDate,acBrc1 ); TRCLOG4 /* 赋时间 */ memcpy(acYear, acBeginDate, 4); memcpy(acMonth,acBeginDate + 5, 2); memcpy(acDate, acBeginDate + 8, 2); /*检查交易机构是否为中心机构,如果不是,只能打印本机构明细 */ if (strcmp( pstPubcom->acBrcType, BRCTYPE_CRDCENTER)) { if (strcmp(pstPubcom->acBrc, acBrc1)) { if (strlen(acBrc1) == 0) { strcpy(acBrc1, pstPubcom->acBrc); } else { strcpy( g_acRspCode, "CMS214" ); pubCrtRspInfo( ); ERRLOG goto Exit; } } } if (!strcmp( pstPubcom->acBrcType, BRCTYPE_CLSCENTER)) { strcpy( g_acRspCode, "CMS214" ); pubCrtRspInfo( ); ERRLOG goto Exit; } fp = (FILE *)BeginFile( pstPubcom, NULL ); if ( fp == NULL ) { strcpy( g_acRspCode, "DPS902" ); pubCrtRspInfo( ); ERRLOG goto Exit; } sprintf( acFmtFile, "%s/fmt/cmsB16.fmt", getenv("HOME") ); sprintf( g_acFmtFile, acFmtFile ); if ( ( fmtfp=fopen(acFmtFile,"r") ) == NULL ) { strcpy( g_acRspCode, "DPS902" ); strcpy( g_acTrcMsg, acFmtFile ); TRCLOG4 sprintf( g_acRspMsg, "打开格式文件[%s]错", acFmtFile ); ERRLOG goto Exit ; } iLine = 0 ; iFlag = 0 ; iPage = 1 ; iNum = 1 ; sprintf( acSelStr, "select DISTINCT(ccy),cardkind,prdcod,ccycomm,cardkindcomm,trandate from cmsreport03 where trandate='%s' ", acBeginDate ); if (strlen(acBrc1) > 0) { sprintf( acSelStr + strlen(acSelStr), "and brc = '%s' ", acBrc1 ); } sprintf( acSelStr + strlen(acSelStr), "GROUP BY ccy,cardkind,prdcod,ccycomm,cardkindcomm,trandate "); sprintf( acSelStr + strlen(acSelStr), " ORDER BY ccy,cardkind,prdcod,trandate"); sprintf( g_acTrcMsg,"%s", acSelStr ); TRCLOG4 EXEC SQL PREPARE pre1_cur FROM :acSelStr; if ( SQLCODE ) { sprintf( g_acTrcMsg,"SQLCODE[%d]", SQLCODE); TRCLOG4 strcpy( g_acRspCode, "CMS1A7" ); pubCrtRspInfo( SQLCODE ); ERRLOG goto Exit; } EXEC SQL DECLARE report_cur CURSOR FOR pre1_cur; if(SQLCODE) { sprintf( g_acTrcMsg,"SQLCODE[%d]", SQLCODE); TRCLOG4 strcpy( g_acRspCode, "CMS110" ); pubCrtRspInfo("cmsreport03",SQLCODE ); ERRLOG goto Exit ; } SQLOPENCUR(report_cur,"report_cur") if(SQLCODE) { sprintf( g_acTrcMsg,"SQLCODE[%d]", SQLCODE); TRCLOG4 strcpy( g_acRspCode, "CMS111" ); pubCrtRspInfo("cmsreport03",SQLCODE ); ERRLOG goto Exit ; } while ( TRUE ) { pubInitCmsreport03(); memset(acCcy, 0x00, sizeof(acCcy)); memset(acCardKind, 0x00, sizeof(acCardKind)); memset(acCcyComm, 0x00, sizeof(acCcyComm)); memset(acCardKindComm, 0x00, sizeof(acCardKindComm)); memset(acPrdCod, 0x00, sizeof(acPrdCod)); EXEC SQL FETCH report_cur INTO :acCcy,:acCardKind,:acPrdCod,:acCcyComm,:acCardKindComm; if (SQLCODE == SQLNOTFOUND) break; if (SQLCODE) { sprintf( g_acTrcMsg,"SQLCODE[%d]", SQLCODE); TRCLOG4 strcpy( g_acRspCode, "CMS112" ); pubCrtRspInfo("cmsreport03",SQLCODE ); ERRLOG goto Exit ; } memset(acPrdName, 0x00, sizeof(acPrdName)); EXEC SQL SELECT prdname INTO :acPrdName FROM dpssaveprdinfo WHERE prdcode=:acPrdCod; if (SQLCODE && SQLCODE != SQLNOTFOUND) { sprintf( g_acTrcMsg,"SQLCODE[%d]", SQLCODE); TRCLOG4 strcpy( g_acRspCode, "SQL语句错误!" ); pubCrtRspInfo("cmsreport03",SQLCODE ); ERRLOG goto Exit ; } if ( SQLCODE == SQLNOTFOUND ) { EXEC SQL SELECT prdname INTO :acPrdName FROM dpstermprdinfo WHERE prdcode = :acPrdCod; if( SQLCODE && SQLCODE != SQLNOTFOUND ) { strcpy(g_acRspCode,"CMS112"); pubCrtRspInfo("dpstermprdinfo",SQLCODE); ERRLOG SQLCLOSECUR(report_cur,"report_cur") goto Exit; } } /* 取金额 */ sprintf(acSelStr1, "select sum(cardamt) tamt from cmsreport03 where prdcod='%s' and cardkind='%s' and ccy='%s' and trandate='%s' ", acPrdCod,acCardKind, acCcy, acBeginDate ); if (strlen(acBrc1) > 0) { sprintf( acSelStr1 + strlen(acSelStr1), "and brc = '%s' ", acBrc1 ); memset(acPrtBrc, 0x00, sizeof(acPrtBrc)); strcpy(acPrtBrc, acBrc1); strpack(acPrtBrc); } else { memset(acPrtBrc, 0x00, sizeof(acPrtBrc)); strcpy(acPrtBrc, "全行"); strpack(acPrtBrc); } sprintf( g_acTrcMsg,"%s", acSelStr1); TRCLOG4 EXEC SQL PREPARE pre2_cur FROM :acSelStr1; if ( SQLCODE ) { sprintf( g_acTrcMsg,"SQLCODE[%d]", SQLCODE); TRCLOG4 strcpy( g_acRspCode, "CMS1A7" ); pubCrtRspInfo( SQLCODE ); ERRLOG goto Exit; } EXEC SQL DECLARE report1_cur CURSOR FOR pre2_cur; if(SQLCODE) { sprintf( g_acTrcMsg,"SQLCODE[%d]", SQLCODE); TRCLOG4 strcpy( g_acRspCode, "CMS110" ); pubCrtRspInfo("cmsreport03",SQLCODE ); ERRLOG goto Exit ; } SQLOPENCUR(report1_cur,"report1_cur") if(SQLCODE) { sprintf( g_acTrcMsg,"SQLCODE[%d]", SQLCODE); TRCLOG4 strcpy( g_acRspCode, "CMS111" ); pubCrtRspInfo("cmsreport03",SQLCODE ); ERRLOG goto Exit ; } dCardAmt = 0.00; dCardAmt_id = 0; EXEC SQL FETCH report1_cur INTO :dCardAmt:dCardAmt_id; if (SQLCODE) { sprintf( g_acTrcMsg,"SQLCODE[%d]", SQLCODE); TRCLOG4 strcpy( g_acRspCode, "取金额错误!" ); pubCrtRspInfo("report1_cur",SQLCODE ); ERRLOG goto Exit ; } sprintf( g_acTrcMsg,"dCardAmt[%.2f]id[%d]", dCardAmt,dCardAmt_id); TRCLOG4 SQLCLOSECUR(report1_cur,"report1_cur") /* 表第一次打印取信息(当币种、卡类变换使用) */ if (iFlag == 0) { memset( acTmpCcy, 0x00, sizeof(acTmpCcy) ); memset( acTmpCardKind, 0x00, sizeof(acTmpCardKind) ); strcpy( acTmpCcy, acCcy ); strcpy( acTmpCardKind, acCardKind ); } /* 向结构体中赋值 */ memset( &stPrtdata, 0x00, sizeof( struct prtdata )); strpack( acCardKindComm ); strpack( acPrdName ); strcpy( stPrtdata.acCardKindComm, acCardKindComm ); strcpy( stPrtdata.acPrdName, acPrdName ); sprintf( stPrtdata.acCardAmt, "%.2f", dCardAmt ); strpack( stPrtdata.acCardKindComm ); strpack( stPrtdata.acPrdName ); /* 打表头 */ if( iFlag == 0 ) { PRTHEAD iFlag ++; } /* 卡类变换重新打印 */ if (strcmp(acTmpCcy, acCcy) != 0) { /* 打印卡类小计 */ memset(acAmt, 0x00, sizeof(acAmt)); sprintf( acAmt, "%.2lf", dAmt ); PRTFOOT /* 给下一个卡类小计赋初值 */ dAmt = 0.00; /* 打印合计 */ memset(acTAmt, 0x00, sizeof(acTAmt)); sprintf( acTAmt, "%.2lf", dTAmt ); memset(acPage, 0x00, sizeof(acPage)); sprintf( acPage, "%d", iPage ); /* 打印 */ PRTFOOTO BOTTM memset( acTmpCardKind, 0x00, sizeof(acTmpCardKind) ); memset( acTmpCcy, 0x00, sizeof(acTmpCcy) ); strcpy( acTmpCcy, acCcy ); strcpy( acTmpCardKind, acCardKind ); /* 给行号赋初值 */ iNum = 1; iPage = 1; PRTHEAD /* 给下一张表合计赋初值 */ dTAmt = 0.00; } /* 卡类转换变换的打印 */ if (strcmp(acTmpCardKind, acCardKind) != 0 ) { /* 打印完成的商户小计数据 */ memset(acAmt, 0x00, sizeof(acAmt)); sprintf( acAmt, "%.2lf", dAmt ); sprintf( g_acTrcMsg, "bcde10"); TRCLOG4 PRTFOOT /* 给下一个商户小计赋初值 */ memset( acTmpCardKind, 0x00, sizeof(acTmpCardKind) ); strcpy( acTmpCardKind, acCardKind ); dAmt = 0.00; } /* 打印数据带 */ PRTBODY /* 商户小计 */ dAmt += dCardAmt; /* 总合计 */ dTAmt += dCardAmt; /* 赋页数 */ memset(acPage, 0x00, sizeof(acPage)); sprintf( acPage, "%d", iPage ); /* 翻页并且初始化页合计变量 */ if ( iLine % OVERPAGE == 0 ) { BOTTM; PRTHEAD } } if( iLineCount == 0 ) { strcpy( g_acRspCode, "999998" ); sprintf( g_acRspMsg, "无满足条件的纪录!" ); ERRLOG goto Exit ; } /* 打印表尾 */ memset(acAmt, 0x00, sizeof(acAmt)); sprintf( acAmt, "%.2lf", dAmt ); PRTFOOT memset(acTAmt, 0x00, sizeof(acTAmt)); sprintf( acTAmt, "%.2lf", dTAmt ); PRTFOOTO BOTTMExit: fclose( fp ); fclose( fmtfp ); SQLCLOSECUR(report_cur,"report_cur") SQLCLOSECUR(report1_cur,"report1_cur") if( !strcmp( g_acRspCode, RSP_OK ) ) { SetInqFormid(pstPubcom, "") ; return SUCCESS; } else return FAILED ;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -