123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958 |
- $PBExportHeader$uo_musttake.sru
- forward
- global type uo_musttake from nonvisualobject
- end type
- type delmx from structure within uo_musttake
- end type
- end forward
- type delmx from structure
- long takeid
- long listno
- end type
- global type uo_musttake from nonvisualobject
- end type
- global uo_musttake uo_musttake
- type variables
- long ref_takeid = 0
- end variables
- forward prototypes
- public function integer del_takerecmx (integer arg_del, long arg_takeid, long arg_listno, ref string arg_msg, boolean arg_ifcommit)
- public function integer salebill_del_mx (long arg_salebillid, ref string arg_msg, boolean arg_ifcommit)
- public function integer del_takerec (long arg_scid, integer arg_del, long arg_takeid, long arg_cusid, ref string arg_msg, boolean arg_ifcommit)
- public function integer add_takerec (long arg_scid, long arg_cusid, datetime arg_takedate, string arg_inrep, decimal arg_oriamt, decimal arg_msttakeamt, decimal arg_takeamt, string arg_dscrp, string arg_billcode, long arg_banktypeid, integer arg_buildtype, string arg_opemp, long arg_outwareid, long arg_salebillid, 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_takerecmx (long arg_scid, long arg_takeid, string arg_billcode, datetime arg_takedate, long arg_banktypeid, decimal arg_msttakeamt, decimal arg_takeamt, string arg_opemp, string arg_dscrp, string arg_inrep, integer arg_buildtype, long arg_salebillid, long arg_itemid, long arg_cusid, long arg_moneyid, ref string arg_msg, boolean arg_ifcommit, string arg_relcode)
- public function integer add_takerec (ref s_bmsttake arg_s_mx, ref string arg_msg, boolean arg_ifcommit)
- public function integer add_takerecmx (ref s_bmsttake arg_s_mx, ref string arg_msg, boolean arg_ifcommit)
- end prototypes
- public function integer del_takerecmx (integer arg_del, long arg_takeid, long arg_listno, ref string arg_msg, boolean arg_ifcommit);//删除应收帐
- //del_TAKErecmx(arg_del,arg_takeid,arg_listno,arg_msg,arg_ifcommit)
- //arg_del 0:手动删除,1:应收帐删除,2:收入单删除;3:销售单删除
- Int rslt = 1
- long cnt = 0
- Long buildtype = 0
- Decimal msttakeamt,takeamt
- DateTime null_datetime
- SELECT count(*)
- INTO :cnt
- FROM u_bmstTAKEmx
- WHERE u_bmstTAKEmx.takeid = :arg_takeid
- And u_bmstTAKEmx.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,msttakeamt,takeamt
- INTO :buildtype,:msttakeamt,:takeamt
- FROM u_bmstTAKEmx
- WHERE u_bmstTAKEmx.takeid = :arg_takeid
- And u_bmstTAKEmx.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_bmstTAKE
- SET msttakeamt = msttakeamt - :msttakeamt,
- takeamt = takeamt - :takeamt,
- finishflag = 0,
- finishdate = :null_datetime
- Where U_bmstTAKE.takeid = :arg_takeid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '更新应收帐金额失败,请重试>>'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- DELETE U_bmstTAKEmx
- WHERE u_bmstTAKEmx.takeid = :arg_takeid
- And u_bmstTAKEmx.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 salebill_del_mx (long arg_salebillid, ref string arg_msg, boolean arg_ifcommit);//根据收入单删除应收帐明细
- //salebill_del_mx(arg_salebillid,arg_msg,arg_ifcommit)
- delmx del_mx[]
- Long it_mxt
- Long deltakeid[]
- Long cusid[],ll_cusid,scid[],ll_scid
- Long ls_takeid,ls_listno,i
- Int rslt = 1
- it_mxt = 0
- DECLARE listno_cur CURSOR FOR
- SELECT U_BmsttakeMX.Takeid,
- U_BmsttakeMX.listno
- FROM U_BmsttakeMX
- Where salebillid = :arg_salebillid;
- OPEN listno_cur;
- FETCH listno_cur Into :ls_takeid,:ls_listno;
- DO WHILE sqlca.SQLCode = 0
- it_mxt++
- del_mx[it_mxt].Takeid = ls_takeid
- del_mx[it_mxt].listno = ls_listno
- FETCH listno_cur Into :ls_takeid,:ls_listno;
- LOOP
- CLOSE listno_cur;
- FOR i = 1 To it_mxt
- IF del_takerecmx (2,del_mx[i].Takeid, 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_takerec (long arg_scid, integer arg_del, long arg_takeid, long arg_cusid, ref string arg_msg, boolean arg_ifcommit);//删除应收帐
- //del_TAKErec(arg_takeid,arg_cusid,arg_msg,arg_ifcommit)
- //1 判断是否有当前客户
- //2 判断这个ID是否当前客户的最后一个明细记录。
- //3 删除最后一行的记录行,失败回滚,成功提交。
- Int rslt = 1,li_finishflag
- long cnt = 0
- Long maxid = 0
- Long buildtype = 0
- Long ll_buildtype
- Long ll_ctmint
- Decimal ls_msttakeamt,ls_takeamt
- Long ll_itemid,ll_dateint
- DateTime ld_ctdatetime,ld_takedate
- uo_iteminput uo_item
- uo_item = Create uo_iteminput
- SELECT count(*)
- INTO :cnt
- FROM u_CUST
- Where u_CUST.CUSid = :arg_CUSid ;
- 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,
- msttakeamt,
- takeamt,
- itemid,
- rapmoneyid,
- takedate,
- ctmint,
- finishflag
- INTO :ll_buildtype,
- :ls_msttakeamt,
- :ls_takeamt,
- :ll_itemid,
- :ll_dateint,
- :ld_takedate,
- :ll_ctmint,
- :li_finishflag
- FROM u_bmsttake
- Where u_bmsttake.takeid = :arg_takeid;
- 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_bmsttakemx
- WHERE takeid = :arg_takeid
- And (buildtype <> 0);
- ELSEIF ll_buildtype = 1 THEN //销售单据建立
- SELECT count(*) INTO :cnt FROM u_bmsttakemx
- WHERE takeid = :arg_takeid
- And (buildtype <> 1 And buildtype <> 3);
- ELSEIF ll_buildtype = 4 THEN //收款单据建立
- SELECT count(*) INTO :cnt FROM u_bmsttakemx
- WHERE takeid = :arg_takeid
- And (buildtype <> 4);
- ELSE
- SELECT count(*) INTO :cnt FROM u_bmsttakemx
- WHERE takeid = :arg_takeid
- 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 sys_option_msttake_takeamt_secaudit = 0 THEN
- IF ls_takeamt <> 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
- END IF
- DELETE U_bmstTAKEmx
- Where takeid = :arg_takeid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "删除应收明细帐操作失败,请重试!"+'~n'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- DELETE U_bmstTAKE
- Where takeid = :arg_takeid;
- 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_takerec (long arg_scid, long arg_cusid, datetime arg_takedate, string arg_inrep, decimal arg_oriamt, decimal arg_msttakeamt, decimal arg_takeamt, string arg_dscrp, string arg_billcode, long arg_banktypeid, integer arg_buildtype, string arg_opemp, long arg_outwareid, long arg_salebillid, ref string arg_msg, boolean arg_ifcommit, datetime arg_viewdate, long arg_accountsid, long arg_itemid, long arg_moneyid, string arg_relcode);s_bmsttake s_take
- s_take.scid = arg_scid
- s_take.cusid = arg_cusid
- s_take.takedate = arg_takedate
- s_take.inrep = arg_inrep
- s_take.oriamt = arg_oriamt
- s_take.msttakeamt = arg_msttakeamt
- s_take.takeamt_cn = arg_takeamt
- s_take.takeamt = arg_takeamt
- s_take.dscrp = arg_dscrp
- s_take.billcode = arg_billcode
- s_take.banktypeid = arg_banktypeid
- s_take.buildtype = arg_buildtype
- s_take.opemp = arg_opemp
- s_take.outwareid = arg_outwareid
- s_take.salebillid = arg_salebillid
- s_take.viewdate = arg_viewdate
- s_take.accountsid = arg_accountsid
- s_take.itemid = arg_itemid
- s_take.moneyid = arg_moneyid
- // s_take.moneyid_cn = arg_ll_moneyid_account
- s_take.relcode = arg_relcode
- return add_takerec(s_take,arg_msg,arg_ifcommit)
- end function
- public function integer add_takerecmx (long arg_scid, long arg_takeid, string arg_billcode, datetime arg_takedate, long arg_banktypeid, decimal arg_msttakeamt, decimal arg_takeamt, string arg_opemp, string arg_dscrp, string arg_inrep, integer arg_buildtype, long arg_salebillid, long arg_itemid, long arg_cusid, long arg_moneyid, ref string arg_msg, boolean arg_ifcommit, string arg_relcode);s_bmsttake s_take
- s_take.scid = arg_scid
- s_take.takeid = arg_takeid
- s_take.billcode = arg_billcode
- s_take.takedate = arg_takedate
- s_take.banktypeid = arg_banktypeid
- s_take.msttakeamt = arg_msttakeamt
- s_take.takeamt = arg_takeamt
- s_take.opemp = arg_opemp
- s_take.dscrp = arg_dscrp
- s_take.inrep = arg_inrep
- s_take.buildtype = arg_buildtype
- s_take.salebillid = arg_salebillid
- s_take.itemid = arg_itemid
- s_take.cusid = arg_cusid
- s_take.moneyid = arg_moneyid
- s_take.relcode = arg_relcode
- //s_take.oriamt = arg_oriamt
- //s_take.outwareid = arg_outwareid
- //s_take.viewdate = arg_viewdate
- //s_take.accountsid = arg_accountsid
- return add_takerecmx(s_take,arg_msg,arg_ifcommit)
- end function
- public function integer add_takerec (ref s_bmsttake arg_s_mx, ref string arg_msg, boolean arg_ifcommit);//arg_s_mx.buildtype = 0 - 手动;1 -自动;2-对单; 3-项目;4-收付款单; (2,3只用在明细中)
- Int rslt = 1
- long cnt = 0
- DateTime server_datetime
- Long ls_newtakeid
- Long ref_dateint
- String ls_cusname, ls_custype, ls_dscrp, ls_cuscode
- String ls_relcode
- Int li_item_dfttype,li_itemflag
- Decimal ld_takeamt
- 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 = ''
- //IF Len(arg_s_mx.dscrp) > 255 THEN arg_s_mx.dscrp = Left(arg_s_mx.dscrp, 255)
- 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_Bmsttake;
- 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
- arg_msg = '没有收支项目'
- 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.TAKEdate) <= 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.outwareid > 0 And arg_s_mx.buildtype = 1 THEN
- SELECT part Into :ls_relcode From u_outware Where outwareid = :arg_s_mx.outwareid;
- 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.mstTAKEamt = 0 And arg_s_mx.TAKEamt = 0 THEN
- arg_msg = "应收金额与已收金额不能同时为0!"
- rslt = 0
- GOTO ext
- END IF
- arg_s_mx.oriamt = arg_s_mx.mstTAKEamt - arg_s_mx.TAKEamt //当前会计分录的金额, 如果是现金结算则为0
- //2 判断是否已经选择当前客户和操作员
- SELECT cuscode,name, custype
- INTO :ls_cuscode, :ls_cusname, :ls_custype
- FROM u_cust
- Where u_cust.cusid = :arg_s_mx.cusid;
- 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
- //加出纳帐****************
- DateTime ldt_viewdate
- IF sys_option_msttake_takeamt_secaudit = 0 THEN
- IF arg_s_mx.TAKEamt <> 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 1,3,4
- ld_takeamt = arg_s_mx.takeamt_cn * li_itemflag
- CASE ELSE
- ld_takeamt = arg_s_mx.takeamt_cn
- END CHOOSE
-
- //客户收款单的选项, 暂时无法区别是否客户收款单?
- //不过其他单据,默认TAKEdate = viewdate
- IF sys_option_cusamt_dftdate = 0 THEN
- ldt_viewdate = arg_s_mx.TAKEdate
- 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_cuscode + ' ' + ls_cusname + ' ' + ls_custype + ' '+arg_s_mx.dscrp
- ELSEIF sys_option_rap_money_dscrp_mode = 1 THEN
- ls_dscrp = ls_cusname + ' '+arg_s_mx.dscrp
- ELSE
- ls_dscrp = ls_cuscode + ' ' + ls_cusname + ' ' + ls_custype + ' '+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_takeamt
- 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
-
- 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
- ELSE
- arg_s_mx.accountsid = 0
- END IF
- //-----------------------------------------------------------------------
- ls_newtakeid = f_sys_scidentity(0,"U_Bmsttake","takeid",arg_msg,False,sqlca)
- IF ls_newtakeid <= 0 THEN
- rslt = 0
- GOTO ext
- END IF
- INSERT INTO U_Bmsttake
- ( scid,
- takeid,
- CUSid,
- TAKEdate,
- inrep,
- oriamt,
- mstTAKEamt,
- takeamt,
- Dscrp,
- billcode,
- banktypeid,
- buildtype,
- opdate,
- opemp,
- outwareid,
- salebillid,
- viewdate,
- accountsid,
- rapmoneyid,
- itemid,
- moneyid,
- relcode)
- VALUES (
- :arg_s_mx.scid,
- :ls_newtakeid,
- :arg_s_mx.CUSid,
- :arg_s_mx.TAKEdate,
- :arg_s_mx.inrep,
- :arg_s_mx.oriamt,
- :arg_s_mx.mstTAKEamt,
- :arg_s_mx.TAKEamt,
- :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.outwareid,
- :arg_s_mx.salebillid,
- :arg_s_mx.viewdate,
- :arg_s_mx.accountsid,
- :ref_dateint,
- :arg_s_mx.itemid,
- :arg_s_mx.moneyid,
- :arg_s_mx.relcode) ;
- IF sqlca.SQLCode <> 0 THEN
- IF Pos(Lower(sqlca.SQLErrText),'pk_U_Bmsttake') > 0 THEN
- arg_msg = '向应收帐表插入应收记录失败,关键字ID重复'
- ELSE
- arg_msg = "向应收帐表插入应收记录失败"+"~n"+sqlca.SQLErrText
- END IF
- rslt = 0
- GOTO ext
- END IF
- arg_s_mx.takeid = ls_newtakeid
- s_bmsttake s_takemx
- s_takemx = arg_s_mx
- IF arg_s_mx.buildtype = 0 Or arg_s_mx.buildtype = 4 THEN
- s_takemx.buildtype = arg_s_mx.buildtype
- ELSE
- s_takemx.buildtype = 1
- END IF
- s_takemx.salebillid = 0
- IF add_takerecmx(s_takemx,arg_msg,False) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- ref_takeid = ls_newtakeid
- ext:
- Destroy uo_item
- IF rslt = 0 THEN
- ROLLBACK;
- ELSEIF rslt = 1 And arg_ifcommit THEN
- COMMIT;
- END IF
- RETURN rslt
- end function
- public function integer add_takerecmx (ref s_bmsttake 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.cusid) THEN arg_s_mx.cusid = 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
- 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.TAKEdate) <= 1990-01-01 THEN
- arg_msg = '错误发生日期'
- rslt = 0
- GOTO ext
- END IF
- IF Trim(arg_s_mx.inrep) = '' THEN
- arg_s_mx.inrep = '无'
- END IF
- IF arg_s_mx.banktypeid = 0 THEN
- arg_msg = '没有结算方式'
- rslt = 0
- GOTO ext
- END IF
- //2019 04 09 因 财务》应收帐:放宽限制 屏蔽
- //IF arg_s_mx.mstTAKEamt = 0 And arg_s_mx.TAKEamt = 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.mstTAKEamt <>0 or arg_s_mx.TAKEamt<>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_bmsttakemx
- Where takeid = :arg_s_mx.takeid;
- 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_Bmsttakemx
- ( scid,
- takeid,
- Listno,
- billcode,
- TAKEdate,
- banktypeid,
- mstTAKEamt,
- TAKEamt,
- opdate,
- opemp,
- Dscrp,
- inrep,
- buildtype,
- salebillid,
- itemid,
- cusid,
- moneyid,
- relcode)
- VALUES (
- :arg_s_mx.scid,
- :arg_s_mx.takeid,
- :list_no,
- :arg_s_mx.billcode,
- :arg_s_mx.takedate,
- :arg_s_mx.banktypeid,
- :arg_s_mx.mstTAKEamt,
- :arg_s_mx.TAKEamt,
- :server_datetime,
- :arg_s_mx.opemp,
- :arg_s_mx.dscrp,
- :arg_s_mx.inrep,
- :arg_s_mx.buildtype,
- :arg_s_mx.salebillid,
- :arg_s_mx.itemid,
- :arg_s_mx.cusid,
- :arg_s_mx.moneyid,
- :arg_s_mx.relcode) ;
- IF sqlca.SQLCode <> 0 THEN
-
- IF Pos(Lower(sqlca.SQLErrText),'pk_U_Bmsttakemx') > 0 THEN
- arg_msg = '向应收帐表插入应收明细帐记录失败,关键字ID重复'
- ELSE
- arg_msg = "向应收帐表插入应收明细帐记录失败"+"~n"+sqlca.SQLErrText
- END IF
- rslt = 0
- GOTO ext
- END IF
- end if
- SELECT mstTAKEamt - TAKEamt Into :balcamt From u_bmsttake Where takeid = :arg_s_mx.takeid;
- 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_bmsttake
- SET oriamt = oriamt + :arg_s_mx.msttakeamt
- Where takeid = :arg_s_mx.takeid;
- 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.mstTAKEamt <>0 or arg_s_mx.TAKEamt<>0)THEN
- UPDATE u_bmsttake
- SET msttakeamt = msttakeamt + :arg_s_mx.msttakeamt,
- takeamt = takeamt + :arg_s_mx.takeamt
- Where takeid = :arg_s_mx.takeid;
-
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '更新应收帐应收已收款失败,请重试!'
- rslt = 0
- GOTO ext
- END IF
- END IF
- IF balcamt = arg_s_mx.TAKEamt - arg_s_mx.mstTAKEamt THEN
- UPDATE u_bmsttake
- SET finishflag = 1,
- finishdate = :arg_s_mx.takedate
- Where takeid = :arg_s_mx.takeid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '更新应收帐完成标记失败'
- rslt = 0
- GOTO ext
- END IF
- ELSE
- SetNull(null_datetime)
- UPDATE u_bmsttake
- SET finishflag = 0,
- finishdate = :null_datetime
- Where takeid = :arg_s_mx.takeid;
- 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
- on uo_musttake.create
- call super::create
- TriggerEvent( this, "constructor" )
- end on
- on uo_musttake.destroy
- TriggerEvent( this, "destructor" )
- call super::destroy
- end on
|