Esempio n. 1
0
//-----------------------------------------------------
//存储内容到数据库(INV_HEAD和INV_DET表)
//-----------------------------------------------------
INT32 CInvHead::Save()
{
	DBG_PRINT(("进入Save函数"));
	DBG_ENTER("CInvHead::Save");
	INT32 errcode;
	
	//添加INV_HEAD记录
	errcode = AddNew();
	//printf("512errcode= %d \n",errcode);
	if (errcode != SQLITE_OK)
	{
		DBG_PRINT(("INV_HEAD AddNew() wrong"));
		DBG_RETURN(FAILURE);
	}
    //printf("pHead= %x \n",pHead);
	//添加INV_DET记录
    CInvDet *p = pHead;
	if (p==NULL)
	{
		//printf("523 INV_DET here \n");
		DBG_PRINT(("INV_DET here"));
		DBG_ASSERT_WARNING(false,("List pointer: pHead = NULL!"));
	}
	while (p)
	{
		p->m_fpdm = m_fpdm;
		p->m_fphm = m_fphm;
		p->m_kplx = m_kplx;
		p->m_kprq = m_kprq;
		p->m_kpsj = m_kpsj;
		p->m_sky = m_sky;
		
		//printf("529INV_DET here \n");
		DBG_PRINT(("INV_DET here"));
		DBG_PRINT(("p->m_fphm = %u", p->m_fphm));
		DBG_PRINT(("p->m_spdj = %f", p->m_spdj));
		errcode = p->AddNew();
		//printf("534errcode= %d \n",errcode);
		if (errcode != SQLITE_OK)
		{
			DBG_PRINT(("INV_DET AddNew() wrong"));
			DBG_RETURN(FAILURE);
		}
		p = p->pNext;
		DBG_PRINT(("INV_DET AddNew()"));
	}	
	//printf("退出Save函数 \n");
	DBG_PRINT(("退出Save函数"));
	DBG_RETURN(SUCCESS);
}
Esempio n. 2
0
//-------------------------------------------------
//删除链表,释放链表空间
//-------------------------------------------------
INT32 CInvHead::DelList()
{
	DBG_PRINT(("进入DelList函数"));
	DBG_ENTER("CInvHead::DelList");
	CInvDet *p = pHead;
	CInvDet *s;
	
	while (p)
	{
		DBG_PRINT(("delete CInvDet: DP_NO = %s!", p->m_spbm.c_str()));
		s = p;
		p = p->pNext;
		//delete s;
		s->FreeInvDet();//释放该节点所占空间
	}
	pHead = NULL;
	pEnd = NULL;
	
	DBG_PRINT(("退出DelList函数"));
    DBG_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;
}
Esempio n. 5
0
INT32 CInvHead::Load()
{
	DBG_ENTER("CInvHead::Load");
	DBG_PRINT(("进入CInvHead::Load函数"));
	
	//释放链表所占空间
	DelList();
	
	//查询INV_HEAD表
	CTable::Requery();
	INT32 returnVal = LoadOneRecord();
	
	if (returnVal == SQLITE_OK)
	{    
        DBG_PRINT(("NO, %d", m_no));
		DBG_PRINT(("m_fpdm, %s", m_fpdm.c_str()));
		DBG_PRINT(("m_fphm, %d", m_fphm));
		DBG_PRINT(("m_kprq, %lu", m_kprq));
		DBG_PRINT(("m_kpsj, %lu", m_kpsj));
		DBG_PRINT(("m_kplx, %d", m_kplx));
		
		DBG_PRINT(("m_kphjje, %lld", m_kphjje));
		DBG_PRINT(("m_yfphm, %d", m_yfphm));
		
		DBG_PRINT(("m_fkdw, %s", m_fkdw.c_str()));
		DBG_PRINT(("m_payerCode, %s", m_payerCode.c_str()));
		DBG_PRINT(("m_sky, %s", m_sky.c_str()));
		//		DBG_PRINT(("m_skyid, %u", m_skyid));
		DBG_PRINT(("m_fwm, %s", m_fwm.c_str()));
		
		// 	    DBG_PRINT(("m_ptype, %d", m_ptype));
		//DBG_NPRINT_HEX(m_fCode, 8);	    
		DBG_PRINT(("m_sphsl, %d", m_sphsl));
		DBG_PRINT(("BACKUP1, %s", m_backup1.c_str()));
		// 		DBG_PRINT(("BACKUP2, %s", m_backup2.c_str()));
		//		DBG_PRINT(("BACKUP3, %s", m_backup3.c_str()));
		
	}
	else if (returnVal == SQLITE_DONE)
	{
		DBG_PRINT((" CInvHead has no matched record! errorcode: %d", returnVal));
		return returnVal;
	}
	else
	{
		DBG_PRINT(("errorcode: %d", returnVal));
		return returnVal;
	}
	
	m_kpje = m_kphjje - m_kpse;
	
	//查询INV_DET表
	INT8 chFilter[256];
	memset((void *)chFilter, 0x00, sizeof(chFilter));
	sprintf(chFilter, "where FPDM = '%s' and FPHM = %u", m_fpdm.c_str(), m_fphm);
	DBG_PRINT(("chFilter = %s", chFilter));
	m_pInvDet->m_filter = chFilter;
	m_pInvDet->Requery();
	
	INT32 errorcode = m_pInvDet->MoveFirst();	
	if (errorcode != SQLITE_ROW) 
	{
		if ((errorcode == SQLITE_DONE)&&(m_sphsl==0)) //没有明细
		{
			m_pInvDet->MoveEnd();
			return SQLITE_OK;
		}
		else
		{
			DBG_PRINT(("errorcode: %d", errorcode));
			m_pInvDet->MoveEnd();
			return errorcode; //可能返回SQLITE_DONE,或其它错误码
		}	
	}
	
	CInvDet *p;
	while (errorcode == SQLITE_ROW)
	{
		//		p = new CInvDet;
		p = p->GetNewInvDet();//从静态数组获取一个可用的CInvDet对象
		
		p->m_no = m_pInvDet->m_no;
		p->m_fpdm = m_pInvDet->m_fpdm;
		p->m_fphm = m_pInvDet->m_fphm;
		
		p->m_kprq = m_pInvDet->m_kprq;
		p->m_kpsj = m_pInvDet->m_kpsj;
		p->m_kplx = m_pInvDet->m_kplx;
		
		p->m_sphxh = m_pInvDet->m_sphxh;
		p->m_spbm = m_pInvDet->m_spbm;
		p->m_spmc = m_pInvDet->m_spmc;
		p->m_spdj = m_pInvDet->m_spdj;
		p->m_spsl = m_pInvDet->m_spsl;
		p->m_spje = m_pInvDet->m_spje;
		p->m_spdw = m_pInvDet->m_spdw;
		
		p->m_sl = m_pInvDet->m_sl;
		p->m_spse = m_pInvDet->m_spse;
		p->m_property = m_pInvDet->m_property;
		p->m_dj = m_pInvDet->m_dj;
		p->m_je = m_pInvDet->m_je;
		
		InsertNode(p);	//插入节点	
		DBG_PRINT(("============================"));
		DBG_PRINT(("NO, %d", m_pInvDet->m_no));
		DBG_PRINT(("m_fpdm, %s", m_pInvDet->m_fpdm.c_str()));
		DBG_PRINT(("m_fphm, %d", m_pInvDet->m_fphm));
		DBG_PRINT(("m_sphxh, %d", m_pInvDet->m_sphxh));
		DBG_PRINT(("m_kprq, %lu", m_pInvDet->m_kprq));
		DBG_PRINT(("m_kpsj, %lu", m_pInvDet->m_kpsj));
		
		DBG_PRINT(("m_spbm, %s", m_pInvDet->m_spbm.c_str()));
		DBG_PRINT(("m_spmc, %s", m_pInvDet->m_spmc.c_str()));
		
		DBG_PRINT(("m_spdj, %f", m_pInvDet->m_spdj));
		DBG_PRINT(("m_spsl, %f", m_pInvDet->m_spsl));
		DBG_PRINT(("m_spje, %lld", m_pInvDet->m_spje));
		DBG_PRINT(("m_spse, %lld", m_pInvDet->m_spse));
		DBG_PRINT(("m_spdw, %s", m_pInvDet->m_spdw.c_str()));
		
		//	DBG_PRINT(("PRICE, %u", m_pInvDet->m_dpNo)); 	    	     
		errorcode = m_pInvDet->MoveNext();
	}
	
	m_pInvDet->MoveEnd();
	//m_db->MutexUnlock();
	
	
	if (errorcode==SQLITE_DONE) 
	{
		DBG_PRINT(("退出CInvHead::Load函数"));
		return SQLITE_OK;
	}
	
	DBG_PRINT(("退出CInvHead::Load函数"));
	return errorcode;
}
Esempio n. 6
0
UINT8 SimpleMakeNormalInv(SaleData &tmpSaleData,string &strErr)
{
	UINT8 ret;
	CInvDet *invDet = NULL;
	CInvHead invHead;
	tmpSaleData.m_smallInvInfo = &invHead;
    UINT32 nCurDate = TDateTime::CurrentDateTime().FormatInt(YYYYMMDD);
	UINT32 nCurTime = TDateTime::CurrentDateTime().FormatInt(HHMMSS);

	INT64 tmpDJ=0;
	INT64 moneyTaxSum=0;
	//组装正票
	//组装发票头
	//tmpSaleData.m_smallInvInfo->m_fphm = g_globalArg->m_curInvVol->m_ieno + 1 - 
	//	g_globalArg->m_curInvVol->m_remain;  /**< 发票号码 */

	ret = SALE_GetCurInv(g_globalArg->m_curInvVol,strErr);
	DBG_PRINT(("strErr= %s",strErr.c_str()));

	if (ret ==FAILURE)
	{
		DBG_PRINT(("获取当前发票号码错误:%s",strErr.c_str()));
		return ret;
	}


	tmpSaleData.m_smallInvInfo->m_fphm = g_globalArg->m_curInvVol->m_curInvNo;
    tmpSaleData.m_smallInvInfo->m_fpdm = g_globalArg->m_curInvVol->m_code;  /**< 发票代码简称 */  	
	tmpSaleData.m_smallInvInfo->m_kplx = NORMAL_INV;		//开票类型	

	tmpSaleData.m_smallInvInfo->m_yfphm = 0;		//原发票号码
	tmpSaleData.m_smallInvInfo->m_yfpdm = "";		//原发票号码	
    tmpSaleData.m_smallInvInfo->m_fplb = atoi(g_globalArg->m_invKind->m_pzCode.c_str()); //发票种类
	
	tmpSaleData.m_smallInvInfo->m_fkdw = "个人";			//付款人名称
	tmpSaleData.m_smallInvInfo->m_fkdwsh = "012345678901234";
	tmpSaleData.m_smallInvInfo->m_sky = g_globalArg->m_operator->m_name;		//操作员名称
//	tmpSaleData.m_smallInvInfo->m_opId = g_globalArg->m_operator->m_opId;		//操作员id	
//	tmpSaleData.m_smallInvInfo->m_uID = 0;          //纳税户名称ID号
//	tmpSaleData.m_smallInvInfo->m_ptype = 0;		//付款方式
	tmpSaleData.m_smallInvInfo->m_sphsl = 3;//当前发票总商品行加1

	tmpSaleData.m_smallInvInfo->m_kphjje = (INT64)(3.00 * SUM_EXTENSION);//当前发票总金额
 	tmpSaleData.m_smallInvInfo->m_backup1 = "";		//备用字段1

//	tmpSaleData.m_smallInvInfo->m_backup2 = "";		//备用字段2 
//	tmpSaleData.m_smallInvInfo->m_backup3 = "";		//备用字段3

	//发票明细
	for(UINT8 i = 1; i<4; i++)
	{
//		invDet = new CInvDet;
		invDet = invDet->GetNewInvDet();//从静态数组获取一个可用的CInvDet对象
		DBG_ASSERT_EXIT((invDet != NULL), (" invDet == NULL!"));
		invDet->m_fpdm = tmpSaleData.m_smallInvInfo->m_fpdm; 
		invDet->m_fphm = tmpSaleData.m_smallInvInfo->m_fphm;
	//	invDet->m_sphxh = i; 
		invDet->m_kprq = nCurDate;
		invDet->m_kpsj = nCurTime;
		invDet->m_kplx = NORMAL_INV;
		invDet->m_sky = g_globalArg->m_operator->m_name;


		invDet->m_spbm = "0000000000001";
		invDet->m_sphxh = i;
		invDet->m_spmc = "测试商品1";
	//	invDet->m_taxId = 1; //非税控只允许税目1
		invDet->m_spsl = 1.0; //保存四舍五入后的值
		invDet->m_dotNum = 0;
		invDet->m_spdj = (double)1.00;
		invDet->m_spje = (INT64)(1.00*SUM_EXTENSION);
		invDet->m_sl = 0.03;
		invDet->m_spse=tmpSaleData.CountTax(invDet->m_spje, (UINT32)(invDet->m_sl*SUM_EXTENSION)); //商品税额
	    invDet->m_je= invDet->m_spje - invDet->m_spse; //商品金额(不含税)
	
		invDet->m_spdw = "个";	//商品单位
		
		tmpDJ = double2int(invDet->m_spdj*SUM_EXTENSION);
		DBG_PRINT(("tmpDJ==%lld ", tmpDJ));
		tmpDJ -=tmpSaleData.CountTax(double2int(invDet->m_spdj*SUM_EXTENSION), (UINT32)(invDet->m_sl*SUM_EXTENSION));
		DBG_PRINT(("tmpDJ==%lld ", tmpDJ));
		
		invDet->m_dj= (double)(tmpDJ*1.0)/SUM_EXTENSION; //商品单价(不含税)
		
		invDet->m_je= invDet->m_spje-invDet->m_spse; //商品金额(不含税)
		moneyTaxSum += invDet->m_spse;
		invDet->m_property = DETAIL_GENERAL_GOODS;
		invDet->m_backup = "";
		tmpSaleData.m_smallInvInfo->InsertNode(invDet);	//插入节点
		
	}

	//当前发票累计税额增加
	tmpSaleData.m_smallInvInfo->m_kpse = moneyTaxSum;
	DBG_PRINT(("当前发票累计税额 tmpSaleData.m_smallInvInfo->m_kpse = %lld", tmpSaleData.m_smallInvInfo->m_kpse));
	moneyTaxSum = 0;

	ret = tmpSaleData.MakeInvoiceHandle(PRINT, INV_ROLL_PROC);
	tmpSaleData.m_smallInvInfo->DelList();
	tmpSaleData.m_smallInvInfo = NULL;
	if (ret != SUCCESS)
	{
		if (ret==DB_FULL) 
		{
			DBG_RETURN(DB_FULL);
		}
		else if (ret==HAVE_ROLLED) 
		{
			DBG_RETURN(HAVE_ROLLED);
		}
		else
		{
			DBG_RETURN(ret);
		}	
	}	
	DBG_RETURN(SUCCESS);	
}
Esempio n. 7
0
INT32 CFpkj::XmlParse(XMLParse *parse, CInvHead *pInvInfo)
{

	UINT8 i = 0;

	parse->LocateNodeByName(parse->m_RootElement, "body");
	parse->m_parentElement[1] = parse->m_Child;

	parse->LocateNodeByName(parse->m_parentElement[1], "input");
	parse->m_parentElement[2] = parse->m_Child;

	parse->LocateNodeByName(parse->m_parentElement[2], "jqbh");
	m_ywxml_gy.m_jqbh = parse->GetText();		//税控收款机编号
	DBG_PRINT(("m_ywxml_gy.m_jqbh == %s", m_ywxml_gy.m_jqbh.c_str()));	

	pInvInfo->m_jqbh = m_ywxml_gy.m_jqbh;
	DBG_PRINT(("pInvInfo->m_jqbh == %s", pInvInfo->m_jqbh.c_str()));

	parse->LocateNodeByName(parse->m_parentElement[2], "zskl");
	pInvInfo->m_zskl = parse->GetText();		//证书口令
	DBG_PRINT(("pInvInfo->m_zskl == %s", pInvInfo->m_zskl.c_str()));
	
	parse->LocateNodeByName(parse->m_parentElement[2], "xhdwdm");
	m_ywxml_gy.m_nsrsbh = parse->GetText();	
	DBG_PRINT(("m_ywxml_gy.nsrsbh == %s", m_ywxml_gy.m_nsrsbh.c_str()));
	pInvInfo->m_xfsh = parse->GetText();
	DBG_PRINT(("pInvInfo->m_xfsh == %s", pInvInfo->m_xfsh.c_str()));
	
	parse->LocateNodeByName(parse->m_parentElement[2], "xhdwmc");
	pInvInfo->m_xfmc = parse->GetText();
	DBG_PRINT(("pInvInfo->m_xfmc == %s", pInvInfo->m_xfmc.c_str()));
	
	parse->LocateNodeByName(parse->m_parentElement[2], "sksbbh");
	m_ywxml_gy.m_sksbbh = parse->GetText();	
	DBG_PRINT(("m_ywxml_gy.sksbbh == %s", m_ywxml_gy.m_sksbbh.c_str()));	
	pInvInfo->m_sksbbh = m_ywxml_gy.m_sksbbh;
	DBG_PRINT(("pInvInfo->m_sksbbh == %s", pInvInfo->m_sksbbh.c_str()));
	
	parse->LocateNodeByName(parse->m_parentElement[2], "sksbkl");
	m_ywxml_gy.m_sksbkl = parse->GetText();	
	DBG_PRINT(("m_ywxml_gy.sksbkl == %s", m_ywxml_gy.m_sksbkl.c_str()));	
	
	parse->LocateNodeByName(parse->m_parentElement[2], "fplxdm");
	m_ywxml_gy.m_fplxdm = parse->GetText();	
	pInvInfo->m_fplxdm = m_ywxml_gy.m_fplxdm;
	DBG_PRINT(("m_ywxml_gy.fplxdm == %s", m_ywxml_gy.m_fplxdm.c_str()));

	parse->LocateNodeByName(parse->m_parentElement[2], "kplx");
	pInvInfo->m_kplx = (UINT8)atoi(parse->GetText().c_str());	
	DBG_PRINT(("pInvInfo->m_kplx == %u", pInvInfo->m_kplx));

// 	parse->LocateNodeByName(parse->m_parentElement[2], "hyfl");
// 	pInvInfo->m_hyfl = parse->GetText();	
// 	DBG_PRINT(("hyfl== %s", pInvInfo->m_hyfl.c_str()));

	parse->LocateNodeByName(parse->m_parentElement[2], "ghdwdm");
	pInvInfo->m_payerCode = parse->GetText();
	CJSKMakeInvoice::FilterSpace(pInvInfo->m_payerCode);
	if(pInvInfo->m_payerCode == "")
		pInvInfo->m_payerCode = "000000000000000";
	DBG_PRINT(("pInvInfo->m_payerCode == %s", pInvInfo->m_payerCode.c_str()));

	parse->LocateNodeByName(parse->m_parentElement[2], "ghdwmc");
	pInvInfo->m_fkdw = parse->GetText();
	CJSKMakeInvoice::FilterSpace(pInvInfo->m_fkdw);
	DBG_PRINT(("pInvInfo->m_fkdw == %s", pInvInfo->m_fkdw.c_str()));
	
	parse->LocateNodeByName(parse->m_parentElement[2], "sfxm");
	parse->m_parentElement[3] = parse->m_Child;
	pInvInfo->m_sphsl = atoi(parse->GetAttr("count").c_str());	//解析XML后得到商品明细行数
	DBG_PRINT(("pInvInfo->m_sphsl == %u", pInvInfo->m_sphsl));
	
	CInvDet* pInvDet = NULL;

	for (i=0; i<pInvInfo->m_sphsl; i++)
	{
		pInvDet = pInvDet->GetNewInvDet();	//从静态数组获取一个可用的CInvDet对象
		DBG_ASSERT_EXIT((pInvDet != NULL), (" pInvDet == NULL!"));

		pInvDet->m_sphxh = i+1;

		//得到group节点
		parse->LocateNodeByName(parse->m_parentElement[3], "group", i);
		parse->m_parentElement[4] = parse->m_Child;

		parse->LocateNodeByName(parse->m_parentElement[4], "xm");
		pInvDet->m_spmc = parse->GetText();	
		CJSKMakeInvoice::FilterSpace(pInvDet->m_spmc);
		DBG_PRINT(("pInvDet->m_spmc == %s", pInvDet->m_spmc.c_str()));

		parse->LocateNodeByName(parse->m_parentElement[4], "dj");
		pInvDet->m_dj = atof(parse->GetText().c_str());
		DBG_PRINT(("pInvDet->m_dj == %lf", pInvDet->m_dj));

		parse->LocateNodeByName(parse->m_parentElement[4], "sl");
		pInvDet->m_spsl = atof(parse->GetText().c_str());	
		DBG_PRINT(("pInvDet->m_spsl == %lf", pInvDet->m_spsl));

		parse->LocateNodeByName(parse->m_parentElement[4], "je");
		pInvDet->m_je =double2int(atof(parse->GetText().c_str())*SUM_EXTENSION);	
		DBG_PRINT(("pInvDet->m_je == %lld", pInvDet->m_je));

		parse->LocateNodeByName(parse->m_parentElement[4], "zsl");
		pInvDet->m_sl = (float)atof(parse->GetText().c_str());	
		DBG_PRINT(("pInvDet->m_sl == %f", pInvDet->m_sl));

		parse->LocateNodeByName(parse->m_parentElement[4], "se");
		DBG_PRINT(("pInvDet->m_spse == %s", parse->GetText().c_str()));
		pInvDet->m_spse = double2int(atof(parse->GetText().c_str())*SUM_EXTENSION);	
		DBG_PRINT(("pInvDet->m_spse == %lld", pInvDet->m_spse));

		parse->LocateNodeByName(parse->m_parentElement[4], "hsdj");
		pInvDet->m_spdj = atof(parse->GetText().c_str());
		DBG_PRINT(("pInvDet->m_spdj == %lf", pInvDet->m_spdj));
		
		parse->LocateNodeByName(parse->m_parentElement[4], "hsje");
		pInvDet->m_spje = double2int(atof(parse->GetText().c_str())*SUM_EXTENSION);	
		DBG_PRINT(("pInvDet->m_spje == %lld", pInvDet->m_spje));

		pInvInfo->InsertNode(pInvDet);

		pInvDet = NULL;
	}

	parse->LocateNodeByName(parse->m_parentElement[2], "hjje");
	pInvInfo->m_kpje = double2int(atof(parse->GetText().c_str())*SUM_EXTENSION);	
	DBG_PRINT(("pInvInfo->m_kpje == %lld", pInvInfo->m_kpje));

	parse->LocateNodeByName(parse->m_parentElement[2], "hjse");
	DBG_PRINT(("pInvDet->m_spse == %s", parse->GetText().c_str()));
	pInvInfo->m_kpse = double2int(atof(parse->GetText().c_str())*SUM_EXTENSION);	
	DBG_PRINT(("pInvInfo->m_kpse == %lld", pInvInfo->m_kpse));

	parse->LocateNodeByName(parse->m_parentElement[2], "jshj");
	pInvInfo->m_kphjje = double2int(atof(parse->GetText().c_str())*SUM_EXTENSION);	
	DBG_PRINT(("pInvInfo->m_kphjje == %lld", pInvInfo->m_kphjje));

	parse->LocateNodeByName(parse->m_parentElement[2], "bz");
	pInvInfo->m_backup1 = parse->GetText();	
	CJSKMakeInvoice::FilterSpace(pInvInfo->m_backup1);
	DBG_PRINT(("pInvInfo->m_backup1 == %s", pInvInfo->m_backup1.c_str()));

	parse->LocateNodeByName(parse->m_parentElement[2], "skr");
	pInvInfo->m_sky = parse->GetText();	
	CJSKMakeInvoice::FilterSpace(pInvInfo->m_sky);
	DBG_PRINT(("pInvInfo->m_sky == %s", pInvInfo->m_sky.c_str()));

//	parse->LocateNodeByName(parse->m_parentElement[2], "kpr");
//	pInvInfo->m_sky = parse->GetText();	
//	DBG_PRINT(("pInvInfo->m_sky == %s", pInvInfo->m_sky.c_str()));

	parse->LocateNodeByName(parse->m_parentElement[2], "yfpdm");
	pInvInfo->m_yfpdm = parse->GetText();	
	DBG_PRINT(("pInvInfo->m_yfpdm == %s", pInvInfo->m_yfpdm.c_str()));

	parse->LocateNodeByName(parse->m_parentElement[2], "yfphm");
	pInvInfo->m_yfphm = atoi(parse->GetText().c_str());	
	DBG_PRINT(("pInvInfo->m_yfphm == %u", pInvInfo->m_yfphm));

	return SUCCESS;
}
void CDataTransformFunc::Data2InvHead(CDataInvHead *pDataInvHead, CInvHead *pInvHead)
{
	DBG_PRINT(("Data2InvHead Begin"));
	pInvHead->m_fpdm = pDataInvHead->m_fpdm;			/**< 发票代码 */
	pInvHead->m_fphm = pDataInvHead->m_fphm;			/**< 发票号码 */
	pInvHead->m_kprq = pDataInvHead->m_kprq;			/**< 开票日期 */
	pInvHead->m_kpsj = pDataInvHead->m_kpsj;			/**< 开票时间 */
	pInvHead->m_kplx = pDataInvHead->m_kplx;			/**< 开票类型 */
	pInvHead->m_kphjje = pDataInvHead->m_kphjje;		/**< 开票合计金额(含税) */
	pInvHead->m_yfpdm = pDataInvHead->m_yfpdm;			/**< 原发票代码 */
	pInvHead->m_yfphm = pDataInvHead->m_yfphm;			/**< 原发票号码 */
	pInvHead->m_fkdw = pDataInvHead->m_fkdw;			/**< 付款单位 */
	pInvHead->m_payerCode = pDataInvHead->m_payerCode;	/**< 付款单位税号 */
	pInvHead->m_sky = pDataInvHead->m_sky;				/**< 收款员 */
	pInvHead->m_sphsl = pDataInvHead->m_sphsl;			/**< 商品行数量 */
	pInvHead-> m_fwm = pDataInvHead->m_fwm;				/**< 防伪税控吗 */
	pInvHead->m_fplb = pDataInvHead->m_fplb;		    /**< 发票类别 */
	pInvHead->m_scbz = pDataInvHead->m_scbz;			/**< 上传标志 */
	pInvHead->m_fpsyh = pDataInvHead->m_fpsyh;			/**< 发票索引号*/
	pInvHead->m_zfsj = pDataInvHead->m_zfsj;			/**< 作废时间 */
	pInvHead->m_casign = pDataInvHead->m_casign;		/**< CA签名*/
	pInvHead->m_backup1 = pDataInvHead->m_backup1;		/**< 备用1 */
	pInvHead->m_backup2 = pDataInvHead->m_backup2;		/**< 备用2 */
	pInvHead->m_kpse = pDataInvHead->m_kpse;			/**< 税额*/
	pInvHead->m_kpje = pDataInvHead->m_kpje;			/**< 金额(不含税额)*/
	pInvHead->m_fplxdm = pDataInvHead->m_fplxdm;		/**< 发票类型代码 */
	pInvHead->m_zfbz = pDataInvHead->m_zfbz;			/**<  作废标志*/
	pInvHead->m_hyfl = pDataInvHead->m_hyfl;			/**< 行业分类 */
	pInvHead->m_fpzl = pDataInvHead->m_fpzl;			/**< 发票种类 默认为"c" */
	pInvHead->m_gfdzdh = pDataInvHead->m_gfdzdh;		/**< 购方地址电话 */
	pInvHead->m_gfyhzh = pDataInvHead->m_gfyhzh;		/**< 购方银行账号 */
	pInvHead->m_jqbh = pDataInvHead->m_jqbh;			/**< 机器编号 */
	pInvHead->m_zyspmc = pDataInvHead->m_zyspmc;		/**< 主要商品名称 */
    pInvHead->m_bsq = pDataInvHead->m_bsq;				/**< 报税期 */
	pInvHead->m_sksbbh = pDataInvHead->m_sksbbh;		/**< 金税盘编号 */
	pInvHead->m_xfmc = pDataInvHead->m_xfmc;			/**< 销方名称 */
	pInvHead->m_xfsh = pDataInvHead->m_xfsh;			/**< 销方税号 */
	pInvHead->m_xfdzdh = pDataInvHead->m_xfdzdh;		/**< 销方地址电话 */
	pInvHead->m_xfyhzh = pDataInvHead->m_xfyhzh;		/**< 销方银行账号 */
	pInvHead->m_fhr = pDataInvHead->m_fhr; 				/**< 复核人 */
    pInvHead->m_qdbz = pDataInvHead->m_qdbz;			/**< 清单标志 */
	pInvHead->m_zskl = pDataInvHead->m_zskl;			/**< 证书口令 */
	pInvHead->m_CurTime = pDataInvHead->m_CurTime;		/**< 当前时间*/

	CInvDet *pInvDet = NULL;
	pInvHead->DelList();
	vector<CDataInvDet>::iterator iter;
	for (iter=pDataInvHead->m_gvector.begin(); iter!=pDataInvHead->m_gvector.end(); ++iter)
	{
		pInvDet = pInvDet->GetNewInvDet();

		pInvDet->m_fpdm = iter->m_fpdm;			/**< 发票代码 */
		pInvDet->m_fphm = iter->m_fphm;			/**< 发票号码 */
		pInvDet->m_kprq = iter->m_kprq;			/**< 开票日期 */
		pInvDet->m_kpsj = iter->m_kpsj;			/**< 开票时间 */
		pInvDet->m_kplx = iter->m_kplx;			/**< 开票类型 */
		pInvDet->m_opid = iter->m_opid;			/**< 操作员id */
		pInvDet->m_sky = iter->m_sky;			/**< 收款员 */

		pInvDet->m_sphxh = iter->m_sphxh;		/**< 商品行序号,从1开始 */
		pInvDet->m_spbm = iter->m_spbm;			/**< 商品编码 */
		pInvDet->m_spmc = iter->m_spmc;			/**< 商品名称 */
		pInvDet->m_spdj = iter->m_spdj;			/**< 商品单价(含税) */
		pInvDet->m_spsl = iter->m_spsl;			/**< 商品数量 */
		pInvDet->m_spje = iter->m_spje;			/**< 商品金额(含税) */
		pInvDet->m_sl = iter->m_sl;				/**< 税率 */
		pInvDet->m_property = iter->m_property;	/**< 商品行属性 */
		pInvDet->m_spdw = iter->m_spdw;			/**< 单位 */
		pInvDet->m_ggxh = iter->m_ggxh;			/**< 规格型号 */
		pInvDet->m_spse = iter->m_spse;			/**< 商品税额 */
		pInvDet->m_dj = iter->m_dj;				/**< 商品单价(不含税) */
		pInvDet->m_je = iter->m_je;				/**< 商品金额(不含税) */
		pInvDet->m_dotNum = iter->m_dotNum;     /**< 数量四舍五入后的小数位数 */
		pInvDet->m_backup = iter->m_backup;		/**< 备用 */
		pInvDet->m_hsbz = iter->m_hsbz;			/**< 含税价标志(1:单价含税 0:单价不含税) */

		DBG_PRINT(("m_sphxh = %u", pInvDet->m_sphxh));
		DBG_PRINT(("m_spmc = %s", pInvDet->m_spmc.c_str()));
		DBG_PRINT(("m_spdj = %.3f", pInvDet->m_spdj));
		DBG_PRINT(("m_spsl = %.3f", pInvDet->m_spsl));
		DBG_PRINT(("m_spje = %lld", pInvDet->m_spje));
		DBG_PRINT(("m_sl = %.3f", pInvDet->m_sl));
		DBG_PRINT(("m_spse = %lld", pInvDet->m_spse));
		DBG_PRINT(("m_dj = %.3f", pInvDet->m_dj));
		DBG_PRINT(("m_je = %lld", pInvDet->m_je));

		pInvHead->InsertNode(pInvDet);
		pInvDet = NULL;
	}

	return;
}
Esempio n. 9
0
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;
}
void CMaintenanceMenu::OnButton9(int iEvent, unsigned char * pEventData, int iDataLen)
{
	if (g_globalArg->m_initFlag == 0)
	{
		CaMsgBox::ShowMsg("机器未初始化");
		return ;
	}

	CInvServ invServ;
	CInvHead invHead;
	CInvDet  invDet;
	INT32 nErrCode;
	INT8 chValue[128];

	invServ.Requery();
	nErrCode = invServ.LoadOneRecord();
   DBG_PRINT(("nErrCode= %u",nErrCode));
	if( nErrCode != SQLITE_OK )
	{
		CaMsgBox::ShowMsg("无缓存记录");
		return;
	}

	memset(chValue, 0, sizeof(chValue));
	sprintf(chValue,"代码:'%s' 号码:%u 确认删除?", invServ.m_code.c_str(), invServ.m_InvNo);
	CaMsgBox msgBox(chValue,CaMsgBox::MB_YESNO);
	msgBox.ShowBox();	
	if (msgBox.m_iStatus == OK_PRESSED)
	{
		memset((void*)chValue, 0, sizeof(chValue));
		//sprintf(chValue, "where CODE = '%s' and INV_NO = %u", invServ.m_code.c_str(), invServ.m_InvNo);
		// 更改inv_serv中的两个字段
		sprintf(chValue, "where FPDM = '%s' and FPHM = %u", invServ.m_code.c_str(), invServ.m_InvNo);
		invHead.m_filter = chValue;
		nErrCode = invHead.Delete();
		if (SQLITE_OK != nErrCode)
		{
			CaMsgBox::ShowMsg("删除失败");
			return;
		}
		invDet.m_filter = chValue;
		nErrCode = invDet.Delete();
		if (SQLITE_OK != nErrCode)
		{
			CaMsgBox::ShowMsg("删除失败");
			return;
		}
		
		sprintf(chValue, "where CODE = '%s' and INV_NO = %u", invServ.m_code.c_str(), invServ.m_InvNo);
		invServ.m_filter = chValue;
		nErrCode = invServ.Delete();
		if (SQLITE_OK != nErrCode)
		{
	
			CaMsgBox::ShowMsg("删除失败");
			return;
		}
		CaMsgBox::ShowMsg("删除成功");

		if(0 != g_globalArg->m_InvServNum)
		{
			g_globalArg->m_InvServNum--;
		}
		DBG_PRINT(("m_InvServNum = %u", g_globalArg->m_InvServNum ));
	}
}
Esempio n. 11
0
INT32 CFpcx::XmlParse()
{
	UINT8 i = 0;
	UINT8 j = 0;
	UINT8 fpzt = 0;

	//添加body节点
	m_pXmlParse.LocateNodeByName(m_pXmlParse.m_RootElement, "body");
	m_pXmlParse.m_parentElement[1] = m_pXmlParse.m_Child;

	m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[1], "output");
	m_pXmlParse.m_parentElement[2] = m_pXmlParse.m_Child;

	m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[2], "returncode");
	m_retInfo.m_retCode = m_pXmlParse.GetText();
	DBG_PRINT(("returncode : %s", m_retInfo.m_retCode.c_str()));
	
	m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[2], "returnmsg");
	m_retInfo.m_retMsg = m_pXmlParse.GetText();
	DBG_PRINT(("returnmsg : %s", m_retInfo.m_retMsg.c_str()));

	m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[2], "fpxx");
	m_pXmlParse.m_parentElement[3] = m_pXmlParse.m_Child;
	m_InvCOunt = atoi(m_pXmlParse.GetAttr("count").c_str());

	for (i=0; i<m_InvCOunt; i++)
	{
		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[3], "group", i);
		m_pXmlParse.m_parentElement[4] = m_pXmlParse.m_Child;

		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "fpdm");
		m_InvInfo.m_fpdm = m_pXmlParse.GetText();
		DBG_PRINT(("m_InvInfo.m_fpdm : %s", m_InvInfo.m_fpdm.c_str()));

		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "fphm");
		m_InvInfo.m_fphm = atoi(m_pXmlParse.GetText().c_str());
		DBG_PRINT(("m_InvInfo.m_fphm : %u", m_InvInfo.m_fphm));

		//发票状态
		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "fpzt");
		fpzt = atoi(m_pXmlParse.GetText().c_str());
		switch(fpzt)
		{
		case 0:
			m_InvInfo.m_kplx = NORMAL_INV;
			break;
		case 1:
			m_InvInfo.m_kplx = RETURN_INV;
			break;
		case 2:
			m_InvInfo.m_kplx = WASTE_INV;
			break;
		case 3:
			m_InvInfo.m_kplx = WASTE_NOR;
			break;
		case 4:
			m_InvInfo.m_kplx = WASTE_RET;
			break;
		}
		
		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "scbz");
		m_InvInfo.m_scbz = (UINT8)atoi(m_pXmlParse.GetText().c_str());
		DBG_PRINT(("m_InvInfo.m_scbz : %u", m_InvInfo.m_scbz));
		
		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "kprq");	
		m_InvInfo.m_kprq = atoi(m_pXmlParse.GetText().c_str());
		DBG_PRINT(("m_InvInfo.m_kprq : %u", m_InvInfo.m_kprq));		
	
		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "kpsj");	
		m_InvInfo.m_kpsj = atoi(m_pXmlParse.GetText().c_str());
		DBG_PRINT(("m_InvInfo.m_kpsj : %u", m_InvInfo.m_kpsj));

		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "skm");	
		m_InvInfo.m_fwm = m_pXmlParse.GetText();
		DBG_PRINT(("m_InvInfo.m_fwm : %s", m_InvInfo.m_fwm.c_str()));

		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "sksbbh");	//税控设备编号
		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "skdwmc");	//收款单位名称
		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "xhdwdm");	//销货单位识别号
		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "xhdwmc");	//销货单位名称

		//购货单位识别号
		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "ghdwdm");	
		m_InvInfo.m_fkdwsh = m_pXmlParse.GetText();
		DBG_PRINT(("m_InvInfo.m_fkdwsh : %s",m_InvInfo.m_fkdwsh.c_str()));

		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "ghdwmc");	
		m_InvInfo.m_fkdw = m_pXmlParse.GetText();
		DBG_PRINT(("m_InvInfo.m_fkdw : %s",m_InvInfo.m_fkdw.c_str()));

		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "sfxm");
		m_pXmlParse.m_parentElement[5] = m_pXmlParse.m_Child;
		m_InvInfo.m_sphsl = atoi(m_pXmlParse.GetAttr("count").c_str());
		DBG_PRINT(("m_InvInfo.m_sphsl : %u", m_InvInfo.m_sphsl));
	
		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "skr");
		m_InvInfo.m_sky = m_pXmlParse.GetText();//中间件工程中,skr、kpr、zfr全用m_sky组装
		DBG_PRINT(("m_InvInfo.m_sky : %s", m_InvInfo.m_sky.c_str()));
		
		CInvDet *pInvDet = NULL;

		for (j=0; j<m_InvInfo.m_sphsl; j++)
		{
			pInvDet = pInvDet->GetNewInvDet();	//从静态数组获取一个可用的CInvDet对象
			DBG_ASSERT_EXIT((pInvDet != NULL), (" pInvDet == NULL!"));

			pInvDet->m_fpdm = m_InvInfo.m_fpdm;
			pInvDet->m_fphm = m_InvInfo.m_fphm;
			pInvDet->m_kprq = m_InvInfo.m_kprq;
			pInvDet->m_kpsj = m_InvInfo.m_kpsj;
			pInvDet->m_kplx = m_InvInfo.m_kplx;
			pInvDet->m_sky = m_InvInfo.m_sky;
			pInvDet->m_sphxh = j+1;

			m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[5], "group", j);
			m_pXmlParse.m_parentElement[6] = m_pXmlParse.m_Child;

			m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[6], "xm");;
			pInvDet->m_spmc = m_pXmlParse.GetText();
			DBG_PRINT(("pInvDet->m_spmc : %s", pInvDet->m_spmc.c_str()));
			
			m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[6], "dj");
			pInvDet->m_dj = atof(m_pXmlParse.GetText().c_str());//单价不含税
			DBG_PRINT(("pInvDet->m_dj : %.3lf", pInvDet->m_dj));

			m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[6], "sl");
			pInvDet->m_spsl = atof(m_pXmlParse.GetText().c_str());//数量
			DBG_PRINT(("pInvDet->m_spdj : %.3lf", pInvDet->m_spsl));
				
			m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[6], "je");
			pInvDet->m_je = double2int(atof(m_pXmlParse.GetText().c_str())*SUM_EXTENSION);//金额不含税
			DBG_PRINT(("pInvDet->m_spje : %lld", pInvDet->m_je));

			m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[6], "zsl");
			pInvDet->m_sl = atof(m_pXmlParse.GetText().c_str());//税率
			DBG_PRINT(("pInvDet->m_sl : %.2lf", pInvDet->m_sl));
	
			m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[6], "se");
			pInvDet->m_spse = double2int(atof(m_pXmlParse.GetText().c_str())*SUM_EXTENSION);//税额
			DBG_PRINT(("pInvDet->m_spse : %lld", pInvDet->m_spse));

			m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[6], "hsdj");
			pInvDet->m_spdj = atof(m_pXmlParse.GetText().c_str());//含税单价
			DBG_PRINT(("pInvDet->m_spdj : %.3lf", pInvDet->m_spdj));

			m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[6], "hsje");
			pInvDet->m_spje = double2int(atof(m_pXmlParse.GetText().c_str())*SUM_EXTENSION);//含税金额
			DBG_PRINT(("pInvDet->m_spje : %lld", pInvDet->m_spje));

			m_InvInfo.InsertNode(pInvDet);

			pInvDet =NULL;
		}

		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "hjje");
		m_InvInfo.m_kpje = double2int(atof(m_pXmlParse.GetText().c_str())*SUM_EXTENSION);
		DBG_PRINT(("m_InvInfo.m_kpje : %lld", m_InvInfo.m_kpje));

		
		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "hjse");
		m_InvInfo.m_kpse = double2int(atof(m_pXmlParse.GetText().c_str())*SUM_EXTENSION);
		DBG_PRINT(("m_InvInfo.m_kpse : %lld", m_InvInfo.m_kpse));
		
		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "jshj");
		m_InvInfo.m_kphjje = double2int(atof(m_pXmlParse.GetText().c_str())*SUM_EXTENSION);
		DBG_PRINT(("m_InvInfo.m_kphjje : %lld", m_InvInfo.m_kphjje));

		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "bz");
		m_InvInfo.m_backup1 = m_pXmlParse.GetText();
		DBG_PRINT(("m_InvInfo.m_backup1 : %s", m_InvInfo.m_backup1.c_str()));

// 		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "kpr");
// 		m_InvInfo.m_sky = m_pXmlParse.GetText();
// 		DBG_PRINT(("m_InvInfo.m_sky : %s", m_InvInfo.m_sky.c_str()));

		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "yfpdm");
		m_InvInfo.m_yfpdm = m_pXmlParse.GetText();
		DBG_PRINT(("m_InvInfo.m_yfpdm : %s", m_InvInfo.m_yfpdm.c_str()));

		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "yfphm");
		m_InvInfo.m_yfphm = atoi(m_pXmlParse.GetText().c_str());


		//作废日期
// 		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "zfrq");
// 		memset(Buf, 0, sizeof(Buf));
// 		sprintf(Buf, "%u",m_InvInfo.zfrq);
// 		m_pXmlParse.GetText(Buf);
// 		DBG_PRINT(("buf : %s", Buf));
		
		//作废人
// 		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "zfr");
// 		m_pXmlParse.GetText(m_InvInfo.m_yfpdm);
// 		DBG_PRINT(("m_InvInfo.m_yfpdm : %s", m_InvInfo.m_yfpdm.c_str()));

		//已开负数金额
// 		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[4], "ykfsje");	
// 		memset(Buf, 0, sizeof(Buf));
// 		sprintf(Buf, "%ld", m_InvInfo.m_kphjje);
// 		m_pXmlParse.GetText(Buf);
// 		DBG_PRINT(("buf : %s", Buf));

		m_pXmlParse.LocateNodeByName(m_pXmlParse.m_parentElement[2], "qmz");
		m_InvInfo.m_casign = m_pXmlParse.GetText();
		DBG_PRINT(("m_InvInfo.m_casign : %s", m_InvInfo.m_casign.c_str()));		
	}

	return XML_SUCCESS;

}