$PBExportHeader$uo_taskdamt.sru forward global type uo_taskdamt from nonvisualobject end type type s_saleplanmx from structure within uo_taskdamt end type end forward type s_saleplanmx from structure long mtrlid string mtrlcode long printid decimal { 5 } planqty string mxdscrp end type global type uo_taskdamt from nonvisualobject end type global uo_taskdamt uo_taskdamt type variables Long uo_billid Int uo_option_msttake_takeamt_secaudit end variables forward prototypes public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg) public function integer save (s_taskdamt arg_s_bd, ref string arg_msg, boolean arg_ifcommit) public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit) public function integer audit (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer cancel (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer getinfo (long arg_billid, ref s_taskdamtmx arg_ref_s_mx[], ref string arg_msg) public function integer p_update_bmsttake (long arg_scid, long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer p_cancel_bmsttake (long arg_scid, long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit) public function integer caudit (integer arg_del, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer secauditing (long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer c_secauditing (integer arg_del, long arg_billid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_add_relcode (long arg_billid, string arg_relcode, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg);Int rslt = 1 IF arg_scid < 0 THEN rslt = 0 arg_msg = '请选择正确的分部' GOTO ext END IF IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF Int li_permitflag SELECT flag INTO :li_permitflag FROM u_taskdamt Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询单据审核标记失败' rslt = 0 GOTO ext END IF IF li_permitflag = 1 THEN rslt = 0 arg_msg = '单据已经审核,不可以修改,要修改请先撤销审核' GOTO ext END IF ext: RETURN rslt end function public function integer save (s_taskdamt arg_s_bd, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0 DateTime server_dt Long ll_billid,it_mxbt,ll_i,i String ls_sccode,ls_billcode Long ll_cusid_mx Long ll_moneyid_account,ll_moneyid_native IF IsNull(arg_s_bd.scid) THEN arg_s_bd.scid = 0 IF IsNull(arg_s_bd.billid) THEN arg_s_bd.billid = 0 IF IsNull(arg_s_bd.cussptid) THEN arg_s_bd.cussptid = 0 IF IsNull(arg_s_bd.part) THEN arg_s_bd.part = '' IF IsNull(arg_s_bd.assign_emp) THEN arg_s_bd.assign_emp = '' IF IsNull(arg_s_bd.dscrp) THEN arg_s_bd.dscrp = '' IF IsNull(arg_s_bd.ifauto) THEN arg_s_bd.ifauto = 0 IF IsNull(arg_s_bd.salebillid) THEN arg_s_bd.salebillid = 0 IF arg_s_bd.cussptid = 0 THEN rslt = 0 arg_msg = "请选择客户!" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_cust Where cusid = :arg_s_bd.cussptid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询客户资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT Top 1 getdate() INTO :server_dt FROM u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF it_mxbt = UpperBound(arg_s_bd.arg_s_mx) IF it_mxbt <= 0 THEN rslt = 0 arg_msg = "没有正确明细内容" GOTO ext END IF SELECT moneyid INTO :ll_moneyid_native FROM cw_currency Where native = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询本位币资料失败,请检查币种资料' rslt = 0 GOTO ext END IF //检查明细 FOR ll_i = 1 TO it_mxbt IF IsNull(arg_s_bd.arg_s_mx[ll_i].dscrp) THEN arg_s_bd.arg_s_mx[ll_i].dscrp = '' IF IsNull(arg_s_bd.arg_s_mx[ll_i].damt) THEN arg_s_bd.arg_s_mx[ll_i].damt = 0 IF arg_s_bd.arg_s_mx[ll_i].realmoneyid = 0 THEN rslt = 0 arg_msg = '明细行:'+String(ll_i)+',请选择应收帐币种' GOTO ext END IF IF arg_s_bd.arg_s_mx[ll_i].realrate = 0 THEN rslt = 0 arg_msg = '明细行:'+String(ll_i)+',请选择应收帐币种汇率' GOTO ext END IF IF arg_s_bd.arg_s_mx[ll_i].accountsid = 0 THEN rslt = 0 arg_msg = '明细行:'+String(ll_i)+',请选择出纳帐号' GOTO ext END IF SELECT moneyid INTO :ll_moneyid_account FROM u_accounts Where accountsid = :arg_s_bd.arg_s_mx[ll_i].accountsid; IF sqlca.SQLCode <> 0 THEN arg_msg = '明细行:'+String(ll_i)+',查询帐号币种失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF IsNull(ll_moneyid_account) THEN ll_moneyid_account = 0 IF ll_moneyid_account = 0 THEN arg_msg = '明细行:'+String(ll_i)+',帐号币种未指定,请检查' rslt = 0 GOTO ext END IF IF arg_s_bd.arg_s_mx[ll_i].realmoneyid <> ll_moneyid_account AND arg_s_bd.arg_s_mx[ll_i].realrate = 1 THEN arg_msg = '明细行:'+String(ll_i)+',收款币种与帐号币种不相同,汇率不能设为1' rslt = 0 GOTO ext END IF IF arg_s_bd.arg_s_mx[ll_i].realmoneyid = ll_moneyid_account AND arg_s_bd.arg_s_mx[ll_i].realrate <> 1 THEN arg_msg = '明细行:'+String(ll_i)+',收款币种与帐号币种相同,汇率要设为1' rslt = 0 GOTO ext END IF IF ll_moneyid_account = ll_moneyid_native THEN IF arg_s_bd.arg_s_mx[ll_i].realmoneyid = ll_moneyid_native THEN arg_s_bd.arg_s_mx[ll_i].realamt = Round(arg_s_bd.arg_s_mx[ll_i].takeamt * arg_s_bd.arg_s_mx[ll_i].realrate,2) ELSE arg_s_bd.arg_s_mx[ll_i].realamt = Round(arg_s_bd.arg_s_mx[ll_i].takeamt / arg_s_bd.arg_s_mx[ll_i].realrate,2) END IF ELSE arg_s_bd.arg_s_mx[ll_i].realamt = Round(arg_s_bd.arg_s_mx[ll_i].takeamt * arg_s_bd.arg_s_mx[ll_i].realrate,2) END IF IF arg_s_bd.arg_s_mx[ll_i].itemid = 0 THEN rslt = 0 arg_msg = '请选择收支项目' GOTO ext END IF SELECT cusid INTO :ll_cusid_mx FROM u_saletask WHERE taskid = :arg_s_bd.arg_s_mx[ll_i].relid AND scid = :arg_s_bd.scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败>>相关的销售订单的客户ID"+"~n"+sqlca.SQLErrText GOTO ext END IF IF ll_cusid_mx <> arg_s_bd.cussptid THEN rslt = 0 arg_msg = "单据的客户ID与单据明细销售订单的客户ID不相符,请检查,在第["+String(arg_s_bd.arg_s_mx[ll_i].printid)+"]行" GOTO ext END IF IF arg_s_bd.ifauto = 0 AND arg_s_bd.arg_s_mx[ll_i].billtype = 2 THEN rslt = 0 arg_msg = "手动订单收款单类型不能选择自动对帐,在第["+String(arg_s_bd.arg_s_mx[ll_i].printid)+"]行" GOTO ext END IF NEXT IF arg_s_bd.billid = 0 THEN ll_billid = f_sys_scidentity(0,"u_taskdamt","billid",arg_msg,TRUE,id_sqlca) IF ll_billid <= 0 THEN rslt = 0 GOTO ext END IF IF f_get_sccode(arg_s_bd.scid,sqlca,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ls_billcode = getid(arg_s_bd.scid,ls_sccode + 'SD',Date(server_dt),FALSE,sqlca) IF ls_billcode = "err" THEN rslt = 0 arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_taskdamt ( scid, billid, billcode, cussptid, part, billdate, assign_emp, dscrp, opdate, opemp , ifauto, salebillid) VALUES ( :arg_s_bd.scid, :ll_billid, :ls_billcode, :arg_s_bd.cussptid, :arg_s_bd.part, :arg_s_bd.billdate, :arg_s_bd.assign_emp, :arg_s_bd.dscrp, :server_dt, :publ_operator, :arg_s_bd.ifauto, :arg_s_bd.salebillid ) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt INSERT INTO u_taskdamt_mx (scid, billid, printid, relid, reltaskcode, damt, dscrp, accountsid, billamt, itemid, takeamt, reltakeamt, reldamt, realmoneyid, realrate, realamt, billtype, banktypeid) VALUES ( :arg_s_bd.scid, :ll_billid, :arg_s_bd.arg_s_mx[i].printid, :arg_s_bd.arg_s_mx[i].RELid, :arg_s_bd.arg_s_mx[i].reltaskcode, :arg_s_bd.arg_s_mx[i].DAMT, :arg_s_bd.arg_s_mx[i].dscrp, :arg_s_bd.arg_s_mx[i].accountsid, :arg_s_bd.arg_s_mx[i].billamt, :arg_s_bd.arg_s_mx[i].itemid, :arg_s_bd.arg_s_mx[i].takeamt, :arg_s_bd.arg_s_mx[i].reltakeamt, :arg_s_bd.arg_s_mx[i].reldamt, :arg_s_bd.arg_s_mx[i].realmoneyid, :arg_s_bd.arg_s_mx[i].realrate, :arg_s_bd.arg_s_mx[i].realamt, :arg_s_bd.arg_s_mx[i].billtype, :arg_s_bd.arg_s_mx[i].banktypeid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT uo_billid = ll_billid ELSE UPDATE u_taskdamt SET cussptid = :arg_s_bd.CUSSPTID, part = :arg_s_bd.PART, billdate = :arg_s_bd.BILLDATE, assign_emp = :arg_s_bd.ASSIGN_EMP, dscrp = :arg_s_bd.DSCRP, moddate = getdate(), modemp = :publ_operator WHERE billid = :arg_s_bd.billid AND scid = :arg_s_bd.scid AND flag = 0; IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_TASKDAMT_mx WHERE billid = :arg_s_bd.billid AND scid = :arg_s_bd.scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF FOR i = 1 TO it_mxbt INSERT INTO u_taskdamt_mx (scid, billid, printid, relid, reltaskcode, damt, dscrp, accountsid, billamt, itemid, takeamt, reltakeamt, reldamt, realmoneyid, realrate, realamt, billtype, banktypeid) VALUES ( :arg_s_bd.scid, :arg_s_bd.billid, :arg_s_bd.arg_s_mx[i].printid, :arg_s_bd.arg_s_mx[i].RELid, :arg_s_bd.arg_s_mx[i].reltaskcode, :arg_s_bd.arg_s_mx[i].DAMT, :arg_s_bd.arg_s_mx[i].dscrp, :arg_s_bd.arg_s_mx[i].accountsid, :arg_s_bd.arg_s_mx[i].billamt, :arg_s_bd.arg_s_mx[i].itemid, :arg_s_bd.arg_s_mx[i].takeamt, :arg_s_bd.arg_s_mx[i].reltakeamt, :arg_s_bd.arg_s_mx[i].reldamt, :arg_s_bd.arg_s_mx[i].realmoneyid, :arg_s_bd.arg_s_mx[i].realrate, :arg_s_bd.arg_s_mx[i].realamt, :arg_s_bd.arg_s_mx[i].billtype, :arg_s_bd.arg_s_mx[i].banktypeid); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT // uo_billid = arg_s_bd.billid END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF arg_newdescppart = Trim(arg_newdescppart) IF arg_newdescppart = '' THEN rslt = 0 arg_msg = "要添加内容为空,操作取消" GOTO ext END IF Int li_flag SELECT flag INTO :li_flag FROM u_taskdamt Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询单据审核标记失败' rslt = 0 GOTO ext END IF IF li_flag = 0 THEN rslt = 0 arg_msg = '单据未审核,请按修改单据修改备注' GOTO ext END IF UPDATE u_taskdamt SET dscrp = dscrp+' '+:arg_newdescppart Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致添加备注操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function public function integer audit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF Int li_auditflag,li_damtflag,li_billtype,li_ifauto, li_secflag Decimal ld_takeamt Long ll_scid SELECT flag,scid,ifauto,secflag INTO :li_auditflag,:ll_scid,:li_ifauto,:li_secflag FROM u_taskdamt Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询单据审核标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_auditflag = 1 THEN rslt = 0 arg_msg = '单据已经最终审核,不可以再审!' GOTO ext END IF //s_taskdamtmx arg_bd_mx[] //Long ll_i // //IF getinfo(arg_billid,arg_bd_mx[],arg_msg) = 0 THEN // rslt = 0 // GOTO ext //END IF // //IF UpperBound(arg_bd_mx) <= 0 THEN // rslt = 0 // arg_msg = "明细错误,操作取消" // GOTO ext //END IF // //FOR ll_i = 1 TO UpperBound(arg_bd_mx) - 1 // //// IF sys_option_m_msttake = 1 THEN //使用多币种 //// ld_takeamt = arg_bd_mx[ll_i].takeamt //// ELSE // 系统不使用多币种,转换为人民币 //// ld_takeamt = arg_bd_mx[ll_i].realamt //// END IF // // ld_takeamt = arg_bd_mx[ll_i].realamt // // IF arg_bd_mx[ll_i].billtype = 0 THEN //收订金 // UPDATE u_SaleTask // SET takedamt = takedamt + :ld_takeamt // WHERE taskid = :arg_bd_mx[ll_i].relid // AND scid = :ll_scid; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "因网络或其它原因导致更新销售订单操作失败"+"~n"+sqlca.SQLErrText // GOTO ext // END IF // ELSE //单据余款 // UPDATE u_SaleTask // SET takeamt = takeamt + :ld_takeamt // WHERE taskid = :arg_bd_mx[ll_i].relid // AND scid = :ll_scid; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "因网络或其它原因导致更新销售订单操作失败"+"~n"+sqlca.SQLErrText // GOTO ext // END IF // END IF // // if li_ifauto = 0 and arg_bd_mx[ll_i].billtype <> 2 then // IF p_update_bmsttake(ll_scid,arg_billid,arg_bd_mx[ll_i].printid,arg_msg,FALSE ) = 0 THEN // rslt = 0 // GOTO ext // END IF // end if //NEXT //更新审核标记 UPDATE u_taskdamt SET permit_emp = :publ_operator, permit_date = getdate(), flag = 1 WHERE billid = :arg_billid AND flag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText 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 cancel (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF Int li_auditflag SELECT flag INTO :li_auditflag FROM u_taskdamt Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_auditflag = 1 THEN rslt = 0 arg_msg = '单据已经最终审核,不可以删除' GOTO ext END IF DELETE FROM u_taskdamt_mx Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF DELETE FROM u_taskdamt Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText 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 getinfo (long arg_billid, ref s_taskdamtmx arg_ref_s_mx[], ref string arg_msg);Int rslt = 1 Long i = 1,no_mxcheck = 0 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF //用游标读取明细 DECLARE cur_bdmx CURSOR FOR SELECT scid, billid, printid, relid, reltaskcode, damt, dscrp, accountsid, billamt, itemid, takeamt, reltakeamt, reldamt, realmoneyid, realrate, realamt, banktypeid, paytaskid, billtype FROM u_taskdamt_mx WHERE billid = :arg_billid Order By printid; OPEN cur_bdmx; FETCH cur_bdmx INTO :arg_ref_s_mx[i].scid, :arg_ref_s_mx[i].billID, :arg_ref_s_mx[i].printid, :arg_ref_s_mx[i].relid, :arg_ref_s_mx[i].reltaskcode, :arg_ref_s_mx[i].damt, :arg_ref_s_mx[i].dscrp, :arg_ref_s_mx[i].accountsid, :arg_ref_s_mx[i].billamt, :arg_ref_s_mx[i].itemid, :arg_ref_s_mx[i].takeamt, :arg_ref_s_mx[i].reltakeamt, :arg_ref_s_mx[i].reldamt, :arg_ref_s_mx[i].realmoneyid, :arg_ref_s_mx[i].realrate, :arg_ref_s_mx[i].realamt, :arg_ref_s_mx[i].banktypeid, :arg_ref_s_mx[i].paytaskid, :arg_ref_s_mx[i].billtype; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_bdmx INTO :arg_ref_s_mx[i].scid, :arg_ref_s_mx[i].billID, :arg_ref_s_mx[i].printid, :arg_ref_s_mx[i].relid, :arg_ref_s_mx[i].reltaskcode, :arg_ref_s_mx[i].damt, :arg_ref_s_mx[i].dscrp, :arg_ref_s_mx[i].accountsid, :arg_ref_s_mx[i].billamt, :arg_ref_s_mx[i].itemid, :arg_ref_s_mx[i].takeamt, :arg_ref_s_mx[i].reltakeamt, :arg_ref_s_mx[i].reldamt, :arg_ref_s_mx[i].realmoneyid, :arg_ref_s_mx[i].realrate, :arg_ref_s_mx[i].realamt, :arg_ref_s_mx[i].banktypeid, :arg_ref_s_mx[i].paytaskid, :arg_ref_s_mx[i].billtype; LOOP CLOSE cur_bdmx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_taskdamt_mx Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,单据明细数量" GOTO ext END IF IF i <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,单据明细" GOTO ext END IF ext: RETURN rslt end function public function integer p_update_bmsttake (long arg_scid, long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0,i uo_musttake uo_take uo_take = Create uo_musttake uo_iteminput uo_item uo_item = Create uo_iteminput String ls_mtrlname String ls_about Long ref_dateint IF uo_option_msttake_takeamt_secaudit = -1000 THEN arg_msg = '选项:[139]客户收款单使用二级审核,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF arg_billid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF SELECT count(*) INTO :cnt FROM u_user Where username = :publ_operator Using sqlca ; 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_cusid DateTime ld_indate String ls_assign_emp,ls_billcode,ls_part Decimal ld_takeamt String ls_taskcode Long ll_saletaskid,ll_banktypeid,ll_moneyid,ll_accountsid,ll_itemid Dec ll_realamt Long ll_billtype Long ll_moneyid_account decimal ld_mrate SELECT u_taskdamt.cussptid, u_taskdamt.billdate, u_taskdamt.assign_emp, u_taskdamt.billcode, u_taskdamt.part, u_taskdamt_mx.billtype, u_taskdamt_mx.takeamt, u_taskdamt_mx.relTaskCode, u_taskdamt_mx.banktypeid, u_taskdamt_mx.relid, u_taskdamt_mx.realmoneyid, u_taskdamt_mx.accountsid, u_taskdamt_mx.itemid, u_taskdamt_mx.realamt, u_taskdamt_mx.realrate INTO :ll_cusid, :ld_indate, :ls_assign_emp, :ls_billcode, :ls_part, :ll_billtype, :ld_takeamt, :ls_taskcode, :ll_banktypeid, :ll_saletaskid, :ll_moneyid, :ll_accountsid, :ll_itemid, :ll_realamt, :ld_mrate FROM u_taskdamt INNER JOIN u_taskdamt_mx ON u_taskdamt.billid = u_taskdamt_mx.billid WHERE u_taskdamt.billid = :arg_billid And u_taskdamt_mx.printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,订金单相关信息!" +sqlca.SQLErrText GOTO ext END IF SELECT moneyid INTO :ll_moneyid_account FROM u_accounts Where accountsid = :ll_accountsid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询帐号币种资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF IsNull(ll_moneyid_account) THEN ll_moneyid_account = 0 IF ll_moneyid_account = 0 THEN arg_msg = '帐号币种未指定,请检查' rslt = 0 GOTO ext END IF IF ld_takeamt <> 0 THEN IF ll_billtype = 0 THEN ls_about = ls_taskcode + "订金已收款" ELSE ls_about = ls_taskcode + "余额已收款" END IF // IF sys_option_m_msttake = 1 THEN //使用多币种 // ld_takeamt = ld_takeamt_bill // ELSE // 系统不使用多币种,转换为人民币 // ld_takeamt = ll_realamt // END IF // // ld_msttakeamt = ld_takeamt_bill // ld_takeamt = ld_msttakeamt s_bmsttake s_take s_take.scid = arg_scid s_take.cusID = ll_cusid s_take.takedate = ld_indate s_take.inrep = ls_assign_emp s_take.oriamt = 0 - ll_realamt s_take.msttakeamt = 0 s_take.takeamt = ll_realamt s_take.takeamt_cn = ld_takeamt s_take.fpamt = ll_realamt s_take.dscrp = ls_about s_take.billcode = ls_billcode s_take.relcode = ls_part s_take.banktypeid = ll_banktypeid s_take.opemp = publ_operator s_take.buildtype = 1 s_take.outwareid = ll_saletaskid s_take.accountsid = ll_accountsid s_take.itemid = ll_itemid s_take.moneyid = ll_moneyid s_take.moneyid_cn = ll_moneyid_account s_take.mrate = ld_mrate s_take.taskdscrp = '订单'+ls_taskcode+'金额:'+String(ld_takeamt,'#,##0.00') IF uo_take.add_takerec(s_take,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF UPDATE u_taskdamt_mx SET paytaskid = :uo_take.ref_takeid WHERE u_taskdamt_mx.billid = :arg_billid And u_taskdamt_mx.printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新相关应收帐id失败' rslt = 0 GOTO ext END IF INSERT INTO u_bmsttake_fpmx (takeid, printid, relid, relbillcode, fpamt, fpdate, fpemp, scid) Values (:uo_take.ref_takeid, 1, :ll_saletaskid, :ls_taskcode, :ll_realamt, getdate(), :publ_operator, :arg_scid); IF sqlca.SQLCode <> 0 THEN arg_msg = '插入应收帐分配明细失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_option_msttake_takeamt_secaudit = 1 THEN Int li_item_dfttype,li_itemflag SELECT dfttype,itemflag INTO :li_item_dfttype,:li_itemflag FROM u_itemdef Where u_itemdef.itemid = :ll_itemid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询当前收支项目核算类型和核算方向失败!' rslt = 0 GOTO ext END IF s_iteminput s_input s_input.itemid = ll_itemid s_input.dateint = 0 s_input.outdate = ld_indate s_input.dscrp = ls_about //'订单号:'+ls_taskcode+','+ls_dscrp // CHOOSE CASE li_item_dfttype // CASE 1,3,4 // s_input.outamt = ld_takeamt * li_itemflag // CASE ELSE // s_input.outamt = ld_takeamt // END CHOOSE s_input.inamt = ld_takeamt s_input.outamt = 0 s_input.accountsid = ll_accountsid s_input.banktypeid = ll_banktypeid s_input.billcode = ls_billcode s_input.relcode = ls_part s_input.relrep = ls_assign_emp s_input.opemp = publ_operator s_input.buildtype = 1 IF uo_item.add_iteminput(s_input,arg_msg,False) = 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 UPDATE u_taskdamt_mx SET reldateint = :ref_dateint WHERE u_taskdamt_mx.billid = :arg_billid And u_taskdamt_mx.printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新相关出纳帐id失败' rslt = 0 GOTO ext END IF END IF END IF ext: IF rslt = 0 THEN ROLLBACK Using sqlca; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using sqlca; END IF Destroy uo_take Destroy uo_item RETURN rslt end function public function integer p_cancel_bmsttake (long arg_scid, long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,cnt = 0,i uo_musttake uo_take uo_take = Create uo_musttake uo_iteminput uo_item uo_item = Create uo_iteminput IF uo_option_msttake_takeamt_secaudit = -1000 THEN arg_msg = '选项:[139]客户收款单使用二级审核,读取初始默认值失败,操作取消!' rslt = 0 GOTO ext END IF IF arg_billid = 0 THEN rslt = 0 arg_msg = "没有撤审对象" GOTO ext END IF Decimal ld_takeamt Long ll_cusid,ll_paytaskid Long ll_scid,ll_reldateint,ll_itemid SELECT u_taskdamt_mx.takeamt, u_taskdamt.cussptid, u_taskdamt_mx.paytaskid, u_taskdamt.scid, u_taskdamt_mx.reldateint, u_taskdamt_mx.itemid INTO :ld_takeamt, :ll_cusid, :ll_paytaskid, :ll_scid, :ll_reldateint, :ll_itemid FROM u_taskdamt INNER JOIN u_taskdamt_mx ON u_taskdamt.billid = u_taskdamt_mx.billid INNER JOIN u_saleTask ON u_taskdamt_mx.relid = u_saleTask.TaskID WHERE u_taskdamt.billid = :arg_billid And u_taskdamt_mx.printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,订单相关信息!" +sqlca.SQLErrText GOTO ext END IF IF ld_takeamt <> 0 THEN IF uo_take.del_takerec(ll_scid,1,ll_paytaskid,ll_cusid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF DELETE FROM u_bmsttake_fpmx Where takeid = :ll_paytaskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除应收帐相关分配明细失败!" +sqlca.SQLErrText GOTO ext END IF END IF UPDATE u_taskdamt_mx SET paytaskid = 0 WHERE u_taskdamt_mx.billid = :arg_billid And u_taskdamt_mx.printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新相关应收帐id失败' rslt = 0 GOTO ext END IF IF uo_option_msttake_takeamt_secaudit = 1 THEN IF ll_itemid > 0 And ll_reldateint > 0 THEN IF uo_item.del_iteminput(ll_itemid,ll_reldateint,1,arg_msg,False) = 0 THEN arg_msg = '删除收支明细帐失败!~n' + arg_msg rslt = 0 GOTO ext END IF END IF UPDATE u_taskdamt_mx SET reldateint = 0 WHERE u_taskdamt_mx.billid = :arg_billid And u_taskdamt_mx.printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新相关出纳帐id失败' rslt = 0 GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK Using sqlca; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using sqlca; END IF Destroy uo_take Destroy uo_item RETURN rslt end function public function integer caudit (integer arg_del, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DateTime null_dt SetNull(null_dt) IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF Int li_auditflag,li_billtype,li_damtflag,li_ifauto, li_secflag Decimal ld_takeamt Long ll_scid SELECT flag,scid,ifauto,secflag INTO :li_auditflag,:ll_scid,:li_ifauto,:li_secflag FROM u_taskdamt Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询单据审核标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_auditflag = 0 THEN rslt = 0 arg_msg = "单据还未审核,不可以撤审" GOTO ext END IF IF li_secflag = 1 THEN rslt = 0 arg_msg = "单据已经二审,不可以撤审" GOTO ext END IF IF arg_del = 0 THEN IF li_ifauto = 1 THEN rslt = 0 arg_msg = "单据自动生成,不可手动撤审" GOTO ext END IF END IF //s_taskdamtmx arg_bd_mx[] //Long ll_i // //IF getinfo(arg_billid,arg_bd_mx[],arg_msg) = 0 THEN // rslt = 0 // GOTO ext //END IF // //IF UpperBound(arg_bd_mx) <= 0 THEN // rslt = 0 // arg_msg = "明细错误,操作取消" // GOTO ext //END IF // //FOR ll_i = 1 TO UpperBound(arg_bd_mx) - 1 // //// IF sys_option_m_msttake = 1 THEN //使用多币种 //// ld_takeamt = arg_bd_mx[ll_i].takeamt //// ELSE // 系统不使用多币种,转换为人民币 //// ld_takeamt = arg_bd_mx[ll_i].realamt //// END IF // // ld_takeamt = arg_bd_mx[ll_i].realamt // // IF arg_bd_mx[ll_i].billtype = 0 THEN //收订金 // UPDATE u_SaleTask // SET takedamt = takedamt - :ld_takeamt // WHERE taskid = :arg_bd_mx[ll_i].relid // AND scid = :ll_scid; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "因网络或其它原因导致更新销售订单操作失败"+"~n"+sqlca.SQLErrText // GOTO ext // END IF // ELSE //单据余款 // UPDATE u_SaleTask // SET takeamt = takeamt - :ld_takeamt // WHERE taskid = :arg_bd_mx[ll_i].relid // AND scid = :ll_scid; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "因网络或其它原因导致更新销售订单操作失败"+"~n"+sqlca.SQLErrText // GOTO ext // END IF // END IF // // if li_ifauto = 0 and arg_bd_mx[ll_i].billtype <> 2 then // IF p_cancel_bmsttake(ll_scid,arg_billid,arg_bd_mx[ll_i].printid,arg_msg,FALSE ) = 0 THEN // rslt = 0 // GOTO ext // END IF // end if //NEXT //更新审核标记 UPDATE u_taskdamt SET permit_emp = '', permit_date = :null_dt, flag = 0 WHERE billid = :arg_billid And flag = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText 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 secauditing (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF Int li_auditflag,li_damtflag,li_billtype,li_ifauto,li_secflag Decimal ld_takeamt Long ll_scid SELECT flag,scid,ifauto, secflag INTO :li_auditflag,:ll_scid,:li_ifauto, :li_secflag FROM u_taskdamt Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询单据审核标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_auditflag = 0 THEN rslt = 0 arg_msg = '单据未一审,不可以二审!' GOTO ext END IF IF li_secflag = 1 THEN rslt = 0 arg_msg = '单据已经二审,不可以再审!' GOTO ext END IF s_taskdamtmx arg_bd_mx[] Long ll_i IF getinfo(arg_billid,arg_bd_mx[],arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF UpperBound(arg_bd_mx) <= 0 THEN rslt = 0 arg_msg = "明细错误,操作取消" GOTO ext END IF FOR ll_i = 1 To UpperBound(arg_bd_mx) - 1 // IF sys_option_m_msttake = 1 THEN //使用多币种 // ld_takeamt = arg_bd_mx[ll_i].takeamt // ELSE // 系统不使用多币种,转换为人民币 // ld_takeamt = arg_bd_mx[ll_i].realamt // END IF ld_takeamt = arg_bd_mx[ll_i].realamt IF arg_bd_mx[ll_i].billtype = 0 THEN //收订金 UPDATE u_SaleTask SET takedamt = takedamt + :ld_takeamt WHERE taskid = :arg_bd_mx[ll_i].relid And scid = :ll_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新销售订单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ELSE //单据余款 UPDATE u_SaleTask SET takeamt = takeamt + :ld_takeamt WHERE taskid = :arg_bd_mx[ll_i].relid And scid = :ll_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新销售订单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF IF li_ifauto = 0 And arg_bd_mx[ll_i].billtype <> 2 THEN IF p_update_bmsttake(ll_scid,arg_billid,arg_bd_mx[ll_i].printid,arg_msg,False ) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT //更新审核标记 UPDATE u_taskdamt SET secauditemp = :publ_operator, secauditdate = getdate(), secflag = 1 WHERE billid = :arg_billid AND secflag = 0 And flag = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "单据审核操作失败"+"~n"+sqlca.SQLErrText 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 c_secauditing (integer arg_del, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 DateTime null_dt SetNull(null_dt) IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF Int li_auditflag,li_billtype,li_damtflag,li_ifauto, li_secflag Decimal ld_takeamt Long ll_scid SELECT flag,scid,ifauto,secflag INTO :li_auditflag,:ll_scid,:li_ifauto,:li_secflag FROM u_taskdamt Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询单据审核标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_secflag = 0 THEN rslt = 0 arg_msg = "单据还未二审,不可以撤审" GOTO ext END IF IF arg_del = 0 THEN IF li_ifauto = 1 THEN rslt = 0 arg_msg = "单据自动生成,不可手动撤审" GOTO ext END IF END IF s_taskdamtmx arg_bd_mx[] Long ll_i IF getinfo(arg_billid,arg_bd_mx[],arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF UpperBound(arg_bd_mx) <= 0 THEN rslt = 0 arg_msg = "明细错误,操作取消" GOTO ext END IF FOR ll_i = 1 To UpperBound(arg_bd_mx) - 1 // IF sys_option_m_msttake = 1 THEN //使用多币种 // ld_takeamt = arg_bd_mx[ll_i].takeamt // ELSE // 系统不使用多币种,转换为人民币 // ld_takeamt = arg_bd_mx[ll_i].realamt // END IF ld_takeamt = arg_bd_mx[ll_i].realamt IF arg_bd_mx[ll_i].billtype = 0 THEN //收订金 UPDATE u_SaleTask SET takedamt = takedamt - :ld_takeamt WHERE taskid = :arg_bd_mx[ll_i].relid And scid = :ll_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新销售订单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ELSE //单据余款 UPDATE u_SaleTask SET takeamt = takeamt - :ld_takeamt WHERE taskid = :arg_bd_mx[ll_i].relid And scid = :ll_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新销售订单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF IF li_ifauto = 0 And arg_bd_mx[ll_i].billtype <> 2 THEN IF p_cancel_bmsttake(ll_scid,arg_billid,arg_bd_mx[ll_i].printid,arg_msg,False ) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT //更新审核标记 UPDATE u_taskdamt SET secauditemp = '', secauditdate = :null_dt, secflag = 0 WHERE billid = :arg_billid And secflag = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "单据撤二审操作失败"+"~n"+sqlca.SQLErrText 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 uof_add_relcode (long arg_billid, string arg_relcode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误单据唯一码' GOTO ext END IF Int li_flag SELECT flag INTO :li_flag FROM u_taskdamt Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询单据审核标记失败' rslt = 0 GOTO ext END IF IF li_flag = 0 THEN rslt = 0 arg_msg = '单据未审核,请按修改单据修改相关号' GOTO ext END IF UPDATE u_taskdamt SET part = :arg_relcode Where billid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "因网络或其它原因导致添加相关号操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT; END IF RETURN rslt end function on uo_taskdamt.create call super::create TriggerEvent( this, "constructor" ) end on on uo_taskdamt.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;String arg_msg String str_optionvalue str_optionvalue = '' f_get_sys_option_value('139',str_optionvalue,arg_msg) uo_option_msttake_takeamt_secaudit = Long(str_optionvalue) end event global type uo_incase from nonvisualobject end type