$PBExportHeader$uo_mustpay.sru forward global type uo_mustpay from nonvisualobject end type type delmx from structure within uo_mustpay end type end forward type delmx from structure long payid long listno end type global type uo_mustpay from nonvisualobject end type global uo_mustpay uo_mustpay type variables long ref_payid = 0 end variables forward prototypes public function integer del_payrecmx (integer arg_del, long arg_payid, long arg_listno, ref string arg_msg, boolean arg_ifcommit) public function integer buybill_del_mx (long arg_buybillid, ref string arg_msg, boolean arg_ifcommit) public function integer del_payrec (long arg_scid, integer arg_del, long arg_payid, long arg_sptid, ref string arg_msg, boolean arg_ifcommit) public function integer add_payrec (long arg_scid, long arg_sptid, datetime arg_paydate, string arg_inrep, decimal arg_oriamt, decimal arg_mstpayamt, decimal arg_payamt, string arg_dscrp, string arg_billcode, long arg_banktypeid, integer arg_buildtype, string arg_opemp, long arg_inwareid, long arg_buybillid, ref string arg_msg, boolean arg_ifcommit, datetime arg_viewdate, long arg_accountsid, long arg_itemid, long arg_moneyid, string arg_relcode) public function integer add_payrecmx (long arg_scid, long arg_payid, string arg_billcode, datetime arg_paydate, long arg_banktypeid, decimal arg_mstpayamt, decimal arg_payamt, string arg_opemp, string arg_dscrp, string arg_inrep, integer arg_buildtype, long arg_buybillid, long arg_itemid, long arg_sptid, ref string arg_msg, boolean arg_ifcommit, long arg_moneyid, string arg_relcode) public function integer add_payrecmx (ref s_bmstpay arg_s_mx, ref string arg_msg, boolean arg_ifcommit) public function integer add_payrec (ref s_bmstpay arg_s_mx, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer del_payrecmx (integer arg_del, long arg_payid, long arg_listno, ref string arg_msg, boolean arg_ifcommit);//删除应收帐 //del_payrecmx(arg_del,arg_payid,arg_listno,arg_msg,arg_ifcommit) //arg_del 0:手动删除,1:应付帐删除,2:支出单删除;3:采购单删除 Int rslt = 1 long cnt = 0 Long buildtype = 0 Decimal mstpayamt,payamt DateTime null_datetime SELECT count(*) INTO :cnt FROM u_bmstpaymx WHERE u_bmstpaymx.payid = :arg_payid AND u_bmstpaymx.listno = :arg_listno; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询操作失败,应付明细帐唯一码' rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '错误应付明细帐唯一码' rslt = 0 GOTO ext END IF SELECT buildtype,mstpayamt,payamt INTO :buildtype,:mstpayamt,:payamt FROM u_bmstpaymx WHERE u_bmstpaymx.payid = :arg_payid AND u_bmstpaymx.listno = :arg_listno; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询应付明细帐失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF arg_del = 0 THEN IF buildtype <> 0 THEN arg_msg = '系统自动建立的应付明细帐不可以删除' rslt = 0 GOTO ext END IF END IF SetNull(null_datetime) UPDATE U_bmstpay SET mstpayamt = mstpayamt - :mstpayamt, payamt = payamt - :payamt, finishflag = 0, finishdate = :null_datetime Where U_bmstpay.payid = :arg_payid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应付帐金额失败,请重试>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF DELETE U_bmstpaymx WHERE u_bmstpaymx.payid = :arg_payid AND u_bmstpaymx.listno = :arg_listno; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除应付明细帐操作失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer buybill_del_mx (long arg_buybillid, ref string arg_msg, boolean arg_ifcommit);delmx del_mx[] Long it_mxt Long ls_payid,ls_listno,i Int rslt = 1 DECLARE listno_cur CURSOR FOR SELECT U_BmstpayMX.payid, U_BmstpayMX.listno FROM U_BmstpayMX Where buybillid = :arg_buybillid; OPEN listno_cur; FETCH listno_cur Into :ls_payid,:ls_listno; DO WHILE sqlca.SQLCode = 0 it_mxt++ del_mx[it_mxt].payid = ls_payid del_mx[it_mxt].listno = ls_listno FETCH listno_cur Into :ls_payid,:ls_listno; LOOP CLOSE listno_cur; FOR i = 1 To it_mxt IF del_payrecmx (2,del_mx[i].payid, del_mx[i].listno,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer del_payrec (long arg_scid, integer arg_del, long arg_payid, long arg_sptid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 long cnt = 0 Long maxid = 0 Long buildtype = 0 Decimal ls_mstpayamt,ls_payamt Long ll_itemid,ll_dateint Int ll_buildtype Long ll_ctmint DateTime ld_paydate uo_iteminput uo_item uo_item = Create uo_iteminput SELECT count(*) INTO :cnt FROM u_spt Where u_spt.sptid = :arg_sptid ; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询操作失败,供应商唯一码' rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '错误供应商唯一码' rslt = 0 GOTO ext END IF SELECT buildtype, mstpayamt, payamt, itemid, rapmoneyid, paydate, ctmint INTO :ll_buildtype, :ls_mstpayamt, :ls_payamt, :ll_itemid, :ll_dateint, :ld_paydate, :ll_ctmint FROM u_bmstpay Where u_bmstpay.payid = :arg_payid; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询应付帐建立类型失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ll_ctmint > 0 THEN arg_msg = '该记录资料已被截数,不能处理' rslt = 0 GOTO ext END IF If (ll_buildtype = 1 Or ll_buildtype = 4) And arg_del = 0 THEN arg_msg = '系统自动建立的应付帐不可以删除' rslt = 0 GOTO ext END IF cnt = 0 IF ll_buildtype = 0 THEN //手动建立的, SELECT count(*) INTO :cnt FROM u_bmstpaymx WHERE payid = :arg_payid And (buildtype <> 0); ELSEIF ll_buildtype = 1 THEN //销售单据建立 SELECT count(*) INTO :cnt FROM u_bmstpaymx WHERE payid = :arg_payid And (buildtype <> 1 And buildtype <> 3); ELSEIF ll_buildtype = 4 THEN //收款单据建立 SELECT count(*) INTO :cnt FROM u_bmstpaymx WHERE payid = :arg_payid And (buildtype <> 4); ELSE SELECT count(*) INTO :cnt FROM u_bmstpaymx WHERE payid = :arg_payid And buildtype = 2; END IF IF sqlca.SQLCode <> 0 THEN arg_msg = '查询应付帐明细帐失败' rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = '该应付帐记录已存在明细帐记录,不能删除>>如果要删除,请先删除明细帐' rslt = 0 GOTO ext END IF //********删除出纳帐 IF ls_payamt <> 0 THEN IF uo_item.del_iteminput(ll_itemid,ll_dateint,1,arg_msg,False) = 0 THEN arg_msg = '删除出纳明细帐失败!~n' + arg_msg rslt = 0 GOTO ext END IF END IF DELETE U_bmstpaymx Where u_bmstpaymx.payid = :arg_payid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除应付明细帐操作失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF DELETE U_bmstpay Where u_bmstpay.payid = :arg_payid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除应付帐操作失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer add_payrec (long arg_scid, long arg_sptid, datetime arg_paydate, string arg_inrep, decimal arg_oriamt, decimal arg_mstpayamt, decimal arg_payamt, string arg_dscrp, string arg_billcode, long arg_banktypeid, integer arg_buildtype, string arg_opemp, long arg_inwareid, long arg_buybillid, ref string arg_msg, boolean arg_ifcommit, datetime arg_viewdate, long arg_accountsid, long arg_itemid, long arg_moneyid, string arg_relcode); s_bmstpay s_pay s_pay.scid = arg_scid s_pay.sptid = arg_sptid s_pay.paydate = arg_paydate s_pay.inrep = arg_inrep s_pay.oriamt = arg_oriamt s_pay.mstpayamt = arg_mstpayamt s_pay.payamt = arg_payamt s_pay.dscrp = arg_dscrp s_pay.billcode = arg_billcode s_pay.banktypeid = arg_banktypeid s_pay.buildtype = arg_buildtype s_pay.opemp = arg_opemp s_pay.inwareid = arg_inwareid s_pay.buybillid = arg_buybillid s_pay.viewdate = arg_viewdate s_pay.accountsid = arg_accountsid s_pay.itemid = arg_itemid s_pay.moneyid = arg_moneyid s_pay.relcode = arg_relcode return add_payrec(s_pay,arg_msg,arg_ifcommit) //Int rslt = 1,cnt = 0 //DateTime server_datetime //Long ls_newpayid //Long ref_dateint,li_native //String ls_sptname //Int li_item_dfttype,li_itemflag //Decimal ld_payamt // //uo_iteminput uo_item //uo_item = CREATE uo_iteminput // //IF IsNull(arg_dscrp) THEN arg_dscrp = '' //IF IsNull(arg_inrep) THEN arg_inrep = '' //IF IsNull(arg_banktypeid) THEN arg_banktypeid = 0 //IF IsNull(arg_billcode) THEN arg_billcode = '' //IF IsNull(arg_opemp) THEN arg_opemp = '' //IF IsNull(arg_scid) THEN arg_scid = 0 //IF IsNull(arg_accountsid) THEN arg_accountsid = 0 //IF IsNull(arg_itemid) THEN arg_itemid = 0 //IF IsNull(arg_moneyid) THEN arg_moneyid = 0 //IF IsNull(arg_relcode) THEN arg_relcode = '' // ////未注册限制 //IF sys_if_register = 0 THEN // Long ll_bill_count // SELECT count(*) // INTO :ll_bill_count // FROM U_Bmstpay; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "查询操作失败,应付帐数量 " // GOTO ext // END IF // // IF ll_bill_count > 80 THEN // rslt = 0 // arg_msg = "未注册版本,应付帐只能保存30条记录!" // GOTO ext // END IF //END IF // //IF arg_moneyid <= 0 THEN // rslt = 0 // arg_msg = '请选择币种.' // GOTO ext //END IF // //IF arg_itemid <= 0 THEN // rslt = 0 // arg_msg = '请选择收支项目.' // GOTO ext //END IF ////1 判断新内容的合法性 //IF Not (arg_buildtype = 0 OR arg_buildtype = 1 OR arg_buildtype = 4) THEN // arg_msg = '错误建立类型,必须为:0-手工记帐;1-单据记帐;4-付款单记账' // rslt = 0 // GOTO ext //END IF // //IF arg_billcode = '' THEN // arg_msg = '请输入凭证号码' // rslt = 0 // GOTO ext //END IF // //IF Date(arg_paydate) <= 1990-01-01 THEN // arg_msg = '错误发生日期' // rslt = 0 // GOTO ext //END IF // //IF Trim(arg_inrep) = '' THEN // arg_msg = '请输入经手人' // rslt = 0 // GOTO ext //END IF // //cnt = 0 //SELECT count(*) INTO :cnt // FROM cw_banktype // Where banktypeid = :arg_banktypeid; //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "查询操作失败,结算方式!" // GOTO ext //END IF //IF cnt = 0 THEN // rslt = 0 // arg_msg = "结算方式未登记或已取消!" // GOTO ext //END IF // ////IF arg_moneyid = 0 THEN //// arg_msg = '没有币种' //// rslt = 0 //// GOTO ext ////END IF // //////币种 ////cnt = 0 ////SELECT count(*) INTO :cnt FROM cw_currency Where moneyid = :arg_moneyid; ////IF sqlca.SQLCode <> 0 THEN //// rslt = 0 //// arg_msg = '查询币种失败!' //// GOTO ext ////END IF //// ////IF cnt = 0 THEN //// rslt = 0 //// arg_msg = '无效的币种,不存在该币种!' //// GOTO ext ////END IF // //SELECT native INTO :li_native FROM cw_currency Where moneyid = :arg_moneyid; //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询币种失败!' // GOTO ext //END IF // ////////// // // //cnt = 0 //SELECT count(*) INTO :cnt FROM u_scdef Where scid = :arg_scid; //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询分部资料失败!' // GOTO ext //END IF //IF cnt = 0 THEN // rslt = 0 // arg_msg = '无效的分部,不存在该分部!' // GOTO ext //END IF // //SELECT Top 1 getdate() INTO :server_datetime FROM u_user ; ////取得系统时间,借用操作员表 //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "查询操作失败,系统时间" // GOTO ext //END IF // // // // //IF arg_oriamt = 0 THEN // arg_msg = '请输入单据金额' // rslt = 0 // GOTO ext //END IF // // //IF arg_mstpayamt = 0 AND arg_payamt = 0 THEN // arg_msg = "应付金额与已付金额不能同时为0!" // rslt = 0 // GOTO ext //END IF // //IF arg_oriamt <> arg_mstpayamt - arg_payamt THEN // arg_oriamt = arg_mstpayamt - arg_payamt //END IF // ////2 判断是否已经选择当前客户和操作员 //SELECT name // INTO :ls_sptname // FROM u_spt // Where u_spt.sptid = :arg_sptid ; //IF sqlca.SQLCode <> 0 THEN // arg_msg = '查询操作失败,供应商唯一码' // rslt = 0 // GOTO ext //END IF // //cnt = 0 //SELECT count(*) INTO :cnt // FROM u_user // Where username = :arg_opemp ; //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "查询操作失败,操作员!" // GOTO ext //END IF //IF cnt = 0 THEN // rslt = 0 // arg_msg = "操作员姓名未登记或已取消!" // GOTO ext //END IF // //Long ll_moneyid // ////****************加出纳帐 //IF arg_payamt <> 0 THEN // // SELECT dfttype,itemflag // INTO :li_item_dfttype,:li_itemflag // FROM u_itemdef // Where u_itemdef.itemid = :arg_itemid; // IF sqlca.SQLCode <> 0 THEN // arg_msg = '查询当前付支项目核算类型和核算方向失败!' // rslt = 0 // GOTO ext // END IF // // CHOOSE CASE li_item_dfttype // CASE 2,5 // ld_payamt = -1 * arg_payamt * li_itemflag // CASE ELSE // ld_payamt = arg_payamt // END CHOOSE // // IF uo_item.add_iteminput(arg_scid,arg_itemid,0,arg_paydate,ls_sptname +' '+arg_dscrp,ld_payamt,arg_accountsid,& // arg_msg,FALSE,arg_banktypeid,1,arg_billcode,arg_moneyid,arg_relcode) = 0 THEN // arg_msg = '增加付支明细帐失败!~n' + arg_msg // rslt = 0 // GOTO ext // END IF // // ref_dateint = uo_item.ref_dateint // // IF ref_dateint = 0 THEN // arg_msg = '增加付支出纳明细帐失败!' // rslt = 0 // GOTO ext // END IF //ELSE // arg_accountsid = 0 //END IF ////3 向应付帐表插入新记录,失败则回滚 //ls_newpayid = f_sys_scidentity(0,"U_Bmstpay","payid",arg_msg,FALSE,sqlca) //IF ls_newpayid <= 0 THEN // rslt = 0 // GOTO ext //END IF // //INSERT INTO U_Bmstpay // ( scid, // payid, // sptid, // paydate, // inrep, // oriamt, // mstpayamt, // payamt, // Dscrp, // billcode, // banktypeid, // buildtype, // opdate, // opemp, // inwareid, // viewdate, // rapmoneyid, // accountsid, // itemid, // buybillid, // moneyid, // relcode) // VALUES ( :arg_scid, // :ls_newpayid, // :arg_sptid, // :arg_paydate, // :arg_inrep, // :arg_oriamt, // :arg_mstpayamt, // :arg_payamt, // :arg_dscrp, // :arg_billcode, // :arg_banktypeid, // :arg_buildtype, // :server_datetime, // :arg_opemp, // :arg_inwareid, // :arg_viewdate, // :ref_dateint, // :arg_accountsid, // :arg_itemid, // :arg_buybillid, // :arg_moneyid, // :arg_relcode) ; //IF sqlca.SQLCode <> 0 THEN // // IF Pos(Lower(sqlca.SQLErrText),'pk_U_Bmstpay') > 0 THEN // arg_msg = '插入应付帐表操作失败,关键字单据ID重复' // ELSE // arg_msg = "插入应付帐表操作失败"+"~n"+sqlca.SQLErrText // END IF // rslt = 0 // GOTO ext //END IF // ////4 向应付帐明细表插入新记录,失败则回滚 //IF add_payrecmx(arg_scid,ls_newpayid,arg_billcode,arg_paydate,arg_banktypeid,arg_mstpayamt,& // arg_payamt,arg_opemp,arg_dscrp,arg_inrep,1,0,arg_itemid,arg_sptid,arg_msg,FALSE,arg_moneyid,arg_relcode) = 0 THEN // rslt = 0 // GOTO ext //END IF // //ref_payid = ls_newpayid // //ext: //IF rslt = 0 THEN // ROLLBACK; //ELSEIF rslt = 1 AND arg_ifcommit THEN // COMMIT; //END IF //RETURN rslt end function public function integer add_payrecmx (long arg_scid, long arg_payid, string arg_billcode, datetime arg_paydate, long arg_banktypeid, decimal arg_mstpayamt, decimal arg_payamt, string arg_opemp, string arg_dscrp, string arg_inrep, integer arg_buildtype, long arg_buybillid, long arg_itemid, long arg_sptid, ref string arg_msg, boolean arg_ifcommit, long arg_moneyid, string arg_relcode);//==================================================================== // 事件: uo_mustpay.Script - add_payrecmx ( long arg_scid, long arg_payid, string arg_billcode, datetime arg_paydate, long arg_banktypeid, decimal arg_mstpayamt, decimal arg_payamt, string arg_opemp, string arg_dscrp, string arg_inrep, integer arg_buildtype, long arg_buybill() //-------------------------------------------------------------------- // 描述: //-------------------------------------------------------------------- // 参数: // value long arg_scid // value long arg_payid // value string arg_billcode // value datetime arg_paydate // value long arg_banktypeid // value decimal arg_mstpayamt // value decimal arg_payamt // value string arg_opemp // value string arg_dscrp // value string arg_inrep // value integer arg_buildtype // value long arg_buybillid // value long arg_itemid // value long arg_sptid // reference string arg_msg // value boolean arg_ifcommit // value long arg_moneyid // value string arg_relcode //-------------------------------------------------------------------- // 返回: (none) //-------------------------------------------------------------------- // 作者: LHD 日期: 2013年06月27日 //-------------------------------------------------------------------- // Copyright (c) 2002-2018 RICHTA(TM), All rights reserved. //-------------------------------------------------------------------- // 修改历史: // //==================================================================== s_bmstpay s_pay s_pay.scid = arg_scid s_pay.payid = arg_payid s_pay.billcode = arg_billcode s_pay.paydate = arg_paydate s_pay.banktypeid = arg_banktypeid s_pay.mstpayamt = arg_mstpayamt s_pay.payamt = arg_payamt s_pay.opemp = arg_opemp s_pay.dscrp = arg_dscrp s_pay.inrep = arg_inrep s_pay.buildtype = arg_buildtype s_pay.buybillid = arg_buybillid s_pay.itemid = arg_itemid s_pay.sptid = arg_sptid s_pay.moneyid = arg_moneyid s_pay.relcode = arg_relcode return add_payrecmx(s_pay,arg_msg,arg_ifcommit) /* Int rslt = 1 Long cnt = 0,list_no DateTime server_datetime,null_datetime Decimal balcamt IF IsNull(arg_dscrp) THEN arg_dscrp = '' IF IsNull(arg_inrep) THEN arg_inrep = '' IF IsNull(arg_banktypeid) THEN arg_banktypeid = 0 IF IsNull(arg_billcode) THEN arg_billcode = '' IF IsNull(arg_opemp) THEN arg_opemp = '' IF IsNull(arg_scid) THEN arg_scid = 0 IF IsNull(arg_itemid) THEN arg_itemid = 0 IF IsNull(arg_sptid) THEN arg_sptid = 0 IF IsNull(arg_moneyid) THEN arg_moneyid = 0 IF IsNull(arg_relcode) THEN arg_relcode = '' //防止超长 arg_billcode = lefta(arg_billcode, 30) cnt = 0 SELECT count(*) INTO :cnt FROM u_scdef Where scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询分部资料失败!' GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '无效的分部,不存在该分部!' GOTO ext END IF SELECT Top 1 getdate() INTO :server_datetime FROM u_user ; //取得系统时间,借用操作员表 IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,系统时间" GOTO ext END IF //1 判断新内容的合法性 IF Not (arg_buildtype = 0 OR & arg_buildtype = 1 OR & arg_buildtype = 2 OR & arg_buildtype = 3 OR & arg_buildtype = 4) THEN arg_msg = '错误建立类型,必须为:0-手工记帐;1-单据记帐;2-对数记帐;3-项目记帐;4-付款单记帐' rslt = 0 GOTO ext END IF IF arg_billcode = '' THEN arg_msg = '请输入凭证号码' rslt = 0 GOTO ext END IF IF Date(arg_paydate) <= 1990-01-01 THEN arg_msg = '错误发生日期' rslt = 0 GOTO ext END IF IF Trim(arg_inrep) = '' THEN arg_msg = '请输入经手人' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM cw_banktype Where banktypeid = :arg_banktypeid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,结算方式!" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "结算方式未登记或已取消!" GOTO ext END IF IF arg_mstpayamt = 0 AND arg_payamt = 0 THEN arg_msg = "应付金额与已付金额不能同时为0!" rslt = 0 GOTO ext END IF //2 判断是否已经选择当前操作员 cnt = 0 SELECT count(*) INTO :cnt FROM u_user Where username = :arg_opemp ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,操作员!" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "操作员姓名未登记或已取消!" GOTO ext END IF IF arg_buildtype = 0 OR arg_buildtype = 2 OR arg_buildtype = 3 OR arg_buildtype = 4 THEN SELECT max(listno) INTO :List_no FROM u_bmstpaymx Where payid = :arg_payid; IF sqlca.SQLCode = -1 THEN arg_msg = '查询应付明细帐最大编号失败>>'+sqlca.SQLErrText rslt = 0 GOTO ext ELSEIF sqlca.SQLCode = 100 OR IsNull(list_no) THEN list_no = 0 END IF list_no = list_no + 1 ELSE list_no = 0 END IF //3 向应付帐明细表插入新记录,失败则回滚 INSERT INTO U_Bmstpaymx (scid, payid, Listno, billcode, paydate, banktypeid, mstpayamt, payamt, opdate, opemp, Dscrp, inrep, buildtype, buybillid, itemid, sptid, moneyid, relcode) VALUES (:arg_scid, :arg_payid, :list_no, :arg_billcode, :arg_paydate, :arg_banktypeid, :arg_mstpayamt, :arg_payamt, :server_datetime, :arg_opemp, :arg_dscrp, :arg_inrep, :arg_buildtype, :arg_buybillid, :arg_itemid, :arg_sptid, :arg_moneyid, :arg_relcode ) ; IF sqlca.SQLCode <> 0 THEN IF Pos(Lower(sqlca.SQLErrText),'pk_u_buyTask') > 0 THEN arg_msg = '向应付帐表插入应付明细帐记录失败,关键字ID重复' ELSE arg_msg = "向应付帐表插入应付明细帐记录失败"+"~n"+sqlca.SQLErrText END IF rslt = 0 GOTO ext END IF //IF arg_buildtype <> 1 THEN SELECT mstpayamt - payamt INTO :balcamt FROM u_bmstpay Where payid = :arg_payid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询当前单据结余金额失败' rslt = 0 GOTO ext END IF // if balcamt<=0 then // IF ( arg_payamt - arg_mstpayamt)>0 THEN // arG_MSG = '当前处理金额大于单据结余金额,请检查' // rslt = 0 // GOTO ext // END IF // else // if ( arg_payamt - arg_mstpayamt)>balcamt then // arG_MSG = '当前处理金额大于单据结余金额,请检查' // rslt = 0 // GOTO ext // END IF // end if IF arg_buildtype <> 1 THEN UPDATE u_bmstpay SET mstpayamt = mstpayamt + :arg_mstpayamt, payamt = payamt + :arg_payamt Where payid = :arg_payid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应付帐应付已付款失败,请重试!' rslt = 0 GOTO ext END IF END IF IF balcamt = arg_payamt - arg_mstpayamt THEN UPDATE u_bmstpay SET finishflag = 1, finishdate = :server_datetime Where payid = :arg_payid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应付帐完成标记失败' rslt = 0 GOTO ext END IF ELSE SetNull(null_datetime) UPDATE u_bmstpay SET finishflag = 0, finishdate = :null_datetime Where payid = :arg_payid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应付帐完成标记失败' rslt = 0 GOTO ext END IF END IF //END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt */ end function public function integer add_payrecmx (ref s_bmstpay arg_s_mx, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1 Long cnt = 0,list_no DateTime server_datetime,null_datetime Decimal balcamt IF IsNull(arg_s_mx.dscrp) THEN arg_s_mx.dscrp = '' IF IsNull(arg_s_mx.inrep) THEN arg_s_mx.inrep = '' IF IsNull(arg_s_mx.banktypeid) THEN arg_s_mx.banktypeid = 0 IF IsNull(arg_s_mx.billcode) THEN arg_s_mx.billcode = '' IF IsNull(arg_s_mx.opemp) THEN arg_s_mx.opemp = '' IF IsNull(arg_s_mx.scid) THEN arg_s_mx.scid = 0 IF IsNull(arg_s_mx.itemid) THEN arg_s_mx.itemid = 0 IF IsNull(arg_s_mx.sptid) THEN arg_s_mx.sptid = 0 IF IsNull(arg_s_mx.moneyid) THEN arg_s_mx.moneyid = 0 IF IsNull(arg_s_mx.relcode) THEN arg_s_mx.relcode = '' //防止超长 arg_s_mx.billcode = lefta(arg_s_mx.billcode, 30) cnt = 0 SELECT count(*) INTO :cnt FROM u_scdef Where scid = :arg_s_mx.scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询分部资料失败!' GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '无效的分部,不存在该分部!' GOTO ext END IF SELECT Top 1 getdate() INTO :server_datetime FROM u_user ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,系统时间" GOTO ext END IF //1 判断新内容的合法性 IF Not (arg_s_mx.buildtype = 0 OR & arg_s_mx.buildtype = 1 OR & arg_s_mx.buildtype = 2 OR & arg_s_mx.buildtype = 3 OR & arg_s_mx.buildtype = 4) THEN arg_msg = '错误建立类型,必须为:0-手工记帐;1-单据记帐;2-对数记帐;3-项目记帐;4-付款单记帐' rslt = 0 GOTO ext END IF IF arg_s_mx.billcode = '' THEN arg_msg = '请输入凭证号码' rslt = 0 GOTO ext END IF IF Date(arg_s_mx.paydate) <= 1990-01-01 THEN arg_msg = '错误发生日期' rslt = 0 GOTO ext END IF IF Trim(arg_s_mx.inrep) = '' THEN arg_msg = '请输入经手人' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM cw_banktype Where banktypeid = :arg_s_mx.banktypeid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,结算方式!" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "不存在结算方式!" GOTO ext END IF //IF arg_s_mx.mstpayamt = 0 AND arg_s_mx.payamt = 0 THEN // arg_msg = "应付金额与已付金额不能同时为0!" // rslt = 0 // GOTO ext //END IF //2 判断是否已经选择当前操作员 cnt = 0 SELECT count(*) INTO :cnt FROM u_user Where username = :arg_s_mx.opemp ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,操作员!" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "操作员姓名未登记或已取消!" GOTO ext END IF IF arg_s_mx.mstpayamt<>0 or arg_s_mx.payamt<>0 then IF arg_s_mx.buildtype = 0 OR arg_s_mx.buildtype = 2 OR arg_s_mx.buildtype = 3 OR arg_s_mx.buildtype = 4 THEN SELECT max(listno) + 1 INTO :List_no FROM u_bmstpaymx Where payid = :arg_s_mx.payid; IF sqlca.SQLCode = -1 THEN arg_msg = '查询应付明细帐最大编号失败>>'+sqlca.SQLErrText rslt = 0 GOTO ext ELSEIF sqlca.SQLCode = 100 OR IsNull(list_no) THEN list_no = 0 END IF ELSE list_no = 0 END IF //3 向应付帐明细表插入新记录,失败则回滚 INSERT INTO U_Bmstpaymx (scid, payid, Listno, billcode, paydate, banktypeid, mstpayamt, payamt, opdate, opemp, Dscrp, inrep, buildtype, buybillid, itemid, sptid, moneyid, relcode) VALUES (:arg_s_mx.scid, :arg_s_mx.payid, :list_no, :arg_s_mx.billcode, :arg_s_mx.paydate, :arg_s_mx.banktypeid, :arg_s_mx.mstpayamt, :arg_s_mx.payamt, :server_datetime, :arg_s_mx.opemp, :arg_s_mx.dscrp, :arg_s_mx.inrep, :arg_s_mx.buildtype, :arg_s_mx.buybillid, :arg_s_mx.itemid, :arg_s_mx.sptid, :arg_s_mx.moneyid, :arg_s_mx.relcode ) ; IF sqlca.SQLCode <> 0 THEN IF Pos(Lower(sqlca.SQLErrText),'pk_u_buyTask') > 0 THEN arg_msg = '向应付帐表插入应付明细帐记录失败,关键字ID重复' ELSE arg_msg = "向应付帐表插入应付明细帐记录失败"+"~n"+sqlca.SQLErrText END IF rslt = 0 GOTO ext END IF end if SELECT mstpayamt - payamt INTO :balcamt FROM u_bmstpay Where payid = :arg_s_mx.payid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询当前单据结余金额失败' rslt = 0 GOTO ext END IF IF arg_s_mx.buildtype = 3 THEN //采购单据, 增加税率应用 IF arg_s_mx.dscrp = arg_s_mx.billcode + '税金' THEN UPDATE u_bmstpay SET oriamt = oriamt + :arg_s_mx.mstpayamt Where payid = :arg_s_mx.payid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应付帐单据金额失败,请重试!' rslt = 0 GOTO ext END IF END IF END IF IF list_no <> 0 and (arg_s_mx.mstpayamt<>0 or arg_s_mx.payamt<>0)THEN UPDATE u_bmstpay SET mstpayamt = mstpayamt + :arg_s_mx.mstpayamt, payamt = payamt + :arg_s_mx.payamt Where payid = :arg_s_mx.payid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应付帐应付已付款失败,请重试!' rslt = 0 GOTO ext END IF END IF IF balcamt = arg_s_mx.payamt - arg_s_mx.mstpayamt THEN UPDATE u_bmstpay SET finishflag = 1, finishdate = :arg_s_mx.paydate Where payid = :arg_s_mx.payid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应付帐完成标记失败' rslt = 0 GOTO ext END IF ELSE SetNull(null_datetime) UPDATE u_bmstpay SET finishflag = 0, finishdate = :null_datetime Where payid = :arg_s_mx.payid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新应付帐完成标记失败' rslt = 0 GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer add_payrec (ref s_bmstpay arg_s_mx, ref string arg_msg, boolean arg_ifcommit);//==================================================================== // 事件: uo_mustpay.add_payrec() //-------------------------------------------------------------------- // 描述: //-------------------------------------------------------------------- // 参数: // reference s_bmstpay arg_s_mx // reference string arg_msg // value boolean arg_ifcommit //-------------------------------------------------------------------- // 返回: integer //-------------------------------------------------------------------- // 作者: LHD 日期: 2013年06月27日 //-------------------------------------------------------------------- // Copyright (c) 2002-2018 RICHTA(TM), All rights reserved. //-------------------------------------------------------------------- // 修改历史: ////arg_s_mx.buildtype = 0 - 手动;1 -自动;2-对单; 3-项目;4-收付款单; (2,3只用在明细中) //==================================================================== Int rslt = 1 long cnt = 0 DateTime server_datetime Long ls_newpayid Long ref_dateint String ls_sptname, ls_dscrp,ls_sptcode String ls_relcode Int li_item_dfttype,li_itemflag Decimal ld_payamt IF IsNull(arg_s_mx.dscrp) THEN arg_s_mx.dscrp = '' IF IsNull(arg_s_mx.inrep) THEN arg_s_mx.inrep = '' IF IsNull(arg_s_mx.banktypeid) THEN arg_s_mx.banktypeid = 0 IF IsNull(arg_s_mx.billcode) THEN arg_s_mx.billcode = '' IF IsNull(arg_s_mx.opemp) THEN arg_s_mx.opemp = '' IF IsNull(arg_s_mx.scid) THEN arg_s_mx.scid = 0 IF IsNull(arg_s_mx.accountsid) THEN arg_s_mx.accountsid = 0 IF IsNull(arg_s_mx.itemid) THEN arg_s_mx.itemid = 0 IF IsNull(arg_s_mx.moneyid) THEN arg_s_mx.moneyid = 0 IF IsNull(arg_s_mx.relcode) THEN arg_s_mx.relcode = '' uo_iteminput uo_item uo_item = Create uo_iteminput //未注册限制 IF sys_if_register = 0 THEN Long ll_bill_count SELECT count(*) INTO :ll_bill_count From U_Bmstpay; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,应付帐数量 " GOTO ext END IF IF ll_bill_count > 80 THEN rslt = 0 arg_msg = "未注册版本,应付帐只能保存80条记录!" GOTO ext END IF END IF IF Not (arg_s_mx.buildtype = 0 Or arg_s_mx.buildtype = 1 Or arg_s_mx.buildtype = 4) THEN arg_msg = '错误建立类型,必须为:0-手工记帐;1-单据记帐;4-付款单记账' rslt = 0 GOTO ext END IF IF arg_s_mx.moneyid <= 0 THEN rslt = 0 arg_msg = '请选择币种.' GOTO ext END IF IF arg_s_mx.banktypeid = 0 THEN arg_msg = '没有结算方式' rslt = 0 GOTO ext END IF IF arg_s_mx.itemid <= 0 THEN rslt = 0 arg_msg = '请选择收支项目.' GOTO ext END IF IF arg_s_mx.billcode = '' THEN arg_msg = '请输入凭证号码' rslt = 0 GOTO ext END IF IF Date(arg_s_mx.paydate) <= 1990-01-01 THEN arg_msg = '错误发生日期' rslt = 0 GOTO ext END IF IF Trim(arg_s_mx.inrep) = '' THEN arg_msg = '请输入经手人' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) Into :cnt From u_scdef Where scid = :arg_s_mx.scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询分部资料失败!' GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = '无效的分部,不存在该分部!' GOTO ext END IF Int li_btype,li_native SELECT btype Into :li_btype From cw_banktype Where banktypeid = :arg_s_mx.banktypeid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询结算方式失败!' GOTO ext END IF SELECT native Into :li_native From cw_currency Where moneyid = :arg_s_mx.moneyid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询币种失败!' GOTO ext END IF ////// // IF arg_s_mx.inwareid > 0 And arg_s_mx.buildtype = 1 THEN SELECT part Into :ls_relcode From u_inware Where inwareid = :arg_s_mx.inwareid; IF sqlca.SQLCode <> 0 THEN ls_relcode = '' END IF END IF SELECT Top 1 getdate() Into :server_datetime From u_user ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,系统时间" GOTO ext END IF IF arg_s_mx.mstpayamt = 0 And arg_s_mx.payamt = 0 THEN arg_msg = "应付金额与已付金额不能同时为0!" rslt = 0 GOTO ext END IF arg_s_mx.oriamt = arg_s_mx.mstpayamt - arg_s_mx.payamt //2 判断是否已经选择当前供应商和操作员 SELECT sptcode,name INTO :ls_sptcode,:ls_sptname FROM u_spt Where u_spt.sptid = :arg_s_mx.sptid ; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询操作失败,供应商唯一码' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_user Where username = :arg_s_mx.opemp ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,操作员!" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "操作员姓名未登记或已取消!" GOTO ext END IF //Long ll_moneyid //****************加出纳帐 DateTime ldt_viewdate IF arg_s_mx.payamt <> 0 THEN IF arg_s_mx.accountsid = 0 THEN arg_msg = '请选择账号' rslt = 0 GOTO ext END IF SELECT dfttype,itemflag INTO :li_item_dfttype,:li_itemflag FROM u_itemdef Where u_itemdef.itemid = :arg_s_mx.itemid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询当前付支项目核算类型和核算方向失败!' rslt = 0 GOTO ext END IF CHOOSE CASE li_item_dfttype CASE 2,5 ld_payamt = -1 * arg_s_mx.payamt * li_itemflag CASE ELSE ld_payamt = arg_s_mx.payamt END CHOOSE //客户收款/供应商付款单的选项, 暂时无法区别是否供应商付款单? //不过其他单据,默认paydate = viewdate IF sys_option_cusamt_dftdate = 0 THEN ldt_viewdate = arg_s_mx.paydate ELSE ldt_viewdate = arg_s_mx.viewdate END IF //Int sys_option_rap_money_dscrp_mode= 0 // 281 出纳帐摘要生成模式 IF sys_option_rap_money_dscrp_mode = 0 THEN ls_dscrp = ls_sptcode + ' ' + ls_sptname + ' ' +arg_s_mx.dscrp ELSEIF sys_option_rap_money_dscrp_mode = 1 THEN ls_dscrp = ls_sptname + ' ' +arg_s_mx.dscrp ELSE ls_dscrp = ls_sptcode + ' ' + ls_sptname + ' ' +arg_s_mx.dscrp END IF s_iteminput s_input s_input.itemid = arg_s_mx.itemid s_input.dateint = 0 s_input.outdate = ldt_viewdate s_input.dscrp = ls_dscrp s_input.outamt = ld_payamt s_input.accountsid = arg_s_mx.accountsid s_input.banktypeid = arg_s_mx.banktypeid s_input.billcode = arg_s_mx.billcode s_input.relcode = arg_s_mx.relcode s_input.buildtype = 1 s_input.opemp = publ_operator s_input.relrep = '' s_input.scid = arg_s_mx.scid s_input.moneyid = arg_s_mx.moneyid IF uo_item.add_iteminput(s_input,arg_msg,False) = 0 THEN arg_msg = '增加收支明细帐失败!~n' + arg_msg rslt = 0 GOTO ext END IF // IF uo_item.add_iteminput(arg_s_mx.scid,arg_s_mx.itemid,0,ldt_viewdate,ls_dscrp,ld_payamt,arg_s_mx.accountsid,& // arg_msg,False,arg_s_mx.banktypeid,1,arg_s_mx.billcode,arg_s_mx.moneyid,arg_s_mx.relcode) = 0 THEN // arg_msg = '增加付支明细帐失败!~n' + arg_msg // rslt = 0 // GOTO ext // END IF ref_dateint = uo_item.ref_dateint IF ref_dateint = 0 THEN arg_msg = '增加收支出纳明细帐失败!' rslt = 0 GOTO ext END IF ELSE arg_s_mx.accountsid = 0 END IF //3 向应付帐表插入新记录,失败则回滚 ls_newpayid = f_sys_scidentity(0,"U_Bmstpay","payid",arg_msg,False,sqlca) IF ls_newpayid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO U_Bmstpay ( scid, payid, sptid, paydate, inrep, oriamt, mstpayamt, payamt, Dscrp, billcode, banktypeid, buildtype, opdate, opemp, inwareid, viewdate, rapmoneyid, accountsid, itemid, buybillid, moneyid, relcode) VALUES ( :arg_s_mx.scid, :ls_newpayid, :arg_s_mx.sptid, :arg_s_mx.paydate, :arg_s_mx.inrep, :arg_s_mx.oriamt, :arg_s_mx.mstpayamt, :arg_s_mx.payamt, :arg_s_mx.dscrp, :arg_s_mx.billcode, :arg_s_mx.banktypeid, :arg_s_mx.buildtype, :server_datetime, :arg_s_mx.opemp, :arg_s_mx.inwareid, :arg_s_mx.viewdate, :ref_dateint, :arg_s_mx.accountsid, :arg_s_mx.itemid, :arg_s_mx.buybillid, :arg_s_mx.moneyid, :arg_s_mx.relcode) ; IF sqlca.SQLCode <> 0 THEN IF Pos(Lower(sqlca.SQLErrText),'pk_U_Bmstpay') > 0 THEN arg_msg = '插入应付帐表操作失败,关键字单据ID重复' ELSE arg_msg = "插入应付帐表操作失败"+"~n"+sqlca.SQLErrText END IF rslt = 0 GOTO ext END IF //4 向应付帐明细表插入新记录,失败则回滚 arg_s_mx.payid = ls_newpayid s_bmstpay s_paymx s_paymx = arg_s_mx IF arg_s_mx.buildtype = 0 Or arg_s_mx.buildtype = 4 THEN s_paymx.buildtype = arg_s_mx.buildtype ELSE s_paymx.buildtype = 1 END IF s_paymx.buybillid = 0 IF add_payrecmx(s_paymx,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF //IF add_payrecmx(arg_s_mx.scid,ls_newpayid,arg_s_mx.billcode,arg_s_mx.paydate,arg_s_mx.banktypeid,arg_s_mx.mstpayamt,& // arg_s_mx.payamt,arg_s_mx.opemp,arg_s_mx.dscrp,arg_s_mx.inrep,1,0,arg_s_mx.itemid,arg_s_mx.sptid,arg_msg,False,arg_s_mx.moneyid,arg_s_mx.relcode) = 0 THEN // rslt = 0 // GOTO ext //END IF ref_payid = ls_newpayid ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function on uo_mustpay.create call super::create TriggerEvent( this, "constructor" ) end on on uo_mustpay.destroy TriggerEvent( this, "destructor" ) call super::destroy end on