123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605 |
- $PBExportHeader$uo_order_plan.sru
- forward
- global type uo_order_plan from nonvisualobject
- end type
- end forward
- global type uo_order_plan from nonvisualobject
- end type
- global uo_order_plan uo_order_plan
- type variables
- Long uo_oplanid
- String uo_oplancode
- Int uo_option_order_plan_scll
- end variables
- forward prototypes
- public function integer p_getflag (long arg_scid, long arg_oplanid, ref integer arg_flag, ref integer arg_secflag, ref string arg_msg)
- public function integer audit (long arg_scid, long arg_oplanid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
- public function integer add_dscrp (long arg_scid, long arg_oplanid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit)
- public function integer updatebegin (long arg_scid, long arg_oplanid, ref string arg_msg)
- public function integer del (long arg_scid, long arg_oplanid, ref string arg_msg, boolean arg_ifcommit)
- public function integer audit_2 (long arg_scid, long arg_oplanid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
- public function integer caudit (long arg_scid, long arg_oplanid, ref string arg_msg, boolean arg_ifcommit)
- public function integer caudit_2 (long arg_scid, long arg_oplanid, ref string arg_msg, boolean arg_ifcommit)
- public function integer getinfo (long arg_scid, long arg_oplanid, ref s_order_planmx arg_ref_planmx[], ref long arg_arr_cnt, ref string arg_msg)
- public function integer save (s_order_plan arg_oplan, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
- public function integer uof_add_scllmx (long arg_scid, long arg_oplanid, ref string arg_msg, boolean arg_ifcommit)
- public function integer getinfo_scll (long arg_scid, long arg_oplanid, ref s_order_planmx_scll arg_ref_planmx_scll[], ref long arg_arr_cnt, ref string arg_msg)
- public function integer addmxcmpl (long arg_scid, long arg_planid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit)
- public function integer tryfinish (long arg_scid, long arg_planid, ref string arg_msg, boolean arg_ifcommit)
- end prototypes
- public function integer p_getflag (long arg_scid, long arg_oplanid, ref integer arg_flag, ref integer arg_secflag, ref string arg_msg);Int rslt = 1
- SELECT flag,secflag
- INTO :arg_flag,:arg_secflag
- FROM u_order_plan
- WHERE oplanid = :arg_oplanid
- AND scid = :arg_scid;
- IF sqlca.SQLCode <> 0 THEN
- ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- ext:
- RETURN rslt
- end function
- public function integer audit (long arg_scid, long arg_oplanid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
- Int li_flag,li_secflag
- DateTime ldt_oplandate
- IF uo_option_order_plan_scll = -1000 THEN
- arg_msg = '选项:[211]工组派工单使用自动领料功能,读取初始默认值失败,操作取消!'
- rslt = 0
- GOTO ext
- END IF
- uo_order_ml uo_order
- uo_order = CREATE uo_order_ml
- IF arg_oplanid <= 0 THEN
- rslt = 0
- ARG_MSG = '错误单据唯一码'
- GOTO ext
- END IF
- IF p_getflag(arg_scid,arg_oplanid,li_flag,li_secflag,ARG_MSG) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- IF li_flag <> 0 THEN
- rslt = 0
- ARG_MSG = '单据不是在待初审状态,不可以再审'
- GOTO ext
- END IF
- SELECT oplandate INTO :ldt_oplandate
- FROM u_order_plan
- WHERE oplanid = :arg_oplanid
- AND scid = :arg_scid;
- IF sqlca.SQLCode <> 0 THEN
- ARG_MSG = '查询是派工日期失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- //更新审核标记
- UPDATE u_order_plan
- SET auditingrep = :arg_opemp,
- auditingdate = getdate(),
- flag = 1
- WHERE oplanid = :arg_oplanid
- AND scid = :arg_scid
- AND flag = 0;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
- GOTO ext
- ELSEIF sqlca.SQLNRows = 0 THEN
- rslt = 0
- ARG_MSG = "单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText
- GOTO ext
- END IF
- s_order_planmx s_plan_mx[]
- Long ll_arr_cnt,ll_i
- IF getinfo(arg_scid,arg_oplanid,s_plan_mx,ll_arr_cnt,ARG_MSG) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- FOR ll_i = 1 TO ll_arr_cnt
- IF s_plan_mx[ll_i].orderid > 0 THEN
- IF uo_order.addmxcmpl_planqty_wkp(arg_scid,&
- s_plan_mx[ll_i].orderid,&
- s_plan_mx[ll_i].wkpname,&
- s_plan_mx[ll_i].wrkgrpid,&
- s_plan_mx[ll_i].owrkgrpid,&
- s_plan_mx[ll_i].qty,&
- ldt_oplandate,&
- s_plan_mx[ll_i].requiredate,&
- ARG_MSG,FALSE) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- END IF
- NEXT
- IF uo_option_order_plan_scll = 1 THEN
- IF uof_add_scllmx(arg_scid,arg_oplanid,ARG_MSG,FALSE) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- END IF
- ext:
- IF rslt = 0 THEN
- ROLLBACK;
- ELSEIF rslt = 1 AND arg_ifcommit THEN
- COMMIT;
- END IF
- DESTROY uo_order
- RETURN rslt
- end function
- public function integer add_dscrp (long arg_scid, long arg_oplanid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
- Int li_flag,li_secflag
- IF arg_newdescppart = '' THEN
- rslt = 0
- arG_MSG = "要添加内容为空,操作取消"
- GOTO ext
- END IF
-
- IF p_getflag(arg_scid,arg_oplanid,li_flag,li_secflag,arG_MSG) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- IF li_flag = 0 THEN
- rslt = 0
- arG_MSG = "待审核状态下不可用"
- GOTO ext
- END IF
- UPDATE u_order_plan
- SET DSCRP = DSCRP+' '+:arg_newdescppart
- WHERE u_order_plan.oplanid = :arg_oplanid
- AND u_order_plan.scid = :arg_scid;
- 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 updatebegin (long arg_scid, long arg_oplanid, ref string arg_msg);Int rslt = 1
- Int li_flag,li_secflag
- Long cnt
- IF arg_oplanid <= 0 THEN
- rslt = 0
- arg_msg = '错误单据唯一码'
- GOTO ext
- END IF
- IF p_getflag(arg_scid,arg_oplanid,li_flag,li_secflag,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- IF li_flag = 1 THEN
- rslt = 0
- arg_msg = '单据已经审核,不可以修改,要修改请先撤销审核'
- GOTO ext
- END IF
- ext:
- RETURN rslt
- end function
- public function integer del (long arg_scid, long arg_oplanid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
- Int li_flag,li_secflag
- IF arg_oplanid <= 0 THEN
- rslt = 0
- arg_msg = '错误单据唯一码'
- GOTO ext
- END IF
- IF p_getflag(arg_scid,arg_oplanid,li_flag,li_secflag,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- IF li_flag <> 0 THEN
- rslt = 0
- arg_msg = '单据不是在待审状态,不可以删除'
- GOTO ext
- END IF
- DELETE FROM u_order_planmx
- WHERE oplanid = :arg_oplanid
- AND scid = :arg_scid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText
- GOTO ext
- END IF
- DELETE FROM u_order_planmx_scll
- WHERE oplanid = :arg_oplanid
- AND scid = :arg_scid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = "删除单据领料明细操作失败"+"~n"+sqlca.SQLErrText
- GOTO ext
- END IF
- DELETE FROM u_order_plan
- WHERE oplanid = :arg_oplanid
- AND scid = :arg_scid
- 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 audit_2 (long arg_scid, long arg_oplanid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
- Int li_flag,li_secflag
- String ls_oplancode,ls_assign_emp
- DateTime ldt_oplandate
- Long ll_workgroupid
- IF uo_option_order_plan_scll = -1000 THEN
- arg_msg = '选项:[211]工组派工单使用自动领料功能,读取初始默认值失败,操作取消!'
- rslt = 0
- GOTO ext
- END IF
- IF arg_oplanid <= 0 THEN
- rslt = 0
- arg_msg = '错误单据唯一码'
- GOTO ext
- END IF
- IF p_getflag(arg_scid,arg_oplanid,li_flag,li_secflag,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- IF li_flag = 0 THEN
- rslt = 0
- arg_msg = '单据不是在初审状态,不可以再终审'
- GOTO ext
- END IF
- IF li_secflag = 1 THEN
- rslt = 0
- arg_msg = '单据已终审,不可以再终审'
- GOTO ext
- END IF
- SELECT oplancode,
- assign_emp,
- oplandate,
- workgroupid
- INTO :ls_oplancode,
- :ls_assign_emp,
- :ldt_oplandate,
- :ll_workgroupid
- FROM u_order_plan
- WHERE scid = :arg_scid
- AND oplanid = :arg_oplanid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询单据资料失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- //更新审核标记
- UPDATE u_order_plan
- SET secauditingrep = :arg_opemp,
- secauditingdate = getdate(),
- secflag = 1
- WHERE oplanid = :arg_oplanid
- AND scid = :arg_scid
- AND flag = 1
- AND secflag = 0;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = "因网络或其它原因导致单据终审操作失败"+"~n"+sqlca.SQLErrText
- GOTO ext
- ELSEIF sqlca.SQLNRows = 0 THEN
- rslt = 0
- arg_msg = "单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText
- GOTO ext
- END IF
- s_order_planmx_scll s_plan_mx_scll[]
- Long ll_arr_cnt,k,j,ch,ll_i
- Long ll_storageid_arr[]
- Boolean lb_f = FALSE
- IF uo_option_order_plan_scll = 1 THEN
- IF getinfo_scll(arg_scid,arg_oplanid,s_plan_mx_scll,ll_arr_cnt,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
-
- IF ll_arr_cnt > 0 THEN
- FOR k = 1 TO ll_arr_cnt
- FOR j = 1 TO UpperBound(ll_storageid_arr)
- IF ll_storageid_arr[j] = s_plan_mx_scll[k].storageid THEN lb_f = TRUE
- NEXT
-
- IF lb_f = FALSE THEN
- ch++
- ll_storageid_arr[ch] = s_plan_mx_scll[k].storageid
- END IF
- lb_f = FALSE
- NEXT
-
- FOR ll_i = 1 TO UpperBound(ll_storageid_arr)
-
- uo_outware_scll uo_scll
- uo_scll = CREATE uo_outware_scll
- uo_scll.commit_transaction = sqlca
- uo_scll.if_getid_ture = FALSE
-
- IF uo_scll.newbegin(arg_scid,3,arg_msg) = 0 THEN
- arg_msg = '开始建立领料单失败,'+arg_msg
- rslt = 0
- END IF
-
- uo_scll.outdate = ldt_oplandate
- uo_scll.outrep = ls_assign_emp
- uo_scll.part = ls_oplancode
- uo_scll.dscrp = ''
- uo_scll.cusname = ''
- uo_scll.storageid = ll_storageid_arr[ll_i]
- uo_scll.relid = ll_workgroupid
- uo_scll.relint_1 = 0
- uo_scll.ifauto = 1
-
- Long chc
-
- FOR j = 1 TO ll_arr_cnt
- IF ll_storageid_arr[ll_i] = s_plan_mx_scll[j].storageid THEN
- Long ll_mtrlwareid
- Decimal ld_cost
- Long ll_mtrlid
-
- SELECT top 1 mtrlwareid,
- cost
- INTO :ll_mtrlwareid,
- :ld_cost
- FROM u_mtrlware
- WHERE storageid = :s_plan_mx_scll[j].storageid
- AND mtrlid = :s_plan_mx_scll[j].mtrlid
- AND status = :s_plan_mx_scll[j].status
- AND woodcode = :s_plan_mx_scll[j].woodcode
- AND pcode = :s_plan_mx_scll[j].pcode
- Order By noallocqty Desc;
-
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询物料:'+s_plan_mx_scll[j].mtrlcode+',库存资料失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
-
- SELECT mtrlid INTO :ll_mtrlid
- FROM u_order_ml
- WHERE scid = :arg_scid
- AND orderid = :s_plan_mx_scll[j].orderid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询生产计划物料资料失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
-
- chc++
-
- IF uo_scll.acceptmx(ll_mtrlwareid,s_plan_mx_scll[j].qty,&
- ld_cost,1,'',chc,arg_msg,&
- 1,s_plan_mx_scll[j].orderid,&
- ll_mtrlid,0,'',&
- s_plan_mx_scll[j].qty,0,'',0,0,'','',0,0,'',0,0,0,0,'','') = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- END IF
- NEXT
-
- IF uo_scll.Save(FALSE,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF uo_scll.getinfo(arg_scid,uo_scll.outwareid,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF uo_scll.priceaudit(FALSE,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
-
- UPDATE u_order_planmx_scll
- SET outwareid = :uo_scll.outwareid,
- outwarecode = :uo_scll.outwarecode
- WHERE scid = :arg_scid
- AND oplanid = :arg_oplanid
- AND storageid = :ll_storageid_arr[ll_i];
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '更新领料明细领料单号失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
-
- DESTROY uo_scll
- NEXT
- 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 caudit (long arg_scid, long arg_oplanid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
- Int li_flag,li_secflag
- Long cnt
- DateTime null_dt
- SetNull(null_dt)
- uo_order_ml uo_order
- uo_order = Create uo_order_ml
- IF arg_oplanid <= 0 THEN
- rslt = 0
- ARG_MSG = '错误单据唯一码'
- GOTO ext
- END IF
- IF p_getflag(arg_scid,arg_oplanid,li_flag,li_secflag,ARG_MSG) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- IF li_secflag = 1 THEN
- rslt = 0
- ARG_MSG = '单据不是在待终审状态,不可以撤审'
- GOTO ext
- END IF
- IF li_flag = 0 THEN
- rslt = 0
- ARG_MSG = '单据未初审,不可以撤审'
- GOTO ext
- END IF
- cnt = 0
- SELECT count(*)
- INTO :cnt
- FROM u_orderworkgroup_nummx
- WHERE planscid = :arg_scid
- And planid = :arg_oplanid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- ARG_MSG = '查询工组派工单是否有相关工组完工单/工组交接单失败,'+sqlca.SQLErrText
- GOTO ext
- END IF
- IF cnt > 0 THEN
- rslt = 0
- ARG_MSG = '工组派工单已有相关工组完工单/工组交接单,不能撤审'
- GOTO ext
- END IF
- //更新审核标记
- UPDATE u_order_plan
- SET auditingrep = '',
- auditingdate = :null_dt,
- flag = 0
- WHERE oplanid = :arg_oplanid
- AND scid = :arg_scid
- And flag = 1;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- ARG_MSG = "因网络或其它原因导致单据撤审操作失败"+"~n"+sqlca.SQLErrText
- GOTO ext
- ELSEIF sqlca.SQLNRows = 0 THEN
- rslt = 0
- ARG_MSG = "单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText
- GOTO ext
- END IF
- s_order_planmx s_plan_mx[]
- Long ll_arr_cnt,ll_i
- IF getinfo(arg_scid,arg_oplanid,s_plan_mx,ll_arr_cnt,ARG_MSG) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- FOR ll_i = 1 To ll_arr_cnt
- IF s_plan_mx[ll_i].orderid > 0 THEN
- IF uo_order.addmxcmpl_planqty_wkp(arg_scid,&
- s_plan_mx[ll_i].orderid,&
- s_plan_mx[ll_i].wkpname,&
- s_plan_mx[ll_i].wrkgrpid,&
- s_plan_mx[ll_i].owrkgrpid,&
- 0 - s_plan_mx[ll_i].qty,null_dt,null_dt,&
- ARG_MSG,False) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- 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 caudit_2 (long arg_scid, long arg_oplanid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
- Int li_flag,li_secflag
- DateTime null_dt
- SetNull(null_dt)
- IF uo_option_order_plan_scll = -1000 THEN
- arg_msg = '选项:[211]工组派工单使用自动领料功能,读取初始默认值失败,操作取消!'
- rslt = 0
- GOTO ext
- END IF
- IF arg_oplanid <= 0 THEN
- rslt = 0
- arg_msg = '错误单据唯一码'
- GOTO ext
- END IF
- IF p_getflag(arg_scid,arg_oplanid,li_flag,li_secflag,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- IF li_secflag = 0 THEN
- rslt = 0
- arg_msg = '单据不是在已终审状态,不可以撤审'
- GOTO ext
- END IF
- IF li_flag = 0 THEN
- rslt = 0
- arg_msg = '单据不是在已终审状态,不可以撤审'
- GOTO ext
- END IF
- //更新审核标记
- UPDATE u_order_plan
- SET secauditingrep = '',
- secauditingdate = :null_dt,
- secflag = 0
- WHERE oplanid = :arg_oplanid
- AND scid = :arg_scid
- AND secflag = 1;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = "因网络或其它原因导致单据终审撤审操作失败"+"~n"+sqlca.SQLErrText
- GOTO ext
- ELSEIF sqlca.SQLNRows = 0 THEN
- rslt = 0
- arg_msg = "单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText
- GOTO ext
- END IF
- Long ll_outwareid_arr[]
- String ls_outwarecode_arr[]
- Long ll_arr_cnt = 1,ll_i
- IF uo_option_order_plan_scll = 1 THEN
- DECLARE cur_outwareid CURSOR FOR
- SELECT distinct u_order_planmx_scll.outwareid,
- u_order_planmx_scll.outwarecode
- FROM u_order_planmx_scll
- WHERE u_order_planmx_scll.scid = :arg_scid
- AND u_order_planmx_scll.oplanid = :arg_oplanid;
-
- OPEN cur_outwareid;
- FETCH cur_outwareid INTO :ll_outwareid_arr[ll_arr_cnt],:ls_outwarecode_arr[ll_arr_cnt];
-
- DO WHILE sqlca.SQLCode = 0
- ll_arr_cnt++
- FETCH cur_outwareid INTO :ll_outwareid_arr[ll_arr_cnt],:ls_outwarecode_arr[ll_arr_cnt];
- LOOP
-
- CLOSE cur_outwareid;
-
- ll_arr_cnt = ll_arr_cnt - 1
-
- IF ll_arr_cnt > 0 THEN
- uo_outware_scll uo_scll
- uo_scll = CREATE uo_outware_scll
- uo_scll.commit_transaction = sqlca
-
- FOR ll_i = 1 TO ll_arr_cnt
- IF uo_scll.getinfo(arg_scid,ll_outwareid_arr[ll_i],arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF uo_scll.c_priceaudit(FALSE,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF uo_scll.del(arg_scid,ll_outwareid_arr[ll_i],0,arg_msg,FALSE) = 0 THEN
- arg_msg = '领料单:'+ls_outwarecode_arr[ll_i]+',删除失败,'+arg_msg
- rslt = 0
- GOTO ext
- END IF
- NEXT
-
- UPDATE u_order_planmx_scll
- SET outwareid = 0,
- outwarecode = ''
- WHERE scid = :arg_scid
- AND oplanid = :arg_oplanid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '清除领料明细领料单号失败,'+sqlca.SQLErrText
- 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
- DESTROY uo_scll
- RETURN rslt
- end function
- public function integer getinfo (long arg_scid, long arg_oplanid, ref s_order_planmx arg_ref_planmx[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1
- Long i = 1,no_mxcheck = 0
- IF arg_oplanid <= 0 THEN
- rslt = 0
- arg_msg = '错误单据唯一码'
- GOTO ext
- END IF
- //用游标读取明细
- DECLARE cur_planmx CURSOR FOR
- SELECT u_order_planmx.orderid,
- u_order_planmx.ordercode,
- u_order_planmx.mtrlid,
- u_order_planmx.status,
- u_order_planmx.woodcode,
- u_order_planmx.pcode,
- u_order_planmx.Qty,
- u_order_planmx.requiredate,
- u_mtrldef.mtrlcode,
- u_order_planmx.wrkGrpid,
- u_order_planmx.owrkGrpid,
- u_order_planmx.wkpname
- FROM u_order_planmx,u_mtrldef
- WHERE u_order_planmx.oplanid = :arg_oplanid
- AND u_order_planmx.scid = :arg_scid
- AND u_order_planmx.mtrlid = u_mtrldef.mtrlid
- Order By u_order_planmx.printid;
-
- OPEN cur_planmx;
- FETCH cur_planmx INTO :arg_ref_planmx[i].orderid,
- :arg_ref_planmx[i].ordercode,:arg_ref_planmx[i].mtrlid,
- :arg_ref_planmx[i].status,:arg_ref_planmx[i].woodcode,
- :arg_ref_planmx[i].pcode,:arg_ref_planmx[i].Qty,
- :arg_ref_planmx[i].requiredate,:arg_ref_planmx[i].mtrlcode,
- :arg_ref_planmx[i].wrkGrpid,:arg_ref_planmx[i].owrkGrpid,
- :arg_ref_planmx[i].wkpname;
-
- DO WHILE sqlca.SQLCode = 0
- i++
- FETCH cur_planmx INTO :arg_ref_planmx[i].orderid,:arg_ref_planmx[i].ordercode,
- :arg_ref_planmx[i].mtrlid,
- :arg_ref_planmx[i].status,:arg_ref_planmx[i].woodcode,
- :arg_ref_planmx[i].pcode,:arg_ref_planmx[i].Qty,
- :arg_ref_planmx[i].requiredate,:arg_ref_planmx[i].mtrlcode,
- :arg_ref_planmx[i].wrkGrpid,:arg_ref_planmx[i].owrkGrpid,
- :arg_ref_planmx[i].wkpname;
-
- LOOP
- CLOSE cur_planmx;
- //检验明细是否读入完整
- SELECT count(*) INTO :no_mxcheck
- FROM u_order_planmx
- WHERE scid = :arg_scid
- AND oplanid = :arg_oplanid;
- 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
- arg_arr_cnt = i - 1
- ext:
- RETURN rslt
- end function
- public function integer save (s_order_plan arg_oplan, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1
- Long cnt = 0
- DateTime server_dt
- Long ll_oplanid,it_mxbt,i
- String ls_sccode,ls_oplancode
- Long ll_wrkGrpid,ll_wrkGrpid_order
- IF IsNull(arg_oplan.scid) THEN arg_oplan.scid = 0
- IF IsNull(arg_oplan.oplanid) THEN arg_oplan.oplanid = 0
- IF IsNull(arg_oplan.assign_emp) THEN arg_oplan.assign_emp = ''
- IF IsNull(arg_oplan.relcode) THEN arg_oplan.relcode = ''
- IF IsNull(arg_oplan.dscrp) THEN arg_oplan.dscrp = ''
- IF IsNull(arg_oplan.workgroupid) THEN arg_oplan.workgroupid = 0
- IF IsNull(arg_oplan.wrkgrpid) THEN arg_oplan.wrkgrpid = 0
- IF arg_oplan.wrkgrpid = 0 THEN
- arg_msg = '请选择工组'
- rslt = 0
- GOTO ext
- END IF
- cnt = 0
- SELECT count(*) INTO :cnt
- FROM u_sc_workgroup
- Where wrkgrpid = :arg_oplan.wrkgrpid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询工组资料失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- IF cnt <> 1 THEN
- arg_msg = '工组资料不存在或重复,请检查'
- rslt = 0
- GOTO ext
- END IF
- IF arg_oplan.workgroupid > 0 THEN
- SELECT u_workgroup.wrkGrpid INTO :ll_wrkGrpid
- FROM u_workgroup
- Where u_workgroup.workgroupid = :arg_oplan.workgroupid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询单据工作中心所属工组资料失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
-
- IF ll_wrkGrpid <> arg_oplan.wrkgrpid THEN
- arg_msg = '工作中心所属工组资料与单据工组资料不相符,请检查'
- rslt = 0
- GOTO ext
- END IF
- END IF
- IF arg_oplan.assign_emp = '' THEN
- arg_msg = '请输入经手人'
- 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_oplan.arg_s_planmx)
- IF it_mxbt <= 0 THEN
- rslt = 0
- arg_msg = "没有正确明细内容"
- GOTO ext
- END IF
- FOR i = 1 TO it_mxbt
-
- arg_oplan.arg_s_planmx[i].wrkGrpid = arg_oplan.wrkgrpid
-
- String ls_ordercode
- String ls_status,ls_woodcode,ls_pcode
- Long ll_mtrlid
-
- SELECT ordercode,status_mode,woodcode,pcode,mtrlid
- INTO :ls_ordercode,:ls_status,:ls_woodcode,:ls_pcode,:ll_mtrlid
- FROM u_order_ml
- WHERE orderid = :arg_oplan.arg_s_planmx[i].orderid
- AND scid = :arg_oplan.scid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '行:'+String(arg_oplan.arg_s_planmx[i].printid)+',物料:'+arg_oplan.arg_s_planmx[i].mtrlcode+',查询计划编号失败'
- rslt = 0
- GOTO ext
- END IF
-
- arg_oplan.arg_s_planmx[i].ordercode = ls_ordercode
- arg_oplan.arg_s_planmx[i].status = ls_status
- arg_oplan.arg_s_planmx[i].woodcode = ls_woodcode
- arg_oplan.arg_s_planmx[i].pcode = ls_pcode
- arg_oplan.arg_s_planmx[i].mtrlid = ll_mtrlid
- NEXT
- IF arg_oplan.oplanid = 0 THEN
-
- ll_oplanid = f_sys_scidentity(0,"u_order_plan","oplanid",arg_msg,TRUE,id_sqlca)
-
- IF ll_oplanid <= 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF f_get_sccode(arg_oplan.scid,sqlca,ls_sccode,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- ls_oplancode = getid(arg_oplan.scid,ls_sccode + 'OP',Date(server_dt),FALSE,sqlca)
- IF ls_oplancode = "err" THEN
- rslt = 0
- arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText
- GOTO ext
- END IF
-
- INSERT INTO u_order_plan
- (scid,
- oplanid,
- oplancode,
- oplandate,
- assign_emp,
- opdate,
- opemp,
- flag,
- relcode,
- dscrp,
- workgroupid,
- wrkgrpid)
- VALUES (
- :arg_oplan.scid,
- :ll_oplanid,
- :ls_oplancode,
- :arg_oplan.oplandate,
- :arg_oplan.assign_emp,
- getdate(),
- :arg_opemp,
- 0,
- :arg_oplan.relcode,
- :arg_oplan.dscrp,
- :arg_oplan.workgroupid,
- :arg_oplan.wrkgrpid) ;
- 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_order_planmx
- (scid,
- oplanid,
- printid,
- orderid,
- mtrlid,
- status,
- woodcode,
- pcode,
- Qty,
- mxdscrp,
- ordercode,
- requiredate,
- wrkGrpid,
- owrkGrpid,
- wkpname,
- uprate,
- fzqty,
- fzrate)
- VALUES (
- :arg_oplan.scid,
- :ll_oplanid,
- :arg_oplan.arg_s_planmx[i].printid,
- :arg_oplan.arg_s_planmx[i].orderid,
- :arg_oplan.arg_s_planmx[i].mtrlid,
- :arg_oplan.arg_s_planmx[i].status,
- :arg_oplan.arg_s_planmx[i].woodcode,
- :arg_oplan.arg_s_planmx[i].pcode,
- :arg_oplan.arg_s_planmx[i].qty,
- :arg_oplan.arg_s_planmx[i].mxdscrp,
- :arg_oplan.arg_s_planmx[i].ordercode,
- :arg_oplan.arg_s_planmx[i].requiredate,
- :arg_oplan.arg_s_planmx[i].wrkGrpid,
- :arg_oplan.arg_s_planmx[i].owrkGrpid,
- :arg_oplan.arg_s_planmx[i].wkpname,
- :arg_oplan.arg_s_planmx[i].uprate,
- :arg_oplan.arg_s_planmx[i].fzqty,
- :arg_oplan.arg_s_planmx[i].fzrate);
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
- GOTO ext
- END IF
- NEXT
-
- uo_oplanid = ll_oplanid
- uo_oplancode = ls_oplancode
- ELSE
- UPDATE u_order_plan
- SET oplandate = :arg_oplan.oplandate,
- assign_emp = :arg_oplan.assign_emp,
- moddate = getdate(),
- modemp = :arg_opemp,
- relcode = :arg_oplan.relcode,
- dscrp = :arg_oplan.dscrp,
- workgroupid = :arg_oplan.workgroupid,
- wrkgrpid = :arg_oplan.wrkgrpid
- WHERE oplanid = :arg_oplan.oplanid
- AND scid = :arg_oplan.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_order_planmx
- WHERE oplanid = :arg_oplan.oplanid
- AND scid = :arg_oplan.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_order_planmx
- (scid,
- oplanid,
- printid,
- orderid,
- mtrlid,
- status,
- woodcode,
- pcode,
- Qty,
- mxdscrp,
- ordercode,
- requiredate,
- wrkGrpid,
- owrkGrpid,
- wkpname,
- uprate,
- fzqty,
- fzrate)
- VALUES (
- :arg_oplan.scid,
- :arg_oplan.oplanid,
- :arg_oplan.arg_s_planmx[i].printid,
- :arg_oplan.arg_s_planmx[i].orderid,
- :arg_oplan.arg_s_planmx[i].mtrlid,
- :arg_oplan.arg_s_planmx[i].status,
- :arg_oplan.arg_s_planmx[i].woodcode,
- :arg_oplan.arg_s_planmx[i].pcode,
- :arg_oplan.arg_s_planmx[i].qty,
- :arg_oplan.arg_s_planmx[i].mxdscrp,
- :arg_oplan.arg_s_planmx[i].ordercode,
- :arg_oplan.arg_s_planmx[i].requiredate,
- :arg_oplan.arg_s_planmx[i].wrkGrpid,
- :arg_oplan.arg_s_planmx[i].owrkGrpid,
- :arg_oplan.arg_s_planmx[i].wkpname,
- :arg_oplan.arg_s_planmx[i].uprate,
- :arg_oplan.arg_s_planmx[i].fzqty,
- :arg_oplan.arg_s_planmx[i].fzrate);
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
- GOTO ext
- END IF
- NEXT
-
- uo_oplanid = arg_oplan.oplanid
- 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 uof_add_scllmx (long arg_scid, long arg_oplanid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
- Int li_flag,li_secflag
- Long ll_wrkGrpid
- uo_cp_auto_scll uo_mrp_scll
- uo_mrp_scll = CREATE uo_cp_auto_scll
- IF arg_oplanid <= 0 THEN
- rslt = 0
- ARG_MSG = '错误单据唯一码'
- GOTO ext
- END IF
- IF p_getflag(arg_scid,arg_oplanid,li_flag,li_secflag,ARG_MSG) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- IF li_flag <> 1 THEN
- rslt = 0
- ARG_MSG = '单据不是在初审状态,不可以计算领料明细'
- GOTO ext
- END IF
- IF li_secflag = 1 THEN
- rslt = 0
- ARG_MSG = '单据已终审状态,不可以计算领料明细'
- GOTO ext
- END IF
- SELECT u_order_plan.wrkGrpid INTO :ll_wrkGrpid
- FROM u_order_plan
- WHERE u_order_plan.scid = :arg_scid
- AND u_order_plan.oplanid = :arg_oplanid;
- IF sqlca.SQLCode <> 0 THEN
- ARG_MSG = '查询单据工组资料失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- IF ll_wrkGrpid = 0 THEN
- ARG_MSG = '工组资料错误'
- rslt = 0
- GOTO ext
- END IF
- //MRP运算
- s_order_planmx s_plan_mx[]
- s_cp_scll s_cs[],arg_s_cs[],tmp_s_cs[]
- Long ll_arr_cnt,i
- IF getinfo(arg_scid,arg_oplanid,s_plan_mx,ll_arr_cnt,ARG_MSG) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- //取应车间库存物料
- Long j,k,li_itmxt
- Int li_mtrlkind
- Boolean if_f
- Long arg_itmxt
- FOR i = 1 TO ll_arr_cnt
-
- IF s_plan_mx[i].orderid = 0 THEN CONTINUE
-
- arg_s_cs = tmp_s_cs
-
- arg_itmxt = 0
-
- IF uo_mrp_scll.uof_cp_scll(arg_scid,s_plan_mx[i].orderid,0,&
- s_plan_mx[i].qty,&
- arg_s_cs,arg_itmxt,ARG_MSG) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- FOR k = 1 TO UpperBound(arg_s_cs)
- SELECT mtrlkind INTO :li_mtrlkind
- FROM u_mtrldef
- Where mtrlid = :arg_s_cs[k].mtrlid;
- IF sqlca.SQLCode <> 0 THEN
- ARG_MSG = '查询物料领料属性失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
-
- IF li_mtrlkind = 1 THEN CONTINUE
-
- if_f = FALSE
-
- FOR j = 1 TO UpperBound(s_cs)
- IF s_cs[j].mtrlid = arg_s_cs[k].mtrlid &
- AND s_cs[j].wrkGrpid = arg_s_cs[k].wrkGrpid &
- AND s_cs[j].scid = arg_s_cs[k].scid &
- AND s_cs[j].orderid = arg_s_cs[k].orderid &
- AND s_cs[j].status = arg_s_cs[k].status &
- AND s_cs[j].woodcode = arg_s_cs[k].woodcode &
- AND s_cs[j].pcode = arg_s_cs[k].pcode THEN
- s_cs[j].qty = s_cs[j].qty + arg_s_cs[k].qty
- if_f = TRUE
- EXIT
- END IF
- NEXT
-
- IF NOT if_f THEN
- li_itmxt++
- s_cs[li_itmxt].scid = arg_s_cs[k].scid
- s_cs[li_itmxt].orderid = arg_s_cs[k].orderid
- s_cs[li_itmxt].mtrlid = arg_s_cs[k].mtrlid
- s_cs[li_itmxt].wrkGrpid = arg_s_cs[k].wrkGrpid
- s_cs[li_itmxt].qty = arg_s_cs[k].qty
- s_cs[li_itmxt].status = arg_s_cs[k].status
- s_cs[li_itmxt].woodcode = arg_s_cs[k].woodcode
- s_cs[li_itmxt].pcode = arg_s_cs[k].pcode
- END IF
- NEXT
- NEXT
- IF UpperBound(s_cs) = 0 THEN
- ARG_MSG = '排程单对应的生产计划没有对应的车间用料'
- rslt = 0
- GOTO ext
- END IF
- DELETE FROM u_order_planmx_scll
- WHERE oplanid = :arg_oplanid
- AND scid = :arg_scid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- ARG_MSG = "删除单据领料明细操作失败"+"~n"+sqlca.SQLErrText
- GOTO ext
- END IF
- Long m
- FOR m = 1 TO li_itmxt
- Long ll_storageid
- String ls_ordercode
-
- IF s_cs[m].wrkGrpid <> ll_wrkGrpid THEN CONTINUE
-
- SELECT top 1 u_outware.storageid INTO :ll_storageid
- FROM u_outware,u_outwaremx
- WHERE u_outware.scid = u_outwaremx.scid
- AND u_outware.outwareid = u_outwaremx.outwareid
- AND u_outware.billtype = 3
- AND u_outware.flag = 1
- AND u_outwaremx.scid = :arg_scid
- AND u_outwaremx.mtrlid = :s_cs[m].mtrlid
- AND u_outwaremx.status = :s_cs[m].status
- AND u_outwaremx.woodcode = :s_cs[m].woodcode
- AND u_outwaremx.pcode = :s_cs[m].pcode
- Order By u_outware.outdate Desc;
- IF sqlca.SQLCode <> 0 THEN
- SELECT top 1 u_mtrlware.storageid INTO :ll_storageid
- FROM u_mtrlware
- WHERE u_mtrlware.scid = :arg_scid
- AND u_mtrlware.mtrlid = :s_cs[m].mtrlid
- AND u_mtrlware.status = :s_cs[m].status
- AND u_mtrlware.woodcode = :s_cs[m].woodcode
- AND u_mtrlware.pcode = :s_cs[m].pcode
- Order By u_mtrlware.noallocqty Desc;
- IF sqlca.SQLCode <> 0 THEN
- SELECT top 1 u_mtrl_storage.storageid INTO :ll_storageid
- FROM u_mtrl_storage
- Where u_mtrl_storage.mtrlid = :s_cs[m].mtrlid;
- IF sqlca.SQLCode <> 0 THEN ll_storageid = 0
- END IF
- END IF
-
- IF ll_storageid = 0 THEN
- ARG_MSG = '查询物料自动出仓仓库失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
-
- SELECT ordercode INTO :ls_ordercode
- FROM u_order_ml
- WHERE orderid = :s_cs[m].orderid
- AND scid = :arg_scid;
- IF sqlca.SQLCode <> 0 THEN
- ARG_MSG = '查询生产计划号失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
-
- INSERT INTO u_order_planmx_scll
- (scid,
- oplanid,
- orderid,
- ordercode,
- mtrlid,
- status,
- woodcode,
- pcode,
- qty,
- storageid)
- VALUES
- (:arg_scid,
- :arg_oplanid,
- :s_cs[m].orderid,
- :ls_ordercode,
- :s_cs[m].mtrlid,
- :s_cs[m].status,
- :s_cs[m].woodcode,
- :s_cs[m].pcode,
- :s_cs[m].qty,
- :ll_storageid);
- IF sqlca.SQLCode <> 0 THEN
- ARG_MSG = '建立领料明细失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- NEXT
- ext:
- IF rslt = 0 THEN
- ROLLBACK;
- ELSEIF rslt = 1 AND arg_ifcommit THEN
- COMMIT;
- END IF
- DESTROY uo_mrp_scll
- RETURN rslt
- end function
- public function integer getinfo_scll (long arg_scid, long arg_oplanid, ref s_order_planmx_scll arg_ref_planmx_scll[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1
- Long i = 1,no_mxcheck = 0
- IF arg_oplanid <= 0 THEN
- rslt = 0
- arg_msg = '错误单据唯一码'
- GOTO ext
- END IF
- //用游标读取明细
- DECLARE cur_planmx_scll CURSOR FOR
- SELECT u_order_planmx_scll.orderid,
- u_order_planmx_scll.ordercode,
- u_order_planmx_scll.mtrlid,
- u_order_planmx_scll.status,
- u_order_planmx_scll.woodcode,
- u_order_planmx_scll.pcode,
- u_order_planmx_scll.Qty,
- u_order_planmx_scll.storageid,
- u_mtrldef.mtrlcode
- FROM u_order_planmx_scll,
- u_mtrldef
- WHERE u_order_planmx_scll.oplanid = :arg_oplanid
- AND u_order_planmx_scll.scid = :arg_scid
- AND u_order_planmx_scll.mtrlid = u_mtrldef.mtrlid
- Order By u_order_planmx_scll.orderid,
- u_mtrldef.mtrlcode;
- OPEN cur_planmx_scll;
- FETCH cur_planmx_scll INTO :arg_ref_planmx_scll[i].orderid,
- :arg_ref_planmx_scll[i].ordercode,:arg_ref_planmx_scll[i].mtrlid,
- :arg_ref_planmx_scll[i].status,:arg_ref_planmx_scll[i].woodcode,
- :arg_ref_planmx_scll[i].pcode,:arg_ref_planmx_scll[i].Qty,
- :arg_ref_planmx_scll[i].storageid,:arg_ref_planmx_scll[i].mtrlcode;
- DO WHILE sqlca.SQLCode = 0
- i++
- FETCH cur_planmx_scll INTO :arg_ref_planmx_scll[i].orderid,:arg_ref_planmx_scll[i].ordercode,
- :arg_ref_planmx_scll[i].mtrlid,
- :arg_ref_planmx_scll[i].status,:arg_ref_planmx_scll[i].woodcode,
- :arg_ref_planmx_scll[i].pcode,:arg_ref_planmx_scll[i].Qty,
- :arg_ref_planmx_scll[i].storageid,:arg_ref_planmx_scll[i].mtrlcode;
- LOOP
- CLOSE cur_planmx_scll;
- //检验明细是否读入完整
- SELECT count(*) INTO :no_mxcheck
- FROM u_order_planmx_scll
- WHERE scid = :arg_scid
- AND oplanid = :arg_oplanid;
- 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
- arg_arr_cnt = i - 1
- ext:
- RETURN rslt
- end function
- public function integer addmxcmpl (long arg_scid, long arg_planid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
- Int li_flag,li_secflag,li_fflag
- Long cnt = 0
- IF arg_planid <= 0 THEN
- rslt = 0
- arg_msg = '错误派工单唯一码'
- GOTO ext
- END IF
- IF arg_addqty = 0 THEN
- rslt = 1
- GOTO ext
- END IF
- IF p_getflag(arg_scid,arg_planid,li_flag,li_secflag,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- IF li_flag = 0 THEN
- rslt = 0
- arg_msg = "派工单位未审核,不能操作"
- GOTO ext
- END IF
- SELECT fflag INTO :li_fflag
- FROM u_order_plan
- WHERE scid = :arg_scid
- AND oplanid = :arg_planid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询派工单完成标记失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- Decimal ls_qty,ls_fqty,ld_uprate
- SELECT u_order_planmx.qty,
- u_order_planmx.fqty,
- u_order_planmx.uprate
- INTO :ls_qty,
- :ls_fqty,
- :ld_uprate
- FROM u_order_planmx
- WHERE u_order_planmx.scid = :arg_scid
- AND u_order_planmx.oplanid = :arg_planid
- AND u_order_planmx.printid = :arg_printid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询派工单明细物料已完成数失败,'+sqlca.SQLErrText
- GOTO ext
- END IF
- IF (ls_qty - ls_fqty) * (1 + ld_uprate) < arg_addqty THEN
- rslt = 0
- arg_msg = "派工单明细未完成数量只有"+String(ls_qty - ls_fqty,'#,##0.0###')+",不能再完成"+String(arg_addqty,'#,##0.0#')+",允许超比例:"+String(ld_uprate,'#,##0.0#')
- GOTO ext
- END IF
- UPDATE u_order_planmx
- SET fqty = fqty + :arg_addqty
- WHERE u_order_planmx.scid = :arg_scid
- AND u_order_planmx.oplanid = :arg_planid
- AND u_order_planmx.printid = :arg_printid;
- 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 THEN
- COMMIT;
- END IF
- RETURN rslt
- end function
- public function integer tryfinish (long arg_scid, long arg_planid, ref string arg_msg, boolean arg_ifcommit);
- Int rslt = 1
- DateTime null_dt
- SetNull(null_dt)
- IF arg_planid <= 0 THEN
- rslt = 0
- arg_msg = '错误派工单唯一码'
- GOTO ext
- END IF
- Decimal ls_zerook
- Boolean if_finish
- if_finish = TRUE
- DECLARE zero_cur CURSOR FOR
- SELECT u_order_planmx.qty - u_order_planmx.fqty
- FROM u_order_planmx
- WHERE ( u_order_planmx.oplanid = :arg_planid )
- AND ( u_order_planmx.scid = :arg_scid );
- OPEN zero_cur;
- FETCH zero_cur INTO :ls_zerook;
- DO WHILE sqlca.SQLCode = 0
- IF if_finish THEN
- IF ls_zerook > 0 THEN if_finish = FALSE
- END IF
- FETCH zero_cur INTO :ls_zerook;
- LOOP
- CLOSE zero_cur;
- IF if_finish THEN
- UPDATE u_order_plan
- SET fflag = 1,
- fdate = getdate(),
- femp = :publ_operator
- WHERE ( u_order_plan.oplanid = :arg_planid )
- AND u_order_plan.scid = :arg_scid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = "因网络或其他原因导致更新派工单完成状态操作失败"+"~n"+sqlca.SQLErrText
- GOTO ext
- END IF
- END IF
- IF NOT if_finish THEN
- UPDATE u_order_plan
- SET fflag = 0,
- fdate = :null_dt,
- femp = ''
- WHERE ( u_order_plan.oplanid = :arg_planid )
- AND u_order_plan.scid = :arg_scid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = "因网络或其他原因导致更新派工单完成状态操作失败"+"~n"+sqlca.SQLErrText
- 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_order_plan.create
- call super::create
- TriggerEvent( this, "constructor" )
- end on
- on uo_order_plan.destroy
- TriggerEvent( this, "destructor" )
- call super::destroy
- end on
- event constructor;String arg_msg
- String str_optionvalue
- str_optionvalue = ''
- f_get_sys_option_value('211',str_optionvalue,arg_msg)
- uo_option_order_plan_scll = Long(str_optionvalue)
- end event
|