UINT8 IfRtInvRoll() { CRtInv curRtInv; UINT8 ret = SUCCESS; // UINT32 nSumDelDate = 0; UINT32 nRtDetNo = 0; // TDateTime lastDate(g_globalArg->m_startDecDate, 000001); // lastDate--; // UINT32 nRefDate = lastDate.FormatInt(YYYYMMDD);//上次申报的截止日期 ret = curRtInv.CheckRoll(g_globalArg->m_rtInvCount, nRtDetNo); if (ret!=SUCCESS) { CaMsgBox::ShowMsg("红票信息滚动判断失败!"); DBG_RETURN(FAILURE); } if (nRtDetNo>0) { DBG_PRINT(("nRtDetNo = %u", nRtDetNo)); CaMsgBox::ShowMsg("红票信息要滚动!"); } DBG_RETURN(SUCCESS); }
//--------------------------------------------------------------------- //检验发票是否可退 //--------------------------------------------------------------------- UINT8 INVM_CheckIsNoRet(CInvHead *pInvHead) { DBG_ENTER("MKINV_CheckIsNoRet"); DBG_PRINT(("进入MKINV_CheckIsNoRet函数")); DBG_PRINT(("pInvHead->m_kplx= %u",pInvHead->m_kplx)); //该票是否在本月内//debug DBG_PRINT(("pInvHead->m_kprq= %u",pInvHead->m_kprq)); INT32 nReturn = CmpCurMonth(pInvHead->m_kprq, pInvHead->m_kpsj); DBG_PRINT(("nReturn= %d",nReturn)); if (0 == nReturn) { DBG_PRINT(("本月发票,不得冲红%d", nReturn)); // DBG_RETURN(BX_RET_MONTH_ERR); } INT8 value[256]; memset((void*)value, 0, sizeof(value)); INT32 errorcode; sprintf(value,"where FPDM = '%s' and FPHM = %u",pInvHead->m_fpdm.c_str(), pInvHead->m_fphm); //若为已退发票,返回 CRtInv rtInv; rtInv.m_filter = value; //查询 rtInv.Requery(); DBG_PRINT(("pInvHead->m_bzkz = %s", pInvHead->m_bzkz.c_str())); if ((rtInv.LoadOneRecord() == SQLITE_OK)||("1" == pInvHead->m_bzkz)) { DBG_PRINT((" This invoice already has returned invoice!")); DBG_RETURN(HAVE_RT_INV); } //若为红票,返回 if ((pInvHead->m_kplx == RETURN_INV)||(pInvHead->m_kplx == RET_MANUAL_INV)|| (pInvHead->m_kplx == RET_SPECIAL_INV)) { DBG_RETURN(RT_INV); } //若为废票,返回 if( (pInvHead->m_kplx == WASTE_INV) || (pInvHead->m_kplx == WASTE_NOR) || (pInvHead->m_kplx == WASTE_RET)) { DBG_RETURN(WT_INV); } //不能开红票,返回 DBG_PRINT(("pInvHead->m_hczt = %s", pInvHead->m_hczt.c_str())); if ( "1" == pInvHead->m_hczt) { g_globalArg->m_strMsg =pInvHead->m_backup2; DBG_RETURN(INV_LIB_ERR); } DBG_PRINT(("退出CheckInvReturn函数")); DBG_RETURN(SUCCESS); }
UINT8 CGInvLabelWin::CheckCancelValid(void) { CInvHead *pInvHead = m_pLInvHead; char val[256]; INT32 errorcode; memset((void*)val, 0, sizeof(val)); //若为废票,返回 if( (WASTE_INV == pInvHead->m_kplx) || (WASTE_NOR == pInvHead->m_kplx) || (WASTE_RET == pInvHead->m_kplx) ) { CaMsgBox::ShowMsg("不能作废废票"); return FAILURE; } //若为已退发票,返回 memset((void*)val, 0, sizeof(val)); sprintf(val,"where FPDM = '%s' and FPHM = %u",pInvHead->m_fpdm.c_str(), pInvHead->m_fphm); DBG_PRINT(("val = %s", val)); CRtInv rtInv; rtInv.m_filter = val; rtInv.Requery(); DBG_PRINT(("m_pInvHead->m_bzkz = %s", pInvHead->m_bzkz.c_str())); if (rtInv.LoadOneRecord() == SQLITE_OK)//一张正票已被冲红则不能作废,但相应的红票可以作废 { CaMsgBox::ShowMsg("该票已开红票"); return FAILURE; } return SUCCESS; }
//按发票号码查询发票明细 UINT8 INVM_InvDetailNOQuery(string invCode,UINT32 invNO,UINT8 uFlag) { INT32 Ret=SUCCESS; string strsql(""); string strErr=""; string strBar=""; INT32 ret=0; //发票明细查询 CInvHead Invhead; UINT32 invNum=0;//发票张数 UINT8 cxfs=0; //0:按发票号码段查询 string cxtj(""); // cxfs为0时:12发票代码+8位起始号码+8位终止号码 cxtj =invCode; INT8 tmpChar[16]; memset((void *)tmpChar,0x00,sizeof(tmpChar)); sprintf(tmpChar,"%08u",invNO); cxtj.append(tmpChar); cxtj.append(tmpChar); DBG_PRINT(("cxtj= %s",cxtj.c_str())); if (uFlag ==0) { strBar="发票信息查询中....."; } else { strBar="发票信息补传中....."; } CaProgressBar proBar(strBar.c_str()); proBar.ReFresh(); Ret=g_pAPIBase->GetInvHeadInfo_API(*g_YwXmlArg, cxfs, cxtj, invNum, &Invhead, strErr); DBG_PRINT(("Ret= %d",Ret)); if (Ret !=SUCCESS) { CaMsgBox::ShowMsg(strErr); return FAILURE; } if (uFlag ==1) { CaMsgBox::ShowMsg("发票信息等待上传!"); g_globalArg->m_pthreadFlag = 1; return SUCCESS; } //从盘上获取的明细编码为空,则置为 "0000000000000",便于报表统计 CInvDet *p = Invhead.pHead; while (p) { DBG_PRINT(("p->m_spbm = %u", p->m_spbm.c_str())); if ("" == p->m_spbm) { p->m_spbm = "0000000000000"; } p = p->pNext; DBG_PRINT(("INV_DET AddNew()")); } //查看本地是否有该发票信息 CInvHead invheadtmp; INT8 sqlbuf[128]; memset(sqlbuf, 0x00, sizeof(sqlbuf)); sprintf(sqlbuf, "where FPDM = '%s' and FPHM = %u", invCode.c_str(), invNO); invheadtmp.m_filter = sqlbuf; invheadtmp.Requery(); if (invheadtmp.LoadOneRecord() == SQLITE_OK) { //判断本地数据库的数据类型是否与转换器一致 DBG_PRINT(("invheadtmp.m_kplx= %u",invheadtmp.m_kplx)); DBG_PRINT(("Invhead.m_kplx= %u",Invhead.m_kplx)); if (invheadtmp.m_kplx != Invhead.m_kplx ) { strsql = sqlbuf; invheadtmp.m_kplx = Invhead.m_kplx; ret = invheadtmp.Update(strsql, &(invheadtmp.m_kplx), NULL); DBG_PRINT(("ret= %d",ret)); if ( ret!= SQLITE_OK) { CaMsgBox::ShowMsg("更新发票头信息表错误"); return FAILURE; } //更新INV_DET发票类型 CInvDet invDet; invDet.m_kplx =invheadtmp.m_kplx; ret = invDet.Update(strsql, &(invDet.m_kplx), NULL); DBG_PRINT(("ret= %d",ret)); if ( ret!= SQLITE_OK) { CaMsgBox::ShowMsg("更新发票明细信息表错误"); return FAILURE; } } } else { //发票信息保存 if (SUCCESS != Invhead.Save()) { CaMsgBox::ShowMsg("查询发票存储失败!"); return FAILURE; } DBG_PRINT(("Invhead.m_kplx= %u",Invhead.m_kplx)); if(Invhead.m_kplx == RETURN_INV) { CRtInv rtInv; rtInv.m_fpdm =Invhead.m_yfpdm; rtInv.m_fphm =Invhead.m_yfphm; ret = rtInv.AddNew(); //写已退发票信息表 DBG_PRINT(("ret= %d",ret)); // if ( ret!= SQLITE_OK) // { // CaMsgBox::ShowMsg("查询红票,存储蓝票信息表错误"); // return FAILURE; // } } } CaMsgBox::ShowMsg("查询发票成功"); return SUCCESS; }
//已开发票作废 UINT8 INVM_WstInv(CInvHead* pInvHead, string &strErr) { DBG_ASSERT_EXIT((pInvHead != NULL), (" pInvHead == NULL!")); INT32 ret = SUCCESS; INT8 val[256]; string strsql(""); UINT8 waste_type = 0; UINT8 tmpType = pInvHead->m_kplx; switch(pInvHead->m_kplx) { case NORMAL_INV: waste_type = WASTE_NOR;//正票可以作废,成为正废票 break; case RETURN_INV: case RET_MANUAL_INV: case RET_SPECIAL_INV: waste_type = WASTE_RET;//红票(负票)也可以作废,成为负废票 break; default: ; } UINT8 zflx= 1; //已开发票作废 ret= g_pAPIBase->MakeWasteInv_API(*g_YwXmlArg, pInvHead, zflx, strErr); if (SUCCESS != ret) { DBG_PRINT(("strErr = %s", strErr.c_str())); return FAILURE; } POWOFF_DISABLE(); //屏蔽掉电中断 //更新INV_HEAD发票类型 memset((void*)val, 0x00, sizeof(val)); sprintf(val, "where FPDM='%s' AND FPHM=%u", pInvHead->m_fpdm.c_str(), pInvHead->m_fphm); strsql = val; pInvHead->m_kplx = waste_type; pInvHead->m_kprq = pInvHead->m_zfrq; pInvHead->m_kpsj = pInvHead->m_zfsj; ret = pInvHead->Update(strsql, &(pInvHead->m_kplx), &(pInvHead->m_kprq), &(pInvHead->m_kpsj), NULL); if ( ret!= SQLITE_OK) { strErr = "更新发票信息表错误"; return FAILURE; } DBG_PRINT(("更新INV_HEAD发票类型strsql = %s", strsql.c_str())); //更新INV_DET发票类型 CInvDet pInvDet; pInvDet.m_kplx = waste_type; pInvDet.m_kprq = pInvHead->m_zfrq; pInvDet.m_kpsj = pInvHead->m_zfsj; ret = pInvDet.Update(strsql, &(pInvDet.m_kplx), &(pInvDet.m_kprq), &(pInvDet.m_kpsj), NULL); if ( ret!= SQLITE_OK) { strErr = "更新发票信息表错误"; return FAILURE; } DBG_PRINT(("更新INV_DET发票类型strsql = %s", strsql.c_str())); //删除RT_INV表中,红票对应的原发票代码和号码 DBG_PRINT(("pInvHead->m_kplx = %d", pInvHead->m_kplx));//开票类型并不从金税盘中返回 if(tmpType == RETURN_INV) { CRtInv rtInv; memset(val, 0, sizeof(val)); sprintf(val, "where FPDM = '%s' and FPHM = %u ", pInvHead->m_yfpdm.c_str(), pInvHead->m_yfphm); DBG_PRINT(("val = %s", val)); rtInv.m_filter = val; if( rtInv.Delete() != SQLITE_OK ) { DBG_PRINT(("Delete RT_INV info error")); } DBG_PRINT(("Delete RT_INV info succeed")); } POWOFF_ENABLE(); //开掉电中断 DBG_PRINT(("WstInv() SUCCESS")); return SUCCESS; }
INT32 CJSKMakeInvoice::MakeInvAuthority(CInvHead *pInvHead, string& strErr) { INT32 retcode = JSK_SUCCESS; INT8 tmpBuff[32]; UINT8 sDecBuff[MAX_DATETIME_LEN+1]; INT8 sqlbuf[128]; INT32 errcode = 0; memset(sqlbuf, 0, sizeof(sqlbuf)); UINT32 uCurDate = 0; UINT32 uCurTime = 0; uCurDate = pInvHead->m_kprq; uCurTime = pInvHead->m_kpsj; DBG_PRINT(("uCurDate = %u", uCurDate)); DBG_PRINT(("uCurTime = %u", uCurTime)); switch(pInvHead->m_kplx) { case JSK_NORMAL_INV: // { // //离线锁死日(判断当前时间是否超过离线锁死日) // // //离线开票限定时长(当前时间与第一张未上传的发票时间比对) // CInvServ invServ; // invServ.Requery(); // if(invServ.LoadOneRecord() == SQLITE_OK) // { // DBG_PRINT(("invServ.m_issueDate = %u", invServ.m_issueDate)); // DBG_PRINT(("invServ.m_issueTime = %u", invServ.m_issueTime)); // DBG_PRINT(("g_globalArgLib->m_invKind->m_Lxkjsj = %u", g_globalArgLib->m_invKind->m_Lxkjsj)); // TDateTime upDateTime(invServ.m_issueDate, invServ.m_issueTime); // upDateTime = upDateTime.HourAdd(upDateTime, g_globalArgLib->m_invKind->m_Lxkjsj); // DBG_PRINT(("upDateTime = %s", upDateTime.FormatString(YYYYMMDDHHMMSS).c_str())); // DBG_PRINT(("curDateTime = %s", curDateTime.FormatString(YYYYMMDDHHMMSS).c_str())); // if(curDateTime >= upDateTime) // { // strErr = "离线开具限定时长超限!"; // return JSK_FAILURE; // } // } // // //离线开票限定正数累计金额 // if(nSum + g_globalArgLib->m_InvServSum > g_globalArgLib->m_invKind->m_maxSum) // { // strErr = "离线累计金额超限!"; // return JSK_FAILURE; // } // } break; case JSK_RETURN_INV: { sprintf(sqlbuf, "where FPDM='%s' and FPHM=%u", pInvHead->m_yfpdm.c_str(), pInvHead->m_yfphm); DBG_PRINT(("sqlbuf = %s", sqlbuf)); CRtInv tmpRtInv; tmpRtInv.m_filter.append(sqlbuf); tmpRtInv.Requery(); errcode = tmpRtInv.LoadOneRecord(); if(errcode == SQLITE_OK) { retcode = JSK_COMMON_ERR_NO; strErr = "已开过负票,不能再次开具!"; return retcode; } memset(sDecBuff, 0, sizeof(sDecBuff)); retcode = CJSKInfoFunc::GetJSPSendTime(sDecBuff, strErr); if( retcode != JSK_SUCCESS ) { return retcode; } TDateTime sDecDate((INT8 *)sDecBuff, DATETIME_POS); CInvHead tmpInvHead; tmpInvHead.m_filter.append(sqlbuf); tmpInvHead.Requery(); errcode = tmpInvHead.LoadOneRecord(); if(errcode != SQLITE_OK) { tmpInvHead.m_fpdm = pInvHead->m_yfpdm; tmpInvHead.m_fphm = pInvHead->m_yfphm; retcode = CJSKInfoFunc::GetInvDetailInfoNO(&tmpInvHead, strErr); if(retcode != JSK_SUCCESS) { return retcode; } if(tmpInvHead.Save() != SUCCESS) { DBG_PRINT(("InvHead Save Error!")); } } if(tmpInvHead.m_kplx != JSK_NORMAL_INV) { retcode = JSK_COMMON_ERR_NO; strErr = "原发票非正数发票,不能开具负票!"; return retcode; } if(tmpInvHead.m_kphjje != pInvHead->m_kphjje) { retcode = JSK_COMMON_ERR_NO; strErr = "负票金额与原发票不一致!"; return retcode; } // TDateTime invDate(tmpInvHead.m_kprq, tmpInvHead.m_kpsj); // DBG_PRINT(("invDate = %s", invDate.FormatString(YYYYMMDDHHMMSS).c_str())); // DBG_PRINT(("sDecDate = %s", sDecDate.FormatString(YYYYMMDDHHMMSS).c_str())); // if(invDate >= sDecDate) // { // retcode = JSK_COMMON_ERR_NO; // strErr = "原发票未抄报,不能开具负票!"; // return retcode; // } } break; case JSK_WASTE_INV: break; case JSK_WASTE_NOR: case JSK_WASTE_RET: { memset(sDecBuff, 0, sizeof(sDecBuff)); retcode = CJSKInfoFunc::GetJSPSendTime(sDecBuff, strErr); if( retcode != JSK_SUCCESS ) { return retcode; } TDateTime sDecDate((INT8 *)sDecBuff, DATETIME_POS); memset(sDecBuff, 0, sizeof(sDecBuff)); sprintf((INT8 *)sDecBuff, "%08u%06u", pInvHead->m_kprq, pInvHead->m_kpsj); TDateTime invDate((INT8 *)sDecBuff, DATETIME_POS); if(invDate < sDecDate) { retcode = JSK_COMMON_ERR_NO; strErr = "原发票已抄报,不能作废"; return retcode; } } break; default: break; } return JSK_SUCCESS; }
INT32 CJSKMakeInvoice::FPKJ_Proc(CInvHead *pInvhead, string &strErr, UINT8 wasteflag) { DBG_PRINT(("===== FPKJ_Proc Begin() ======")); DBG_ASSERT_EXIT((pInvhead != NULL), (" pInvhead == NULL!")); INT32 retcode = JSK_SUCCESS; UINT8 tmpBuf[16]; INT8 sqlbuf[128]; //获取可滚动表的记录数 UINT8 nIfRolled=0; retcode = g_globalArgLib->RollData(nIfRolled); if(retcode!= SUCCESS) { strErr = "中间件数据库滚动失败!"; DBG_PRINT((" Roll() error !")); return JSK_FAILURE; } if(wasteflag == 0) { DBG_PRINT(("kplx = %u", pInvhead->m_kplx)); if(pInvhead->m_kplx == 0) { DBG_PRINT(("m_maxSign = %lld", g_globalArgLib->m_invKind->m_maxSign)); DBG_PRINT(("pInvhead->m_kphjje = %lld", pInvhead->m_kphjje)); if(pInvhead->m_kphjje > g_globalArgLib->m_invKind->m_maxSign) { strErr = "开票单张金额超限!"; return JSK_FAILURE; } if(pInvhead->m_kphjje <= 0) { strErr = "正数发票金额不能为零"; return JSK_FAILURE; } pInvhead->m_kplx = JSK_NORMAL_INV; } else if(pInvhead->m_kplx == 1) { pInvhead->m_kplx = JSK_RETURN_INV; } else { strErr = "发票类型错误!"; return JSK_FAILURE; } } else { if(pInvhead->m_kplx != JSK_WASTE_INV) { strErr = "发票类型错误!"; return JSK_FAILURE; } } //当前开票时间 UINT8 curTime[MAX_DATETIME_LEN+1]; retcode = CJSKInfoFunc::GetJSPCurDate(curTime, strErr); if( retcode != JSK_SUCCESS ) { return retcode; } TDateTime tmpDateTime((INT8 *)curTime, DATETIME_POS); pInvhead->m_kprq = tmpDateTime.FormatInt(YYYYMMDD); pInvhead->m_kpsj = tmpDateTime.FormatInt(HHMMSS); pInvhead->m_CurTime = tmpDateTime.FormatString(YYYYMMDDHHMMSS, "%u%02u%02u%02u%02u%02u"); if(pInvhead->m_kplx == JSK_WASTE_INV) { pInvhead->m_zfsj = (INT8 *)curTime; } //权限控制 retcode = MakeInvAuthority(pInvhead, strErr); if( retcode != JSK_SUCCESS ) { //retcode = JSK_COMMON_ERR_NO; return retcode; } CJSKInvManageProc::fplxdm2fplx(pInvhead->m_fplxdm, pInvhead->m_fplb); pInvhead->m_xfyhzh = g_globalArgLib->m_corpInfo->m_Khzh; //销方银行账号 DBG_PRINT(("pInvhead->fplb = %u", pInvhead->m_fplb)); //取发票代码、号码 CInvVol invVol; retcode = CJSKInfoFunc::GetCurInvInfo(&invVol, strErr); if( retcode != JSK_SUCCESS ) { return retcode; } pInvhead->m_fpdm = invVol.m_code; pInvhead->m_fphm = invVol.m_curInvNo; //调用金税盘函数获取税控码、CA签名、索引号 retcode = CJSKInfoFunc::MakeInvHandInfo(pInvhead, strErr); DBG_PRINT(("retcode = %d", retcode)); if( retcode != JSK_SUCCESS ) { return retcode; } //数据库事务开始 pInvhead->BeginTransaction(); //存数据库 UINT32 errorcode; errorcode = pInvhead->Save(); if (errorcode != SUCCESS) { // retcode = JSK_COMMON_ERR_NO; // DBG_PRINT(("pInvhead->Save() wrong")); // return retcode; } DBG_PRINT(("pInvhead->Save() SUCCESS")); //将该发票记录存储到DB的INV_SERV CInvServ invServ; DBG_PRINT(("m_InvServNum = %lu, m_InvServSum = %lld", g_globalArgLib->m_InvServNum, g_globalArgLib->m_InvServSum)); errorcode = invServ.Save(pInvhead, g_globalArgLib->m_InvServNum, g_globalArgLib->m_InvServSum, strErr); DBG_PRINT(("存储到DB的INV_SERV, errorcode = %u", errorcode)); //更新RT_INV表 if(pInvhead->m_kplx == JSK_RETURN_INV ) { DBG_PRINT(("更新RT_INV表")); CRtInv curRtInv; CRtInv *pRtInv = &curRtInv; pRtInv-> m_fpdm = pInvhead->m_yfpdm; pRtInv-> m_fphm = pInvhead->m_yfphm; errorcode = pRtInv->AddNew(); //写已退发票信息表 if( errorcode != SQLITE_OK ) { DBG_PRINT((" pRtInv->AddNew() error!")); //retcode = JSK_COMMON_ERR_NO; //return retcode; } } //数据库事务结束 pInvhead->EndTransaction(); return JSK_SUCCESS; }
INT32 CJSKMakeInvoice::FPCX_Proc(UINT8 cxfs, string cxtj, UINT32 &invNum, CInvHead *pInvhead, string &strErr) { DBG_ASSERT_EXIT((pInvhead != NULL), (" pInvhead == NULL!")); INT32 retcode = JSK_SUCCESS; INT8 sqlbuf[128]; string fpdm(""); UINT32 fphm = 0; string tmpStr; INT32 errcode = 0; invNum = 1; //cxfs为0时:12发票代码+8位起始号码+8位终止号码; cxfs if(cxfs == 0) { fpdm = cxtj.substr(0, 12); tmpStr = cxtj.substr(12, 8); fphm = atoi(tmpStr.c_str()); memset(sqlbuf, 0, sizeof(sqlbuf)); sprintf(sqlbuf, "where FPDM='%s' and FPHM=%u", fpdm.c_str(), fphm); DBG_PRINT(("sqlbuf = %s", sqlbuf)); pInvhead->m_filter.append(sqlbuf); errcode = pInvhead->Load(); if(errcode != SQLITE_OK) { DBG_PRINT(("here search JSK=========")); pInvhead->m_fpdm = fpdm; pInvhead->m_fphm = fphm; retcode = CJSKInfoFunc::GetInvDetailInfoNO(pInvhead, strErr); if(retcode != JSK_SUCCESS) { return retcode; } if(pInvhead->Save() != SUCCESS) { DBG_PRINT(("InvHead Save Error!")); //retcode = JSK_COMMON_ERR_NO; //strErr = "发票信息保存数据库错误"; //return retcode; } if(pInvhead->m_kplx == JSK_RETURN_INV) { DBG_PRINT(("更新RT_INV表")); CRtInv curRtInv; CRtInv *pRtInv = &curRtInv; pRtInv-> m_fpdm = pInvhead->m_yfpdm; pRtInv-> m_fphm = pInvhead->m_yfphm; if( pRtInv->AddNew() != SQLITE_OK ) { DBG_PRINT((" pRtInv->AddNew() error!")); } } } CInvServ invServ; DBG_PRINT(("sqlbuf = %s", sqlbuf)); invServ.m_filter.append(sqlbuf); invServ.Requery(); if(invServ.LoadOneRecord() != SQLITE_OK) pInvhead->m_scbz = 1; else { if(invServ.m_upFlag == INV_UPLOAD_FLAG2) { invServ.m_upFlag = INV_UPLOAD_FLAG0; DBG_PRINT(("sqlbuf = %s", sqlbuf)); invServ.Update(sqlbuf, &invServ.m_upFlag, NULL); } } } //为1是:起始日期(YYYYMMDD)+终止日期(YYYYMMDD) else if(cxfs == 1) { retcode = JSK_COMMON_ERR_NO; strErr = "不支持时间段查询方式!"; return retcode; } else { retcode = JSK_COMMON_ERR_NO; strErr = "非法查询方式!"; return retcode; } return JSK_SUCCESS; }
INT32 CJSKMakeInvoice::FPZF_Proc(CInvHead *pInvhead, UINT8 zflx, string &strErr) { DBG_PRINT(("===== FPZF_Proc Begin() ======")); DBG_ASSERT_EXIT((pInvhead != NULL), (" pInvhead == NULL!")); INT32 retcode = JSK_SUCCESS; if(zflx == 0) //空白票作废 { pInvhead->m_kplx = JSK_WASTE_INV; pInvhead->m_xfmc = g_globalArgLib->m_corpInfo->m_Nsrmc; retcode = FPKJ_Proc(pInvhead, strErr, 1); return retcode; } ////////////////////////////////////////////////////////////////////////// if(zflx != 1) { strErr = "发票作废类型错误!"; return JSK_FAILURE; } CJSKInvManageProc::fplxdm2fplx(pInvhead->m_fplxdm, pInvhead->m_fplb); //已开票作废 //查询数据库中已开发票信息 INT8 sqlbuf[256]; UINT32 errorcode; CInvHead tmpInvHead; memset(sqlbuf, 0, sizeof(sqlbuf)); sprintf(sqlbuf, "where FPDM='%s' and FPHM=%u", pInvhead->m_fpdm.c_str(), pInvhead->m_fphm); DBG_PRINT(("sqlbuf = %s", sqlbuf)); pInvhead->m_filter.append(sqlbuf); if(pInvhead->Load() != SQLITE_OK) { DBG_PRINT(("here find by jsp")); //数据库查询不到,从盘中查询 retcode = CJSKInfoFunc::GetInvDetailInfoNO(pInvhead, strErr); if(retcode != JSK_SUCCESS) { return retcode; } pInvhead->Save(); } //已开发票作废控制 if(pInvhead->m_kplx == JSK_NORMAL_INV) { pInvhead->m_kplx = JSK_WASTE_NOR; } else if(pInvhead->m_kplx == JSK_RETURN_INV) { pInvhead->m_kplx = JSK_WASTE_RET; } else { retcode = JSK_COMMON_ERR_NO; strErr = "废票不能再次作废!"; return retcode; } //权限控制 retcode = MakeInvAuthority(pInvhead, strErr); if( retcode != JSK_SUCCESS ) { return retcode; } retcode = CJSKInfoFunc::WasteInvHandInfo(pInvhead, strErr); if( retcode != JSK_SUCCESS ) { return retcode; } //数据库事务开始 pInvhead->BeginTransaction(); //修改数据库对应信息 tmpInvHead.m_kplx = pInvhead->m_kplx; tmpInvHead.m_fpsyh = pInvhead->m_fpsyh; tmpInvHead.m_casign = pInvhead->m_casign; tmpInvHead.m_zfsj = pInvhead->m_zfsj; retcode = tmpInvHead.Update(sqlbuf, &tmpInvHead.m_kplx, &tmpInvHead.m_fpsyh, &tmpInvHead.m_zfsj, &tmpInvHead.m_casign, NULL); DBG_PRINT(("更新DB的INV_HEAD:retcode = %d", retcode)); CInvDet invDet; invDet.m_kplx = pInvhead->m_kplx; retcode = invDet.Update(sqlbuf, &invDet.m_kplx, NULL); DBG_PRINT(("更新DB的INV_DET:retcode = %d", retcode)); if(pInvhead->m_kplx == JSK_WASTE_RET ) { DBG_PRINT(("更新RT_INV表")); CRtInv curRtInv; CRtInv *pRtInv = &curRtInv; memset(sqlbuf, 0, sizeof(sqlbuf)); sprintf(sqlbuf, "where FPDM='%s' and FPHM=%u ", pInvhead->m_yfpdm.c_str(), pInvhead->m_yfphm); DBG_PRINT(("sqlbuf = %s", sqlbuf)); pRtInv->m_filter.append(sqlbuf); pRtInv->Delete(); } //处理INV_SERV表,如果已上传发票,需要重新记录INV_SERV??? CInvServ invServ; errorcode = invServ.Save(pInvhead, g_globalArgLib->m_InvServNum, g_globalArgLib->m_InvServSum, strErr); DBG_PRINT(("存储到DB的INV_SERV, errorcode = %u", errorcode)); //数据库事务结束 pInvhead->EndTransaction(); return JSK_SUCCESS; }