📄 taxapi.c
字号:
LongToStr(int_now_bill_number,tmp_data); i = strlen(tmp_data); stByteMove(tmp_buf,"0000000000",10); stByteMove(&tmp_buf[10-i],tmp_data,i); stByteMove(statusData->CurCode,tmp_buf,10); //将当前发票号放入结构 //Show_boot_strap_init(statusData); //debug err = JudgeNowBillNumber( &statusData->PaperRollStatus,tmp_buf ); return err;}//得到 税控状态,向全局结构赋值int TaxPro_0_ForWelcom( struct TaxStatus *statusData,int times,int ReadFromUnit ) { unsigned char tmp_data[50]; unsigned char tmp_buf[100],StrBuf[21]; unsigned char now_bill_number[5]; unsigned long int_now_bill_number; int err,i; if( times > 0 && statusData->TaxFlg == 0 ) //未进税控,不用再取其他税控状态 return 0; switch( times ) { case 0: //得到税控标志 err = GetTaxFlag(tmp_data); if(err) return err; statusData->TaxFlg = tmp_data[0]; //保存 到 ini 文件 kds_WriteDefVal( (char *)IniFileName,"[TaxStatus]","TaxFlag",statusData->TaxFlg ); if(tmp_data[0]!=1) return 0x10; //未税控初始化状态 break; case 1: //得到开票截止日期,金额限额 等 if( ReadFromUnit ){ 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); //保存入 ini 文件 kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","InvalidDate",(char*)statusData->EndDate ); //将 data_buf (小模式)数据转换成 带小数点的字符串 StrAddDecimalMark ConvHexToStrAddDeclmalMark( StrBuf,&tmp_buf[4] ); //单张发票开票金额限额 (长度:4) memmove( TaxInitDataBuf.OneInvoiceValLimit,StrBuf,strlen( StrBuf ) ); kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","OneInvoiceValLimit",(char*)TaxInitDataBuf.OneInvoiceValLimit ); //发票累计金额限额 (长度:4) ConvHexToStrAddDeclmalMark( StrBuf,&tmp_buf[8] ); //单张发票开票金额限额 (长度:4) memmove( TaxInitDataBuf.TotalLimit,StrBuf,strlen( StrBuf ) ); kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","TotalLimit",(char*)TaxInitDataBuf.TotalLimit ); //退票累计金额限额 (长度:4) ConvHexToStrAddDeclmalMark( StrBuf,&tmp_buf[12] ); //单张发票开票金额限额 (长度:4) memmove( TaxInitDataBuf.ReturnTotalLimit,StrBuf,strlen( StrBuf ) ); kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","ReturnTotalLimit",(char*)TaxInitDataBuf.ReturnTotalLimit ); for( i=0; i<6; i++ ) WordToAsc( &statusData->IndexCode[i*2],(unsigned int)tmp_buf[16+i],2 ); //税种税目索引号 (长度:6) //保存入 ini 文件 kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","TaxTypeIndex",(char*)statusData->IndexCode ); err = ReadFlash(22,FlashSKCardFile4Info_2,tmp_buf); if(err) return err; //得到 发票代码,发票起始号,发票截止号 for( i=0; i<10; i++) { BCDtoChar( &InvoiceDataBuf.InvoiceCode[i*2],tmp_buf[i]);} //发票代码 kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","InvCode",(char*)InvoiceDataBuf.InvoiceCode ); //hex_data (小模式)数据转换成 固定长度的数字字符串 Conv_minHexToMasterStr( InvoiceDataBuf.BeginCode ,&tmp_buf[10] ); kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","InvBeginNo",(char*)InvoiceDataBuf.BeginCode ); Conv_minHexToMasterStr( InvoiceDataBuf.EndCode ,&tmp_buf[14] ); kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","InvEndNo",(char*)InvoiceDataBuf.EndCode ); } break; case 2: if( ReadFromUnit ){ err = ReadFlash( 8,FlashSKCardFile1Info_7,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( TaxInitDataBuf.BeginDate,tmp_data,4); TaxInitDataBuf.BeginDate[4]='-'; stByteMove(&TaxInitDataBuf.BeginDate[5],&tmp_data[4],2); TaxInitDataBuf.BeginDate[7]='-'; stByteMove(&TaxInitDataBuf.BeginDate[8],&tmp_data[6],2); //保存入 ini 文件 kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","BeginDate",(char*)TaxInitDataBuf.BeginDate ); memset(tmp_data,0x0,20); for(i=0;i<4;i++) BCDtoChar(&tmp_data[i*2],tmp_buf[4+i]); //转换 应用有效日期 stByteMove(TaxInitDataBuf.ValidDate,tmp_data,4); TaxInitDataBuf.ValidDate[4]='-'; stByteMove(&TaxInitDataBuf.ValidDate[5],&tmp_data[4],2); TaxInitDataBuf.ValidDate[7]='-'; stByteMove(&TaxInitDataBuf.ValidDate[8],&tmp_data[6],2); //保存入 ini 文件 kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","ValidDate",(char*)TaxInitDataBuf.ValidDate ); } break; case 3: //初始化时得到单位名称 机器号 税号 if( ReadFromUnit ){ 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); //保存入 ini 文件 kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","BoxCode",(char*)User_Machine ); } break; case 4: if( ReadFromUnit ){ 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); //保存入 ini 文件 kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","UserCode",(char*)User_ID ); } break; case 5: if( ReadFromUnit ){ 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); //保存入 ini 文件 kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","UserName",(char*)User_Name ); } break; case 6: //得到当前发票号 if( ReadFromUnit ){ memset(tmp_buf,0x0,50); memset(tmp_data,0x0,50); err = ReadEeprom(EepromAdd_6,4,tmp_data); //EepromAdd_6//当前发票号(每次交易结束后更新)(长度:4字节Hex数) if(err) return err; Conv_minHexToMasterStr( tmp_buf,tmp_data ); stByteMove(statusData->CurCode,tmp_buf,10); //将当前发票号放入结构 //保存入 ini 文件 kds_WriteDefTxt( (char *)IniFileName,"[TaxStatus]","CurCode",(char*)statusData->CurCode ); } break; case 7: //判断 税控发票是否用完 //Show_boot_strap_init(statusData); //debug err = JudgeNowBillNumber( &statusData->PaperRollStatus,tmp_buf ); if( statusData->PaperRollStatus == 0 ) { //statusData->PaperRollStatus = 2; //如果 税控器中返回 "无票",ini 文件中记录 "应汇总": ->"应汇总" //读 当前发票号 //kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","CurCode",statusData->CurCode ); //马上判断有无发票 if( my_memcomp( statusData->CurCode,InvoiceDataBuf.EndCode,10 ) > 0 ) { statusData->PaperRollStatus = 2; //当前发票号 > 截止发票号 -> 无票,需汇总 } } kds_WriteDefVal( (char *)IniFileName,"[TaxStatus]","PaperRollStatus",statusData->PaperRollStatus ); break; } //end switch return err;}/*int TaxPro_0( struct TaxStatus *Data ){ //现在为假函数,用于调试 Data->TaxFlg = 0;//是否进入税控机状态 Data->TaxReporting = 0;//是否进入报税状态 Data->PaperRollStatus = 0;//发票卷状态 memmove(Data->CurCode,"0000000001",10);//当前发票号 memmove(Data->IndexCode,"010200000000",12);//税种税目索引号 memmove(Data->EndDate,"2004-12-31",10);//本次开票截止日期 return 0;}*/ //税控初始化int TaxPro_1( struct TaxInitData *Data ){ //现在为假函数,用于调试 memset( Data->BoxCode,0,17 ); memmove( Data->BoxCode,"1234567890123456",16 ); memset( Data->UserCode,0,17 ); memmove( Data->UserCode,"0987654321654321",16 ); memset( Data->UserName,0,41 ); memmove( Data->UserName,(char*)DeptNameStr,sizeof(DeptNameStr) ); memset( Data->BeginDate,0,11 ); memmove( Data->BeginDate,"2004-03-01",10 ); memset( Data->ValidDate,0,11 ); memmove( Data->ValidDate,"2008-03-01",10 ); memset( Data->InvalidDate,0,11 ); memmove( Data->InvalidDate,"2003-04-01",10 ); memset( Data->OneInvoiceValLimit,0,13 ); memmove( Data->OneInvoiceValLimit," 100000.00",12 ); memset( Data->TotalLimit,0,13 ); memmove( Data->TotalLimit," 10000000.00",12 ); memset( Data->ReturnTotalLimit,0,13 ); memmove( Data->ReturnTotalLimit," 10000000.00",12 ); memset( Data->TaxTypeIndex,0,13 ); memmove( Data->TaxTypeIndex,"010203040506",12 ); return 0;} //发票分发函数:int TaxPro_2( struct InvoiceData *Data ) { memset( Data->InvoiceCode,0,11 ); memmove( Data->InvoiceCode,"10000000010000000001",20 );//发票代码 memset( Data->BeginCode,0,11 ); memmove( Data->BeginCode,"0000000001",10 );//起始号 memset( Data->EndCode,0,11 ); memmove( Data->EndCode,"0000000100",10 );//截止号 memset( Data->CurCode,0,11 ); memmove( Data->CurCode,"0000000001",10 );//当前发票号 return 0; } //三、纳税申报 /* char BeginDate[11]; //申报起算日期 YYYY-MM-DD 10 ASC STR char CountDate[11]; //申报截至日期 YYYY-MM-DD 10 ASC STR char InvoiceCnt[8]; //正常发票份数 "0000000" (不足前面补空格) char ReturnCnt[8]; //退票份数 "0000000" (不足前面补空格) char CancelCnt[8]; //废票份数 "0000000" (不足前面补空格) char TaxTypeIndex[13]; //税种税目索引号 "010203040506" char SubTotal[6][13]; //正常发票分类累计金额 000,000,000·00 (不足前面补空格) char SubRetVal[6][13]; //退票分类累计金额 000,000,000·00 (不足前面补空格) char TotalVal[13]; //正常发票累计金额 000,000,000·00 (不足前面补空格) char RetVal[13]; //退票累计金额 000,000,000·00 (不足前面补空格)*/ int TaxPro_3( struct TaxReportData *Data ) { memset( Data->BeginDate,0,11 ); memmove( Data->BeginDate,"2004-03-01",10 );//申报起算日期 memset( Data->CountDate,0,11 ); memmove( Data->CountDate,"2004-03-25",10 );//申报截至日期 memset( Data->InvoiceCnt,0,11 ); memmove( Data->InvoiceCnt,"0001234",7 );//正常发票份数 memset( Data->ReturnCnt,0,11 ); memmove( Data->ReturnCnt,"0000002",7 );//退票份数 memset( Data->CancelCnt,0,11 ); memmove( Data->CancelCnt,"0000000",7 );//废票份数 // 忽略了 TaxTypeIndex, SubTotal,SubRetVal memset( Data->TotalVal,0,11 ); memmove( Data->TotalVal,"000123400.00",12 );//正常发票累计金额 memset( Data->RetVal,0,11 ); memmove( Data->RetVal,"000001234.00",12 );//退票累计金额 return 0; } /*struct CtrlData //申报完成(完税回插)数据结构{ char InvalidDate[11]; //开票截止日期 YYYY-MM-DD char OneInvoiceValLimit[13]; //单张开票限额 000,000,000·00 (不足前面补空格) char TotalLimit[13]; //开票累计金额限额 char ReturnTotalLimit[13]; //退票累计金额限额 char TaxTypeIndex[13]; //税种税目索引号 "010203040506"};*/ //监控数据回读int TaxPro_4( struct CtrlData *Data ) { memset( Data->InvalidDate,0,11 ); memmove( Data->InvalidDate,"2004-05-01",10 );//开票截止日期 memset( Data->OneInvoiceValLimit,0,13 ); memmove( Data->OneInvoiceValLimit,"000100000.00",12 );//单张开票限额 memset( Data->TotalLimit,0,13 ); memmove( Data->TotalLimit,"010000000.00",12 );//开票累计金额限额 memset( Data->ReturnTotalLimit,0,13 ); memmove( Data->ReturnTotalLimit,"001000000.00",12 );//退票累计金额限额 memset( Data->TaxTypeIndex,0,13 ); memmove( Data->TaxTypeIndex,"010203040506",12 );//税种税目索引号 return 0; }/*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};*/ int TaxPro_5( struct InvoiceRollData *Data ) { memset( Data->InvoiceCode,0,21 ); memmove( Data->InvoiceCode,"10000000010000000001",20 );//发票代码 memset( Data->BeginCode,0,11 ); memmove( Data->BeginCode,"0000000001",10 );//起始号码 memset( Data->EndCode,0,11 ); memmove( Data->EndCode,"0000000100",10 );//截止号码 memset( Data->InvoiceCnt,0,4 ); memmove( Data->InvoiceCnt,"099",3 );//正票份数 memset( Data->ReturnCnt,0,4 ); memmove( Data->ReturnCnt,"001",3 );//退票份数 memset( Data->CancelCnt,0,4 ); memmove( Data->CancelCnt,"000",3 );//废票份数 memset( Data->TotalVal,0,13 ); memmove( Data->TotalVal,"000012341.00",12 );//正票总金额 memset( Data->RetVal,0,13 ); memmove( Data->RetVal,"000000100.00",12 );//废票总金额 memset( Data->BeginDate,0,11 ); memmove( Data->BeginDate,"2004-03-08",10 );//开票起始时间 memset( Data->StopDate,0,11 ); memmove( Data->StopDate,"2004-03-10",10 );//开票截止时间 return 0; } extern struct InvoiceListData CheckListDataBuf;/*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 TaxPro_6_1( struct InvoiceListData *Data ) { //Data->flg = 0;//稽查类别 memset( Data->Flag,0,9 ); //memmove( Data->Flag,"明细",4 );//稽查类别 Data->Flag = 0; //data_buf[8] 稽查方式 -> 0:'明细' 1:'日累计' 2:'申报记录' 3:'修改时间' memset( Data->Level_Str,0,3 ); memmove( Data->Level_Str,"FF",2 );//稽查人员级别 return 0; }int TaxPro_6_2( void ) { return 0; } int TaxPro_6_3( int *GL_level ){ *GL_level = 0x01; //管理卡核查级别}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -