$PBExportHeader$uo_rapmoney.sru forward global type uo_rapmoney from nonvisualobject end type end forward global type uo_rapmoney from nonvisualobject end type global uo_rapmoney uo_rapmoney type variables transaction commit_transaction //数据commit事务 long ref_rapid end variables forward prototypes public function integer del_raprec (long arg_rapid, long arg_accountsid, integer arg_ifauto, ref string arg_msg, boolean arg_ifcommit) protected function integer f_check_ifnewest (long arg_accounstid, datetime arg_takedate, ref long arg_ref_minprintid, ref long arg_ref_maxprintid, ref string arg_msg) public function integer add_raprec (long arg_scid, long arg_accountsid, datetime arg_takedate, string arg_inrep, string arg_dscrp, decimal arg_msttakeamt, decimal arg_takeamt, string arg_billcode, integer arg_buildtype, integer arg_dcflag, long arg_relid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit, long arg_banktypeid, string arg_relcode) public function integer add_del (long arg_accountsid, datetime arg_takedate, string arg_inrep, string arg_dscrp, decimal arg_msttakeamt, decimal arg_takeamt, string arg_billcode, integer arg_buildtype, integer arg_dcflag, long arg_relid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit, long arg_banktypeid, long arg_acntid, string arg_relcode) public function integer mod_raprec (long arg_scid, long arg_accountsid, long arg_rapid, datetime arg_takedate, string arg_inrep, decimal arg_msttakeamt, decimal arg_takeamt, string arg_dscrp, string arg_billcode, integer arg_buildtype, string arg_opemp, ref string arg_msg, boolean arg_ifcommit, long arg_ifauto, long arg_banktypeid, string arg_relcode) public function integer add_raprec (s_rap_money arg_s_mx, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer del_raprec (long arg_rapid, long arg_accountsid, integer arg_ifauto, ref string arg_msg, boolean arg_ifcommit); Int rslt = 1 long cnt = 0,buildtype Decimal sum_balcamt = 0.00 DateTime ld_ctdatetime,ld_takedate Long ll_printid SELECT buildtype, takedate, printid INTO :buildtype, :ld_takedate, :ll_printid FROM u_rap_money Where u_rap_money.rapmoneyid = :arg_rapid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "查询出纳帐明细建立类型失败,请重试!"+'~n'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF arg_ifauto = 0 THEN IF buildtype = 1 THEN arg_msg = '系统自动建立的出纳帐明细不可以删除' rslt = 0 GOTO ext END IF END IF SELECT count(*) INTO :cnt FROM u_accounts Where u_accounts.accountsid = :arg_accountsid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询操作失败,出纳帐户唯一码' rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '错误出纳帐户唯一码' rslt = 0 GOTO ext END IF Int rst rst = f_last_ctdate(ld_ctdatetime,arg_msg) IF rst = 0 THEN rslt = 0 GOTO ext ELSEIF rst = 1 THEN IF ld_takedate <= ld_ctdatetime THEN arg_msg = '该数据在截数日期:'+String(ld_ctdatetime,'yyyy-mm-dd hh:mm')+'前,不能删除' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_rap_money Where accountid = :arg_accountsid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询帐号出纳帐数目失败' + commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 1 THEN arg_msg = '最后结余记录,不能删除' rslt = 0 GOTO ext END IF END IF //更新中间明细 SELECT msttakeamt - takeamt INTO :sum_balcamt FROM u_rap_money Where u_rap_money.rapmoneyid = :arg_rapid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "查询总应付差额失败!"+'~n'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_rap_money SET balcamt = balcamt - :sum_balcamt WHERE u_rap_money.printid > :ll_printid AND u_rap_money.accountid = :arg_accountsid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "更新结余金额失败!"+'~n'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF //////////////////////////////////////// //出纳帐删除日志 Decimal ld_msttakeamt Decimal ld_takeamt long ll_accountid string ls_dscrp Long ls_id String ls_code SELECT msttakeamt, takeamt, accountid, dscrp INTO :ld_msttakeamt, :ld_takeamt, :ll_accountid, :ls_dscrp FROM u_rap_money Where u_rap_money.rapmoneyid = :arg_rapid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "(1)查询收入,支出金额失败!"+'~n'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ls_id = arg_rapid ls_code = '收入金额' + String(ld_msttakeamt,'##,##0.00#####') + ',支出金额:' + String(ld_takeamt,'##,##0.00#####') //+ ',备注' + ls_dscrp //这里的ls_dscrp 有可能超长导致commit失败 if f_setsysoplog('出纳帐','删除,id:'+String(ls_id)+',账号id:' + string(ll_accountid) +'内容:'+ls_code,arg_msg,false) = 0 then rslt = 0 goto ext end if ////////////////// DELETE FROM u_rap_money Where u_rap_money.rapmoneyid = :arg_rapid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "删除出纳帐明细记录操作失败,请重试!"+'~n'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function protected function integer f_check_ifnewest (long arg_accounstid, datetime arg_takedate, ref long arg_ref_minprintid, ref long arg_ref_maxprintid, ref string arg_msg);Int rslt = 1 Long cnt = 0 SELECT isnull(max(printid),0) INTO :arg_ref_maxprintid FROM u_rap_money Where accountid = :arg_accounstid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询帐号最大排序号失败' GOTO ext END IF SELECT count(*),isnull(min(printid),0) INTO :cnt,:arg_ref_minprintid FROM u_rap_money WHERE year(takedate) * 10000 + month(takedate) * 100 + day(takedate) > year(:arg_takedate) * 10000 + month(:arg_takedate) * 100 + day(:arg_takedate) AND accountid = :arg_accounstid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询日期:'+String(arg_takedate,'yyyy-mm-dd')+'以后是否已录入数据失败' GOTO ext END IF IF cnt > 0 THEN rslt = 2 IF cnt = 0 THEN rslt = 1 ext: RETURN rslt end function public function integer add_raprec (long arg_scid, long arg_accountsid, datetime arg_takedate, string arg_inrep, string arg_dscrp, decimal arg_msttakeamt, decimal arg_takeamt, string arg_billcode, integer arg_buildtype, integer arg_dcflag, long arg_relid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit, long arg_banktypeid, string arg_relcode);s_rap_money s_rap s_rap.accountsid = arg_accountsid s_rap.takedate = arg_takedate s_rap.inrep = arg_inrep s_rap.dscrp = arg_dscrp s_rap.msttakeamt = arg_msttakeamt s_rap.takeamt = arg_takeamt s_rap.billcode = arg_billcode s_rap.relcode = arg_relcode s_rap.buildtype = arg_buildtype s_rap.dcflag = arg_dcflag s_rap.relid = arg_relid s_rap.opemp = arg_opemp s_rap.banktypeid = arg_banktypeid s_rap.scid = arg_scid return add_raprec(s_rap,arg_msg,arg_ifcommit) //Int rslt = 1 //long cnt = 0 //DateTime server_datetime //Long ls_rapid // //IF IsNull(arg_dscrp) THEN arg_dscrp = '' //IF IsNull(arg_billcode) THEN arg_billcode = '' //IF IsNull(arg_opemp) THEN arg_opemp = '' //IF IsNull(arg_inrep) THEN arg_inrep = '' //IF IsNull(arg_banktypeid) THEN arg_banktypeid = 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_rap_money; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "查询操作失败,出纳帐数量 " // GOTO ext // END IF // // IF ll_bill_count > 200 THEN // rslt = 0 // arg_msg = "未注册版本,出纳帐只能保存200条记录!" // GOTO ext // END IF //END IF // // // //SELECT Top 1 getdate() INTO :server_datetime FROM u_user USING commit_transaction; //IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "查询操作失败,系统时间" // GOTO ext //END IF // //IF Not (arg_buildtype = 1 OR arg_buildtype = 0 ) THEN // arg_msg = '错误建立类型,必须为:0 - 手工录入;1 - 记帐' // rslt = 0 // GOTO ext //END IF // //IF Date(arg_takedate) <= 1990-01-01 THEN // arg_msg = '错误发生日期' // rslt = 0 // GOTO ext //END IF // //cnt = 0 //IF Trim(arg_inrep) = '' THEN // arg_msg = '没有经手人' // rslt = 0 // GOTO ext //END IF // //IF arg_msttakeamt = 0 AND arg_takeamt = 0 THEN // arg_msg = "收入金额与与支金额不能同时为0!" // rslt = 0 // GOTO ext //END IF // //cnt = 0 //SELECT count(*) // INTO :cnt // FROM u_accounts // Where u_accounts.accountsid = :arg_accountsid USING commit_transaction ; //IF commit_transaction.SQLCode <> 0 THEN // arg_msg = '查询操作失败,帐号唯一码' // rslt = 0 // GOTO ext //END IF // //IF cnt = 0 THEN // arg_msg = '错误帐号唯一码' // rslt = 0 // GOTO ext //END IF // //cnt = 0 //SELECT count(*) INTO :cnt // FROM u_user // Where username = :arg_opemp USING commit_transaction; //IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "查询操作失败,操作员!" // GOTO ext //END IF //IF cnt = 0 THEN // rslt = 0 // arg_msg = "操作员姓名未登记或已取消!" // GOTO ext //END IF // //cnt = 0 //SELECT count(*) INTO :cnt // FROM cw_banktype // WHERE banktypeid = :arg_banktypeid // USING commit_transaction; //IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "查询操作失败,结算方式!" // GOTO ext //END IF //IF cnt = 0 THEN // rslt = 0 // arg_msg = "结算方式未登记或已取消!" // GOTO ext //END IF // //Decimal cur_accounts_amt = 0 ,new_amt = 0 // //Int ls_ifnew //Long ll_min_printid,ll_max_printid,ll_printid // //ls_ifnew = f_check_ifnewest(arg_accountsid,arg_takedate,ll_min_printid,ll_max_printid,arg_msg) // //CHOOSE CASE ls_ifnew // CASE 0 // rslt = 0 // GOTO ext // CASE 2 // Long ls_tmprapid // Decimal tmp_amt,min_balcamt // // tmp_amt = arg_msttakeamt - arg_takeamt // // SELECT balcamt + takeamt - msttakeamt // INTO :min_balcamt // FROM u_rap_money // WHERE printid = :ll_min_printid // AND accountid = :arg_accountsid USING commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '查询下月最前结余失败,'+sqlca.SQLErrText // GOTO ext // END IF // // UPDATE u_rap_money // SET printid = printid + 1, // balcamt = balcamt + :tmp_amt // WHERE printid >= :ll_min_printid // AND accountid = :arg_accountsid USING commit_transaction; // IF commit_transaction.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '更新结余金额失败,'+sqlca.SQLErrText // GOTO ext // END IF // // new_amt = min_balcamt + arg_msttakeamt - arg_takeamt // ll_printid = ll_min_printid // CASE 1 // SELECT v_accounts_balc.accounts_balcamt // INTO :cur_accounts_amt // FROM v_accounts_balc // Where v_accounts_balc.accountsid = :arg_accountsid USING commit_transaction; // // IF commit_transaction.SQLCode <> 0 AND commit_transaction.SQLCode <> 100 THEN // arg_msg = "查询当前帐号的结余金额操作失败,请重试!" // rslt = 0 // GOTO ext // END IF // // new_amt = cur_accounts_amt + arg_msttakeamt - arg_takeamt // ll_printid = ll_max_printid + 1 //END CHOOSE ////---------------------------------------------------- //ls_rapid = f_sys_scidentity(0,"u_rap_money","rapmoneyid",arg_msg,FALSE,commit_transaction) //IF ls_rapid <= 0 THEN // rslt = 0 // GOTO ext //END IF // //INSERT INTO u_rap_money // ( // rapmoneyid, // accountid, // billcode, // takedate, // msttakeamt, // takeamt, // balcamt, // takeemp, // dscrp, // buildtype, // relid, // opdate, // opemp, // dcflag, // banktypeid, // printid, // scid, // relcode) // VALUES ( // :ls_rapid, // :arg_accountsid, // :arg_billcode, // :arg_takedate, // :arg_msttakeamt, // :arg_takeamt, // :new_amt, // :arg_inrep, // :arg_dscrp, // :arg_buildtype, // :arg_relid, // :server_datetime, // :arg_opemp, // :arg_dcflag, // :arg_banktypeid, // :ll_printid, // :arg_scid, // :arg_relcode) USING commit_transaction; //IF commit_transaction.SQLCode <> 0 THEN // // IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_rap_money') > 0 THEN // arg_msg = '向出纳明细表插入新记录失败,关键字单据ID重复' // ELSEIF Pos(Lower(commit_transaction.SQLErrText),'IX_u_rap_money_3') > 0 THEN // arg_msg = '向出纳明细表插入新记录失败,出纳帐号ID,序号重复' // ELSE // arg_msg = "因网络或其它原因导致向出纳明细表插入新记录失败"+"~n"+commit_transaction.SQLErrText // END IF // // rslt = 0 // GOTO ext //END IF // //ref_rapid = ls_rapid //ext: //IF rslt = 0 THEN // ROLLBACK USING commit_transaction; //ELSEIF rslt = 1 AND arg_ifcommit THEN // COMMIT USING commit_transaction; //END IF //RETURN rslt end function public function integer add_del (long arg_accountsid, datetime arg_takedate, string arg_inrep, string arg_dscrp, decimal arg_msttakeamt, decimal arg_takeamt, string arg_billcode, integer arg_buildtype, integer arg_dcflag, long arg_relid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit, long arg_banktypeid, long arg_acntid, string arg_relcode);Int rslt = 1 IF arg_msttakeamt <> 0 AND arg_takeamt <> 0 THEN rslt = 0 arg_msg = "收入金额和支出金额必须一个为0!" END IF IF arg_msttakeamt <> 0 THEN IF add_raprec(-1,arg_accountsid,arg_takedate,arg_inrep,arg_dscrp,arg_msttakeamt,arg_takeamt,arg_billcode,0,0,0,publ_operator,arg_msg,FALSE,arg_banktypeid,arg_relcode) = 0 THEN rslt = 0 GOTO ext END IF IF add_raprec(-1,arg_acntid,arg_takedate,arg_inrep,arg_dscrp,arg_takeamt,arg_msttakeamt,arg_billcode,0,0,0,publ_operator,arg_msg,FALSE,arg_banktypeid,arg_relcode) = 0 THEN rslt = 0 GOTO ext END IF END IF IF arg_takeamt <> 0 THEN IF add_raprec(-1,arg_accountsid,arg_takedate,arg_inrep,arg_dscrp,arg_msttakeamt,arg_takeamt,arg_billcode,0,0,0,publ_operator,arg_msg,FALSE,arg_banktypeid,arg_relcode) = 0 THEN rslt = 0 GOTO ext END IF IF add_raprec(-1,arg_acntid,arg_takedate,arg_inrep,arg_dscrp,arg_takeamt,arg_msttakeamt,arg_billcode,0,0,0,publ_operator,arg_msg,FALSE,arg_banktypeid,arg_relcode) = 0 THEN rslt = 0 GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer mod_raprec (long arg_scid, long arg_accountsid, long arg_rapid, datetime arg_takedate, string arg_inrep, decimal arg_msttakeamt, decimal arg_takeamt, string arg_dscrp, string arg_billcode, integer arg_buildtype, string arg_opemp, ref string arg_msg, boolean arg_ifcommit, long arg_ifauto, long arg_banktypeid, string arg_relcode);Int rslt = 1 long cnt = 0 Long maxid = 0,arg_rapmoneyid Long buildtype = 0 Decimal ol_balcamt = 0.00 //原差额 Decimal new_balcamt = 0.00 //新差额 DateTime server_datetime Long ll_printid IF IsNull(arg_dscrp) THEN arg_dscrp = '' IF IsNull(arg_inrep) THEN arg_inrep = '' IF IsNull(arg_billcode) THEN arg_billcode = '' IF IsNull(arg_opemp) THEN arg_opemp = '' IF IsNull(arg_banktypeid) THEN arg_banktypeid = 0 IF IsNull(arg_relcode) THEN arg_relcode = '' cnt = 0 SELECT count(*) INTO :cnt FROM cw_banktype WHERE banktypeid = :arg_banktypeid USING commit_transaction; IF commit_transaction.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 USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,系统时间" GOTO ext END IF IF Not (arg_buildtype = 1 OR arg_buildtype = 0 OR arg_buildtype = 2) THEN arg_msg = '错误建立类型,必须为:0-手工录入;1-记帐' rslt = 0 GOTO ext END IF //手动修改时查询建立类型 IF arg_ifauto = 1 THEN SELECT buildtype INTO :buildtype FROM u_rap_money Where u_rap_money.rapmoneyid = :arg_rapid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "查询出纳帐明细建立类型失败,请重试!"+'~n'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF END IF SELECT printid INTO :ll_printid FROM u_rap_money Where u_rap_money.rapmoneyid = :arg_rapid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "查询出纳帐明细序号失败,请重试!"+'~n'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF buildtype = 1 THEN arg_msg = '系统自动建立的出纳帐明细不可以修改' rslt = 0 GOTO ext END IF IF Date(arg_takedate) <= 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 IF arg_msttakeamt = 0 AND arg_takeamt = 0 THEN arg_msg = "收入金额与支出金额不能同时为0!" rslt = 0 GOTO ext END IF SELECT count(*) INTO :cnt FROM u_accounts Where u_accounts.accountsid = :arg_accountsid USING commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询操作失败,出纳帐户唯一码' rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '错误出纳帐户唯一码' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_user Where username = :arg_opemp USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,操作员!" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "操作员姓名未登记或已取消!" GOTO ext END IF DateTime ol_takedate SELECT msttakeamt - takeamt,takedate INTO :ol_balcamt,:ol_takedate FROM u_rap_money Where u_rap_money.rapmoneyid = :arg_rapid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "查询出纳差额失败!"+'~n'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF IF String(ol_takedate,'yyyymmdd') <> String(arg_takedate,'yyyymmdd') THEN IF del_raprec ( arg_rapid, arg_accountsid,0, arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF IF add_raprec(arg_scid,arg_accountsid,arg_takedate,arg_inrep,arg_dscrp,arg_msttakeamt,& arg_takeamt,arg_billcode,0,0,0,publ_operator,arg_msg,FALSE,arg_banktypeid,arg_relcode) = 0 THEN rslt = 0 GOTO ext END IF ELSE new_balcamt = arg_msttakeamt - arg_takeamt IF new_balcamt <> ol_balcamt THEN UPDATE u_rap_money SET balcamt = balcamt + (:new_balcamt - :ol_balcamt ) WHERE u_rap_money.printid > :ll_printid AND u_rap_money.accountid = :arg_accountsid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "更新结余金额失败!"+'~n'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF END IF //////////////////////////////////////// //更新明细 UPDATE u_rap_money SET billcode = :arg_billcode, takedate = :arg_takedate, takeemp = :arg_inrep, msttakeamt = :arg_msttakeamt, takeamt = :arg_takeamt, dscrp = :arg_dscrp, banktypeid = :arg_banktypeid, balcamt = balcamt + (:new_balcamt - :ol_balcamt ), scid = :arg_scid, relcode = :Arg_relcode Where u_rap_money.rapmoneyid = :arg_rapid USING commit_transaction; IF commit_transaction.SQLCode <> 0 THEN arg_msg = "更新单据失败!"+'~n'+commit_transaction.SQLErrText rslt = 0 GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK USING commit_transaction; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT USING commit_transaction; END IF RETURN rslt end function public function integer add_raprec (s_rap_money arg_s_mx, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long cnt = 0 DateTime server_datetime Long ls_rapid IF IsNull(arg_s_mx.dscrp) THEN arg_s_mx.dscrp = '' 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.inrep) THEN arg_s_mx.inrep = '' IF IsNull(arg_s_mx.banktypeid) THEN arg_s_mx.banktypeid = 0 IF IsNull(arg_s_mx.relcode) THEN arg_s_mx.relcode = '' IF LEN(arg_s_mx.dscrp) > 255 THEN arg_s_mx.dscrp = LEFT(arg_s_mx.dscrp,250) END IF //未注册限制 IF sys_if_register = 0 THEN Long ll_bill_count SELECT count(*) INTO :ll_bill_count From u_rap_money; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,出纳帐数量 " GOTO ext END IF IF ll_bill_count > 200 THEN rslt = 0 arg_msg = "未注册版本,出纳帐只能保存200条记录!" GOTO ext END IF END IF SELECT Top 1 getdate() Into :server_datetime From u_user Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,系统时间" GOTO ext END IF IF Not (arg_s_mx.buildtype = 1 Or arg_s_mx.buildtype = 0 ) THEN arg_msg = '错误建立类型,必须为:0 - 手工录入;1 - 记帐' rslt = 0 GOTO ext END IF IF Date(arg_s_mx.takedate) <= 1990-01-01 THEN arg_msg = '错误发生日期' rslt = 0 GOTO ext END IF cnt = 0 IF Trim(arg_s_mx.inrep) = '' THEN arg_msg = '没有经手人' rslt = 0 GOTO ext END IF IF arg_s_mx.msttakeamt = 0 And arg_s_mx.takeamt = 0 THEN arg_msg = "收入金额与与支金额不能同时为0!" rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_accounts Where u_accounts.accountsid = :arg_s_mx.accountsid Using commit_transaction ; IF commit_transaction.SQLCode <> 0 THEN arg_msg = '查询操作失败,帐号唯一码' rslt = 0 GOTO ext END IF IF cnt = 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 Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,操作员!" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "操作员姓名未登记或已取消!" GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM cw_banktype WHERE banktypeid = :arg_s_mx.banktypeid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,结算方式!" GOTO ext END IF IF cnt = 0 THEN rslt = 0 arg_msg = "结算方式未登记或已取消!" GOTO ext END IF Decimal cur_accounts_amt = 0 ,new_amt = 0 Int ls_ifnew Long ll_min_printid,ll_max_printid,ll_printid ls_ifnew = f_check_ifnewest(arg_s_mx.accountsid,arg_s_mx.takedate,ll_min_printid,ll_max_printid,arg_msg) CHOOSE CASE ls_ifnew CASE 0 rslt = 0 GOTO ext CASE 2 Long ls_tmprapid Decimal tmp_amt,min_balcamt tmp_amt = arg_s_mx.msttakeamt - arg_s_mx.takeamt SELECT balcamt + takeamt - msttakeamt INTO :min_balcamt FROM u_rap_money WHERE printid = :ll_min_printid And accountid = :arg_s_mx.accountsid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询下月最前结余失败,'+sqlca.SQLErrText GOTO ext END IF UPDATE u_rap_money SET printid = printid + 1, balcamt = balcamt + :tmp_amt WHERE printid >= :ll_min_printid And accountid = :arg_s_mx.accountsid Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新结余金额失败,'+sqlca.SQLErrText GOTO ext END IF new_amt = min_balcamt + arg_s_mx.msttakeamt - arg_s_mx.takeamt ll_printid = ll_min_printid CASE 1 SELECT v_accounts_balc.accounts_balcamt INTO :cur_accounts_amt FROM v_accounts_balc Where v_accounts_balc.accountsid = :arg_s_mx.accountsid Using commit_transaction; IF commit_transaction.SQLCode <> 0 And commit_transaction.SQLCode <> 100 THEN arg_msg = "查询当前帐号的结余金额操作失败,请重试!" rslt = 0 GOTO ext END IF new_amt = cur_accounts_amt + arg_s_mx.msttakeamt - arg_s_mx.takeamt ll_printid = ll_max_printid + 1 END CHOOSE //---------------------------------------------------- ls_rapid = f_sys_scidentity(0,"u_rap_money","rapmoneyid",arg_msg,False,commit_transaction) IF ls_rapid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO u_rap_money ( rapmoneyid, accountid, billcode, takedate, msttakeamt, takeamt, balcamt, takeemp, dscrp, buildtype, relid, opdate, opemp, dcflag, banktypeid, printid, scid, relcode) VALUES ( :ls_rapid, :arg_s_mx.accountsid, :arg_s_mx.billcode, :arg_s_mx.takedate, :arg_s_mx.msttakeamt, :arg_s_mx.takeamt, :new_amt, :arg_s_mx.inrep, :arg_s_mx.dscrp, :arg_s_mx.buildtype, :arg_s_mx.relid, :server_datetime, :arg_s_mx.opemp, :arg_s_mx.dcflag, :arg_s_mx.banktypeid, :ll_printid, :arg_s_mx.scid, :arg_s_mx.relcode) Using commit_transaction; IF commit_transaction.SQLCode <> 0 THEN IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_rap_money') > 0 THEN arg_msg = '向出纳明细表插入新记录失败,关键字单据ID重复' ELSEIF Pos(Lower(commit_transaction.SQLErrText),'IX_u_rap_money_3') > 0 THEN arg_msg = '向出纳明细表插入新记录失败,出纳帐号ID,序号重复' ELSE arg_msg = "向出纳明细表插入新记录失败"+"~n"+commit_transaction.SQLErrText END IF rslt = 0 GOTO ext END IF ref_rapid = ls_rapid ext: IF rslt = 0 THEN ROLLBACK Using commit_transaction; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using commit_transaction; END IF RETURN rslt end function on uo_rapmoney.create call super::create TriggerEvent( this, "constructor" ) end on on uo_rapmoney.destroy TriggerEvent( this, "destructor" ) call super::destroy end on