📄 taxctrl.c
字号:
//PET Mac.陈 13590227055//TaxCtrl.c//适用于 : i-cop,ARM-7,飞龙3210 #include "pos.h" #include "sk.h" #include "error.h" #define ARM_DEVICE //使用深圳蔡总ARM主板 #define FONT_WIDTH 6 //显示半角字宽 6 点 //本文件中 函数表 //得到 税控状态,在 状态行 显示 "税控 正常 纸卷" ...... //void GetTaxStatusAndDisplay( int flg ); //税控初始化 //int TaxInit( void ); #define STATUS_LINE 8 //i-cop=6,ARM-7=8,飞龙3210=14 #define SCR_LINE_WIDTH 24 //i-cop=16,ARM-7=24,飞龙3210=30 extern const char IniFileName[]; //={"/mnt/nand_disk1/PosDef.ini"}; extern const char GT_FileName[]; //={"/mnt/nand_disk1/gt_list.ini"}; //商品部类表文件 extern unsigned char User_Name[41]; //本税控器单位名称 extern unsigned char User_ID[17]; //本税控器纳税人编码 extern unsigned char User_Machine[17]; //本税控器机器编号 extern unsigned char prevent_forge_code[25]; //防伪税控码 struct TaxStatus TaxStatusData ; //税控状态 数据结构 struct user_ware_info UserGoodsTypeList; struct TaxInitData TaxInitDataBuf; struct InvoiceData InvoiceDataBuf;/*{ int TaxFlg; //=0->未进入税控,=1->已进入税控 int TaxReporting; //=0->正常使用中,=1->进入纳税申报,未确认完税 int PaperRollStatus; //=0->未登记发票卷,=1->已登记发票卷,=2->应汇总 char CurCode[11]; //当前发票号 char IndexCode[13]; //税种税目索引号 010200000000 unsigned char EndDate[13]; //本次开票截止日期}; */ //在状态行显示 税控状态void TaxStatusDisplay( void );//功能: 将长整型转为指定长度字符串 如果实际长度小于指定长度 则在字符串前面补零//输入: cc 长整型// str 字符串// len 指定的长度void LongToMasterStr(long cc,unsigned char *str,int len){ int i,j; unsigned char buf[50]; //处理50位以下的长整形 memset(buf,0x0,50); memset(str,0x30,len); //先将字符串全部初始化为字符'0' if(cc<0) cc = -cc; j = digit_num(cc); /* 计算cc的位数 */ for (i=0;i<j;i++) { buf[j-i-1] = cc%10+0x30; cc=cc/10; } if(j>len) memmove(str,buf,len); else memmove((str+len-j),buf,j);}// 商品部类表文件//保存入 gt_list.ini const char GT_FileName[]={"/mnt/nand_disk1/gt_list.ini"}; //商品部类表文件 //"003", 总行数 //"[GoodsList]=002", //"type01=餐饮费", //"rate01=01",int save_gt_list_file( struct user_ware_info *UserGoodsTypeList ) //将 "商品部类表" 数据保存入 gt_list.ini{ int i,err,len; unsigned char SpaceLine[INI_LINE_LENGTH+3]; FILE *fp; struct user_ware_info ware_info_data; err = OpenUserList(&ware_info_data); //sk.c 从税控单元读出税种税目表 if(err) return err; fp = fopen( GT_FileName,"w" ); //写总行数 memset(SpaceLine,0x20,INI_LINE_LENGTH); LongToMasterStr( (ware_info_data.cnt*2+1),SpaceLine,3 ); SpaceLine[INI_LINE_LENGTH]=0x0d; SpaceLine[INI_LINE_LENGTH+1]=0x0a; SpaceLine[INI_LINE_LENGTH+2]=0; fputs(SpaceLine,fp); //写部类信息行数 memset(SpaceLine,0x20,INI_LINE_LENGTH); memmove(SpaceLine,"[GoodsList]=",12); LongToMasterStr( (ware_info_data.cnt*2),&SpaceLine[12],3 ); SpaceLine[INI_LINE_LENGTH]=0x0d; SpaceLine[INI_LINE_LENGTH+1]=0x0a; SpaceLine[INI_LINE_LENGTH+2]=0; fputs(SpaceLine,fp); for(i=0;i<ware_info_data.cnt;i++) { memset(SpaceLine,0x20,INI_LINE_LENGTH); memmove(SpaceLine,"type01=",7); LongToMasterStr( i,&SpaceLine[4],2 ); len = strlen(ware_info_data.data[i].pinming); if(len>30) len = 30; memmove(&SpaceLine[7],ware_info_data.data[i].pinming,len); SpaceLine[INI_LINE_LENGTH]=0x0d; SpaceLine[INI_LINE_LENGTH+1]=0x0a; SpaceLine[INI_LINE_LENGTH+2]=0; fputs(SpaceLine,fp); memset(SpaceLine,0x20,INI_LINE_LENGTH); memmove(SpaceLine,"rate01=",7); LongToMasterStr( i,&SpaceLine[4],2 ); memmove(&SpaceLine[7],ware_info_data.data[i].shuilv,2); SpaceLine[INI_LINE_LENGTH]=0x0d; SpaceLine[INI_LINE_LENGTH+1]=0x0a; SpaceLine[INI_LINE_LENGTH+2]=0; fputs(SpaceLine,fp); } fclose(fp); return err; }int DeptNameChange( void ) //变更企业名称{ int inf = 0; unsigned char errStr[50]; //提示 插入用户卡 LCD6963_ClearScreen(); //清屏幕 //提示 插入用户卡 //提示 "变更企业名称中,请稍候..." LCD_DisplayOneLine( 0,0 ,"插入用户卡",'D',0,0 ); LCD_DisplayOneLine( 6,0 ,"请确认要变更企业名称:",'D',0,0 ); //等待用户按<CR>键 if( TC_WaitUserPressAnyKey( XK_Return )!= 0 ) //等待用户按 某一特定键 return -1; //用户不确认,返回 LCD_DisplayOneLine( 6,0 ,"变更企业名称中,请稍候....",'D',0,1 ); //将第6行内容覆盖 inf = TAX_CHANGE_UNIT_NAME(); //sk.c 从税控单元(用户卡)读出 新的企业名称->User_Name if( inf==0 ) { //将 User_Name 保存 到 kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","UserName",(char*)User_Name ); //TaxInitDataBuf.UserName; //纳税人单位名称 40 STR }else{ ShowTaxMessage( inf , errStr ); LCD_DisplayOneLine( 0,0 ,errStr,'D',1,1 ); TC_PressAnyKey(); } return inf; }void DisplayInvNoStr( void ){ char D_str[12]; memset( D_str,0x20,11 ); D_str[11]=0; memmove( D_str,InvoiceDataBuf.CurCode,10 ); LCD_DisplayOneLine( 8, 0, D_str,'D',0,0 ); //反白显示 //sleep(10);}//从 ini 文件读出发票卷登记数据项void InvoiceStructDisplay( void ){ //从 ini 文件读出发票卷登记数据项 kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","InvCode",InvoiceDataBuf.InvoiceCode ); kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","InvBeginNo",InvoiceDataBuf.BeginCode ); kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","InvEndNo",InvoiceDataBuf.EndCode ); kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","CurCode",InvoiceDataBuf.CurCode ); printf( "Cur:%s,End:%s\n",InvoiceDataBuf.CurCode,InvoiceDataBuf.EndCode );}//从 ini 文件读出 税控状态void TaxStatusReadFromPosDefIni( void ){ //从 ini 文件读出 税控状态 //管理 数值 (得到 TaxFlag 值) TaxStatusData.TaxFlg = kds_ReadDefVal( (char *)IniFileName,"[TaxStatus]","TaxFlag"); //(得到 TaxReportting 值) TaxStatusData.TaxReporting = kds_ReadDefVal( (char *)IniFileName,"[TaxStatus]","TaxReportting"); //(得到 PaperRollStatus 值) TaxStatusData.PaperRollStatus = kds_ReadDefVal( (char *)IniFileName,"[TaxStatus]","PaperRollStatus"); //TaxStatusData.PaperRollStatus = 0; //sm add for debug only} extern struct SaleData nowSaleData_test; //李哲 本处需要 加入你的开票、销售程序int Main_3_2_MenuPro( void ) //开销售发票{ int err = -1; unsigned char errStr[50]; unsigned long InvNum; if( TaxStatusData.PaperRollStatus == 1 ) { LCD6963_ClearScreen(); //清屏幕 LCD_DisplayOneLine( 2,0 ,"税控开票操作中...",'D',1,1 ); err = TAX_BALANCE( &nowSaleData_test ); } if( err == 0 ) //发票号加 1 { //读 当前发票号 kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","CurCode",errStr); errStr[10]=0; InvNum = StrToLong( errStr ); InvNum ++; //+1 UnsignedLongToAsc( errStr, InvNum, 10 ); //将变动后的发票号保存在 ini 文件中 kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","CurCode",(char*)errStr ); kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","CurCode",InvoiceDataBuf.CurCode ); //更改当前发票号 //马上判断有无发票 if( my_memcomp( InvoiceDataBuf.CurCode,InvoiceDataBuf.EndCode,10 ) > 0 ) { TaxStatusData.PaperRollStatus = 2; //当前发票号 > 截止发票号 -> 无票,需汇总 kds_WriteDefVal( (char *)IniFileName,"[TaxStatus]","PaperRollStatus",TaxStatusData.PaperRollStatus ); } } else { LCD6963_ClearScreen(); //清屏幕 ShowTaxMessage( err, errStr ); LCD_DisplayOneLine( 2,0 ,errStr,'D',1,1 ); TC_PressAnyKey(); } printf( "Cur:%s,End:%s\n",InvoiceDataBuf.CurCode,InvoiceDataBuf.EndCode ); TaxStatusDisplay(); //在 状态行 显示 "税控 正常 纸卷" ...... return err; } //得到 税控状态,在 状态行 显示 "税控 正常 纸卷" // "非税 报税 上纸" const char StatusChar[]={"税控非税正常报税有票无票汇总"};void GetTaxStatusAndDisplay( int flg ) //flg=1->从税控器读,flg=0->从内存读 { char *pp; int cnt=0,inf=0; pp = (char*)malloc( 240/8+1 ); memset( pp,0x20,240/8+1 ); if( flg == 1 ) inf = TaxPro_0( &TaxStatusData,flg ); if( inf == 0 ){ //是否进入税控 printf( "Tax Flag : %d\n",TaxStatusData.TaxFlg ); if( TaxStatusData.TaxFlg==1) { memmove( pp+cnt,(char*)&StatusChar[0],4 ); //"税控" cnt+=5; //是否进入报税 printf( "Tax Reporting : %d\n",TaxStatusData.TaxReporting ); printf( "Tax PaperRoll Status : %d\n",TaxStatusData.PaperRollStatus ); 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',0 ); #else LCD_DisplayOneLine( STATUS_LINE,0 ,pp,'D','B',1 ); #endif free( pp ); //KB_WaitAnyKey(); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -