var kindObj = {};/** * 连接金税卡 * @param InfoKind 0:专用发票 1:废旧 物资发票 2:普通发票 * @private */function _kind_connect(InfoKind){ var cardInfo = {}; var self = this; try { self.kindObj=new ActiveXObject("TaxCardX.GoldTax"); self.kindObj.OpenCard(); if(self.kindObj.RetCode=="1011" || self.kindObj.RetCode=="3001"){ cardInfo.InvLimit = self.kindObj.InvLimit;//kai票限额, 金税卡发票开具价税合计限额 cardInfo.TaxCode = self.kindObj.TaxCode;//本单位税号 cardInfo.TaxClock = self.kindObj.TaxClock;//金税卡时钟 cardInfo.TaxClockStr =self._getDateStr(self.kindObj.TaxClock );//金税卡时钟 cardInfo.MachineNo = self.kindObj.MachineNo;//kai票机号码,主kai票机为 0 cardInfo.IsInvEmpty = self.kindObj.IsInvEmpty;//有票标志,0 为金税卡中无可开发票,1 为有票 cardInfo.IsInvEmptyStr = self.kindObj.IsInvEmpty==0?'否':'是';//有票标志,0 为金税卡中无可开发票,1 为有票 cardInfo.IsRepReached = self.kindObj.IsRepReached;//抄税标志,0 为未到抄税期,1 为已到抄税 cardInfo.IsRepReachedStr = self.kindObj.IsRepReached==0?'否':'是';//抄税标志,0 为未到抄税期,1 为已到抄税 cardInfo.IsLockReached = self.kindObj.IsLockReached;//锁死标志,0 为未到锁死期,1 为已到锁死期 cardInfo.IsLockReachedStr = self.kindObj.IsLockReachedStr==0?'否':'是';//锁死标志,0 为未到锁死期,1 为已到锁死期 self.kindObj.InfoKind=InfoKind; cardInfo.InfoKindStr = InfoKind==0?'专用发票':'普通发票';//0:专用发票 1:废旧 物资发票 2:普通发票 self._kind_getinfo(cardInfo); cardInfo.connectMsg = "金税卡已连接"; }else{ cardInfo.errMsg = ("金税卡开启失败,错误代码:"+self.kindObj.RetCode); } } catch (e) { cardInfo.errMsg = ('ActiveX测试失败!'+e.description); } return cardInfo;}/** * 开具发票 * @param data 发票数据 * @private */function _kind_invoice(data){ var self = this; var cardInfo ={}; var importValues =data; cardInfo.noticeinvBillcode = importValues.noticeinvBillcode; cardInfo.noticeinvBillcono = importValues.noticeinvBillcono; cardInfo.memberCode = importValues.memberCode; try { var InfoKind = (importValues["ddTypeInvoiceclass"]) == '增值税专用发票'?0:2; self.kindObj.InfoKind=InfoKind; self.kindObj.GetInfo(); importValues.noticeinvTaxno = self.kindObj.InfoTypeCode;//发票代码 importValues.noticeinvTaxreceipt = self.kindObj.InfoNumber;//发票号码 } catch (e) { cardInfo.errMsg = '发票查询失败!'+e.description; return cardInfo; } //开具发票 try { self.kindObj.InvInfoInit(); // 初始化发票抬头信息 self.kindObj.InfoKind = ((importValues["ddTypeInvoiceclass"]) == '增值税专用发票'?0:2); //增值税普通发票2 专票0 self.kindObj.InfoClientName = importValues["datasBalcorpname"]; //购方名称 self.kindObj.InfoClientTaxCode = importValues["companyTanu"]; //购方税号 self.kindObj.InfoClientBankAccount = importValues["companyAccountsName"]+importValues["companyAccountsCode"]; //购方开户行及账号 self.kindObj.InfoClientAddressPhone = importValues["companyAddr"]+importValues["companyPhone"]; //购方地址电话 self.kindObj.InfoSellerBankAccount = importValues["orgBankname"]+importValues["orgAccounts"]; //销方开户行及账号 self.kindObj.InfoSellerAddressPhone = importValues["orgAddr"]+importValues["orgPhone"]; //销方地址电话 self.kindObj.InfoNotes = ((importValues["invInvremark"])?importValues["invInvremark"]:''); //备注 self.kindObj.InfoInvoicer = ((importValues["operatorName"])?importValues["operatorName"]:''); //kai票人 self.kindObj.InfoChecker = ((importValues["billingCheckman"])?importValues["billingCheckman"]:''); //复核人,可为空 self.kindObj.InfoCashier = ((importValues["billingGatheringman"])?importValues["billingGatheringman"]:''); //收款人,可为空 if(importValues["goodsListFlag"] =="1"){ self.kindObj.InfoListName = '(详见销货清单)'; //如不为空,则开具销货清单,此为发票上商品名称栏的清单信息,应为“(详见销货清单)”字样 } //kindObj.InfoBillNumber = ''; //销售单据编号,可为空 self.kindObj.ClearInvList(); //清空商品明细列表 var detailList = importValues["list"]; for(var i = 0 ;i< detailList.length; i++){ var item = detailList[i]; self.kindObj.InvListInit(); self.kindObj.ListGoodsName = item.noticeinvPartsname+ ( ((!item.goodsMaterial)|| item.goodsMaterial=='-') ?"":item.goodsMaterial); // 商品或劳务名称 //self.kindObj.ListTaxItem = item.taxCode; // 税目,4位数字,商品所属类别 self.kindObj.ListStandard = ((item.noticeinvSpec)?item.noticeinvSpec:''); // 规格型号 self.kindObj.ListUnit = ((item.partsnameWeightunit)?item.partsnameWeightunit:''); self.kindObj.InfoTaxRate = item.goodsTaxrate?(item.goodsTaxrate*100):0; //税率,17、13、6、4 等 如果是多商品多税率 税率应该放到商品循环里 // 计量单位,如计量单位为空,则忽略数量和单价 //建议传入数量和含税单价或含税金额 由接口计算带小数的税额 规避误差 if(item.dataBweight){ self.kindObj.ListNumber = ((item.dataBweight)?item.dataBweight:0); // 数量 } //self.kindObj.ListPrice = item.goodsInprice; // 单价 self.kindObj.ListAmount=item.goodsExmoney;// 金额,可以不传(为0),由接口软件计算,如传入则应符合计算关系 self.kindObj.ListTaxAmount=item.goodsTaxmoney;//税额可以不传(为0),由接口软件计算,如传入则应符合计算关系 self.kindObj.ListPriceKind = 0; // 含税价标志,单价和金额的种类, 0为不含税价,1为含税价 self.kindObj.AddInvList(); } self.kindObj.Invoice(); if(self.kindObj.RetCode=="4011"){ var mess="开具成功>>"; mess+=" 合计不含税金额:"+self.kindObj.InfoAmount; mess+=" 合计税额:"+self.kindObj.InfoTaxAmount; mess+=" 日期:"+self.kindObj.InfoDate; mess+=" 月份:"+self.kindObj.InfoMonth; mess+=" 代码:"+self.kindObj.InfoTypeCode; mess+=" 号码:"+self.kindObj.InfoNumber; mess+=" 清单:"+self.kindObj.GoodsListFlag; mess+=" 单价:"+self.kindObj.ListPrice; mess+=" 数量:"+self.kindObj.ListNumber; mess+=" 商品编码:"+self.kindObj.ListNumber; cardInfo.noticeinvTaxno = self.kindObj.InfoTypeCode;//发票代码 cardInfo.noticeinvTaxreceipt = self.kindObj.InfoNumber;//发票号码 cardInfo.invBillstate = 1; cardInfo.kindInvoiceMsg = mess; }else{ cardInfo.errMsg = ("kai票失败,错误代码:"+self.kindObj.RetCode); cardInfo.kindInvoiceMsg = cardInfo.errMsg ; } } catch (e) { cardInfo.errMsg = '发票开具失败!'+e.description; cardInfo.kindInvoiceMsg = cardInfo.errMsg ; } return cardInfo;}//断开金税卡function _kind_close(){ var cardInfo = {}; var self = this; try { self.kindObj.CloseCard(); cardInfo.connectMsg = "金税卡已断开"; } catch (e) { cardInfo.errMsg = ('关闭金税卡失败!'+e.description); } return cardInfo;}/** * 查询库存发票 * @param cardInfo 连接信息 * @returns {*} * @private */function _kind_getinfo(cardInfo){ if(!cardInfo){ cardInfo = {}; } var self = this; try { self.kindObj.GetInfo(); cardInfo.InfoTypeCode = self.kindObj.InfoTypeCode;//要开具发票的十位代码 cardInfo.InfoNumber = self.kindObj.InfoNumber;//要开具发票的号码 cardInfo.InvStock = self.kindObj.InvStock;//发票剩余份数 cardInfo.InvStockStr = self.kindObj.InvStock+"张";//剩余发票 cardInfo.TaxClock = self.kindObj.TaxClock;//金税卡时钟 } catch (e) { cardInfo.errMsg = ('金税卡查询库存发票失败!'+e.description); } return cardInfo;}/** * 作废发票 * @param InfoTypeCode 发票代码 * @param InfoNumber 发票号码 * @private */function _kind_cancelinv(InfoTypeCode,InfoNumber){ var cardInfo = {}; var self = this; try { self.kindObj.InfoTypeCode=InfoTypeCode; self.kindObj.InfoNumber=InfoNumber; self.kindObj.CancelInv(); if(self.kindObj.RetCode=="6011"){ }else{ cardInfo.errMsg = ("发票作废失败,错误代码:"+self.kindObj.RetCode); } } catch (e) { cardInfo.errMsg = ('发票作废失败!'+e.description); } return cardInfo;}/** * 打印发票 * @param InfoTypeCode 发票代码 * @param InfoNumber 发票号码 * @param GoodsListFlag 销货清单标志,0 – 打印发票,1 – 打印销货清单 * @private */function _kind_printinv(InfoTypeCode,InfoNumber,GoodsListFlag){ var cardInfo = {}; var self = this; try { self.kindObj.InfoTypeCode=InfoTypeCode; self.kindObj.InfoNumber=InfoNumber; self.kindObj.GoodsListFlag=GoodsListFlag; self.kindObj.PrintInv(); if(GoodsListFlag == 1){ //清单打印两次 if(self.kindObj.RetCode!="5012"){ self.kindObj.PrintInv(); } } if(self.kindObj.RetCode=="5011"||self.kindObj.RetCode=="5012"){ cardInfo.RetCode = self.kindObj.RetCode; }else{ cardInfo.errMsg = ("发票打印失败,错误代码:"+self.kindObj.RetCode); } } catch (e) { cardInfo.errMsg = ('发票打印失败!'+e.description); } return cardInfo;}