📄 taxctrl.c
字号:
//参数 struct InvoiceRollData *Data//flg = 0 -> 只需 读出 发票卷统计内容; flg = 1 发票卷汇总//功能:函数要判断是否需要进行"发票卷汇总",需:进入"发票卷汇总";不需:向结构填入 发票卷统计数据//返回:int 成功=0; 不需进行"发票卷汇总"=1; 不成功=见错误表;// InvoiceRollData.flg == 1 -> 需要 进行发票卷汇总 inf = TAX_REG_BILL_ROLL_COLLECT( &InvoiceRollDataBuf ); //inf = TaxPro_5( &InvoiceRollDataBuf ); //汇总成功:显示 发票卷汇总内容 InvoiceRollData.InvoiceCode,.BeginCode,.EndCode, // .InvoiceCnt,.ReturnCnt,.CancelCnt,.TotalVal,.RetVal,. // .BeginDate,.StopDate // TaxStatus.PaperRollStatus = 0; //=0->未登记发票卷,=1->已登记发票卷 switch(inf){ case 0: //汇总成功:显示 发票汇总数据 TaxPaperRollCollectDisplay( &InvoiceRollDataBuf ); TaxStatusData.PaperRollStatus = 0; //=0->未登记发票卷,=1->已登记发票卷 kds_WriteDefVal( (char *)IniFileName,"[TaxStatus]","PaperRollStatus",TaxStatusData.PaperRollStatus ); break; case 1: LCD_DisplayOneLine( 6,0 ,"不需发票卷汇总.",'D',0,1 ); //将第6行内容覆盖 TC_PressAnyKey(); //等待 按任意键 inf = 0; break; default: LCD6963_ClearScreen(); //清屏幕 LCD_DisplayOneLine( 6,0 ,"发票卷汇总不成功.",'D',0,1 ); //将第6行内容覆盖 ShowTaxMessage( inf, errStr ); LCD_DisplayOneLine( 0,0 ,errStr,'D',1,1 ); TC_PressAnyKey(); //等待 按任意键 break; } TaxStatusDisplay(); //在状态行显示 税控状态 return inf; }//******************************* 以下为 税控稽查 *****************************************/*struct InvoiceListData { unsigned char Flag; //稽查类别 '明细','日累计','申报记录','修改时间' ASC unsigned char Level_Str[3]; //稽查人员级别 "00"-"FE", "FF" ASC_STR unsigned char BeginCode[11]; //起始号码 11 ASC STR int Cnt; //连续数据条数 unsigned char DateStr[11]; //日期时间 YYYYY-MM-DD 如果稽查类别是'修改时间'则此处为'hh-mm' unsigned char PassWord[9]; //稽查口令}; */ //六、稽查(发票明细/日累计/申报数据)/*//int KB_NumStrInput(int x1,int y1,int y2,char SorD,int Len,int PW_Flag,BYTE StrNum[],int CR_need);//+++++++++++++++++++++++++++++++++++++++++++++++++//处理过程参考://+++++++++++++++++++++++++++++++++++++++++++++++++//提示 "插入稽查卡",按任意键 进入稽查//进入稽查函数: int TAX_INTO_GL_BACK(struct InvoiceListData *checkData);int TaxPro_6_1( struct InvoiceListData *Data );//参数 struct InvoiceListData *Data//功能:函数要从 稽查卡 读出稽查控制文件,向结构填入 稽查类别,稽查人员级别//返回:int 成功=0; 不成功=见错误表;//根据 稽查类别 进入不同的稽查方式 -> '明细','日累计','申报记录','修改时间' switch (稽查类别) InvoiceListData.Flag { case 明细: 输入 日期 (年月日) 或 输入 发票号(要稽查发票的第一张发票号)InvoiceListData.BeginCode 输入 要稽查的发票张数 InvoiceListData.Cnt break; case 日累计: 输入 日期 (年月日) InvoiceListData.DateStr 输入 要稽查的天数 InvoiceListData.Cnt break; case 申报记录: 输入 日期 (年月)InvoiceListData.DateStr 输入 要稽查的申报次数 InvoiceListData.Cnt break; case 修改时间: 输入 时间,并 修改系统 时间 break; }//'明细','日累计','申报记录'->进入 稽查实施读稽查卡级别 int ReadGLCardLevel(unsigned char *GL_level);0xFF 输入稽查口令// 如:稽查人员级别=="FF" InvoiceListData.Level_Str// 输入稽查口令 8位 数字串//稽查实施函数: int TAX_BringIntoEffect_GL_BACK(struct InvoiceListData *checkData);int TaxPro_6_2( struct InvoiceListData *Data );//参数 struct InvoiceListData *Data//功能:函数 实施稽查//返回:int 成功=0; 不成功=见错误表;返回 继续插卡再调用 稽查实施函数: int TaxPro_6_2( struct InvoiceListData *Data );*/ extern const char HexStr[]; //={"0123456789ABCDEF"};//InvoiceListData 结构名称不准确,暂时借用struct InvoiceListData CheckListDataBuf;int TaxCheckPro( void ) { //struct CheckListData *Data; char DateStr[11],CntStr[6]; unsigned char GL_level,errStr[50]; int key_in,inf; LCD6963_ClearScreen(); //清屏幕 //提示 "插入稽查卡",按任意键 进入稽查 LCD_DisplayOneLine( 0,0 ,"请插入稽查卡",'D',1,0 ); LCD_DisplayOneLine( 2,0 ,"今日:",'D',1,0 ); //得到系统日期字符串 YYYY-MM-DD TC_GetSysDateStr( DateStr ); LCD_DisplayOneLine( 4,3*FONT_WIDTH ,DateStr,'D',0,0 ); LCD_DisplayOneLine( 6,0 ,"<CR>开始稽查:",'D',1,0 ); //等待用户按<CR>键 if( TC_WaitUserPressAnyKey( XK_Return )!= 0 ) //等待用户按 某一特定键 return -1; //用户不确认,返回 //inf = TAX_INTO_GL_BACK( &CheckListDataBuf ); //sk.c 进入稽查 inf = TaxPro_6_1( &CheckListDataBuf ); //进入稽查,从稽查卡读出稽查人员级别,稽查类别 if( inf != 0 ){ LCD_DisplayOneLine( 6,0 ,"<CR>稽查失败:",'D',1,1 ); TC_PressAnyKey(); //等待 按任意键 return -1; } //显示 稽查类别,人员级别 LCD6963_ClearScreen(); //清屏幕 //类别 明细 级别 FF LCD_DisplayOneLine( 0,0 ,"类别",'D',1,0 ); LCD_DisplayOneLine( 2,8*FONT_WIDTH ,"级别",'D',1,0 ); //0:'明细' 1:'日累计' 2:'申报记录' 3:'修改时间' switch( CheckListDataBuf.Flag ){ case 0: LCD_DisplayOneLine( 0,4*FONT_WIDTH ,"明细",'D',0,0 ); break; case 1: LCD_DisplayOneLine( 0,4*FONT_WIDTH ,"日累计",'D',0,0 ); break; case 2: LCD_DisplayOneLine( 0,4*FONT_WIDTH ,"申报记录",'D',0,0 ); break; case 3: LCD_DisplayOneLine( 0,4*FONT_WIDTH ,"授权修改时间",'D',0,0 ); break; } LCD_DisplayOneLine( 2,12*FONT_WIDTH ,CheckListDataBuf.Level_Str,'D',0,1 ); //0:'明细',1:'日累',2:'申报',3:'时间' ASC memset( CntStr, 0, 4 ); switch( CheckListDataBuf.Flag ){ case 0://明细稽查 LCD6963_ClearScreen(); //清屏幕 //发票号 0000000000 //连续稽查(张)000 LCD_DisplayOneLine( 4,0 ,"起始日期",'D',1,0 ); LCD_DisplayOneLine( 6,0 ,"连续稽查(张)",'D',1,0 ); //输入起始日期 if ( KB_NumStrInput( 4,8,10,'D',10,0,CheckListDataBuf.DateStr,1 ) != 8 ) { //输入起始日期 //日期没有输入正确,输入发票号 LCD_DisplayOneLine( 4,0 ,"发票号",'D',1,0 ); if ( KB_NumStrInput( 0,6,10,'D',10,0,CheckListDataBuf.BeginCode,1 ) != 10 ) //输入发票号 return -1; //输入不正确,返回 else memset( CheckListDataBuf.DateStr,0,8 ); //令 起始编号项 无效 }else memset( CheckListDataBuf.BeginCode,0,10 ); //令 发票号项 无效 //输入连续稽查张数 if ( KB_NumStrInput( 6,12,12+3,'D',3,0,CntStr,1 ) != 3 ) //输入连续稽查张数 { printf("\n%s\n",CntStr); return -1; //输入不正确,返回 } //CheckListDataBuf.Cnt = atoi( CntStr ); break; case 1://日累稽查 LCD6963_ClearScreen(); //清屏幕 //起始日期 YYYYMMDD //连续稽查(天数)00 LCD_DisplayOneLine( 4,0 ,"起始日期",'D',1,0 ); LCD_DisplayOneLine( 6,0 ,"连续稽查(天)",'D',1,0 ); if ( KB_NumStrInput( 4,6,10,'D',10,0,CheckListDataBuf.DateStr,1 ) != 8 ) //输入起始日期 return -1; //输入不正确,返回 if ( KB_NumStrInput( 6,12,12+2,'D',2,0,CntStr,1 ) != 2 ) //输入连续稽查天数 return -1; //输入不正确,返回 //CheckListDataBuf.Cnt = atoi( CntStr ); break; case 2://申报稽查 LCD6963_ClearScreen(); //清屏幕 //起始年月 YYYYMM //连续稽查(次) 0 LCD_DisplayOneLine( 4,0 ,"起始年月",'D',1,0 ); LCD_DisplayOneLine( 6,0 ,"连续稽查(次数)",'D',1,0 ); if ( KB_NumStrInput( 4,8,10,'D',6,0,CheckListDataBuf.DateStr,1 ) != 10 ) //输入起始年月 return -1; //输入不正确,返回 if ( KB_NumStrInput( 6,12,12+2,'D',1,0,CntStr,1 ) != 1 ) //输入连续稽查次数 return -1; //输入不正确,返回 //CheckListDataBuf.Cnt = atoi( CntStr ); //yyyymmdd CheckListDataBuf.DateStr[6]='0'; CheckListDataBuf.DateStr[7]='1'; break; case 3://时间 //只让用户输入 时分秒, 年月日 从系统读出 ChangeSystemTime(); //实时时钟中的 时间参数 break; } CheckListDataBuf.Cnt = atoi( CntStr ); //将数字字符串转换为整型数 //需要 检查调整 参数吗? do { //处理 输入稽查人员口令 if( memcmp(CheckListDataBuf.Level_Str,"FF",2)==0 ){ //稽查员口令 //000000 LCD_DisplayOneLine( 4,0 ,"稽查员口令",'D',1,1 ); if ( KB_NumStrInput( 6,0,8,'D',8,0,CheckListDataBuf.PassWord,1 ) != 8 ) return -1; //输入不正确,返回 else { //税务管理卡口令验证 if( CheckListDataBuf.Flag==3 ) { //授权修改时间,要单独进行口令验证 //税务管理卡口令验证(先将税务管理卡口令保存在 EepromAdd_16 中) WriteEeprom( EepromAdd_16,8,CheckListDataBuf.PassWord ); //向向EepromAdd_16写稽查口令 if( GLCardPasswordValidate() != 0 ) return -1; } } } if( CheckListDataBuf.Flag==3 ){ //授权 修改时间 //用户修改时间 break; //退出循环 } //稽查实施函数: int TAX_BringIntoEffect_GL_BACK( struct InvoiceListData *checkData ); inf = TaxPro_6_2( &CheckListDataBuf ); if( inf == 0 ) break; if( inf == ChkNeedContinure ) // #define ChkNeedContinure 0xa0 //核查 需要 再插卡 { //提示 核查需要再插卡 LCD_DisplayOneLine( 0,0 ,"需更换卡,再写核查数据...",'D',1,1 ); if( TC_WaitUserPressAnyKey( K_ESC )==0 ) break; //再读卡上稽查级别 //inf = ReadGLCardLevel( &GL_level ); inf = TaxPro_6_3( &GL_level ); if( inf != 0 ){ ; //提示出错,令再插卡,不退出核查 }else{ // CheckListDataBuf.Level_Str[0] = HexStr[GL_level >> 4]; CheckListDataBuf.Level_Str[1] = HexStr[GL_level & 0x0f]; } }else{ //提示出错,退出核查 ShowTaxMessage( inf , errStr ); LCD_DisplayOneLine( 0,0 ,errStr,'D',1,1 ); TC_PressAnyKey(); break; } }while( 1 ); if(inf == 0){ //成功 LCD_DisplayOneLine( 6,0 ,"稽查完成.",'D','W',1 ); //将第6行内容覆盖 }else{ //失败 LCD_DisplayOneLine( 6,0 ,"稽查不成功.",'D','W',1 ); //将第6行内容覆盖 } //等待用户按键,直到按下指定的键 TC_WaitUserPressSpeKey( K_ESC ); TaxStatusDisplay(); //在状态行显示 税控状态 return inf; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -