⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 taxapi.c

📁 本程序在S3C44B0 uClinux的嵌入式GUI
💻 C
📖 第 1 页 / 共 2 页
字号:
//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 + -