📄 taxctrl.c
字号:
//在状态行显示 税控状态void TaxStatusDisplay( void ) { char *pp; int cnt=0; pp = (char*)malloc( 240/8+1 ); memset( pp,0x20,240/8+1 ); //if( TaxPro_0() == 0 ){ //是否进入税控 if( TaxStatusData.TaxFlg==1) { memmove( pp+cnt,(char*)&StatusChar[0],4 ); //"税控" cnt+=5; //是否进入报税 if( TaxStatusData.TaxReporting==0) memmove( pp+cnt,(char*)&StatusChar[8],4 ); //"正常" else memmove( pp+cnt,(char*)&StatusChar[8+4],4 ); //"报税" cnt+=5; //是否该分发发票 switch( TaxStatusData.PaperRollStatus ) { case 0: memmove( pp+cnt,(char*)&StatusChar[20],4 ); //"无票" break; case 1: memmove( pp+cnt,(char*)&StatusChar[16],4 ); //"有票" break; case 2: memmove( pp+cnt,(char*)&StatusChar[24],4 ); //"汇总" break; } //end switch } else memmove( pp+cnt,(char*)&StatusChar[4],4 ); //"非税" //} //end if //在状态行显示 "税控 正常 纸卷","非税 报税 上纸" #ifdef ARM_DEVICE LCD_DisplayOneLine( STATUS_LINE,0," ",'D','B',1 ); LCD_DisplayOneLine( STATUS_LINE,17*FONT_WIDTH ,pp,'D','B',1 ); #else LCD_DisplayOneLine( STATUS_LINE,0 ,pp,'D','B',1 ); #endif free( pp ); } //========================================================================== //一、税控初始化 / 查看初始化数据 //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" };*/ //插入税控、用户卡 0 请先插入税控卡和用户卡 //确认当前日期正确 2 确认当前日期正确: // YYYY-MM-DD 4 //任意键税控初始化 6 任意键开始税控初始化 //初始化中请稍候.. 6 // clear screen // 税控初始化成功 8 / 2 // 税控初始化失败 8 / 2 // 按任意键返回 10 / 4void Main_0_4_MenuPro( void ) //税控参数 TaxCtrl.c{ //填入 税控参数 kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","BoxCode",(char*)TaxInitDataBuf.BoxCode ); kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","UserCode",(char*)TaxInitDataBuf.UserCode ); kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","UserName",(char*)TaxInitDataBuf.UserName ); kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","BeginDate",(char*)TaxInitDataBuf.BeginDate ); kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","ValidDate",(char*)TaxInitDataBuf.ValidDate ); kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","InvalidDate",(char*)TaxInitDataBuf.InvalidDate ); kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","OneInvoiceValLimit",(char*)TaxInitDataBuf.OneInvoiceValLimit ); kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","TotalLimit",(char*)TaxInitDataBuf.TotalLimit ); kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","ReturnTotalLimit",(char*)TaxInitDataBuf.ReturnTotalLimit ); kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","TaxTypeIndex",(char*)TaxInitDataBuf.TaxTypeIndex ); //显示 税控参数 TaxInitDisplay( &TaxInitDataBuf ); //显示 初始化结果 } //税控初始化int AppTaxInit( void ) { //struct TaxInitData *TaxInitDataBuf; char DateStr[11]; unsigned char errStr[48]; int key_in,inf; LCD6963_ClearScreen(); //清屏幕 //提示 插入税控卡、用户卡 //显示 当前系统 日期,提示 用户确认日期正确,按 Enter 进入 税控初始化, //提示 "税控初始化中,请稍候..." #ifdef V_DRAGON_VER LCD_DisplayOneLine( 0,0 ,"请先插入税控卡和用户卡",'D','W',1 ); LCD_DisplayOneLine( 2,0 ,"确认当前日期正确:",'D','W',1 ); //得到系统日期字符串 YYYY-MM-DD TC_GetSysDateStr( DateStr ); LCD_DisplayOneLine( 4,3*FONT_WIDTH ,DateStr,'D','W',1 ); LCD_DisplayOneLine( 6,0 ,"<CR>->开始税控初始化:",'D','W',1 ); #else LCD_DisplayOneLine( 0,0 ,"插入税控、用户卡",'D',0,0 ); LCD_DisplayOneLine( 2,0 ,"确认当前日期正确:",'D',0,0 ); //得到系统日期字符串 YYYY-MM-DD TC_GetSysDateStr( DateStr ); //要修改程序 LCD_DisplayOneLine( 4,3*FONT_WIDTH ,DateStr,'D','B',0 ); LCD_DisplayOneLine( 6,0 ,"<CR>->税控初始化:",'D',0,0 ); #endif //等待用户按<CR>键 if( TC_WaitUserPressAnyKey( XK_Return )!= 0 ) //等待用户按 某一特定键 return -1; //用户不确认,返回 #ifdef V_DRAGON_VER LCD_DisplayOneLine( 6,0 ,"初始化中请稍候....",'D','W',1 ); //将第6行内容覆盖 #else LCD_DisplayOneLine( 6,0 ,"初始化中请稍候....",'D',0,1 ); //将第6行内容覆盖 #endif //TaxStatusData.TaxFlg = 0; //sm add for debug only if( TaxStatusData.TaxFlg == 1 ) inf = TaxDeviceInited; //0x1e //税控器已初始化不能再次初始化 //税控初始化函数: int TaxPro_1( struct TaxInitData *Data ); // 参数 struct TaxInitData *Data // struct TaxInitData TaxInitDataBuf //功能:系统未进行过 税控初始化时,进入"税控初始化",已初始化完成后,只向结构填入数据返回 //返回:int 成功=0; 已经税控完成,不需初始化=1; 不成功=见错误表; else inf = TaxInit( &TaxInitDataBuf ,1 ); //inf = TaxPro_1( &TaxInitDataBuf ); if( inf == 0 ) { //税控初始化函数 () //初始化成功:TaxStatusData.TaxFlg = 1; // .TaxReporting = 0; //=0->正常使用中,=1->进入纳税申报,未确认完税 // .PaperRollStatus = 0; //=0->未登记发票卷,=1->已登记发票卷 //并写盘保存 TaxStatusData.TaxFlg = 1; TaxStatusData.TaxReporting = 0; //=0->正常使用中,=1->进入纳税申报,未确认完税 TaxStatusData.PaperRollStatus = 0; //=0->未登记发票卷,=1->已登记发票卷 //初始化数据记入 PosDef.ini kds_WriteDefVal( (char *)IniFileName,"[TaxStatus]","TaxFlag",TaxStatusData.TaxFlg ); kds_WriteDefVal( (char *)IniFileName,"[TaxStatus]","TaxReportting",TaxStatusData.TaxReporting ); kds_WriteDefVal( (char *)IniFileName,"[TaxStatus]","PaperRollStatus",TaxStatusData.PaperRollStatus ); //保存 入 PosDef.ini 文件 kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","BoxCode",(char*)TaxInitDataBuf.BoxCode ); kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","UserCode",(char*)TaxInitDataBuf.UserCode ); kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","UserName",(char*)TaxInitDataBuf.UserName ); kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","BeginDate",(char*)TaxInitDataBuf.BeginDate ); kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","ValidDate",(char*)TaxInitDataBuf.ValidDate ); kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","InvalidDate",(char*)TaxInitDataBuf.InvalidDate ); kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","OneInvoiceValLimit",(char*)TaxInitDataBuf.OneInvoiceValLimit ); kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","TotalLimit",(char*)TaxInitDataBuf.TotalLimit ); kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","ReturnTotalLimit",(char*)TaxInitDataBuf.ReturnTotalLimit ); kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","TaxTypeIndex",(char*)TaxInitDataBuf.TaxTypeIndex ); //"UserEditListFlg=1", //是否允许用户修改编辑 部类表 0->不允许,1->允许(default) if( kds_ReadDefVal( (char *)IniFileName,"[TaxStatus]","UserEditListFlg") == 1 ) { //struct user_ware_info UserGoodsTypeList; //功能: 读出I Open 部类数据列表 返回: =0:操作成功 !=0:见错误对照表 OpenUserList( &UserGoodsTypeList ); //保存入 gt_list.ini const char GT_FileName[]={"/mnt/nand_disk1/gt_list.ini"}; //商品部类表文件 save_gt_list_file( &UserGoodsTypeList ); //将 "商品部类表" 数据保存入 gt_list.ini } TaxInitDisplay( &TaxInitDataBuf ); //显示 初始化结果 inf = 0; } else if( inf == 1 ) { TaxInitDisplay(); //显示 初始化结果 inf = 0; } else { // / clear screen // 税控初始化成功 8 / 2 // 税控初始化失败 8 / 2 // 按任意键返回 10 / 4 ShowTaxMessage( inf, errStr ); #ifdef V_DRAGON_VER //在本屏显示 LCD_DisplayOneLine( 6,0 ,"税控初始化失败",'D','W',1 ); LCD_DisplayOneLine(10,0 ,"按任意键返回..",'D','W',1 ); #else LCD6963_ClearScreen(); //清屏幕后,再显示 LCD_DisplayOneLine( 0,0 ,errStr,'D',1,1 ); LCD_DisplayOneLine( 2,0 ,"税控初始化失败",'D',0,1 ); LCD_DisplayOneLine( 4,0 ,"按任意键返回..",'D',0,1 ); #endif TC_PressAnyKey(); //等待 按任意键 } //end if( TaxPro_1( Data ) == 0 ) TaxStatusDisplay(); //在状态行显示 税控状态 return inf; }//二、发票分发 / 查看发票登记内容//+++++++++++++++++++++++++++++++++++++++++++++++++//处理过程参考://+++++++++++++++++++++++++++++++++++++++++++++++++//提示 插入用户卡//发票分发函数: int TaxPro_2( struct InvoiceData *Data );//参数 struct InvoiceData *Data//flg = 0 -> 只需 读出 发票登记内容; flg = 1 发票分发//功能:函数要判断是否需要进行发票分发,需:进入发票分发;flg=0 or 不需:只向结构填入数据返回//返回:int 成功=0; 已经分发完成,不需分发=1; 不成功=见错误表; // InvoiceDataBuf.flg == 1 -> 需要进行 发票分发//可先用 InvoiceDataBuf.flg = 0,从 函数中返回结构数据 ,返回时 flg == 0->不需 发票分发,flg == 1->要分发//分发成功:显示 发票登记内容 InvoiceData.InvoiceCode,.BeginCode,.EndCode// TaxStatus.PaperRollStatus = 1; //=0->未登记发票卷,=1->已登记发票卷// struct InvoiceData InvoiceDataBuf; //分发发票flg = 1/得到当前发票卷登记数据flg = 0int GetInvoiceRoll( int flg ) { //struct InvoiceData InvoiceDataBuf; int inf; unsigned char errStr[48]; LCD6963_ClearScreen(); //清屏幕 if( TaxStatusData.PaperRollStatus != 0 ) //不需发票分发 { if( TaxStatusData.PaperRollStatus == 2 ) LCD_DisplayOneLine( 0,0 ,"应先进行发票卷汇总.",'D',0,1 ); //将第6行内容覆盖 else LCD_DisplayOneLine( 0,0 ,"不需发票卷分发.",'D',0,1 ); //将第6行内容覆盖 TC_PressAnyKey(); //等待 按任意键 GetInvoiceRollDisplay( &InvoiceDataBuf ); // InvoiceDataBuf ); //分发成功:显示 发票登记内容 .InvoiceCode,.BeginCode,.EndCode TaxStatusDisplay(); //在状态行显示 税控状态 return 0; } if( flg == 1 ){ //要判断发票是否应该分发 GetTaxStatusAndDisplay( 0 ); //得到 税控状态,在 状态行 显示 "税控 正常 纸卷" ...... //TaxStatusData.PaperRollStatus=0->未登记发票卷,=1->已登记发票卷,=2->应发票汇总 if( TaxStatusData.PaperRollStatus != 0 ) { switch( TaxStatusData.PaperRollStatus ) { case 1: LCD_DisplayOneLine( 2,0 ,"已登记过发票卷.",'D',0,0 ); break; case 2: LCD_DisplayOneLine( 2,0 ,"应先完成发票汇总",'D',0,0 ); break; } TC_PressAnyKey(); //等待 按任意键 return -1; //已经登记/应汇总 } //end if( TaxStatusData.PaperRollStatus != 0 ) } //end if( flg == 1 ) //提示 插入用户卡 if( flg == 1 ) { LCD_DisplayOneLine( 0,0 ,"请先插入用户卡",'D',0,1 ); LCD_DisplayOneLine( 2,0 ,"<CR>开始分发发票",'D',0,1 ); //等待用户按<CR>键 if( TC_WaitUserPressAnyKey( XK_Return )!= 0 ) //等待用户按 某一特定键 return -2; else LCD_DisplayOneLine( 2,0 ,"分发发票中,请稍候",'D',0,1 ); }else InvoiceDataBuf.flg = 0; //发票分发函数: int TaxPro_2( struct InvoiceData *InvoiceDataBuf ); //inf = INIT_GET_BILL_INFO( &InvoiceDataBuf ); inf = TAX_REG_BILL_NO( &InvoiceDataBuf ); //inf = TaxPro_2( &InvoiceDataBuf ); if( inf == 0 || inf == 1 ) { //保存 入 PosDef.ini 文件 kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","InvCode",(char*)InvoiceDataBuf.InvoiceCode ); kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","InvBeginNo",(char*)InvoiceDataBuf.BeginCode ); kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","InvEndNo",(char*)InvoiceDataBuf.EndCode ); kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","CurCode",(char*)InvoiceDataBuf.CurCode ); GetInvoiceRollDisplay( &InvoiceDataBuf ); // InvoiceDataBuf ); //分发成功:显示 发票登记内容 .InvoiceCode,.BeginCode,.EndCode TaxStatusData.PaperRollStatus = 1; //=0->未登记发票卷,=1->已登记发票卷 kds_WriteDefVal( (char *)IniFileName,"[TaxStatus]","PaperRollStatus",TaxStatusData.PaperRollStatus ); }else{ //显示 分发发票失败
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -