📄 taxapi.c
字号:
//TaxAPI.c 由王守腾提供#include "pos.h"//#include "TaxCtrlPro.h"#include "sk.h"#include "error.h"#define SCR_LINE_WIDTH 32 //横向192点,12点字符宽=每行32个西文 const unsigned char DeptNameStr[]={"唐人数码"}; extern const char IniFileName[]; //={"/mnt/nand_disk1/PosDef.ini"}; extern const char GT_FileName[]; //={"/mnt/nand_disk1/gt_list.ini"}; //商品部类表文件 extern struct TaxStatus TaxStatusData;/*{ int TaxFlg; //=0->未进入税控,=1->已进入税控 int TaxReporting; //=0->正常使用中,=1->进入纳税申报,未确认完税 int PaperRollStatus;//=0->未登记发票卷,=1->已登记发票卷,=2->=2->应发票汇总 char CurCode[11]; //当前发票号 char IndexCode[13]; //税种税目索引号 010200000000} ;*/ //显示第一屏void WelcomScreen( void ) { char BorW = 0,cnt = 0; LCD_Clear( 'W' ); LCD_DisplayOneLine( 0,0 ,"<<<<<<税控收款机 GB 18240>>>>>>",'D',1,1 ); do{ LCD_DisplayOneLine( 3,0 ,"中国保利集团,大唐电信,香港联智",'D',BorW,0 ); BorW = ! BorW; LCD_DisplayOneLine( 5,0 ,"商业网络、前台收款、税控、银行卡",'D',BorW,1 ); BorW = ! BorW; LCD_DisplayOneLine( 7,9*8 ,"四位一体",'D',BorW,0 ); BorW = ! BorW; if( KB_GetStatus() != 0x11 ) //等待按键 if ( cnt > 7 && KB_GetValue() == 0x1b ) break; if( cnt > 7 ) sleep(1); else TaxPro_0_ForWelcom( &TaxStatusData, cnt, 1 ); cnt ++; if( cnt == 30 ) break; //30秒后退出循环 }while(1); LCD_Clear( 'W' ); } extern struct TaxInitData TaxInitDataBuf; /*{ BYTE BoxCode[17]; //税控器编号 16 ASC STR BYTE UserCode[17]; //纳税人编码 16 ASC STR BYTE UserName[41]; //纳税人单位名称 40 STR BYTE BeginDate[11]; //应用起用日期 YYYY-MM-DD 10 ASC STR BYTE ValidDate[11]; //应用有效日期 YYYY-MM-DD 10 ASC STR BYTE InvalidDate[11]; //开票截止日期 YYYY-MM-DD BYTE OneInvoiceValLimit[13]; //单张开票限额 000,000,000·00 (不足前面补空格) BYTE TotalLimit[13]; //开票累计金额限额 BYTE ReturnTotalLimit[13]; //退票累计金额限额 BYTE TaxTypeIndex[13]; //税种税目索引号 "010203040506" };*/ /*税控器编号1234567890123456纳税人编码1234567890123456纳税人单位名称 0╳╳╳╳╳╳╳╳╳╳ 2╳╳╳╳╳╳╳╳╳╳ 4================应用起用日期YYYY-MM-DD应用有效日期YYYY-MM-DD开票截止日期YYYY-MM-DD税种税目索引号010203040506*/void TaxInitDisplay( struct TaxInitData *Data ) //TaxInitDataBuf { int key_in = 0x11,scr = 0,NeedReDisplayFlg=1; while( key_in != XK_Escape ) { if( NeedReDisplayFlg ) { LCD6963_ClearScreen(); //清屏幕 switch( scr ){ case 0://显示 第一屏 //显示 项目名 LCD_DisplayOneLine( 0,0 ,"税控器编号",'D',1,0 ); LCD_DisplayOneLine( 2,0 ,"纳税人编码",'D',1,0 ); //显示 项目内容 LCD_DisplayOneLine( 0,10*8 ,Data->BoxCode,'D',0,1 ); //税控器编号 LCD_DisplayOneLine( 2,10*8 ,Data->UserCode,'D',0,1 ); //纳税人编码 LCD_DisplayOneLine( 4,0 ,Data->UserName,'D',0,1 ); //纳税人单位名称 if( strlen( Data->UserName ) > SCR_LINE_WIDTH ) //需要折行显示 SCR_LINE_WIDTH=16/24 LCD_DisplayOneLine( 6,0 ,&Data->UserCode[SCR_LINE_WIDTH],'D',0,1 ); //纳税人编码 break; case 1://显示 第二屏 //显示 项目名 LCD_DisplayOneLine( 0,0 ,"应用起用日期",'D',1,0 ); LCD_DisplayOneLine( 2,0 ,"应用有效日期",'D',1,0 ); LCD_DisplayOneLine( 4,0 ,"开票截止日期",'D',1,0 ); LCD_DisplayOneLine( 6,0 ,"税种税目索引号",'D',1,0 ); //显示 项目内容 LCD_DisplayOneLine( 0,12*8 ,Data->BeginDate,'D',0,1 ); //应用起用日期 LCD_DisplayOneLine( 2,12*8 ,Data->ValidDate,'D',0,1 ); //应用有效日期 LCD_DisplayOneLine( 4,12*8 ,Data->InvalidDate,'D',0,1 ); //开票截止日期 LCD_DisplayOneLine( 6,12*8 ,Data->TaxTypeIndex,'D',0,1 ); //税种税目索引号 break; }//end switch }//end if( NeedReDisplayFlg ) NeedReDisplayFlg = 0; //等待 按键 ESC while( ! KB_GetStatus() ) ; key_in = KB_GetValue(); switch( key_in ){ case XK_Up: case XK_Page_Up: if(scr > 0) { scr --; NeedReDisplayFlg = 1; } else scr = 0; break; case XK_Down: case XK_Page_Down: if(scr < 1) { scr++; NeedReDisplayFlg = 1; } else scr = 1; break; case XK_Escape: default: break; }//end switch }//end while } //end void TaxInitDisplay( struct TaxInitData *Data ); extern struct InvoiceData InvoiceDataBuf;/*{ int flg; BYTE InvoiceCode[21]; //发票代码 20 ASC STR BYTE BeginCode[11]; //起始号码 8 ASC STR BYTE EndCode[11]; //截止号码 8 ASC STR BYTE CurCode[11]; //当前发票号 8 ASC STR};*///struct InvoiceData *InvoiceDataBufvoid GetInvoiceRollDisplay( struct InvoiceData *Data ) { LCD6963_ClearScreen(); //清屏幕 //显示 项目名 LCD_DisplayOneLine( 0,0 ,"发票代码",'D',1,0 ); LCD_DisplayOneLine( 4,0 ,"起始号码",'D',1,0 ); LCD_DisplayOneLine( 6,0 ,"截止号码",'D',1,0 ); LCD_DisplayOneLine( 8,0 ,"当前发票号",'D',1,0 ); //显示 项目内容 LCD_DisplayOneLine( 2,0 ,Data->InvoiceCode,'D',0,1 ); //发票代码 LCD_DisplayOneLine( 4,8*8 ,Data->BeginCode,'D',0,1 ); //起始号码 LCD_DisplayOneLine( 6,8*8 ,Data->EndCode,'D',0,1 ); //截止号码 LCD_DisplayOneLine( 8,8*8 ,Data->CurCode,'D',0,1 ); //当前发票号 TC_WaitUserPressSpeKey( XK_Escape ); //等待用户按键,直到按下指定的键 //TC_WaitUserPressAnyKey( XK_Escape ); } extern struct TaxReportData TaxReportDataBuf;void TaxReportDisplay( struct TaxReportData *Data ) { int key_in = 0x11,scr = 0,NeedReDisplayFlg=1; while( key_in != XK_Escape ) { if( NeedReDisplayFlg ) { LCD6963_ClearScreen(); //清屏幕 switch( scr ){ case 0://显示 第一屏 //显示 项目名 LCD_DisplayOneLine( 0,0 ,"申报起算日期",'D',1,0 ); LCD_DisplayOneLine( 4,0 ,"申报截至日期",'D',1,0 ); //显示 项目内容 LCD_DisplayOneLine( 2,6*8 ,Data->BeginDate,'D',0,1 ); //申报起算日期 LCD_DisplayOneLine( 6,6*8 ,Data->CountDate,'D',0,1 ); //申报截至日期 break; case 1://显示 第二屏 //显示 项目名 LCD_DisplayOneLine( 0,0 ,"正常发票份数",'D',1,0 ); LCD_DisplayOneLine( 4,0 ,"退票份数",'D',1,0 ); LCD_DisplayOneLine( 6,0 ,"废票份数",'D',1,0 ); //显示 项目内容 LCD_DisplayOneLine( 2,8*8 ,Data->InvoiceCnt,'D',0,1 ); //正常发票份数 LCD_DisplayOneLine( 4,8*8 ,Data->ReturnCnt,'D',0,1 ); //退票份数 LCD_DisplayOneLine( 6,8*8 ,Data->CancelCnt,'D',0,1 ); //退票份数 break; case 2://显示 第二屏 //显示 项目名 LCD_DisplayOneLine( 0,0 ,"正常发票累计金额",'D',1,0 ); LCD_DisplayOneLine( 4,0 ,"退票累计金额",'D',1,0 ); //显示 项目内容 LCD_DisplayOneLine( 2,8*8 ,Data->TotalVal,'D',0,1 ); //正常发票累计金额 LCD_DisplayOneLine( 6,8*8 ,Data->RetVal,'D',0,1 ); //退票累计金额 break; }//end switch }//end if( NeedReDisplayFlg ) NeedReDisplayFlg = 0; //等待 按键 ESC while( ! KB_GetStatus() ) ; key_in = KB_GetValue(); switch( key_in ){ case XK_Up: case XK_Page_Up: if( scr>0 ) { scr--; NeedReDisplayFlg = 1; } else scr = 0; break; case XK_Down: case XK_Page_Down: if( scr < 2 ) { scr++; NeedReDisplayFlg = 1; }else scr = 2; break; case XK_Escape: default: break; }//end switch }//end while } extern struct CtrlData CtrlDataBuf;/*struct CtrlData { BYTE InvalidDate[11]; //开票截止日期 YYYY-MM-DD BYTE OneInvoiceValLimit[13]; //单张开票限额 000,000,000·00 (不足前面补空格) BYTE TotalLimit[13]; //开票累计金额限额 BYTE ReturnTotalLimit[13]; //退票累计金额限额 BYTE TaxTypeIndex[13]; //税种税目索引号 "010203040506"};*/void TaxReportedDisplay( struct CtrlData *Data ) { LCD6963_ClearScreen(); //清屏幕 //显示 项目名 LCD_DisplayOneLine( 0,0 ,"<<税控回送的新监控数据>>",'D',1,1 ); LCD_DisplayOneLine( 2,0 ,"开票截止日期",'D',1,0 ); LCD_DisplayOneLine( 4,0 ,"单张开票限额",'D',1,0 ); LCD_DisplayOneLine( 6,0 ,"累计金额限额",'D',1,0 ); LCD_DisplayOneLine( 8,0 ,"退票累计限额",'D',1,0 ); //显示 项目内容 LCD_DisplayOneLine( 2,12*8 ,Data->InvalidDate,'D',0,0 ); //开票截止日期 LCD_DisplayOneLine( 4,12*8 ,Data->OneInvoiceValLimit,'D',0,0 ); //单张开票限额 LCD_DisplayOneLine( 6,12*8 ,Data->TotalLimit,'D',0,0 ); //开票累计金额限额 LCD_DisplayOneLine( 8,12*8 ,Data->ReturnTotalLimit,'D',0,0 ); //退票累计金额限额 TC_WaitUserPressSpeKey( XK_Escape ); //等待用户按键,直到按下指定的键 } extern struct InvoiceRollData InvoiceRollDataBuf;/*struct InvoiceRollData { int flg; // BYTE InvoiceCode[21]; //发票代码 20 ASC STR BYTE BeginCode[11]; //起始号码 10 ASC STR BYTE EndCode[11]; //截止号码 10 ASC STR BYTE InvoiceCnt[4]; //正票份数 "000" BYTE ReturnCnt[4]; //退票份数 "000" BYTE CancelCnt[4]; //废票份数 "000" BYTE TotalVal[13]; //正票总金额 000,000,000·00 (不足前面补空格) BYTE RetVal[13]; //废票总金额 000,000,000·00 (不足前面补空格) BYTE BeginDate[11]; //开票起始时间 YYYY-MM-DD 10 ASC STR BYTE StopDate[11]; //开票截止时间 YYYY-MM-DD 10 ASC STR};*/ void TaxPaperRollCollectDisplay( struct InvoiceRollData *Data ) { int key_in = 0x11,scr = 0,NeedReDisplayFlg=1; while( key_in != XK_Escape ) { if( NeedReDisplayFlg ) { LCD6963_ClearScreen(); //清屏幕 switch( scr ){ case 0://显示 第一屏 //显示 项目名 LCD_DisplayOneLine( 0,0 ,"起始号码",'D',1,0 ); LCD_DisplayOneLine( 2,0 ,"截止号码",'D',1,0 ); LCD_DisplayOneLine( 4,0 ,"正票",'D',1,0 ); LCD_DisplayOneLine( 4,12*8 ,"退票",'D',1,0 ); LCD_DisplayOneLine( 6,0 ,"废票",'D',1,0 ); //显示 项目内容 LCD_DisplayOneLine( 0,10*8 ,Data->BeginCode,'D',0,1 );//起始号码 LCD_DisplayOneLine( 2,10*8 ,Data->EndCode,'D',0,1 ); //截止号码 LCD_DisplayOneLine( 4, 8*8 ,Data->InvoiceCnt,'D',0,0 ); //正票份数 LCD_DisplayOneLine( 4,18*8 ,Data->ReturnCnt,'D',0,1 ); //退票份数 LCD_DisplayOneLine( 6, 8*8 ,Data->CancelCnt,'D',0,1 ); //废票份数 break; case 1://显示 第二屏 //显示 项目名 LCD_DisplayOneLine( 0,0 ,"正票总金额",'D',1,0 ); LCD_DisplayOneLine( 2,0 ,"退票总金额",'D',1,0 ); LCD_DisplayOneLine( 4,0 ,"开票起始时间",'D',1,0 ); LCD_DisplayOneLine( 6,0 ,"开票截止时间",'D',1,0 ); //显示 项目内容 LCD_DisplayOneLine( 0,14*8 ,Data->TotalVal,'D',0,1 ); //正票总金额 LCD_DisplayOneLine( 2,14*8 ,Data->RetVal,'D',0,1 ); //退票总金额 LCD_DisplayOneLine( 4,14*8 ,Data->BeginDate,'D',0,1 ); //开票起始时间 LCD_DisplayOneLine( 6,14*8 ,Data->StopDate,'D',0,1 ); //开票截止时间 break; }//end switch }//end if( NeedReDisplayFlg ) NeedReDisplayFlg = 0; //等待 按键 ESC while( ! KB_GetStatus() ) ; key_in = KB_GetValue(); switch( key_in ){ case XK_Up: case XK_Page_Up: if( scr > 0 ) { scr--; NeedReDisplayFlg = 1; }else scr = 0; break; case XK_Down: case XK_Page_Down: if( scr < 1 ) {scr++; NeedReDisplayFlg = 1; }else scr = 1; break; case XK_Escape: default: break; }//end switch }//end while } //====================================================== extern unsigned char User_Machine[],User_ID[],User_Name[];//得到 税控状态,向全局结构赋值int TaxPro_0( struct TaxStatus *statusData ) { unsigned char tmp_data[50]; unsigned char tmp_buf[50]; unsigned char now_bill_number[5]; unsigned long int_now_bill_number; int err,i; //得到税控标志 err = GetTaxFlag(tmp_data); if(err) return err; statusData->TaxFlg = tmp_data[0]; if(tmp_data[0]!=1) return 0x10; //未税控初始化状态 //err = JudgeFunAppState(); //if(err) return err; //得到税种税目索引号 memset(tmp_buf,0x0,50); err = ReadFlash(6,FlashSKCardFile2Info_5,tmp_buf); //税种税目索引号 if(err) return err; for(i=0;i<6;i++) { BCDtoChar(&statusData->IndexCode[i*2],tmp_buf[i]);} //得到开票截止日期 memset(tmp_buf,0x0,100); err = ReadFlash(22,FlashSKCardFile2Info_1,tmp_buf); if(err) return err; memset(tmp_data,0x0,20); for(i=0;i<4;i++) BCDtoChar(&tmp_data[i*2],tmp_buf[i]); stByteMove(statusData->EndDate,tmp_data,4); statusData->EndDate[4]='-'; stByteMove(&statusData->EndDate[5],&tmp_data[4],2); statusData->EndDate[7]='-'; stByteMove(&statusData->EndDate[8],&tmp_data[6],2); //初始化时得到单位名称 机器号 税号 memset(tmp_buf,0x0,50); err = ReadFlash(8,FlashSKCardFile1Info_4,tmp_buf); //读机器编号 if(err) return err; memset(tmp_data,0x0,20); for(i=0;i<8;i++) BCDtoChar(&tmp_data[i*2],tmp_buf[i]); stByteMove(User_Machine,tmp_data,16); memset(tmp_buf,0x0,50); err = ReadFlash(8,FlashSKCardFile1Info_5,tmp_buf); //读纳税人编码 if(err) return err; memset(tmp_data,0x0,20); for(i=0;i<8;i++) BCDtoChar(&tmp_data[i*2],tmp_buf[i]); stByteMove(User_ID,tmp_data,16); memset(tmp_buf,0x0,50); //err = ReadFlash(40,FlashSKCardFile1Info_12,tmp_buf); //读纳税人单位名称 err = ReadFlash(40,FlashYHCardFile1Info_9,tmp_buf); //读纳税人单位名称 if(err) return err; stByteMove(User_Name,tmp_buf,40); //得到当前发票号 memset(now_bill_number,0x0,5); err = GetNowBillNumber(now_bill_number); if(err) return err; memset(tmp_buf,0x0,50); memset(tmp_data,0x0,50); ByteMoveHexToCount((unsigned char*)&int_now_bill_number,now_bill_number,4);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -