uo_inware_wfjg.sru 77 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051
  1. $PBExportHeader$uo_inware_wfjg.sru
  2. forward
  3. global type uo_inware_wfjg from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_inware_wfjg from nonvisualobject
  7. end type
  8. global uo_inware_wfjg uo_inware_wfjg
  9. type variables
  10. PUBLIC PROTECTEDWRITE Long scid = 0 //分部id
  11. PUBLIC PROTECTEDWRITE Long inwareid //进仓单表自动增量id
  12. PUBLIC PROTECTEDWRITE String inwarecode //单据的唯一编号
  13. PUBLIC PROTECTEDWRITE Int billtype = 0 //业务类型
  14. PUBLIC PROTECTEDWRITE DateTime opdate //建立时间,自动
  15. PUBLIC PROTECTEDWRITE String opemp //建立操作员
  16. PUBLIC PROTECTEDWRITE DateTime moddate //修改时间,自动
  17. PUBLIC PROTECTEDWRITE String modemp //修改操作员
  18. PUBLIC PROTECTEDWRITE Int flag = 0 //仓库审核标志
  19. PUBLIC PROTECTEDWRITE Int balcflag = 0 //仓库结存标志
  20. PUBLIC PROTECTEDWRITE DateTime auditingdate //审核时间
  21. PUBLIC PROTECTEDWRITE String auditingrep //审核操作员
  22. PUBLIC PROTECTEDWRITE Decimal sum_amt = 0 //单据总金额
  23. PUBLIC PROTECTEDWRITE Decimal jgsum_amt = 0 //单据加工总金额
  24. PUBLIC PROTECTEDWRITE Int secflag = 0 //财务审核标志
  25. PUBLIC PROTECTEDWRITE DateTime secauditingdate //二审核时间
  26. PUBLIC PROTECTEDWRITE String secauditingrep //二审核操作员
  27. Long relid = 0 //关联id
  28. Long storageid = 0 //进仓仓库
  29. DateTime indate //进仓发生时间
  30. String inrep = '' //经手人
  31. String part = '' //相关号码
  32. String dscrp = '' //备注
  33. Long sptid = 0 //供应商id
  34. String sptname = '' //供应商名称(不记帐模式使用)
  35. Int dxflag = 0 //代销标记
  36. Int thflag = 0 //退货标记
  37. Decimal otheramt = 0 //单据费用
  38. Long relint_1 = 0
  39. Long relint_2 = 0
  40. Long relint_3 = 0
  41. String relstr_1 = ''
  42. String relstr_2 = ''
  43. String relstr_3 = ''
  44. long moneyid = 0
  45. Boolean if_getid_ture = TRUE
  46. Transaction commit_transaction //数据commit事务
  47. s_wfjgmx_in_aft inwaremx[] //明细结构数组
  48. s_wfjgmx_in_bef inwaremx_bef[] //明细结构数组
  49. Long it_mxbt = 0 //明细结构数组末指针
  50. Long it_mxbt_bef = 0 //明细结构数组末指针
  51. Boolean it_newbegin = FALSE //新建标志
  52. Boolean it_updatebegin = FALSE //修改标志
  53. end variables
  54. forward prototypes
  55. public function integer save (boolean arg_ifcommit, ref string arg_msg)
  56. public function integer getinfo (long arg_scid, long arg_inwareid, ref string arg_msg)
  57. public function integer auditing (boolean arg_ifcommit, ref string arg_msg)
  58. public function integer del (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit)
  59. public function integer add_dscrp (long arg_scid, long arg_inwareid, string arg_newdescppart, ref string arg_msg)
  60. public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg)
  61. public function integer p_clearmx ()
  62. public function integer p_getinfo (long arg_scid, long arg_inwareid, ref string arg_msg)
  63. public function integer p_reset ()
  64. public function integer p_create_inware (boolean arg_ifcommit, ref string arg_msg)
  65. public function integer p_destroy_inware (boolean arg_ifcommit, ref string arg_msg)
  66. public function integer secauditing (boolean arg_ifcommit, ref string arg_msg)
  67. public function integer c_secauditing (boolean arg_ifcommit, ref string arg_msg)
  68. public function integer p_update_mtrlware (long arg_mtrlwareid, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_price, long arg_sptid, string arg_woodcode, string arg_pcode, ref string arg_msg)
  69. public function integer newbegin (long arg_scid, integer arg_billtype, ref string arg_msg)
  70. public function integer updatebegin (long arg_scid, long arg_inwareid, integer arg_billtype, ref string arg_msg)
  71. public function integer p_update_cost (long arg_mtrlwareid, string arg_mtrlcode, long arg_printid, ref decimal arg_ref_cost, ref string arg_msg, boolean arg_ifcommit)
  72. public function integer acceptmx_bef (long arg_mtrlwareid, decimal arg_qty, decimal arg_price, string arg_mxdscrp, long arg_printid, ref string arg_msg, string arg_unit, decimal arg_uqty, decimal arg_rate)
  73. public function integer acceptmx_bef_th (long arg_mtrlwareid, decimal arg_qty, decimal arg_price, string arg_mxdscrp, long arg_printid, ref string arg_msg, string arg_unit, decimal arg_uqty, decimal arg_rate, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status, string arg_woodcode, string arg_pcode)
  74. public function integer mod_price (long arg_scid, long arg_inwareid, long arg_printid, decimal arg_fprice, decimal arg_jgprice, decimal arg_rebate, decimal arg_tax, ref string arg_msg, boolean arg_ifcommit)
  75. public function integer acceptmx (long arg_printid, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status, decimal arg_uqty, decimal arg_fprice, decimal arg_rebate, string arg_mxdscrp, ref string arg_msg, decimal arg_jgprice, long arg_relid, long arg_relprintid, integer arg_ifrel, string arg_woodcode, string arg_pcode, long arg_cusid_sptid, string arg_unit, decimal arg_qty, long arg_storageid, decimal arg_rate, decimal arg_addqty, string arg_mxdscrp2, string arg_mxdscrp3, string arg_mxdscrp4)
  76. end prototypes
  77. public function integer save (boolean arg_ifcommit, ref string arg_msg);Integer rslt = 1,cnt = 0,i
  78. DateTime server_dt
  79. Long ls_newid
  80. String ls_sccode
  81. IF IsNull(relid) THEN relid = 0
  82. IF IsNull(storageid) THEN storageid = 0
  83. IF IsNull(inrep) THEN inrep = ''
  84. IF IsNull(dscrp) THEN dscrp = ''
  85. IF IsNull(part) THEN part = ''
  86. IF IsNull(sptid) THEN sptid = 0
  87. IF IsNull(sptname) THEN sptname = ''
  88. IF IsNull(dxflag) THEN dxflag = 0
  89. IF IsNull(thflag) THEN thflag = 0
  90. IF IsNull(relint_1) THEN relint_1 = 0
  91. IF IsNull(relint_2) THEN relint_2 = 0
  92. IF IsNull(relint_3) THEN relint_3 = 0
  93. IF IsNull(relstr_1) THEN relstr_1 = ''
  94. IF IsNull(relstr_2) THEN relstr_2 = ''
  95. IF IsNull(relstr_3) THEN relstr_3 = ''
  96. IF it_newbegin = False And it_updatebegin = False THEN
  97. rslt = 0
  98. arg_msg = "非编辑状态不可以提交"
  99. GOTO ext
  100. END IF
  101. SELECT Top 1 getdate() Into :server_dt From u_user Using commit_transaction ;
  102. //取得系统时间,借用操作员表
  103. IF commit_transaction.SQLCode <> 0 THEN
  104. rslt = 0
  105. arg_msg = "查询操作失败,日期 "
  106. GOTO ext
  107. END IF
  108. IF billtype <> 9 THEN
  109. IF it_mxbt = 0 THEN //如果输入物料资料错则已经清空
  110. rslt = 0
  111. arg_msg = "没有正确的外协收货明细内容"
  112. GOTO ext
  113. END IF
  114. IF sys_option_wfjg_outmx = 1 And it_mxbt_bef = 0 THEN
  115. rslt = 0
  116. arg_msg = "系统选项[079]限制,没有正确的外协商库存内容"
  117. GOTO ext
  118. END IF
  119. IF relint_1 = 0 THEN
  120. arg_msg = '请选择结算方式'
  121. rslt = 0
  122. GOTO ext
  123. END IF
  124. ELSE
  125. IF it_mxbt_bef = 0 THEN //如果输入物料资料错则已经清空
  126. rslt = 0
  127. arg_msg = "没有正确进仓内容"
  128. GOTO ext
  129. END IF
  130. END IF
  131. IF Year(Date(indate)) < 2000 Or IsNull(indate) THEN
  132. rslt = 0
  133. arg_msg = "缺少进仓发生时间或不合理"
  134. GOTO ext
  135. END IF
  136. //====================================================================
  137. // Script - save ( boolean arg_ifcommit, ref string arg_msg )
  138. // Reason:
  139. //--------------------------------------------------------------------
  140. // Modified By: yyx Date: 2004.01.02
  141. //--------------------------------------------------------------------
  142. IF DaysAfter(Date(String(server_dt,'yyyy-mm-dd')),Date(String(indate,'yyyy-mm-dd'))) > sys_option_input_days THEN
  143. rslt = 0
  144. arg_msg = '进仓日期错误,日期不能超前系统日期'
  145. GOTO ext
  146. END IF
  147. IF DaysAfter(Date(String(indate,'yyyy-mm-dd')),Date(String(server_dt,'yyyy-mm-dd'))) > sys_option_input_days THEN
  148. rslt = 0
  149. arg_msg = '进仓日期错误,日期不能落后系统日期'
  150. GOTO ext
  151. END IF
  152. //====================================================================
  153. SELECT name INTO :sptname
  154. FROM u_spt
  155. Where sptid = :sptid Using commit_transaction;
  156. IF commit_transaction.SQLCode <> 0 THEN
  157. rslt = 0
  158. arg_msg = "查询操作失败,供应商资料"
  159. GOTO ext
  160. END IF
  161. sptname = left(trim(sptname),30)
  162. ////////////////////////////////////////////// //开始区分:新建/更新 处理
  163. IF inwareid = 0 THEN //新建
  164. ls_newid = f_sys_scidentity(scid,"ow_wfjg_in","inwareid",arg_msg,if_getid_ture,commit_transaction)
  165. IF ls_newid <= 0 THEN
  166. rslt = 0
  167. GOTO ext
  168. END IF
  169. //取分部代号
  170. IF f_get_sccode(scid,commit_transaction,ls_sccode,arg_msg) = 0 THEN
  171. rslt = 0
  172. GOTO ext
  173. END IF
  174. //取得新单据编号
  175. CHOOSE CASE billtype
  176. CASE 4 //仓库外协
  177. IF thflag = 0 THEN
  178. inwarecode = getid(scid,ls_sccode + 'WI',Date(server_dt),if_getid_ture,commit_transaction)
  179. ELSE
  180. inwarecode = getid(scid,ls_sccode + 'WT',Date(server_dt),if_getid_ture,commit_transaction)
  181. END IF
  182. CASE 5 //车间外协
  183. IF thflag = 0 THEN
  184. inwarecode = getid(scid,ls_sccode + 'SI',Date(server_dt),if_getid_ture,commit_transaction)
  185. ELSE
  186. inwarecode = getid(scid,ls_sccode + 'ST',Date(server_dt),if_getid_ture,commit_transaction)
  187. END IF
  188. CASE 9 //外协盘亏 WK
  189. inwarecode = getid(scid,ls_sccode + 'WK',Date(server_dt),if_getid_ture,commit_transaction)
  190. END CHOOSE
  191. IF inwarecode = "err" THEN
  192. inwarecode = ''
  193. rslt = 0
  194. arg_msg = "无法获取进仓单编号"+"~n"+commit_transaction.SQLErrText
  195. GOTO ext
  196. END IF
  197. INSERT INTO ow_wfjg_in (
  198. scid,
  199. inwareid,
  200. inwarecode,
  201. billtype,
  202. relid,
  203. storageid,
  204. indate,
  205. inrep,
  206. part,
  207. dscrp,
  208. sptid,
  209. sptname,
  210. thflag,
  211. dxflag,
  212. otheramt,
  213. opdate,
  214. opemp,
  215. relint_1,
  216. relint_2,
  217. relint_3,
  218. relstr_1,
  219. relstr_2,
  220. relstr_3)
  221. VALUES (
  222. :scid,
  223. :ls_newid,
  224. :inwarecode,
  225. :billtype,
  226. :relid,
  227. :storageid,
  228. :indate,
  229. :inrep,
  230. :part,
  231. :dscrp,
  232. :sptid,
  233. :sptname,
  234. :thflag,
  235. :dxflag,
  236. :otheramt,
  237. :server_dt,
  238. :publ_operator,
  239. :relint_1,
  240. :relint_2,
  241. :relint_3,
  242. :relstr_1,
  243. :relstr_2,
  244. :relstr_3) Using commit_transaction ;
  245. IF commit_transaction.SQLCode <> 0 THEN
  246. rslt = 0
  247. IF Pos(Lower(commit_transaction.SQLErrText),'pk_ow_wfjg_in') > 0 THEN
  248. arg_msg = '插入操作失败,关键字分部ID、单据ID重复'
  249. ELSEIF Pos(Lower(commit_transaction.SQLErrText),'ix_ow_wfjg_in') > 0 THEN
  250. arg_msg = '插入操作失败,单据编号重复'
  251. ELSE
  252. arg_msg = "插入操作失败"+"~n"+commit_transaction.SQLErrText
  253. END IF
  254. GOTO ext
  255. END IF
  256. //读取新inwareid
  257. inwareid = ls_newid
  258. ELSE //////////////////////////////////////////////// //更新
  259. UPDATE ow_wfjg_in
  260. SET billtype = :billtype,
  261. relid = :relid,
  262. storageid = :storageid,
  263. indate = :indate,
  264. inrep = :inrep,
  265. part = :part,
  266. dscrp = :dscrp,
  267. sptid = :sptid,
  268. sptname = :sptname,
  269. thflag = :thflag,
  270. dxflag = :dxflag,
  271. otheramt = :otheramt,
  272. moddate = :server_dt,
  273. modemp = :publ_operator,
  274. relint_1 = :relint_1,
  275. relint_2 = :relint_2,
  276. relint_3 = :relint_3,
  277. relstr_1 = :relstr_1,
  278. relstr_2 = :relstr_2,
  279. relstr_3 = :relstr_3
  280. WHERE ow_wfjg_in.inwareid = :inwareid
  281. AND ow_wfjg_in.scid = :scid
  282. And flag = 0 Using commit_transaction;
  283. IF commit_transaction.SQLCode <> 0 Or commit_transaction.SQLNRows <= 0 THEN
  284. rslt = 0
  285. IF Pos(Lower(commit_transaction.SQLErrText),'pk_ow_wfjg_in') > 0 THEN
  286. arg_msg = '插入操作失败,关键字分部ID、单据ID重复'
  287. ELSEIF Pos(Lower(commit_transaction.SQLErrText),'ix_ow_wfjg_in') > 0 THEN
  288. arg_msg = '插入操作失败,单据编号重复'
  289. ELSE
  290. arg_msg = "插入操作失败"+"~n"+commit_transaction.SQLErrText
  291. END IF
  292. GOTO ext
  293. END IF
  294. //删除原有明细
  295. DELETE FROM ow_wfjgmx_in_aft
  296. WHERE ow_wfjgmx_in_aft.inwareid = :inwareid
  297. And ow_wfjgmx_in_aft.scid = :scid Using commit_transaction;
  298. IF commit_transaction.SQLCode <> 0 THEN
  299. rslt = 0
  300. arg_msg = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText
  301. GOTO ext
  302. END IF
  303. //删除原有明细
  304. DELETE FROM ow_wfjgmx_in_bef
  305. WHERE ow_wfjgmx_in_bef.inwareid = :inwareid
  306. And ow_wfjgmx_in_bef.scid = :scid Using commit_transaction;
  307. IF commit_transaction.SQLCode <> 0 THEN
  308. rslt = 0
  309. arg_msg = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText
  310. GOTO ext
  311. END IF
  312. END IF
  313. FOR i = 1 To it_mxbt
  314. INSERT INTO ow_wfjgmx_in_aft
  315. (scid,
  316. inwareid,
  317. printid,
  318. mtrlid,
  319. plancode,
  320. status,
  321. qty,
  322. fprice,
  323. rebate,
  324. price,
  325. planprice,
  326. mxdscrp,
  327. jgprice,
  328. relid,
  329. relprintid,
  330. ifrel,
  331. woodcode,
  332. relcode,
  333. pcode,
  334. sptid_cusid,
  335. cost,
  336. sptmtrlname,
  337. unit,
  338. rate,
  339. uprice,
  340. uqty,
  341. bootqty,
  342. noauditqty,
  343. storageid,
  344. addqty,
  345. mxdscrp2,
  346. mxdscrp3,
  347. mxdscrp4)
  348. VALUES (
  349. :scid,
  350. :inwareid,
  351. :inwaremx[i].printid,
  352. :inwaremx[i].mtrlid,
  353. :inwaremx[i].plancode,
  354. :inwaremx[i].status,
  355. :inwaremx[i].qty,
  356. :inwaremx[i].fprice,
  357. :inwaremx[i].rebate,
  358. :inwaremx[i].price,
  359. :inwaremx[i].planprice,
  360. :inwaremx[i].mxdscrp,
  361. :inwaremx[i].jgprice,
  362. :inwaremx[i].relid,
  363. :inwaremx[i].relprintid,
  364. :inwaremx[i].ifrel,
  365. :inwaremx[i].woodcode,
  366. :inwaremx[i].relcode,
  367. :inwaremx[i].pcode,
  368. :inwaremx[i].sptid,
  369. :inwaremx[i].cost,
  370. :inwaremx[i].sptmtrlname,
  371. :inwaremx[i].unit,
  372. :inwaremx[i].rate,
  373. :inwaremx[i].uprice,
  374. :inwaremx[i].uqty,
  375. :inwaremx[i].bootqty,
  376. :inwaremx[i].noauditqty,
  377. :inwaremx[i].storageid,
  378. :inwaremx[i].addqty,
  379. :inwaremx[i].mxdscrp2,
  380. :inwaremx[i].mxdscrp3,
  381. :inwaremx[i].mxdscrp4) Using commit_transaction;
  382. IF commit_transaction.SQLCode <> 0 THEN
  383. IF it_newbegin THEN inwareid = 0 //还原inwareid
  384. rslt = 0
  385. IF Pos(Lower(commit_transaction.SQLErrText),'pk_ow_wfjgmx_in_aft') > 0 THEN
  386. arg_msg = '插入收货明细操作失败,关键字分部ID、单据ID、明细ID重复'
  387. ELSE
  388. arg_msg = "插入收货明细操作失败"+"~n"+commit_transaction.SQLErrText
  389. END IF
  390. GOTO ext
  391. END IF
  392. NEXT
  393. //messagebox("",it_mxbt_bef)
  394. FOR i = 1 To it_mxbt_bef
  395. INSERT INTO ow_wfjgmx_in_bef
  396. (scid,
  397. inwareid,
  398. mtrlwareid,
  399. mtrlid,
  400. status,
  401. woodcode,
  402. pcode,
  403. plancode,
  404. qty,
  405. fprice,
  406. printid,
  407. mxdscrp,
  408. rate,
  409. uqty,
  410. unit)
  411. VALUES (
  412. :scid,
  413. :inwareid,
  414. :inwaremx_bef[i].mtrlwareid,
  415. :inwaremx_bef[i].mtrlid,
  416. :inwaremx_bef[i].status,
  417. :inwaremx_bef[i].woodcode,
  418. :inwaremx_bef[i].pcode,
  419. :inwaremx_bef[i].plancode,
  420. abs(:inwaremx_bef[i].qty),
  421. :inwaremx_bef[i].fprice,
  422. :inwaremx_bef[i].printid,
  423. :inwaremx_bef[i].mxdscrp,
  424. :inwaremx_bef[i].rate,
  425. abs(:inwaremx_bef[i].uqty),
  426. :inwaremx_bef[i].unit
  427. ) Using commit_transaction;
  428. IF commit_transaction.SQLCode <> 0 THEN
  429. IF it_newbegin THEN inwareid = 0 //还原inwareid
  430. rslt = 0
  431. IF Pos(Lower(commit_transaction.SQLErrText),'pk_ow_wfjgmx_in_bef') > 0 THEN
  432. arg_msg = '插入发料明细操作失败,关键字分部ID、单据ID、明细ID重复'
  433. ELSE
  434. arg_msg = "插入发料明细操作失败"+"~n"+commit_transaction.SQLErrText
  435. END IF
  436. GOTO ext
  437. END IF
  438. NEXT
  439. it_newbegin = False
  440. it_updatebegin = False
  441. ext:
  442. IF rslt = 0 THEN
  443. ROLLBACK Using commit_transaction;
  444. p_clearmx()
  445. ELSEIF rslt = 1 And arg_ifcommit THEN
  446. COMMIT Using commit_transaction;
  447. END IF
  448. IF billtype = 4 THEN
  449. IF thflag = 0 THEN
  450. arg_msg = '仓库外协收货单,'+ arg_msg
  451. ELSE
  452. arg_msg = '仓库外协返工单,'+ arg_msg
  453. END IF
  454. ELSEIF billtype = 5 THEN
  455. IF thflag = 0 THEN
  456. arg_msg = '车间外协收货单,'+ arg_msg
  457. ELSE
  458. arg_msg = '车间外协返工单,'+ arg_msg
  459. END IF
  460. ELSEIF billtype = 9 THEN
  461. arg_msg = '外协盘亏单,'+ arg_msg
  462. END IF
  463. RETURN rslt
  464. end function
  465. public function integer getinfo (long arg_scid, long arg_inwareid, ref string arg_msg);//getinfo(arg_scid,arg_inwareid,arg_msg)
  466. //0 失败 1成功
  467. Int rslt = 1,i = 1,no_mxcheck = 0,j = 1,no_mxcheck_bef = 0
  468. jgsum_amt = 0
  469. sum_amt = 0
  470. IF arg_inwareid <= 0 THEN
  471. rslt = 0
  472. arg_msg = "非法进仓单唯一码"
  473. GOTO ext
  474. END IF
  475. rslt = p_getinfo(arg_scid,arg_inwareid,arg_msg)
  476. IF rslt = 0 THEN GOTO ext
  477. //用游标读取明细
  478. DECLARE cur_inwaermx CURSOR FOR
  479. SELECT ow_wfjgmx_in_aft.printid,
  480. ow_wfjgmx_in_aft.mtrlid,
  481. ow_wfjgmx_in_aft.plancode,
  482. ow_wfjgmx_in_aft.status,
  483. ow_wfjgmx_in_aft.qty,
  484. ow_wfjgmx_in_aft.fprice,
  485. ow_wfjgmx_in_aft.rebate,
  486. ow_wfjgmx_in_aft.price,
  487. ow_wfjgmx_in_aft.planprice,
  488. ow_wfjgmx_in_aft.mxdscrp,
  489. u_mtrldef.mtrlcode,
  490. ow_wfjgmx_in_aft.jgprice,
  491. ow_wfjgmx_in_aft.relid,
  492. ow_wfjgmx_in_aft.relprintid,
  493. ow_wfjgmx_in_aft.ifrel,
  494. ow_wfjgmx_in_aft.woodcode,
  495. ow_wfjgmx_in_aft.pcode,
  496. ow_wfjgmx_in_aft.plancode,
  497. ow_wfjgmx_in_aft.sptid_cusid,
  498. ow_wfjgmx_in_aft.cost,
  499. ow_wfjgmx_in_aft.sptmtrlname,
  500. ow_wfjgmx_in_aft.unit,
  501. ow_wfjgmx_in_aft.uqty,
  502. ow_wfjgmx_in_aft.uprice,
  503. ow_wfjgmx_in_aft.rate,
  504. ow_wfjgmx_in_aft.bootqty,
  505. ow_wfjgmx_in_aft.noauditqty,
  506. ow_wfjgmx_in_aft.storageid,
  507. ow_wfjgmx_in_aft.addqty
  508. FROM ow_wfjgmx_in_aft,u_mtrldef,ow_wfjg_in
  509. WHERE ow_wfjg_in.inwareid = :arg_inwareid AND
  510. ow_wfjgmx_in_aft.mtrlid = u_mtrldef.mtrlid AND
  511. ow_wfjg_in.scid = :arg_scid AND
  512. ow_wfjg_in.inwareid = ow_wfjgmx_in_aft.inwareid AND
  513. ow_wfjg_in.scid = ow_wfjgmx_in_aft.scid USING commit_transaction;
  514. OPEN cur_inwaermx;
  515. FETCH cur_inwaermx INTO :inwaremx[i].printid,:inwaremx[i].mtrlid,:inwaremx[i].plancode,
  516. :inwaremx[i].status,:inwaremx[i].qty,:inwaremx[i].fprice,
  517. :inwaremx[i].rebate,:inwaremx[i].price,:inwaremx[i].planprice,
  518. :inwaremx[i].mxdscrp,:inwaremx[i].mtrlcode,:inwaremx[i].jgprice,
  519. :inwaremx[i].relid,:inwaremx[i].relprintid,:inwaremx[i].ifrel,:inwaremx[i].woodcode,
  520. :inwaremx[i].pcode,:inwaremx[i].plancode,:inwaremx[i].sptid,
  521. :inwaremx[i].cost,:inwaremx[i].sptmtrlname,:inwaremx[i].unit,
  522. :inwaremx[i].uqty,:inwaremx[i].uprice,:inwaremx[i].rate,
  523. :inwaremx[i].bootqty,:inwaremx[i].noauditqty,:inwaremx[i].storageid,
  524. :inwaremx[i].addqty;
  525. inwaremx[i].dxflag = dxflag
  526. DO WHILE commit_transaction.SQLCode = 0
  527. jgsum_amt = jgsum_amt+ round( inwaremx[i].uqty * inwaremx[i].jgprice * inwaremx[i].rebate,2) //计算单据加工总金额
  528. sum_amt = sum_amt+ round( inwaremx[i].uqty * inwaremx[i].uprice * inwaremx[i].rebate,2) //计算单据总金额
  529. i++
  530. FETCH cur_inwaermx INTO :inwaremx[i].printid,:inwaremx[i].mtrlid,:inwaremx[i].plancode,
  531. :inwaremx[i].status,:inwaremx[i].qty,:inwaremx[i].fprice,
  532. :inwaremx[i].rebate,:inwaremx[i].price,:inwaremx[i].planprice,
  533. :inwaremx[i].mxdscrp,:inwaremx[i].mtrlcode,:inwaremx[i].jgprice,
  534. :inwaremx[i].relid,:inwaremx[i].relprintid,:inwaremx[i].ifrel,:inwaremx[i].woodcode,
  535. :inwaremx[i].pcode,:inwaremx[i].plancode,:inwaremx[i].sptid,
  536. :inwaremx[i].cost,:inwaremx[i].sptmtrlname,:inwaremx[i].unit,
  537. :inwaremx[i].uqty,:inwaremx[i].uprice,:inwaremx[i].rate,
  538. :inwaremx[i].bootqty,:inwaremx[i].noauditqty,:inwaremx[i].storageid,
  539. :inwaremx[i].addqty;
  540. inwaremx[i].dxflag = dxflag
  541. LOOP
  542. CLOSE cur_inwaermx;
  543. //检验明细是否读入完整
  544. SELECT count(*) INTO :no_mxcheck
  545. FROM ow_wfjgmx_in_aft,u_mtrldef,ow_wfjg_in
  546. WHERE ow_wfjg_in.inwareid = :arg_inwareid AND
  547. ow_wfjgmx_in_aft.mtrlid = u_mtrldef.mtrlid AND
  548. ow_wfjg_in.scid = :arg_scid AND
  549. ow_wfjg_in.inwareid = ow_wfjgmx_in_aft.inwareid AND
  550. ow_wfjg_in.scid = ow_wfjgmx_in_aft.scid USING commit_transaction;
  551. IF commit_transaction.SQLCode <> 0 THEN
  552. rslt = 0
  553. arg_msg = "查询操作失败,外协收货单明细数量"
  554. GOTO ext
  555. END IF
  556. IF i <> (no_mxcheck+1) THEN
  557. rslt = 0
  558. arg_msg = "查询操作失败,外协收货单明细"
  559. GOTO ext
  560. END IF
  561. //用游标读取明细
  562. DECLARE cur_inwaermx_bef CURSOR FOR
  563. SELECT ow_wfjgmx_in_bef.mtrlwareid,
  564. ow_wfjgmx_in_bef.printid,
  565. ow_wfjgmx_in_bef.mtrlid,
  566. ow_wfjgmx_in_bef.plancode,
  567. ow_wfjgmx_in_bef.status,
  568. ow_wfjgmx_in_bef.qty,
  569. ow_wfjgmx_in_bef.fprice,
  570. ow_wfjgmx_in_bef.mxdscrp,
  571. u_mtrldef.mtrlcode,
  572. ow_wfjgmx_in_bef.woodcode,
  573. ow_wfjgmx_in_bef.pcode,
  574. ow_wfjgmx_in_bef.plancode
  575. FROM ow_wfjgmx_in_bef,u_mtrldef,ow_wfjg_in
  576. WHERE ow_wfjg_in.inwareid = :arg_inwareid AND
  577. ow_wfjgmx_in_bef.mtrlid = u_mtrldef.mtrlid AND
  578. ow_wfjg_in.scid = :arg_scid AND
  579. ow_wfjg_in.inwareid = ow_wfjgmx_in_bef.inwareid AND
  580. ow_wfjg_in.scid = ow_wfjgmx_in_bef.scid
  581. USING commit_transaction;
  582. OPEN cur_inwaermx_bef;
  583. FETCH cur_inwaermx_bef INTO :inwaremx_bef[j].mtrlwareid,
  584. :inwaremx_bef[j].printid,
  585. :inwaremx_bef[j].mtrlid,:inwaremx_bef[j].plancode,
  586. :inwaremx_bef[j].status,:inwaremx_bef[j].qty,:inwaremx_bef[j].fprice,
  587. :inwaremx_bef[j].mxdscrp,
  588. :inwaremx_bef[j].mtrlcode,:inwaremx_bef[j].woodcode,
  589. :inwaremx_bef[j].pcode,:inwaremx_bef[j].plancode;
  590. DO WHILE commit_transaction.SQLCode = 0
  591. j++
  592. FETCH cur_inwaermx_bef INTO :inwaremx_bef[j].mtrlwareid,
  593. :inwaremx_bef[j].printid,
  594. :inwaremx_bef[j].mtrlid,:inwaremx_bef[j].plancode,
  595. :inwaremx_bef[j].status,:inwaremx_bef[j].qty,:inwaremx_bef[j].fprice,
  596. :inwaremx_bef[j].mxdscrp,
  597. :inwaremx_bef[j].mtrlcode,:inwaremx_bef[j].woodcode,
  598. :inwaremx_bef[j].pcode,:inwaremx_bef[j].plancode;
  599. LOOP
  600. CLOSE cur_inwaermx_bef;
  601. //检验明细是否读入完整
  602. SELECT count(*) INTO :no_mxcheck_bef
  603. FROM ow_wfjgmx_in_bef,u_mtrldef,ow_wfjg_in
  604. WHERE ow_wfjg_in.inwareid = :arg_inwareid AND
  605. ow_wfjgmx_in_bef.mtrlid = u_mtrldef.mtrlid AND
  606. ow_wfjg_in.scid = :arg_scid AND
  607. ow_wfjg_in.inwareid = ow_wfjgmx_in_bef.inwareid AND
  608. ow_wfjg_in.scid = ow_wfjgmx_in_bef.scid
  609. USING commit_transaction;
  610. IF commit_transaction.SQLCode <> 0 THEN
  611. rslt = 0
  612. arg_msg = "查询操作失败,外协收货单相关发外明细数量"
  613. GOTO ext
  614. END IF
  615. IF j <> (no_mxcheck_bef+1) THEN
  616. rslt = 0
  617. arg_msg = "查询操作失败,外协收货单相关发外明细"
  618. GOTO ext
  619. END IF
  620. inwareid = arg_inwareid
  621. scid = arg_scid
  622. it_mxbt = i - 1
  623. it_mxbt_bef = j - 1
  624. it_newbegin = FALSE
  625. it_updatebegin = FALSE
  626. ext:
  627. IF rslt = 0 THEN p_reset()
  628. if billtype = 4 then
  629. if thflag = 0 then
  630. arg_msg = '仓库外协收货单,'+ arg_msg
  631. else
  632. arg_msg = '仓库外协返工单,'+ arg_msg
  633. end if
  634. elseif billtype = 5 then
  635. if thflag = 0 then
  636. arg_msg = '车间外协收货单,'+ arg_msg
  637. else
  638. arg_msg = '车间外协返工单,'+ arg_msg
  639. end if
  640. end if
  641. RETURN rslt
  642. end function
  643. public function integer auditing (boolean arg_ifcommit, ref string arg_msg);
  644. Long rslt = 1,cnt = 0,i
  645. Dec new_noallocqty = 0
  646. Long ls_newid
  647. decimal ls_qty
  648. uo_order_wfjg uo_wfjg
  649. uo_wfjg = CREATE uo_order_wfjg
  650. uo_wfjg.commit_transaction = commit_transaction
  651. uo_spt_price uo_sptprice
  652. uo_sptprice = CREATE uo_spt_price
  653. IF inwareid = 0 THEN
  654. rslt = 0
  655. arg_msg = "没有审核对象"
  656. GOTO ext
  657. END IF
  658. IF it_newbegin OR it_updatebegin THEN
  659. rslt = 0
  660. arg_msg = "编辑状态下不可以执行审核"
  661. GOTO ext
  662. END IF
  663. IF flag = 1 THEN
  664. rslt = 0
  665. arg_msg = "单据已经审核"
  666. GOTO ext
  667. END IF
  668. UPDATE ow_wfjg_in
  669. SET auditingrep = :publ_operator,
  670. auditingdate = getdate(),
  671. flag = 1
  672. WHERE ow_wfjg_in.inwareid = :inwareid
  673. AND flag = 0 AND scid = :scid USING commit_transaction;
  674. IF commit_transaction.SQLCode <> 0 THEN
  675. rslt = 0
  676. arg_msg = "审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  677. GOTO ext
  678. ELSEIF commit_transaction.SQLNRows = 0 THEN
  679. rslt = 0
  680. arg_msg = "单据正在审核,请稍后查询。"
  681. GOTO ext
  682. END IF
  683. IF billtype = 4 THEN
  684. IF p_create_inware( FALSE, arg_msg ) = 0 THEN
  685. rslt = 0
  686. GOTO ext
  687. END IF
  688. END IF
  689. FOR i = 1 TO it_mxbt_bef
  690. Decimal ld_ref_cost
  691. IF p_update_cost(inwaremx_bef[i].mtrlwareid,inwaremx_bef[i].mtrlcode,&
  692. inwaremx_bef[i].printid,ld_ref_cost,arg_msg,FALSE) = 0 THEN
  693. rslt = 0
  694. GOTO ext
  695. END IF
  696. IF thflag = 1 THEN //DXY
  697. ls_qty = 0 - abs(inwaremx_bef[i].qty)
  698. ELSE
  699. ls_qty = inwaremx_bef[i].qty
  700. END IF
  701. IF p_update_mtrlware( inwaremx_bef[i].mtrlwareid,&
  702. inwaremx_bef[i].mtrlid,&
  703. inwaremx_bef[i].mtrlcode,&
  704. inwaremx_bef[i].plancode,&
  705. inwaremx_bef[i].status,&
  706. ls_qty,&
  707. ld_ref_cost,&
  708. sptid,&
  709. inwaremx_bef[i].woodcode,&
  710. inwaremx_bef[i].pcode,&
  711. arg_msg) = 0 THEN
  712. rslt = 0
  713. GOTO ext
  714. END IF
  715. // IF f_update_mtrlware_spt_in(billtype,&
  716. // thflag,&
  717. // inwaremx_bef[i].mtrlwareid,&
  718. // inwaremx_bef[i].mtrlid,&
  719. // inwaremx_bef[i].mtrlcode,&
  720. // inwaremx_bef[i].plancode,&
  721. // inwaremx_bef[i].status,&
  722. // inwaremx_bef[i].qty,&
  723. // ld_ref_cost,&
  724. // sptid,&
  725. // inwaremx_bef[i].woodcode,&
  726. // inwaremx_bef[i].pcode,&
  727. // arg_msg,FALSE,commit_transaction) = 0 THEN
  728. // rslt = 0
  729. // GOTO ext
  730. // END IF
  731. NEXT
  732. FOR i = 1 TO it_mxbt
  733. IF inwaremx[i].relid > 0 THEN
  734. IF uo_wfjg.addmxcmpl(scid,inwaremx[i].relid,inwaremx[i].mtrlid,0,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwaremx[i].qty,arg_msg,FALSE,inwaremx[i].relprintid) <> 1 THEN
  735. rslt = 0
  736. GOTO ext
  737. END IF
  738. IF uo_wfjg.trycmplbuytask(scid,inwaremx[i].relid,arg_msg,FALSE) = 0 THEN
  739. rslt = 0
  740. GOTO ext
  741. END IF
  742. END IF
  743. IF uo_sptprice.uf_update_sptprice(thflag,sptid,inwaremx[i].mtrlid,inwaremx[i].unit,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,&
  744. inwareid,moneyid,inwaremx[i].jgprice,inwaremx[i].rebate,inwaremx[i].rate,inwaremx[i].price,indate,inwarecode,0,inwaremx[i].mxdscrp,inwaremx[i].printid,4,FALSE,arg_msg) = 0 THEN
  745. rslt = 0
  746. GOTO ext
  747. END IF
  748. NEXT
  749. flag = 1
  750. ext:
  751. IF rslt = 0 THEN
  752. ROLLBACK USING commit_transaction;
  753. ELSEIF rslt = 1 AND arg_ifcommit THEN
  754. COMMIT USING commit_transaction;
  755. END IF
  756. IF billtype = 4 THEN
  757. IF thflag = 0 THEN
  758. arg_msg = '仓库外协收货单,'+ arg_msg
  759. ELSE
  760. arg_msg = '仓库外协返工单,'+ arg_msg
  761. END IF
  762. ELSEIF billtype = 5 THEN
  763. IF thflag = 0 THEN
  764. arg_msg = '车间外协收货单,'+ arg_msg
  765. ELSE
  766. arg_msg = '车间外协返工单,'+ arg_msg
  767. END IF
  768. END IF
  769. DESTROY uo_wfjg
  770. DESTROY uo_sptprice
  771. RETURN rslt
  772. end function
  773. public function integer del (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit);//del(arg_scid,arg_inwareid,arg_msg)
  774. //如果单据还没有审核删除单据极其明细
  775. //0 fail, 1 success
  776. Int rslt = 1
  777. IF arg_inwareid = 0 THEN
  778. rslt = 0
  779. arg_msg = "没有删除对象,操作取消"
  780. GOTO ext
  781. END IF
  782. rslt = p_getinfo(arg_scid,arg_inwareid,arg_msg)
  783. IF rslt = 0 THEN GOTO ext
  784. IF flag = 1 THEN
  785. rslt = 0
  786. arg_msg = "单据已经审核,不可以删除"
  787. GOTO ext
  788. END IF
  789. DELETE FROM ow_wfjgmx_in_aft
  790. WHERE ow_wfjgmx_in_aft.inwareid = :arg_inwareid
  791. And ow_wfjgmx_in_aft.scid = :arg_scid Using commit_transaction;
  792. IF commit_transaction.SQLCode <> 0 THEN
  793. rslt = 0
  794. arg_msg = "删除外协收货单明细操作失败"+"~n"+commit_transaction.SQLErrText
  795. GOTO ext
  796. END IF
  797. DELETE FROM ow_wfjgmx_in_bef
  798. WHERE ow_wfjgmx_in_bef.inwareid = :arg_inwareid
  799. And ow_wfjgmx_in_bef.scid = :arg_scid Using commit_transaction;
  800. IF commit_transaction.SQLCode <> 0 THEN
  801. rslt = 0
  802. arg_msg = "删除外协收货单相关发外明细操作失败"+"~n"+commit_transaction.SQLErrText
  803. GOTO ext
  804. END IF
  805. DELETE FROM ow_wfjg_in
  806. WHERE ow_wfjg_in.inwareid = :arg_inwareid
  807. And scid = :arg_scid Using commit_transaction;
  808. IF commit_transaction.SQLCode <> 0 THEN
  809. rslt = 0
  810. arg_msg = "删除进仓单操作失败"+"~n"+commit_transaction.SQLErrText
  811. GOTO ext
  812. END IF
  813. it_newbegin = False
  814. it_updatebegin = False
  815. ext:
  816. IF rslt = 0 THEN
  817. ROLLBACK Using commit_transaction;
  818. ELSEIF rslt = 1 And arg_ifcommit THEN
  819. COMMIT Using commit_transaction;
  820. END IF
  821. p_reset()
  822. IF billtype = 4 THEN
  823. IF thflag = 0 THEN
  824. arg_msg = '仓库外协收货单,'+ arg_msg
  825. ELSE
  826. arg_msg = '仓库外协返工单,'+ arg_msg
  827. END IF
  828. ELSEIF billtype = 5 THEN
  829. IF thflag = 0 THEN
  830. arg_msg = '车间外协收货单,'+ arg_msg
  831. ELSE
  832. arg_msg = '车间外协返工单,'+ arg_msg
  833. END IF
  834. END IF
  835. RETURN rslt
  836. end function
  837. public function integer add_dscrp (long arg_scid, long arg_inwareid, string arg_newdescppart, ref string arg_msg);//add_dscrp(string arg_newdescppart)
  838. //0 fail 1 success
  839. Int rslt = 1
  840. arg_newdescppart = Trim(arg_newdescppart)
  841. IF it_updatebegin Or it_newbegin THEN
  842. rslt = 0
  843. arg_msg = "编辑状态下不可用"
  844. GOTO ext
  845. END IF
  846. IF arg_newdescppart = '' THEN
  847. rslt = 0
  848. arg_msg = "要添加内容为空,操作取消"
  849. GOTO ext
  850. END IF
  851. rslt = p_getinfo(arg_scid,arg_inwareid,arg_msg)
  852. IF rslt = 0 THEN GOTO ext
  853. IF flag = 0 THEN
  854. rslt = 0
  855. arg_msg = "非审核状态下不可用"
  856. GOTO ext
  857. END IF
  858. UPDATE ow_wfjg_in
  859. SET dscrp = dscrp+' '+:arg_newdescppart
  860. WHERE ow_wfjg_in.inwareid = :inwareid
  861. And scid = :scid Using commit_transaction;
  862. IF commit_transaction.SQLCode <> 0 THEN
  863. rslt = 0
  864. arg_msg = "添加单据备注操作失败"+"~n"+commit_transaction.SQLErrText
  865. GOTO ext
  866. END IF
  867. dscrp = dscrp+' '+arg_newdescppart
  868. ext:
  869. IF rslt = 0 THEN
  870. ROLLBACK Using commit_transaction;
  871. ELSE
  872. COMMIT Using commit_transaction;
  873. END IF
  874. IF billtype = 4 THEN
  875. IF thflag = 0 THEN
  876. arg_msg = '仓库外协收货单,'+ arg_msg
  877. ELSE
  878. arg_msg = '仓库外协返工单,'+ arg_msg
  879. END IF
  880. ELSEIF billtype = 5 THEN
  881. IF thflag = 0 THEN
  882. arg_msg = '车间外协收货单,'+ arg_msg
  883. ELSE
  884. arg_msg = '车间外协返工单,'+ arg_msg
  885. END IF
  886. END IF
  887. Return (rslt)
  888. end function
  889. public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg);
  890. Long rslt = 1,cnt = 0,i
  891. Dec new_noallocqty = 0
  892. Long ls_newid
  893. DateTime null_dt
  894. decimal ls_qty
  895. uo_order_wfjg uo_wfjg
  896. uo_wfjg = Create uo_order_wfjg
  897. uo_wfjg.commit_transaction = commit_transaction
  898. uo_spt_price uo_sptprice
  899. uo_sptprice = Create uo_spt_price
  900. SetNull(null_dt)
  901. IF inwareid = 0 THEN
  902. rslt = 0
  903. arg_msg = "没有审核对象"
  904. GOTO ext
  905. END IF
  906. IF it_newbegin Or it_updatebegin THEN
  907. rslt = 0
  908. arg_msg = "编辑状态下不可以执行审核"
  909. GOTO ext
  910. END IF
  911. IF flag = 0 THEN
  912. rslt = 0
  913. arg_msg = "单据还未审核"
  914. GOTO ext
  915. END IF
  916. IF balcflag = 1 THEN
  917. rslt = 0
  918. arg_msg = "单据已经结存,不能撤审"
  919. GOTO ext
  920. END IF
  921. UPDATE ow_wfjg_in
  922. SET auditingrep = '',
  923. auditingdate = :null_dt,
  924. flag = 0
  925. WHERE ow_wfjg_in.inwareid = :inwareid
  926. And flag = 1 And scid = :scid Using commit_transaction;
  927. IF commit_transaction.SQLCode <> 0 THEN
  928. rslt = 0
  929. arg_msg = "审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  930. GOTO ext
  931. ELSEIF commit_transaction.SQLNRows = 0 THEN
  932. rslt = 0
  933. arg_msg = "单据正在撤审,请稍后查询。"
  934. GOTO ext
  935. END IF
  936. IF billtype = 4 THEN
  937. IF p_destroy_inware( False, arg_msg ) = 0 THEN
  938. rslt = 0
  939. GOTO ext
  940. END IF
  941. END IF
  942. FOR i = 1 To it_mxbt_bef
  943. IF thflag = 1 THEN //DXY
  944. ls_qty = abs(inwaremx_bef[i].qty)
  945. ELSE
  946. ls_qty = 0 - inwaremx_bef[i].qty
  947. END IF
  948. IF p_update_mtrlware( inwaremx_bef[i].mtrlwareid,&
  949. inwaremx_bef[i].mtrlid,&
  950. inwaremx_bef[i].mtrlcode,&
  951. inwaremx_bef[i].plancode,&
  952. inwaremx_bef[i].status,&
  953. ls_qty,&
  954. inwaremx_bef[i].fprice,&
  955. sptid,&
  956. inwaremx_bef[i].woodcode,&
  957. inwaremx_bef[i].pcode,&
  958. arg_msg) = 0 THEN
  959. rslt = 0
  960. GOTO ext
  961. END IF
  962. // IF f_update_mtrlware_spt_in(billtype,&
  963. // thflag,&
  964. // inwaremx_bef[i].mtrlwareid,&
  965. // inwaremx_bef[i].mtrlid,&
  966. // inwaremx_bef[i].mtrlcode,&
  967. // inwaremx_bef[i].plancode,&
  968. // inwaremx_bef[i].status,&
  969. // 0 - inwaremx_bef[i].qty,&
  970. // inwaremx_bef[i].fprice,&
  971. // sptid,&
  972. // inwaremx_bef[i].woodcode,&
  973. // inwaremx_bef[i].pcode,&
  974. // arg_msg,false,commit_transaction) = 0 THEN
  975. // rslt = 0
  976. // GOTO ext
  977. // END IF
  978. NEXT
  979. FOR i = 1 To it_mxbt
  980. //更新合同完成数量
  981. IF inwaremx[i].relid > 0 THEN
  982. IF uo_wfjg.addmxcmpl(scid,inwaremx[i].relid,inwaremx[i].mtrlid,0,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode, 0 - inwaremx[i].qty,arg_msg,False,inwaremx[i].relprintid) <> 1 THEN
  983. rslt = 0
  984. GOTO ext
  985. END IF
  986. IF uo_wfjg.trycmplbuytask(scid,inwaremx[i].relid,arg_msg,False) = 0 THEN
  987. rslt = 0
  988. GOTO ext
  989. END IF
  990. END IF
  991. IF uo_sptprice.uf_del_sptprice(thflag,sptid,inwaremx[i].mtrlid,inwaremx[i].unit,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwareid,inwaremx[i].printid,moneyid,False,arg_msg) = 0 THEN
  992. rslt = 0
  993. GOTO ext
  994. END IF
  995. NEXT
  996. flag = 0
  997. ext:
  998. IF rslt = 0 THEN
  999. ROLLBACK Using commit_transaction;
  1000. ELSEIF rslt = 1 And arg_ifcommit THEN
  1001. COMMIT Using commit_transaction;
  1002. END IF
  1003. IF billtype = 4 THEN
  1004. IF thflag = 0 THEN
  1005. arg_msg = '仓库外协收货单,'+ arg_msg
  1006. ELSE
  1007. arg_msg = '仓库外协返工单,'+ arg_msg
  1008. END IF
  1009. ELSEIF billtype = 5 THEN
  1010. IF thflag = 0 THEN
  1011. arg_msg = '车间外协收货单,'+ arg_msg
  1012. ELSE
  1013. arg_msg = '车间外协返工单,'+ arg_msg
  1014. END IF
  1015. END IF
  1016. Destroy uo_wfjg
  1017. Destroy uo_sptprice
  1018. RETURN rslt
  1019. end function
  1020. public function integer p_clearmx ();//int p_clearmx()
  1021. //清除明细
  1022. it_mxbt=0
  1023. it_mxbt_bef=0
  1024. return 1
  1025. end function
  1026. public function integer p_getinfo (long arg_scid, long arg_inwareid, ref string arg_msg);//p_getinfo(arg_scid,arg_inwareid,arg_msg)
  1027. //0 失败 1成功
  1028. Int rslt = 1
  1029. IF arg_inwareid <= 0 THEN
  1030. rslt = 0
  1031. arG_MSG = "非法进仓单唯一码"
  1032. GOTO ext
  1033. END IF
  1034. SELECT ow_wfjg_in.inwarecode,
  1035. ow_wfjg_in.billtype,
  1036. ow_wfjg_in.relid,
  1037. ow_wfjg_in.storageid,
  1038. ow_wfjg_in.indate,
  1039. ow_wfjg_in.inrep,
  1040. ow_wfjg_in.part,
  1041. ow_wfjg_in.sptid,
  1042. ow_wfjg_in.sptname,
  1043. ow_wfjg_in.dscrp,
  1044. ow_wfjg_in.thflag,
  1045. ow_wfjg_in.secflag,
  1046. ow_wfjg_in.dxflag,
  1047. ow_wfjg_in.flag,
  1048. ow_wfjg_in.balcflag,
  1049. ow_wfjg_in.otheramt,
  1050. ow_wfjg_in.relint_1,
  1051. ow_wfjg_in.relint_2,
  1052. ow_wfjg_in.relint_3,
  1053. ow_wfjg_in.relstr_1,
  1054. ow_wfjg_in.relstr_2,
  1055. ow_wfjg_in.relstr_3
  1056. INTO :inwarecode,
  1057. :billtype,
  1058. :relid,
  1059. :storageid,
  1060. :indate,
  1061. :inrep,
  1062. :part,
  1063. :sptid,
  1064. :sptname,
  1065. :dscrp,
  1066. :thflag,
  1067. :secflag,
  1068. :dxflag,
  1069. :flag,
  1070. :balcflag,
  1071. :otheramt,
  1072. :relint_1,
  1073. :relint_2,
  1074. :relint_3,
  1075. :relstr_1,
  1076. :relstr_2,
  1077. :relstr_3
  1078. FROM ow_wfjg_in
  1079. WHERE ow_wfjg_in.inwareid = :arg_inwareid
  1080. AND scid = :arg_scid
  1081. Using commit_transaction;
  1082. IF commit_transaction.SQLCode <> 0 THEN
  1083. rslt = 0
  1084. IF Pos(Lower(commit_transaction.SQLErrText),'more than') > 0 THEN
  1085. arG_MSG = '查询进仓单操作失败,查询数据返回值多于一个'
  1086. ELSE
  1087. arG_MSG = "查询操作失败(错误进仓单唯一码)"
  1088. END IF
  1089. GOTO ext
  1090. END IF
  1091. //币种, 默认本位币
  1092. SELECT moneyid INTO :moneyid
  1093. FROM cw_currency
  1094. WHERE native = 1
  1095. Using commit_transaction;
  1096. IF commit_transaction.SQLCode <> 0 THEN
  1097. rslt = 0
  1098. arG_MSG = '查询本位币失败! '+commit_transaction.SQLErrText
  1099. GOTO ext
  1100. END IF
  1101. inwareid = arg_inwareid
  1102. scid = arg_scid
  1103. ext:
  1104. IF rslt = 0 THEN p_reset()
  1105. RETURN rslt
  1106. end function
  1107. public function integer p_reset ();//int p_reset()
  1108. //清除对象及其明细
  1109. scid=0
  1110. inwareid=0
  1111. inwarecode=''
  1112. billtype=0
  1113. opemp=''
  1114. modemp=''
  1115. auditingrep=''
  1116. secauditingrep = ''
  1117. secflag = 0
  1118. flag=0
  1119. relid=0
  1120. storageid=0
  1121. inrep=''
  1122. part=''
  1123. dscrp=''
  1124. sptid=0
  1125. sptname=''
  1126. Dxflag=0
  1127. thflag=0
  1128. otheramt=0
  1129. relint_1=0
  1130. relint_2=0
  1131. relint_3=0
  1132. relstr_1=''
  1133. relstr_2=''
  1134. relstr_3=''
  1135. sum_amt = 0
  1136. jgsum_amt = 0
  1137. it_newbegin=false
  1138. it_updatebegin=false
  1139. //清除明细
  1140. p_clearmx()
  1141. return 1
  1142. end function
  1143. public function integer p_create_inware (boolean arg_ifcommit, ref string arg_msg);Int rslt = 1,i
  1144. Long rst_inwareid,o_scid
  1145. datastore ds_wfjginware_mx
  1146. ds_wfjginware_mx = CREATE datastore
  1147. ds_wfjginware_mx.DataObject = "dw_wfjgmx_in_aft_edit"
  1148. ds_wfjginware_mx.SetTransObject(sqlca)
  1149. ds_wfjginware_mx.Retrieve(scid,inwareid,sys_option_2unit)
  1150. ds_wfjginware_mx.SetSort("ow_wfjgmx_in_aft_storageid A")
  1151. ds_wfjginware_mx.Sort()
  1152. Long ls_rowcount,ll_storageid
  1153. ls_rowcount = ds_wfjginware_mx.RowCount()
  1154. IF ls_rowcount <> it_mxbt THEN
  1155. rslt = 0
  1156. arg_msg = "单据明细数量错误"
  1157. GOTO ext
  1158. END IF
  1159. FOR i = 1 TO it_mxbt
  1160. uo_inware uo_in
  1161. uo_in = CREATE uo_inware
  1162. uo_in.commit_transaction = commit_transaction
  1163. uo_in.if_getid_ture = FALSE
  1164. //2.原事务生成进仓单
  1165. ll_storageid = ds_wfjginware_mx.Object.ow_wfjgmx_in_aft_storageid[i]
  1166. SELECT scid INTO :o_scid
  1167. FROM u_storage
  1168. Where storageid = :ll_storageid USING commit_transaction;
  1169. IF commit_transaction.SQLCode <> 0 THEN
  1170. arg_msg = '查询进仓库所属分部资料失败'
  1171. rslt = 0
  1172. GOTO ext
  1173. END IF
  1174. IF uo_in.newbegin(scid,4,arg_msg) = 0 THEN
  1175. rslt = 0
  1176. GOTO ext
  1177. END IF
  1178. uo_in.relid = inwareid
  1179. uo_in.relint_2 = relint_2
  1180. uo_in.relint_1 = relint_1
  1181. uo_in.sptid = sptid
  1182. uo_in.inrep = inrep
  1183. uo_in.indate = indate
  1184. uo_in.part = inwarecode
  1185. uo_in.dscrp = dscrp
  1186. uo_in.storageid = ll_storageid
  1187. DO While (ll_storageid = ds_wfjginware_mx.Object.ow_wfjgmx_in_aft_storageid[i])
  1188. datetime ld_inworkdate
  1189. setnull(ld_inworkdate)
  1190. //ds_wfjginware_mx.Object.ow_wfjgmx_in_aft_printid[i] 这个不能随意改,关系到生成的进仓单的修改单价功能
  1191. //用库存单位进仓
  1192. IF uo_in.acceptmx(ds_wfjginware_mx.Object.ow_wfjgmx_in_aft_printid[i],&
  1193. ds_wfjginware_mx.Object.ow_wfjgmx_in_aft_mtrlid[i],&
  1194. ds_wfjginware_mx.Object.u_mtrldef_mtrlcode[i],&
  1195. ds_wfjginware_mx.Object.ow_wfjgmx_in_aft_plancode[i],&
  1196. ds_wfjginware_mx.Object.ow_wfjgmx_in_aft_status[i],&
  1197. ds_wfjginware_mx.Object.ow_wfjgmx_in_aft_qty[i],&
  1198. ds_wfjginware_mx.Object.ow_wfjgmx_in_aft_addqty[i],&
  1199. ds_wfjginware_mx.Object.ow_wfjgmx_in_aft_fprice[i] + ds_wfjginware_mx.Object.ow_wfjgmx_in_aft_uprice[i] * ds_wfjginware_mx.Object.ow_wfjgmx_in_aft_rebate[i],&
  1200. 1,&
  1201. ds_wfjginware_mx.Object.ow_wfjgmx_in_aft_mxdscrp[i],&
  1202. arg_msg,&
  1203. ds_wfjginware_mx.Object.ow_wfjgmx_in_aft_uprice[i],&
  1204. ds_wfjginware_mx.Object.ow_wfjgmx_in_aft_relid[i],&
  1205. ds_wfjginware_mx.Object.ow_wfjgmx_in_aft_relprintid[i],&
  1206. ds_wfjginware_mx.Object.ow_wfjgmx_in_aft_ifrel[i],&
  1207. ds_wfjginware_mx.Object.ow_wfjgmx_in_aft_woodcode[i],&
  1208. ds_wfjginware_mx.Object.ow_wfjgmx_in_aft_pcode[i],&
  1209. '',&
  1210. ds_wfjginware_mx.Object.ow_wfjgmx_in_aft_sptid_cusid[i],&
  1211. ds_wfjginware_mx.Object.u_mtrldef_unit[i],&
  1212. 1,'','',ld_inworkdate,0) = 0 THEN
  1213. rslt = 0
  1214. GOTO ext
  1215. END IF
  1216. i++
  1217. IF i > it_mxbt THEN EXIT
  1218. LOOP
  1219. IF uo_in.Save(FALSE,arg_msg) = 0 THEN
  1220. rslt = 0
  1221. GOTO ext
  1222. END IF
  1223. rst_inwareid = uo_in.inwareid
  1224. //4.原事务审核进仓单
  1225. IF uo_in.getinfo(o_scid,rst_inwareid,arg_msg) = 0 THEN
  1226. rslt = 0
  1227. GOTO ext
  1228. END IF
  1229. IF uo_in.auditing(FALSE,arg_msg) = 0 THEN
  1230. rslt = 0
  1231. GOTO ext
  1232. END IF
  1233. DESTROY uo_in
  1234. i = i - 1
  1235. NEXT
  1236. ext:
  1237. IF rslt = 0 THEN
  1238. ROLLBACK USING commit_transaction;
  1239. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1240. COMMIT USING commit_transaction;
  1241. END IF
  1242. RETURN rslt
  1243. end function
  1244. public function integer p_destroy_inware (boolean arg_ifcommit, ref string arg_msg);Long cnt = 0,i
  1245. Int rslt = 1
  1246. Long chc
  1247. Long in_out
  1248. //Long rst_outwareid[],out_i = 1 //出仓出仓id
  1249. Long rst_inwareid[],in_i = 1 //出仓出仓id
  1250. Long s_scid
  1251. Long o_scid
  1252. Long lay_storageid[],ll_storageid
  1253. DateTime null_dt
  1254. SetNull(null_dt)
  1255. uo_inware uo_in
  1256. uo_in = Create uo_inware
  1257. uo_in.commit_transaction = sqlca
  1258. uo_in.if_getid_ture = False
  1259. IF inwareid = 0 THEN
  1260. rslt = 0
  1261. arg_msg = "没有审核对象"
  1262. GOTO ext
  1263. END IF
  1264. Boolean lb_f = False
  1265. Long j,k,ch
  1266. //统计仓库数量,确定出或出仓单数
  1267. FOR i = 1 To it_mxbt
  1268. FOR j = 1 To UpperBound(lay_storageid)
  1269. IF lay_storageid[j] = inwaremx[i].storageid THEN lb_f = True
  1270. NEXT
  1271. IF lb_f = False THEN
  1272. ch++
  1273. lay_storageid[ch] = inwaremx[i].storageid
  1274. END IF
  1275. lb_f = False
  1276. NEXT
  1277. IF UpperBound(lay_storageid) = 0 THEN
  1278. rslt = 0
  1279. arg_msg = '查询相关进仓单据失败'
  1280. GOTO ext
  1281. END IF
  1282. //2.查询出仓单相关的入仓单,撤审,删除
  1283. FOR k = 1 To UpperBound(lay_storageid)
  1284. ll_storageid = lay_storageid[k]
  1285. SELECT scid INTO :o_scid
  1286. FROM u_storage
  1287. Where storageid = :ll_storageid Using commit_transaction;
  1288. IF commit_transaction.SQLCode <> 0 THEN
  1289. arg_msg = '查询仓库所属分部资料失败'
  1290. rslt = 0
  1291. GOTO ext
  1292. END IF
  1293. DECLARE cur_in_2 CURSOR FOR
  1294. SELECT inwareid
  1295. FROM u_inware
  1296. WHERE scid = :o_scid
  1297. AND relid = :inwareid
  1298. AND storageid = :ll_storageid
  1299. And billtype = 4 Using commit_transaction;
  1300. OPEN cur_in_2;
  1301. FETCH cur_in_2 Into :rst_inwareid[in_i];
  1302. DO WHILE commit_transaction.SQLCode = 0
  1303. in_i++
  1304. FETCH cur_in_2 Into :rst_inwareid[in_i];
  1305. LOOP
  1306. in_i = in_i - 1
  1307. CLOSE cur_in_2;
  1308. IF in_i = 0 THEN
  1309. arg_msg = '查询该外协单相关进仓单失败'
  1310. rslt = 0
  1311. GOTO ext
  1312. END IF
  1313. FOR in_out = 1 To in_i
  1314. //撤审出仓单,再删除
  1315. IF uo_in.getinfo(o_scid,rst_inwareid[in_out],arg_msg) = 0 THEN
  1316. rslt = 0
  1317. GOTO ext
  1318. END IF
  1319. IF uo_in.c_auditing(False,arg_msg) = 0 THEN
  1320. rslt = 0
  1321. GOTO ext
  1322. END IF
  1323. IF uo_in.del(o_scid,rst_inwareid[in_out],arg_msg,False) = 0 THEN
  1324. rslt = 0
  1325. GOTO ext
  1326. END IF
  1327. NEXT
  1328. NEXT
  1329. ext:
  1330. IF rslt = 0 THEN
  1331. ROLLBACK Using commit_transaction;
  1332. ELSEIF arg_ifcommit And rslt = 1 THEN
  1333. COMMIT Using commit_transaction;
  1334. END IF
  1335. Destroy uo_in
  1336. RETURN rslt
  1337. end function
  1338. public function integer secauditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i
  1339. String ls_about,ls_dscrp
  1340. uo_mustpay uo_pay
  1341. uo_pay = Create uo_mustpay
  1342. Decimal ld_payamt = 0,ld_mstpayamt = 0
  1343. IF inwareid = 0 THEN
  1344. rslt = 0
  1345. arg_msg = "没有审核对象"
  1346. GOTO ext
  1347. END IF
  1348. IF flag = 0 THEN
  1349. rslt = 0
  1350. arg_msg = "单据还没有经过仓库审核"
  1351. GOTO ext
  1352. END IF
  1353. IF secflag = 1 THEN
  1354. rslt = 0
  1355. arg_msg = "单据已经过财务审核"
  1356. GOTO ext
  1357. END IF
  1358. Int li_btype
  1359. Long ll_accountsid
  1360. SELECT btype,accountsid INTO :li_btype,:ll_accountsid
  1361. FROM cw_banktype
  1362. Where banktypeid = :relint_1 Using commit_transaction;
  1363. IF commit_transaction.SQLCode <> 0 THEN
  1364. rslt = 0
  1365. IF Pos(Lower(commit_transaction.SQLErrText),'more than') > 0 THEN
  1366. arg_msg = '查询结算方式类型失败,查询数据返回值多于一个'
  1367. ELSE
  1368. arg_msg = '查询结算方式类型失败(错误结算方式唯一码)'
  1369. END IF
  1370. GOTO ext
  1371. END IF
  1372. SELECT count(*) INTO :cnt
  1373. FROM u_user
  1374. Where username = :publ_operator Using commit_transaction ;
  1375. IF commit_transaction.SQLCode <> 0 THEN
  1376. rslt = 0
  1377. arg_msg = "查询操作失败,操作员"
  1378. GOTO ext
  1379. END IF
  1380. IF cnt = 0 THEN
  1381. rslt = 0
  1382. arg_msg = "操作员姓名未登记或已取消"
  1383. GOTO ext
  1384. END IF
  1385. UPDATE ow_wfjg_in
  1386. SET secauditingrep = :publ_operator,
  1387. secauditingdate = getdate(),
  1388. secflag = 1
  1389. WHERE ow_wfjg_in.inwareid = :inwareid
  1390. And flag = 1 And secflag = 0 And scid = :scid Using commit_transaction;
  1391. IF commit_transaction.SQLCode <> 0 THEN
  1392. rslt = 0
  1393. arg_msg = "财务审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  1394. GOTO ext
  1395. ELSEIF commit_transaction.SQLNRows = 0 THEN
  1396. rslt = 0
  1397. arg_msg = "单据正在财务审核,请稍后查询。"
  1398. GOTO ext
  1399. END IF
  1400. IF jgsum_amt <> 0 THEN
  1401. ld_mstpayamt = jgsum_amt - otheramt
  1402. IF li_btype = 1 THEN
  1403. ld_payamt = ld_mstpayamt
  1404. ELSE
  1405. ld_payamt = 0
  1406. END IF
  1407. Long ll_dft_itemid
  1408. IF thflag = 1 THEN
  1409. ls_about = inwarecode + "退货款,相关号:"+part
  1410. IF f_get_itemid(5,ll_dft_itemid, arg_msg) = 0 THEN // 采购外协退货项目
  1411. rslt = 0
  1412. GOTO ext
  1413. END IF
  1414. // SELECT itemid INTO :ll_dft_itemid
  1415. // FROM u_itemdef
  1416. // Where dfttype = 5 Using commit_transaction;
  1417. // IF commit_transaction.SQLCode <> 0 THEN
  1418. // IF Pos(Lower(commit_transaction.SQLErrText),'more than') > 0 THEN
  1419. // arg_msg = '查询默认采购外协付款项目资料失败,查询数据返回值多于一个'
  1420. // ELSE
  1421. // arg_msg = '查询默认采购外协付款项目资料失败 '
  1422. // END IF
  1423. // rslt = 0
  1424. // GOTO ext
  1425. // END IF
  1426. ELSE
  1427. ls_about = inwarecode + "应付款,相关号:"+part
  1428. IF f_get_itemid(2,ll_dft_itemid, arg_msg) = 0 THEN //采购外协付款项目
  1429. rslt = 0
  1430. GOTO ext
  1431. END IF
  1432. // SELECT itemid INTO :ll_dft_itemid
  1433. // FROM u_itemdef
  1434. // Where dfttype = 2 Using commit_transaction;
  1435. // IF commit_transaction.SQLCode <> 0 THEN
  1436. // IF Pos(Lower(commit_transaction.SQLErrText),'more than') > 0 THEN
  1437. // arg_msg = '查询默认采购外协退货项目资料失败,查询数据返回值多于一个'
  1438. // ELSE
  1439. // arg_msg = '查询默认采购外协退货项目资料失败'
  1440. // END IF
  1441. // rslt = 0
  1442. // GOTO ext
  1443. // END IF
  1444. END IF
  1445. ls_dscrp = ls_about
  1446. Long ll_moneyid
  1447. DateTime plandate
  1448. SetNull(plandate)
  1449. SELECT moneyid Into :ll_moneyid From cw_currency Where native = 1;
  1450. IF sqlca.SQLCode <> 0 THEN
  1451. rslt = 0
  1452. arg_msg = '查询本位币失败! '+sqlca.SQLErrText
  1453. GOTO ext
  1454. END IF
  1455. IF uo_pay.add_payrec (scid,sptid,indate,inrep,ld_mstpayamt,ld_mstpayamt,ld_payamt,ls_about,&
  1456. inwarecode,relint_1,1,publ_operator,inwareid,0,arg_msg,False,plandate,ll_accountsid,ll_dft_itemid,ll_moneyid,part) = 0 THEN
  1457. rslt = 0
  1458. GOTO ext
  1459. END IF
  1460. UPDATE ow_wfjg_in
  1461. SET relint_2 = :uo_pay.ref_payid
  1462. WHERE ow_wfjg_in.inwareid = :inwareid
  1463. AND scid = :scid
  1464. And flag = 1 Using commit_transaction;
  1465. IF commit_transaction.SQLCode <> 0 THEN
  1466. arg_msg = '更新外协单相关应收帐ID失败'
  1467. rslt = 0
  1468. GOTO ext
  1469. END IF
  1470. END IF
  1471. secflag = 1
  1472. ext:
  1473. IF rslt = 0 THEN
  1474. ROLLBACK Using commit_transaction;
  1475. ELSEIF rslt = 1 And arg_ifcommit THEN
  1476. COMMIT Using commit_transaction;
  1477. END IF
  1478. Destroy uo_pay
  1479. IF billtype = 4 THEN
  1480. IF thflag = 0 THEN
  1481. arg_msg = '仓库外协收货单,'+ arg_msg
  1482. ELSE
  1483. arg_msg = '仓库外协返工单,'+ arg_msg
  1484. END IF
  1485. ELSEIF billtype = 5 THEN
  1486. IF thflag = 0 THEN
  1487. arg_msg = '车间外协收货单,'+ arg_msg
  1488. ELSE
  1489. arg_msg = '车间外协返工单,'+ arg_msg
  1490. END IF
  1491. END IF
  1492. RETURN rslt
  1493. end function
  1494. public function integer c_secauditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i
  1495. DateTime null_dt
  1496. uo_mustpay uo_pay
  1497. uo_pay = Create uo_mustpay
  1498. String ls_mtrlname
  1499. SetNull(null_dt)
  1500. IF inwareid = 0 THEN
  1501. rslt = 0
  1502. arg_msg = "没有撤审对象"
  1503. GOTO ext
  1504. END IF
  1505. IF it_newbegin Or it_updatebegin THEN
  1506. rslt = 0
  1507. arg_msg = "编辑状态下不可以执行撤审"
  1508. GOTO ext
  1509. END IF
  1510. IF secflag = 0 THEN
  1511. rslt = 0
  1512. arg_msg = "该单据财务未审,不能进行财务撤审"
  1513. GOTO ext
  1514. END IF
  1515. SELECT count(*) INTO :cnt
  1516. FROM u_user
  1517. Where username = :publ_operator Using commit_transaction ;
  1518. IF commit_transaction.SQLCode <> 0 THEN
  1519. rslt = 0
  1520. arg_msg = "查询操作失败,操作员"
  1521. GOTO ext
  1522. END IF
  1523. IF cnt = 0 THEN
  1524. rslt = 0
  1525. arg_msg = "操作员姓名未登记或已取消"
  1526. GOTO ext
  1527. END IF
  1528. UPDATE ow_wfjg_in
  1529. SET secauditingrep = '',
  1530. secauditingdate = :null_dt,
  1531. secflag = 0,relint_3 = 0
  1532. WHERE ow_wfjg_in.inwareid = :inwareid
  1533. And secflag = 1 And scid = :scid Using commit_transaction;
  1534. IF commit_transaction.SQLCode <> 0 THEN
  1535. rslt = 0
  1536. arg_msg = "财务审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  1537. GOTO ext
  1538. ELSEIF commit_transaction.SQLNRows = 0 THEN
  1539. rslt = 0
  1540. arg_msg = "单据正在财务审核,请稍后查询。"
  1541. GOTO ext
  1542. END IF
  1543. IF jgsum_amt <> 0 THEN
  1544. IF uo_pay.del_payrec(scid,1,relint_2,sptid,arg_msg,False) = 0 THEN
  1545. rslt = 0
  1546. GOTO ext
  1547. END IF
  1548. END IF
  1549. secflag = 0
  1550. ext:
  1551. IF rslt = 0 THEN
  1552. ROLLBACK Using commit_transaction;
  1553. ELSEIF rslt = 1 And arg_ifcommit THEN
  1554. COMMIT Using commit_transaction;
  1555. END IF
  1556. Destroy uo_pay
  1557. IF billtype = 4 THEN
  1558. IF thflag = 0 THEN
  1559. arg_msg = '仓库外协收货单,'+ arg_msg
  1560. ELSE
  1561. arg_msg = '仓库外协返工单,'+ arg_msg
  1562. END IF
  1563. ELSEIF billtype = 5 THEN
  1564. IF thflag = 0 THEN
  1565. arg_msg = '车间外协收货单,'+ arg_msg
  1566. ELSE
  1567. arg_msg = '车间外协返工单,'+ arg_msg
  1568. END IF
  1569. END IF
  1570. RETURN rslt
  1571. end function
  1572. public function integer p_update_mtrlware (long arg_mtrlwareid, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_price, long arg_sptid, string arg_woodcode, string arg_pcode, ref string arg_msg);//====================================================================
  1573. // 事件: uo_inware_wfjg.p_update_mtrlware()
  1574. //--------------------------------------------------------------------
  1575. // 描述:
  1576. //--------------------------------------------------------------------
  1577. // 参数:
  1578. // value long arg_mtrlwareid
  1579. // value long arg_mtrlid
  1580. // value string arg_mtrlcode
  1581. // value string arg_plancode
  1582. // value string arg_status
  1583. // value decimal arg_qty
  1584. // value decimal arg_price
  1585. // value long arg_sptid
  1586. // value string arg_woodcode
  1587. // value string arg_pcode
  1588. // reference string arg_msg
  1589. //--------------------------------------------------------------------
  1590. // 返回: intege
  1591. //--------------------------------------------------------------------
  1592. // 作者: LHD 日期: 2013年08月17日
  1593. //--------------------------------------------------------------------
  1594. // Copyright (c) 2002-2018 RICHTA(TM), All rights reserved.
  1595. //--------------------------------------------------------------------
  1596. // 修改历史:
  1597. //
  1598. //====================================================================
  1599. //外协商库存减少
  1600. Int rslt = 1
  1601. Long ls_newid
  1602. String or_err_part
  1603. Decimal ld_cost
  1604. //-------------------------------------------更新库存
  1605. ld_cost = arg_price
  1606. UPDATE ow_wfjgware
  1607. SET noallocqty = noallocqty - :arg_qty ,
  1608. wareamt = case when :sys_option_wfjgware_nocost = 1 then 0
  1609. else (case noallocqty + :arg_qty when 0 then 0
  1610. else (case when (wareamt - round(:arg_qty * :arg_price,2)) * (noallocqty - :arg_qty) < 0 then 0 - (wareamt - round(:arg_qty * :arg_price,2)) else wareamt - round(:arg_qty * :arg_price,2) END) END) END,
  1611. cost = case when :sys_option_wfjgware_nocost = 1 then 0
  1612. else (case noallocqty - :arg_qty when 0 then cost
  1613. else (case when round((wareamt - round(:arg_qty * :arg_price,2))/(noallocqty - :arg_qty),10) < 0 then :ld_cost else round((wareamt - round(:arg_qty * :arg_price,2))/(noallocqty - :arg_qty),10) END) END) END,
  1614. newprice = :arg_price,
  1615. waredate = getdate(),
  1616. indate = case when :arg_qty < 0 then getdate() else indate END,
  1617. outdate = case when :arg_qty > 0 then getdate() else outdate END
  1618. WHERE ( mtrlwareid = :arg_mtrlwareid ) AND
  1619. ( scid = :scid ) Using commit_transaction ;
  1620. IF commit_transaction.SQLCode = 0 THEN
  1621. IF commit_transaction.SQLNRows = 0 THEN
  1622. ///////////////////////// //
  1623. ls_newid = f_sys_scidentity(scid,"ow_wfjgware","mtrlwareid",arg_msg,False,commit_transaction)
  1624. IF ls_newid <= 0 THEN
  1625. rslt = 0
  1626. GOTO ext
  1627. END IF
  1628. ///////////////////////// //
  1629. INSERT INTO ow_wfjgware
  1630. ( scid,
  1631. sptid,
  1632. mtrlwareid,
  1633. mtrlid,
  1634. plancode,
  1635. status,
  1636. woodcode,
  1637. pcode,
  1638. noallocqty,
  1639. allocqty,
  1640. wareamt,
  1641. cost,
  1642. indate)
  1643. VALUES (
  1644. :scid,
  1645. :arg_sptid,
  1646. :ls_newid,
  1647. :arg_mtrlid,
  1648. :arg_plancode,
  1649. :arg_status,
  1650. :arg_woodcode,
  1651. :arg_pcode,
  1652. :arg_qty,
  1653. 0,
  1654. case when :sys_option_wfjgware_nocost = 1 then 0 else round(:arg_price * :arg_qty,2) END,
  1655. case when :sys_option_wfjgware_nocost = 1 then 0 else :ld_cost END,
  1656. getdate()) Using commit_transaction ;
  1657. IF commit_transaction.SQLCode <> 0 THEN
  1658. rslt = 0
  1659. IF Pos(Lower(commit_transaction.SQLErrText),'pk_ow_wfjgware') > 0 THEN
  1660. arg_msg = '插入外协商库存操作失败,关键字分部ID、库存ID重复'
  1661. ELSE
  1662. arg_msg = "物料["+arg_mtrlcode+"]外协商库存建立操作失败"+"~n"+commit_transaction.SQLErrText
  1663. END IF
  1664. GOTO ext
  1665. END IF
  1666. END IF
  1667. ELSE
  1668. rslt = 0
  1669. or_err_part = 'column insert or update conflicts with a rule imposed by a previous create rule statement'
  1670. IF commit_transaction.SQLCode = 513 Or Pos(Lower(commit_transaction.SQLErrText),or_err_part) > 0 THEN
  1671. arg_msg = "物料["+arg_mtrlcode+"]同外协商内同批号没有足够的库存支持冲减"
  1672. ELSE
  1673. arg_msg = "物料["+arg_mtrlcode+"]外协商库存更新操作失败"+"~n"+commit_transaction.SQLErrText
  1674. END IF
  1675. GOTO ext
  1676. END IF
  1677. //-----------------------------------更新结存
  1678. Decimal ld_balcqty,ld_balcamt
  1679. Decimal ld_outqty,ld_outamt
  1680. Decimal ld_reoutqty,ld_reoutamt
  1681. Decimal ld_pypkqty,ld_pypkamt
  1682. Decimal ld_wasteqty,ld_wasteamt
  1683. ld_balcqty = arg_qty
  1684. ld_balcamt = Round(arg_qty * arg_price,2)
  1685. CHOOSE CASE billtype
  1686. CASE 4,5
  1687. IF thflag = 0 THEN
  1688. ld_outqty = arg_qty
  1689. ld_outamt = Round(arg_qty * arg_price,2)
  1690. ld_reoutqty = 0
  1691. ld_reoutamt = 0
  1692. ld_pypkqty = 0
  1693. ld_pypkamt = 0
  1694. ld_wasteqty = 0
  1695. ld_wasteamt = 0
  1696. ELSE
  1697. ld_outqty = 0
  1698. ld_outamt = 0
  1699. ld_reoutqty = 0 - arg_qty
  1700. ld_reoutamt = 0 - Round(arg_qty * arg_price,2)
  1701. ld_pypkqty = 0
  1702. ld_pypkamt = 0
  1703. ld_wasteqty = 0
  1704. ld_wasteamt = 0
  1705. END IF
  1706. CASE 9
  1707. ld_outqty = 0
  1708. ld_outamt = 0
  1709. ld_reoutqty = 0
  1710. ld_reoutamt = 0
  1711. ld_pypkqty = 0 - arg_qty
  1712. ld_pypkamt = 0 - Round(arg_qty * arg_price,2)
  1713. ld_wasteqty = 0
  1714. ld_wasteamt = 0
  1715. CASE 10
  1716. ld_outqty = 0
  1717. ld_outamt = 0
  1718. ld_reoutqty = 0
  1719. ld_reoutamt = 0
  1720. ld_pypkqty = 0
  1721. ld_pypkamt = 0
  1722. ld_wasteqty = arg_qty
  1723. ld_wasteamt = Round(arg_qty * arg_price,2)
  1724. END CHOOSE
  1725. UPDATE ow_wfjgbalc
  1726. SET
  1727. balcqty = balcqty - :ld_balcqty,
  1728. balcamt = case when :sys_option_wfjgware_nocost = 1 then 0 else balcamt - :ld_balcamt end,
  1729. outqty = outqty + :ld_outqty ,
  1730. outamt = case when :sys_option_wfjgware_nocost = 1 then 0 else outamt + :ld_outamt end,
  1731. reoutqty = reoutqty + :ld_reoutqty ,
  1732. reoutamt = case when :sys_option_wfjgware_nocost = 1 then 0 else reoutamt + :ld_reoutamt end,
  1733. pypkqty = pypkqty + :ld_pypkqty,
  1734. pypkamt = case when :sys_option_wfjgware_nocost = 1 then 0 else pypkamt + :ld_pypkamt end,
  1735. wasteqty = wasteqty + :ld_wasteqty,
  1736. wasteamt = case when :sys_option_wfjgware_nocost = 1 then 0 else wasteamt + :ld_wasteamt end
  1737. WHERE ( mtrlid = :arg_mtrlid ) AND
  1738. ( sptid = :arg_sptid ) AND
  1739. ( balcdateint = 0) AND
  1740. ( status = :arg_status ) AND
  1741. ( woodcode = :arg_woodcode ) AND
  1742. ( pcode = :arg_pcode ) Using commit_transaction ;
  1743. IF commit_transaction.SQLCode = 0 THEN
  1744. IF commit_transaction.SQLNRows = 0 THEN
  1745. INSERT INTO ow_wfjgbalc
  1746. ( balcdateint,
  1747. mtrlid,
  1748. sptid,
  1749. bgqty,
  1750. bgamt,
  1751. inqty,
  1752. inamt,
  1753. outqty,
  1754. outamt,
  1755. reoutqty,
  1756. reoutamt,
  1757. thqty,
  1758. thamt,
  1759. balcqty,
  1760. balcamt,
  1761. wasteqty,
  1762. wasteamt,
  1763. pypkqty,
  1764. pypkamt,
  1765. status,
  1766. woodcode,
  1767. pcode,
  1768. scid)
  1769. VALUES (
  1770. 0,
  1771. :arg_mtrlid,
  1772. :arg_sptid,
  1773. 0,
  1774. 0,
  1775. 0,
  1776. 0,
  1777. :ld_outqty,
  1778. case when :sys_option_wfjgware_nocost = 1 then 0 else :ld_outamt end,
  1779. :ld_reoutqty,
  1780. case when :sys_option_wfjgware_nocost = 1 then 0 else :ld_reoutamt end,
  1781. 0,
  1782. 0,
  1783. 0 - :ld_balcqty,
  1784. case when :sys_option_wfjgware_nocost = 1 then 0 else 0 - :ld_balcamt end,
  1785. :ld_wasteqty,
  1786. case when :sys_option_wfjgware_nocost = 1 then 0 else :ld_wasteamt end,
  1787. :ld_pypkqty,
  1788. case when :sys_option_wfjgware_nocost = 1 then 0 else :ld_pypkamt end,
  1789. :arg_status,
  1790. :arg_woodcode,
  1791. :arg_pcode,
  1792. :scid) Using commit_transaction ;
  1793. IF commit_transaction.SQLCode <> 0 THEN
  1794. rslt = 0
  1795. IF Pos(Lower(commit_transaction.SQLErrText),'pk_ow_wfjgbalc') > 0 THEN
  1796. arg_msg = '插入外协商结存操作失败,关键字重复'
  1797. ELSE
  1798. arg_msg = "物料["+arg_mtrlcode+"]外协商结存建立操作失败"+"~n"+commit_transaction.SQLErrText
  1799. END IF
  1800. GOTO ext
  1801. END IF
  1802. END IF
  1803. ELSE
  1804. rslt = 0
  1805. or_err_part = 'column insert or update conflicts with a rule imposed by a previous create rule statement'
  1806. IF commit_transaction.SQLCode = 513 Or Pos(Lower(commit_transaction.SQLErrText),or_err_part) > 0 THEN
  1807. arg_msg = "物料["+arg_mtrlcode+"]同外协商内同批号没有足够的结存支持冲减"
  1808. ELSE
  1809. arg_msg = "物料["+arg_mtrlcode+"]外协商结存更新操作失败"+"~n"+commit_transaction.SQLErrText
  1810. END IF
  1811. GOTO ext
  1812. END IF
  1813. ext:
  1814. IF rslt = 0 THEN
  1815. ROLLBACK;
  1816. END IF
  1817. RETURN rslt
  1818. end function
  1819. public function integer newbegin (long arg_scid, integer arg_billtype, ref string arg_msg);//====================================================================
  1820. // Function: newbegin(long arg_scid,int arg_billtype,ref string arg_msg)
  1821. //--------------------------------------------------------------------
  1822. // Description: 从置对象,设定业务类型,准备建立新进仓单
  1823. //--------------------------------------------------------------------
  1824. // Arguments:
  1825. // value long arg_scid
  1826. // value integer arg_billtype
  1827. // reference string arg_msg
  1828. //--------------------------------------------------------------------
  1829. // Returns: integer
  1830. //--------------------------------------------------------------------
  1831. // Author: yyx Date: 2003.11.12
  1832. //--------------------------------------------------------------------
  1833. // Modify History:
  1834. //
  1835. //====================================================================
  1836. Int rslt = 1
  1837. IF arg_scid < 0 THEN
  1838. arg_msg = '请选择分部'
  1839. rslt = 0
  1840. GOTO ext
  1841. END IF
  1842. p_reset()
  1843. scid = arg_scid
  1844. billtype = arg_billtype
  1845. it_newbegin = True
  1846. it_updatebegin = False
  1847. ext:
  1848. IF rslt = 0 THEN p_reset()
  1849. RETURN rslt
  1850. end function
  1851. public function integer updatebegin (long arg_scid, long arg_inwareid, integer arg_billtype, ref string arg_msg);//====================================================================
  1852. // Function: updatebegin(arg_scid,arg_inwareid,arg_billtype,arg_msg)
  1853. //--------------------------------------------------------------------
  1854. // Description: 从置对象,设定业务类型与关联ID,准备更新进仓单
  1855. //--------------------------------------------------------------------
  1856. // Arguments:
  1857. // value long arg_scid
  1858. // value long arg_inwareid
  1859. // value integer arg_billtype
  1860. // reference string arg_msg
  1861. //--------------------------------------------------------------------
  1862. // Returns: integer
  1863. //--------------------------------------------------------------------
  1864. // Author: yyx Date: 2003.11.12
  1865. //--------------------------------------------------------------------
  1866. // Modify History:
  1867. //
  1868. //====================================================================
  1869. Long rslt = 1
  1870. IF arg_scid < 0 THEN
  1871. arg_msg = '请选择分部'
  1872. rslt = 0
  1873. GOTO ext
  1874. END IF
  1875. IF arg_inwareid <= 0 THEN
  1876. rslt = 0
  1877. GOTO ext
  1878. END IF
  1879. rslt = p_getinfo(arg_scid,arg_inwareid,arg_msg)
  1880. IF rslt = 0 THEN GOTO ext
  1881. IF flag = 1 THEN
  1882. rslt = 0
  1883. arg_msg = '单据已经审核,不可以修改'
  1884. GOTO ext
  1885. END IF
  1886. inwareid = arg_inwareid
  1887. scid = arg_scid
  1888. billtype = arg_billtype
  1889. it_newbegin = False
  1890. it_updatebegin = True
  1891. p_clearmx() //清除明细
  1892. ext:
  1893. IF rslt = 0 THEN p_reset()
  1894. IF billtype = 4 THEN
  1895. IF thflag = 0 THEN
  1896. arg_msg = '仓库外协收货单,'+ arg_msg
  1897. ELSE
  1898. arg_msg = '仓库外协返工单,'+ arg_msg
  1899. END IF
  1900. ELSEIF billtype = 5 THEN
  1901. IF thflag = 0 THEN
  1902. arg_msg = '车间外协收货单,'+ arg_msg
  1903. ELSE
  1904. arg_msg = '车间外协返工单,'+ arg_msg
  1905. END IF
  1906. END IF
  1907. RETURN rslt
  1908. end function
  1909. public function integer p_update_cost (long arg_mtrlwareid, string arg_mtrlcode, long arg_printid, ref decimal arg_ref_cost, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1910. Decimal ld_cost
  1911. //IF sys_option_wfjgth_wareamt = 0 THEN
  1912. SELECT cost INTO :ld_cost
  1913. FROM ow_wfjgware
  1914. WHERE sptid = :sptid
  1915. And mtrlwareid = :arg_mtrlwareid;
  1916. IF sqlca.SQLCode <> 0 THEN
  1917. arg_msg = '查询'+arg_mtrlcode+'供应商库存成本价失败,'+sqlca.SQLErrText
  1918. rslt = 0
  1919. GOTO ext
  1920. END IF
  1921. //ELSE
  1922. // SELECT price INTO :ld_cost
  1923. // FROM ow_wfjgmx_in_bef
  1924. // WHERE inwareid = :inwareid
  1925. // And printid = :arg_printid Using commit_transaction;
  1926. // IF commit_transaction.SQLCode <> 0 THEN
  1927. // arg_msg = '查询'+arg_mtrlcode+'退货单价价失败,'+commit_transaction.SQLErrText
  1928. // rslt = 0
  1929. // GOTO ext
  1930. // END IF
  1931. //END IF
  1932. UPDATE ow_wfjgmx_in_bef
  1933. SET fprice = :ld_cost
  1934. WHERE inwareid = :inwareid
  1935. And printid = :arg_printid;
  1936. IF sqlca.SQLCode <> 0 THEN
  1937. arg_msg = '更新'+arg_mtrlcode+'成本价失败,'+sqlca.SQLErrText
  1938. rslt = 0
  1939. GOTO ext
  1940. END IF
  1941. arg_ref_cost = ld_cost
  1942. ext:
  1943. IF rslt = 0 THEN
  1944. ROLLBACK;
  1945. ELSEIF rslt = 1 And arg_ifcommit THEN
  1946. COMMIT;
  1947. END IF
  1948. RETURN rslt
  1949. end function
  1950. public function integer acceptmx_bef (long arg_mtrlwareid, decimal arg_qty, decimal arg_price, string arg_mxdscrp, long arg_printid, ref string arg_msg, string arg_unit, decimal arg_uqty, decimal arg_rate);Long rslt = 1,cnt = 0,LS_i
  1951. Long i_mtrlid,i_sptid
  1952. String i_plancode,i_mtrlcode,i_status,i_woodcode,i_pcode
  1953. Double i_cost,i_newprice
  1954. Decimal i_allouseqty
  1955. String ls_relcode
  1956. Decimal ld_rate = 1
  1957. IF it_newbegin = False And it_updatebegin = False THEN
  1958. rslt = 0
  1959. arg_msg = "非编辑状态不可以使用,操作取消"
  1960. GOTO ext
  1961. END IF
  1962. IF IsNull(arg_mtrlwareid) THEN arg_mtrlwareid = 0
  1963. IF IsNull(arg_printid) THEN arg_printid = 0
  1964. IF IsNull(arg_qty) THEN arg_qty = 0
  1965. IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = ''
  1966. //messagebox("",arg_mtrlwareid)
  1967. IF arg_mtrlwareid = 0 Or arg_qty = 0 THEN
  1968. rslt = 1
  1969. GOTO ext
  1970. END IF
  1971. SELECT ow_wfjgware.mtrlid,
  1972. ow_wfjgware.sptid,
  1973. ow_wfjgware.plancode,
  1974. ow_wfjgware.status,
  1975. ow_wfjgware.cost,
  1976. u_mtrldef.mtrlcode,
  1977. ow_wfjgware.woodcode,
  1978. ow_wfjgware.pcode,
  1979. ow_wfjgware.noallocqty
  1980. INTO :i_mtrlid,
  1981. :i_sptid,
  1982. :i_plancode,
  1983. :i_status,
  1984. :i_cost,
  1985. :i_mtrlcode,
  1986. :i_woodcode,
  1987. :i_pcode,
  1988. :i_allouseqty
  1989. FROM ow_wfjgware ,u_mtrldef
  1990. WHERE ( ow_wfjgware.mtrlwareid = :arg_mtrlwareid )
  1991. AND ( ow_wfjgware.mtrlid = u_mtrldef.mtrlid )
  1992. And ( ow_wfjgware.scid = :scid ) Using commit_transaction;
  1993. IF commit_transaction.SQLCode <> 0 THEN
  1994. rslt = 0
  1995. IF Pos(Lower(commit_transaction.SQLErrText),'more than') > 0 THEN
  1996. arg_msg = '库存查询操作失败,查询数据返回值多于一个'
  1997. ELSE
  1998. arg_msg = "查询操作失败(错误库存编号唯一码)"
  1999. END IF
  2000. GOTO ext
  2001. END IF
  2002. IF IsNull(i_cost) THEN i_cost = 0
  2003. IF IsNull(i_plancode) THEN i_plancode = ''
  2004. IF IsNull(i_status) THEN i_status = ''
  2005. IF IsNull(i_mtrlid) THEN i_mtrlid = 0
  2006. IF IsNull(i_sptid) THEN i_sptid = 0
  2007. IF IsNull(i_woodcode) THEN i_woodcode = ''
  2008. IF IsNull(i_pcode) THEN i_pcode = ''
  2009. IF sptid <> i_sptid THEN
  2010. arg_msg = "物料:" + String(i_mtrlcode) + '所属加工商资料不对应'
  2011. rslt = 0
  2012. GOTO ext
  2013. END IF
  2014. IF i_cost < 0 THEN //检查进仓价
  2015. rslt = 0
  2016. arg_msg = "物料:" + String(i_mtrlcode)+" 单价错误"
  2017. GOTO ext
  2018. END IF
  2019. IF sys_option_2unit = 0 THEN
  2020. arg_uqty = arg_qty
  2021. END IF
  2022. //写入内容
  2023. it_mxbt_bef++
  2024. inwaremx_bef[it_mxbt_bef].mtrlwareid = arg_mtrlwareid
  2025. inwaremx_bef[it_mxbt_bef].mtrlid = i_mtrlid
  2026. inwaremx_bef[it_mxbt_bef].status = i_status
  2027. inwaremx_bef[it_mxbt_bef].qty = arg_qty
  2028. inwaremx_bef[it_mxbt_bef].sptid = i_sptid
  2029. inwaremx_bef[it_mxbt_bef].cost = i_cost
  2030. inwaremx_bef[it_mxbt_bef].costamt = Round(i_cost * arg_qty,2)
  2031. inwaremx_bef[it_mxbt_bef].plancode = i_plancode
  2032. inwaremx_bef[it_mxbt_bef].mtrlcode = i_mtrlcode
  2033. inwaremx_bef[it_mxbt_bef].mxdscrp = arg_mxdscrp
  2034. inwaremx_bef[it_mxbt_bef].printid = arg_printid
  2035. inwaremx_bef[it_mxbt_bef].woodcode = i_woodcode
  2036. inwaremx_bef[it_mxbt_bef].pcode = i_pcode
  2037. //messagebox("",it_mxbt_bef)
  2038. IF thflag = 0 THEN
  2039. inwaremx_bef[it_mxbt_bef].fprice = i_cost
  2040. ELSE
  2041. inwaremx_bef[it_mxbt_bef].fprice = arg_price
  2042. END IF
  2043. IF sys_option_2unit = 0 THEN
  2044. IF arg_rate = 0 THEN
  2045. arg_rate = arg_qty/arg_uqty
  2046. ELSE
  2047. arg_uqty = arg_qty/arg_rate
  2048. END IF
  2049. END IF
  2050. IF arg_uqty <> 0 THEN
  2051. inwaremx_bef[it_mxbt_bef].rate = arg_qty / arg_uqty
  2052. ELSE
  2053. inwaremx_bef[it_mxbt_bef].rate = 0
  2054. END IF
  2055. inwaremx_bef[it_mxbt_bef].unit = arg_unit
  2056. inwaremx_bef[it_mxbt_bef].uqty = arg_uqty
  2057. ext:
  2058. IF rslt = 0 THEN p_clearmx()
  2059. IF billtype = 4 THEN
  2060. IF thflag = 0 THEN
  2061. arg_msg = '仓库外协收货单,'+ arg_msg
  2062. ELSE
  2063. arg_msg = '仓库外协返工单,'+ arg_msg
  2064. END IF
  2065. ELSEIF billtype = 5 THEN
  2066. IF thflag = 0 THEN
  2067. arg_msg = '车间外协收货单,'+ arg_msg
  2068. ELSE
  2069. arg_msg = '车间外协返工单,'+ arg_msg
  2070. END IF
  2071. END IF
  2072. RETURN rslt
  2073. end function
  2074. public function integer acceptmx_bef_th (long arg_mtrlwareid, decimal arg_qty, decimal arg_price, string arg_mxdscrp, long arg_printid, ref string arg_msg, string arg_unit, decimal arg_uqty, decimal arg_rate, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status, string arg_woodcode, string arg_pcode);Long rslt = 1,cnt = 0,LS_i
  2075. Long i_mtrlid,i_sptid
  2076. String i_plancode,i_mtrlcode,i_status,i_woodcode,i_pcode
  2077. Double i_cost,i_newprice
  2078. Decimal i_allouseqty
  2079. String ls_relcode
  2080. Decimal ld_rate = 1
  2081. Long ls_newid
  2082. IF it_newbegin = False And it_updatebegin = False THEN
  2083. rslt = 0
  2084. arg_msg = "非编辑状态不可以使用,操作取消"
  2085. GOTO ext
  2086. END IF
  2087. IF IsNull(arg_mtrlwareid) THEN arg_mtrlwareid = 0
  2088. IF IsNull(arg_printid) THEN arg_printid = 0
  2089. IF IsNull(arg_qty) THEN arg_qty = 0
  2090. IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = ''
  2091. SELECT ow_wfjgware.mtrlid,
  2092. ow_wfjgware.sptid,
  2093. ow_wfjgware.plancode,
  2094. ow_wfjgware.status,
  2095. ow_wfjgware.cost,
  2096. u_mtrldef.mtrlcode,
  2097. ow_wfjgware.woodcode,
  2098. ow_wfjgware.pcode,
  2099. ow_wfjgware.noallocqty
  2100. INTO :i_mtrlid,
  2101. :i_sptid,
  2102. :i_plancode,
  2103. :i_status,
  2104. :i_cost,
  2105. :i_mtrlcode,
  2106. :i_woodcode,
  2107. :i_pcode,
  2108. :i_allouseqty
  2109. FROM ow_wfjgware ,u_mtrldef
  2110. WHERE ( ow_wfjgware.mtrlwareid = :arg_mtrlwareid )
  2111. AND ( ow_wfjgware.mtrlid = u_mtrldef.mtrlid )
  2112. And ( ow_wfjgware.scid = :scid ) Using commit_transaction;
  2113. IF commit_transaction.SQLCode = 0 THEN
  2114. IF commit_transaction.SQLNRows = 0 THEN
  2115. END IF
  2116. //ELSEIF commit_transaction.SQLCode = 100 THEN
  2117. // ls_newid = f_sys_scidentity(0,"ow_wfjgware","mtrlwareid",arg_msg,False,commit_transaction)
  2118. // IF ls_newid <= 0 THEN
  2119. // rslt = 0
  2120. // GOTO ext
  2121. // END IF
  2122. // ///////////////////////// //
  2123. // INSERT INTO ow_wfjgware
  2124. // (
  2125. // scid,
  2126. // mtrlwareid,
  2127. // mtrlid,
  2128. // plancode,
  2129. // status,
  2130. // noallocqty,
  2131. // allocqty,
  2132. // wareamt,
  2133. // sptid,
  2134. // woodcode,
  2135. // pcode,
  2136. // cost,
  2137. // indate)
  2138. // VALUES (
  2139. // :scid,
  2140. // :ls_newid,
  2141. // :arg_mtrlid,
  2142. // :arg_plancode,
  2143. // :arg_status,
  2144. // 0,
  2145. // 0,
  2146. // 0,
  2147. // :sptid,
  2148. // :arg_woodcode,
  2149. // :arg_pcode,
  2150. // 0,
  2151. // getdate()) Using commit_transaction ;
  2152. // IF commit_transaction.SQLCode <> 0 THEN
  2153. // rslt = 0
  2154. // IF Pos(Lower(commit_transaction.SQLErrText),'pk_ow_wfjgware') > 0 THEN
  2155. // arg_msg = '插入外协商库存操作失败,关键字分部ID、库存ID重复'
  2156. // ELSE
  2157. // arg_msg = "物料["+arg_mtrlcode+"]库存建立操作失败"+"~n"+commit_transaction.SQLErrText
  2158. // END IF
  2159. // GOTO ext
  2160. // END IF
  2161. // arg_mtrlwareid = ls_newid
  2162. // i_sptid=sptid
  2163. ELSEIF commit_transaction.SQLCode <> 0 THEN
  2164. rslt = 0
  2165. arg_msg = "查询操作失败(错误库存编号唯一码)"
  2166. GOTO ext
  2167. END IF
  2168. IF IsNull(i_cost) THEN i_cost = 0
  2169. IF IsNull(i_plancode) THEN i_plancode = ''
  2170. IF IsNull(i_status) THEN i_status = ''
  2171. IF IsNull(i_mtrlid) THEN i_mtrlid = 0
  2172. IF IsNull(i_sptid) THEN i_sptid = 0
  2173. IF IsNull(i_woodcode) THEN i_woodcode = ''
  2174. IF IsNull(i_pcode) THEN i_pcode = ''
  2175. IF sptid <> i_sptid THEN
  2176. arg_msg = "物料:" + String(i_mtrlcode) + '所属加工商资料不对应'
  2177. rslt = 0
  2178. GOTO ext
  2179. END IF
  2180. IF i_cost < 0 THEN //检查进仓价
  2181. rslt = 0
  2182. arg_msg = "物料:" + String(i_mtrlcode)+" 单价错误"
  2183. GOTO ext
  2184. END IF
  2185. //写入内容
  2186. it_mxbt_bef++
  2187. inwaremx_bef[it_mxbt_bef].mtrlwareid = arg_mtrlwareid
  2188. inwaremx_bef[it_mxbt_bef].mtrlid = i_mtrlid
  2189. inwaremx_bef[it_mxbt_bef].status = i_status
  2190. inwaremx_bef[it_mxbt_bef].qty = arg_qty
  2191. inwaremx_bef[it_mxbt_bef].sptid = i_sptid
  2192. inwaremx_bef[it_mxbt_bef].cost = i_cost
  2193. inwaremx_bef[it_mxbt_bef].costamt = Round(i_cost * arg_qty,2)
  2194. inwaremx_bef[it_mxbt_bef].plancode = i_plancode
  2195. inwaremx_bef[it_mxbt_bef].mtrlcode = i_mtrlcode
  2196. inwaremx_bef[it_mxbt_bef].mxdscrp = arg_mxdscrp
  2197. inwaremx_bef[it_mxbt_bef].printid = arg_printid
  2198. inwaremx_bef[it_mxbt_bef].woodcode = i_woodcode
  2199. inwaremx_bef[it_mxbt_bef].pcode = i_pcode
  2200. IF thflag = 0 THEN
  2201. inwaremx_bef[it_mxbt_bef].fprice = i_cost
  2202. ELSE
  2203. inwaremx_bef[it_mxbt_bef].fprice = arg_price
  2204. END IF
  2205. IF sys_option_2unit = 0 THEN
  2206. IF arg_rate = 0 THEN
  2207. arg_rate = arg_qty/arg_uqty
  2208. ELSE
  2209. arg_uqty = arg_qty/arg_rate
  2210. END IF
  2211. END IF
  2212. IF arg_uqty <> 0 THEN
  2213. inwaremx_bef[it_mxbt_bef].rate = arg_qty / arg_uqty
  2214. ELSE
  2215. inwaremx_bef[it_mxbt_bef].rate = 0
  2216. END IF
  2217. inwaremx_bef[it_mxbt_bef].unit = arg_unit
  2218. inwaremx_bef[it_mxbt_bef].uqty = arg_uqty
  2219. ext:
  2220. IF rslt = 0 THEN p_clearmx()
  2221. IF billtype = 4 THEN
  2222. IF thflag = 0 THEN
  2223. arg_msg = '仓库外协收货单,'+ arg_msg
  2224. ELSE
  2225. arg_msg = '仓库外协返工单,'+ arg_msg
  2226. END IF
  2227. ELSEIF billtype = 5 THEN
  2228. IF thflag = 0 THEN
  2229. arg_msg = '车间外协收货单,'+ arg_msg
  2230. ELSE
  2231. arg_msg = '车间外协返工单,'+ arg_msg
  2232. END IF
  2233. END IF
  2234. RETURN rslt
  2235. end function
  2236. public function integer mod_price (long arg_scid, long arg_inwareid, long arg_printid, decimal arg_fprice, decimal arg_jgprice, decimal arg_rebate, decimal arg_tax, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  2237. uo_inware uo_in
  2238. uo_in = CREATE uo_inware
  2239. uo_in.commit_transaction = sqlca
  2240. IF p_getinfo(arg_scid,arg_inwareid,arg_msg) = 0 THEN
  2241. rslt = 0
  2242. GOTO ext
  2243. END IF
  2244. IF flag = 0 THEN
  2245. rslt = 0
  2246. arg_msg = '待审核状态不能执行修改单价功能'
  2247. GOTO ext
  2248. END IF
  2249. IF secflag = 1 THEN
  2250. rslt = 0
  2251. arg_msg = '已财审状态不能执行修改单价功能'
  2252. GOTO ext
  2253. END IF
  2254. Decimal ld_jgprice,ld_fprice,ld_uqty,ld_rate,ld_qty,ld_rebate,lde_tax
  2255. Long ll_mtrlid
  2256. String ls_status,ls_woodcode,ls_pcode
  2257. Long ll_storageid
  2258. SELECT jgprice,
  2259. fprice,
  2260. tax,
  2261. uqty,
  2262. qty,
  2263. rebate,
  2264. mtrlid,
  2265. status,
  2266. woodcode,
  2267. pcode,
  2268. storageid
  2269. INTO :ld_jgprice,
  2270. :ld_fprice,
  2271. :lde_tax,
  2272. :ld_uqty,
  2273. :ld_qty,
  2274. :ld_rebate,
  2275. :ll_mtrlid,
  2276. :ls_status,
  2277. :ls_woodcode,
  2278. :ls_pcode,
  2279. :ll_storageid
  2280. FROM ow_wfjgmx_in_aft
  2281. WHERE scid = :arg_scid
  2282. AND inwareid = :arg_inwareid
  2283. AND printid = :arg_printid
  2284. USING commit_transaction;
  2285. IF commit_transaction.SQLCode <> 0 THEN
  2286. rslt = 0
  2287. arg_msg = '查询单据明细内容失败'+commit_transaction.SQLErrText
  2288. GOTO ext
  2289. END IF
  2290. if arg_tax = -1 then arg_tax = lde_tax
  2291. if arg_rebate = -1 then arg_rebate = ld_rebate
  2292. IF arg_jgprice = ld_jgprice AND arg_fprice = ld_fprice AND ld_rebate = arg_rebate and lde_tax = arg_tax THEN
  2293. rslt = 0
  2294. arg_msg = '加工价、材料成本价、折扣、税率没有任何修改,不能保存'
  2295. GOTO ext
  2296. END IF
  2297. Decimal ld_uprice_new,ld_price_new,ld_cost_new
  2298. IF ld_qty <> 0 THEN
  2299. ld_uprice_new = Round(arg_jgprice * ld_uqty/ld_qty,5)
  2300. ELSE
  2301. ld_uprice_new = 0
  2302. END IF
  2303. ld_cost_new = ld_uprice_new * arg_rebate + arg_fprice
  2304. ld_price_new = ld_uprice_new * arg_rebate + arg_fprice
  2305. UPDATE ow_wfjgmx_in_aft
  2306. SET jgprice = :arg_jgprice,
  2307. fprice = :arg_fprice,
  2308. uprice = :ld_uprice_new,
  2309. price = :ld_price_new,
  2310. cost = :ld_cost_new
  2311. WHERE scid = :arg_scid
  2312. AND inwareid = :arg_inwareid
  2313. AND printid = :arg_printid USING commit_transaction;
  2314. IF commit_transaction.SQLCode <> 0 THEN
  2315. rslt = 0
  2316. arg_msg = '更新单据明细失败'+commit_transaction.SQLErrText
  2317. GOTO ext
  2318. END IF
  2319. IF billtype = 4 THEN
  2320. Long ll_inwareid
  2321. SELECT inwareid
  2322. INTO :ll_inwareid
  2323. FROM u_inware
  2324. WHERE scid = :arg_scid
  2325. AND relid = :arg_inwareid
  2326. AND storageid = :ll_storageid
  2327. AND billtype = 4 USING commit_transaction;
  2328. IF commit_transaction.SQLCode <> 0 THEN
  2329. rslt = 0
  2330. arg_msg = '查询相关进仓单失败'+commit_transaction.SQLErrText
  2331. GOTO ext
  2332. END IF
  2333. //进仓单用库存单位进仓
  2334. IF uo_in.mod_price(arg_scid,ll_inwareid,arg_printid,ld_uprice_new * arg_rebate + arg_fprice,arg_jgprice,-1,-1,arg_msg,false) = 0 THEN
  2335. rslt = 0
  2336. GOTO ext
  2337. END IF
  2338. END IF
  2339. ext:
  2340. IF rslt = 0 THEN
  2341. ROLLBACK USING commit_transaction;
  2342. ELSEIF rslt = 1 AND arg_ifcommit THEN
  2343. COMMIT USING commit_transaction;
  2344. END IF
  2345. RETURN rslt
  2346. end function
  2347. public function integer acceptmx (long arg_printid, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status, decimal arg_uqty, decimal arg_fprice, decimal arg_rebate, string arg_mxdscrp, ref string arg_msg, decimal arg_jgprice, long arg_relid, long arg_relprintid, integer arg_ifrel, string arg_woodcode, string arg_pcode, long arg_cusid_sptid, string arg_unit, decimal arg_qty, long arg_storageid, decimal arg_rate, decimal arg_addqty, string arg_mxdscrp2, string arg_mxdscrp3, string arg_mxdscrp4);
  2348. Decimal ld_planprice,ld_cost
  2349. Decimal ld_noauditqty,ld_bootqty
  2350. String ls_relcode,ls_saletaskcode
  2351. Int li_iflimitprice
  2352. Long rslt = 1,cnt = 0,ls_i
  2353. uo_spt_price uo_sptprice
  2354. uo_sptprice = Create uo_spt_price
  2355. String ls_sptmtrlname
  2356. IF it_newbegin = False And it_updatebegin = False THEN
  2357. rslt = 0
  2358. arg_msg = "非编辑状态不可以使用,操作取消"
  2359. GOTO ext
  2360. END IF
  2361. //清除空值
  2362. IF IsNull(arg_printid) THEN arg_printid = 0
  2363. IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0
  2364. IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = ''
  2365. IF IsNull(arg_plancode) THEN arg_plancode = ''
  2366. IF IsNull(arg_status) THEN arg_status = ''
  2367. IF IsNull(arg_uqty) THEN arg_uqty = 0
  2368. IF IsNull(arg_fprice) THEN arg_fprice = 0
  2369. IF IsNull(arg_rebate) THEN arg_rebate = 0
  2370. IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = ''
  2371. IF IsNull(arg_jgprice) THEN arg_jgprice = 0
  2372. IF IsNull(arg_relid) THEN arg_relid = 0
  2373. IF IsNull(arg_relprintid) THEN arg_relprintid = 0
  2374. IF IsNull(arg_ifrel) THEN arg_ifrel = 0
  2375. IF IsNull(arg_mxdscrp) THEN arg_woodcode = ''
  2376. IF IsNull(arg_pcode) THEN arg_pcode = ''
  2377. IF IsNull(arg_cusid_sptid) THEN arg_cusid_sptid = 0
  2378. IF IsNull(arg_storageid) THEN arg_storageid = 0
  2379. IF IsNull(arg_unit) THEN arg_unit = ''
  2380. IF IsNull(arg_rate) THEN arg_rate = 1
  2381. IF IsNull(arg_addqty) THEN arg_addqty = 0
  2382. IF IsNull(arg_mxdscrp2) THEN arg_mxdscrp2 = ''
  2383. IF IsNull(arg_mxdscrp3) THEN arg_mxdscrp3 = ''
  2384. IF IsNull(arg_mxdscrp4) THEN arg_mxdscrp4 = ''
  2385. IF arg_mtrlid = 0 Or arg_qty = 0 THEN
  2386. rslt = 1
  2387. GOTO ext
  2388. END IF
  2389. IF sys_option_2unit = 1 THEN
  2390. IF arg_uqty = 0 THEN
  2391. arg_msg = '行:'+String(arg_printid)+ ',请输入计价数量'
  2392. rslt = 0
  2393. GOTO ext
  2394. END IF
  2395. IF Trim(arg_unit) = '' THEN
  2396. arg_msg = '行:'+String(arg_printid)+ ',请输入计价单位'
  2397. rslt = 0
  2398. GOTO ext
  2399. END IF
  2400. ELSE
  2401. arg_uqty = arg_qty/arg_rate
  2402. END IF
  2403. IF billtype = 4 THEN
  2404. Decimal ol_mtrl_qty = 0
  2405. Int ls_noallocflag
  2406. Decimal lde_nouseqty
  2407. SELECT noallocflag INTO :ls_noallocflag
  2408. FROM u_storage
  2409. Where storageid = :arg_storageid Using commit_transaction;
  2410. IF commit_transaction.SQLCode <> 0 THEN
  2411. rslt = 0
  2412. arg_msg = '查询仓库允许使用未开单库存属性失败'+commit_transaction.SQLErrText
  2413. GOTO ext
  2414. END IF
  2415. IF ls_noallocflag = 1 AND thflag = 1 THEN
  2416. SELECT sum(u_mtrlware.noallocqty - isnull(uv_mtrlware_noauditingqty.noauditingqty, 0))
  2417. INTO :lde_nouseqty
  2418. FROM u_mtrlware LEFT OUTER JOIN uv_mtrlware_noauditingqty
  2419. ON (u_mtrlware.mtrlwareid = uv_mtrlware_noauditingqty.mtrlwareid)
  2420. AND (u_mtrlware.scid = uv_mtrlware_noauditingqty.scid)
  2421. WHERE u_mtrlware.scid = :scid
  2422. AND u_mtrlware.mtrlid = :arg_mtrlid
  2423. AND u_mtrlware.STATUS = :arg_status
  2424. AND u_mtrlware.plancode = :arg_plancode
  2425. AND u_mtrlware.woodcode = :arg_woodcode
  2426. AND u_mtrlware.pcode = :arg_pcode
  2427. AND u_mtrlware.storageid = :arg_storageid
  2428. AND u_mtrlware.dxflag = :dxflag
  2429. AND u_mtrlware.sptid = :arg_cusid_sptid Using commit_transaction;
  2430. IF commit_transaction.SQLCode <> 0 THEN
  2431. rslt = 0
  2432. arg_msg = "查询操作失败,仓库"
  2433. GOTO ext
  2434. END IF
  2435. If (Abs(arg_qty) > lde_nouseqty ) THEN
  2436. rslt = 0
  2437. arg_msg = '行:'+String(arg_printid)+"物料:" + arg_mtrlcode+' 未开单数:'+String(lde_nouseqty,'#,##0.##########')+'少于本次返工数量:'+String(Abs(arg_qty),'#,##0.##########')
  2438. GOTO ext
  2439. END IF
  2440. END IF
  2441. END IF
  2442. IF f_check_status(1, arg_status) = 0 THEN
  2443. rslt = 0
  2444. arg_msg = "查询操作失败,可能颜色未定义,"+arg_mtrlcode+",颜色:"+arg_status
  2445. GOTO ext
  2446. END IF
  2447. //检查物料id
  2448. SELECT planprice
  2449. INTO :ld_planprice
  2450. FROM u_mtrldef
  2451. Where u_mtrldef.mtrlid = :arg_mtrlid Using commit_transaction ;
  2452. IF commit_transaction.SQLCode <> 0 THEN
  2453. rslt = 0
  2454. arg_msg = "查询操作失败,编码:"+arg_mtrlcode
  2455. GOTO ext
  2456. END IF
  2457. //检查物料限价属性
  2458. SELECT iflimitprice
  2459. INTO :li_iflimitprice
  2460. FROM u_mtrldef
  2461. Where u_mtrldef.mtrlid = :arg_mtrlid Using commit_transaction ;
  2462. IF commit_transaction.SQLCode <> 0 THEN
  2463. rslt = 0
  2464. arg_msg = "查询物料限价属性失败:"+arg_mtrlcode
  2465. GOTO ext
  2466. END IF
  2467. //查询采购限价并检查进仓价
  2468. IF billtype = 1 Or billtype = 4 THEN
  2469. IF li_iflimitprice = 1 THEN
  2470. IF uo_sptprice.uf_check_price_save(thflag,sptid,arg_mtrlid,arg_mtrlcode,arg_unit,arg_status,arg_woodcode,arg_pcode,arg_jgprice,arg_msg) = 0 THEN
  2471. rslt = 0
  2472. GOTO ext
  2473. END IF
  2474. END IF
  2475. END IF
  2476. IF arg_ifrel > 0 THEN
  2477. IF arg_relid = 0 THEN
  2478. arg_msg = '请先择相应的加工计划'
  2479. rslt = 0
  2480. GOTO ext
  2481. END IF
  2482. SELECT u_order_wfjg.taskcode,a = CASE when u_order_wfjg.billtype = 1 THEN u_order_wfjgmx.relcode ELSE '' END
  2483. Into :ls_relcode,:ls_saletaskcode
  2484. From u_order_wfjgmx,u_order_wfjg
  2485. Where u_order_wfjgmx.wfjgid = :arg_relid
  2486. And u_order_wfjgmx.printid = :arg_relprintid
  2487. And u_order_wfjgmx.mtrlid = :arg_mtrlid
  2488. And u_order_wfjgmx.status = :arg_status
  2489. And u_order_wfjgmx.woodcode = :arg_woodcode
  2490. And u_order_wfjgmx.pcode = :arg_pcode
  2491. And u_order_wfjgmx.wfjgid = u_order_wfjg.wfjgid
  2492. And u_order_wfjgmx.scid = u_order_wfjg.scid
  2493. Using commit_transaction;
  2494. IF commit_transaction.SQLCode <> 0 THEN
  2495. arg_msg = '查询加工计划是否有加工产品:'+arg_mtrlcode+'失败'
  2496. rslt = 0
  2497. GOTO ext
  2498. END IF
  2499. END IF
  2500. IF arg_fprice * arg_rebate < 0 THEN //检查进仓价
  2501. rslt = 0
  2502. arg_msg = "编码:" + String(arg_mtrlcode)+" 单价错误"
  2503. GOTO ext
  2504. END IF
  2505. //写入内容
  2506. it_mxbt++
  2507. inwaremx[it_mxbt].noauditqty = ld_noauditqty
  2508. inwaremx[it_mxbt].printid = arg_printid
  2509. inwaremx[it_mxbt].mtrlid = arg_mtrlid
  2510. inwaremx[it_mxbt].mtrlcode = arg_mtrlcode
  2511. inwaremx[it_mxbt].unit = arg_unit
  2512. inwaremx[it_mxbt].storageid = arg_storageid
  2513. inwaremx[it_mxbt].bootqty = ld_bootqty
  2514. Long ll_if_plancode,ll_inwaretype
  2515. IF arg_storageid > 0 THEN
  2516. SELECT if_plancode,inwaretype
  2517. INTO :ll_if_plancode,:ll_inwaretype
  2518. FROM u_storage
  2519. Where storageid = :arg_storageid;
  2520. IF sqlca.SQLCode <> 0 THEN
  2521. rslt = 0
  2522. arg_msg = '查询仓库资料失败'
  2523. GOTO ext
  2524. END IF
  2525. IF ll_if_plancode = 0 THEN
  2526. inwaremx[it_mxbt].plancode = ''
  2527. ELSEIF ll_inwaretype = 1 THEN
  2528. inwaremx[it_mxbt].plancode = arg_plancode
  2529. ELSEIF ll_inwaretype = 2 THEN
  2530. inwaremx[it_mxbt].plancode = String(Round(arg_fprice * arg_rebate,5))
  2531. ELSEIF ll_inwaretype = 3 THEN
  2532. IF ls_saletaskcode <> '' THEN
  2533. inwaremx[it_mxbt].plancode = ls_saletaskcode
  2534. ELSE
  2535. inwaremx[it_mxbt].plancode = arg_plancode
  2536. END IF
  2537. END IF
  2538. END IF
  2539. inwaremx[it_mxbt].uqty = arg_uqty
  2540. inwaremx[it_mxbt].jgprice = arg_jgprice
  2541. inwaremx[it_mxbt].rebate = arg_rebate
  2542. IF arg_qty <> 0 THEN
  2543. inwaremx[it_mxbt].uprice = Round(arg_jgprice * arg_uqty/arg_qty,5) //加工价,本位币,库存单位
  2544. ELSE
  2545. inwaremx[it_mxbt].uprice = 0
  2546. END IF
  2547. IF arg_uqty <> 0 THEN
  2548. inwaremx[it_mxbt].rate = arg_qty/arg_uqty
  2549. ELSE
  2550. inwaremx[it_mxbt].rate = 0
  2551. END IF
  2552. inwaremx[it_mxbt].qty = arg_qty
  2553. inwaremx[it_mxbt].addqty = arg_addqty
  2554. inwaremx[it_mxbt].fprice = arg_fprice //材料成本价
  2555. inwaremx[it_mxbt].price = inwaremx[it_mxbt].uprice * arg_rebate + arg_fprice //进仓成本价,本位币,库存单位
  2556. inwaremx[it_mxbt].planprice = ld_planprice
  2557. inwaremx[it_mxbt].mxdscrp = arg_mxdscrp
  2558. inwaremx[it_mxbt].dxflag = dxflag
  2559. inwaremx[it_mxbt].ifrel = arg_ifrel
  2560. inwaremx[it_mxbt].relid = arg_relid
  2561. inwaremx[it_mxbt].relprintid = arg_relprintid
  2562. inwaremx[it_mxbt].relcode = ls_relcode
  2563. inwaremx[it_mxbt].status = arg_status
  2564. inwaremx[it_mxbt].woodcode = arg_woodcode
  2565. inwaremx[it_mxbt].pcode = arg_pcode
  2566. IF dxflag = 0 THEN
  2567. inwaremx[it_mxbt].sptid = arg_cusid_sptid
  2568. ELSE
  2569. inwaremx[it_mxbt].sptid = sptid
  2570. END IF
  2571. inwaremx[it_mxbt].mxdscrp2 = arg_mxdscrp2
  2572. inwaremx[it_mxbt].mxdscrp3 = arg_mxdscrp3
  2573. inwaremx[it_mxbt].mxdscrp4 = arg_mxdscrp4
  2574. IF billtype = 1 THEN
  2575. IF uo_sptprice.uf_getmtrlname(sptid,arg_mtrlid,ls_sptmtrlname,arg_msg) = 0 THEN
  2576. rslt = 0
  2577. GOTO ext
  2578. END IF
  2579. inwaremx[it_mxbt].sptmtrlname = ls_sptmtrlname
  2580. END IF
  2581. IF thflag = 1 THEN
  2582. IF sys_option_wfjgth_wareamt = 0 THEN
  2583. SELECT cost
  2584. INTO :ld_cost
  2585. FROM u_mtrlware
  2586. WHERE scid = :scid
  2587. AND mtrlid = :arg_mtrlid
  2588. AND status = :arg_status
  2589. AND plancode = :arg_plancode
  2590. AND woodcode = :arg_woodcode
  2591. AND pcode = :arg_pcode
  2592. AND storageid = :arg_storageid
  2593. AND dxflag = :dxflag
  2594. And sptid = :arg_cusid_sptid;
  2595. IF sqlca.SQLCode <> 0 Or IsNull(ld_cost) THEN ld_cost = 0
  2596. inwaremx[it_mxbt].cost = ld_cost
  2597. ELSE
  2598. inwaremx[it_mxbt].cost = inwaremx[it_mxbt].price
  2599. END IF
  2600. ELSE
  2601. inwaremx[it_mxbt].cost = inwaremx[it_mxbt].price
  2602. END IF
  2603. ext:
  2604. Destroy uo_sptprice
  2605. IF rslt = 0 THEN p_clearmx()
  2606. IF billtype = 4 THEN
  2607. IF thflag = 0 THEN
  2608. arg_msg = '仓库外协收货单,'+ arg_msg
  2609. ELSE
  2610. arg_msg = '仓库外协返工单,'+ arg_msg
  2611. END IF
  2612. ELSEIF billtype = 5 THEN
  2613. IF thflag = 0 THEN
  2614. arg_msg = '车间外协收货单,'+ arg_msg
  2615. ELSE
  2616. arg_msg = '车间外协返工单,'+ arg_msg
  2617. END IF
  2618. END IF
  2619. Return(rslt)
  2620. end function
  2621. on uo_inware_wfjg.create
  2622. call super::create
  2623. TriggerEvent( this, "constructor" )
  2624. end on
  2625. on uo_inware_wfjg.destroy
  2626. TriggerEvent( this, "destructor" )
  2627. call super::destroy
  2628. end on