uo_outware_sale.sru 77 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127
  1. $PBExportHeader$uo_outware_sale.sru
  2. forward
  3. global type uo_outware_sale from uo_outware
  4. end type
  5. end forward
  6. global type uo_outware_sale from uo_outware
  7. end type
  8. global uo_outware_sale uo_outware_sale
  9. type variables
  10. //dec totalamt = 0
  11. //dec getamt = 0
  12. //int lsflag = 0
  13. //string transcode
  14. //string carcode
  15. //string paytype
  16. //
  17. s_outwaremx_mx mx_mx[]
  18. Long it_mxmxbt = 0
  19. s_outware_itemmx outware_itemmx[]
  20. Long it_mxbt_item = 0
  21. end variables
  22. forward prototypes
  23. public function integer secauditing (boolean arg_ifcommit, ref string arg_msg)
  24. public function integer c_secauditing (boolean arg_ifcommit, ref string arg_msg)
  25. public function integer priceaudit (long arg_scid, long arg_outwareid, boolean arg_ifcommit, ref string arg_msg)
  26. public function integer c_priceaudit (long arg_scid, long arg_outwareid, boolean arg_ifcommit, ref string arg_msg)
  27. public function integer p_update_outdate (long arg_scid, long arg_outwareid, datetime arg_outdate, boolean arg_ifcommit, ref string arg_msg)
  28. public function integer secpriceaudit (long arg_scid, long arg_outwareid, boolean arg_ifcommit, ref string arg_msg)
  29. public function integer c_secpriceaudit (long arg_scid, long arg_outwareid, boolean arg_ifcommit, ref string arg_msg)
  30. public function integer auditing_chk (ref string arg_msg)
  31. public function integer auditing_end (ref string arg_msg)
  32. public function integer c_auditing_end (ref string arg_msg)
  33. public function integer c_auditing_chk (ref string arg_msg)
  34. public function integer acceptmxmx (s_outwaremx_mx arg_mx_mx, ref string arg_msg)
  35. public function integer createmxmx (ref string arg_msg)
  36. public function integer p_clearmx ()
  37. public function integer acceptmx_item (s_outware_itemmx arg_item, ref string arg_msg)
  38. public function integer save_end (ref string arg_msg)
  39. public function integer uof_create_dismantle_install (ref string arg_msg)
  40. public function integer uof_destroy_dismantle_install (ref string arg_msg)
  41. public function integer add_fy_takerecmx ()
  42. public function integer c_add_fy_takerecmx ()
  43. public function integer uf_chk_assemble_qty (long arg_scid, long arg_storageid, long arg_outwareid, ref string arg_msg)
  44. public function integer auditing (boolean arg_ifcommit, ref string arg_msg)
  45. public function integer auditing_th (boolean arg_ifcommit, ref string arg_msg)
  46. public function integer uf_chk_assemble_qty2 (long arg_scid, long arg_storageid, long arg_outwareid, ref string arg_msg)
  47. end prototypes
  48. public function integer secauditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i
  49. uo_cusprice uo_update_cusprice
  50. uo_update_cusprice = Create uo_cusprice
  51. uo_musttake uo_take
  52. uo_take = Create uo_musttake
  53. String ls_mtrlname
  54. String ls_about
  55. Decimal ld_takeamt = 0,ld_msttakeamt = 0, ld_otheramt = 0,ld_taxamt,ld_takeamt_tax
  56. Long ll_moneyid
  57. IF outwareid = 0 THEN
  58. rslt = 0
  59. arg_msg = "没有审核对象"
  60. GOTO ext
  61. END IF
  62. IF it_newbegin Or it_updatebegin THEN
  63. rslt = 0
  64. arg_msg = "编辑状态下不可以执行财务审核"
  65. GOTO ext
  66. END IF
  67. IF flag = 0 THEN
  68. rslt = 0
  69. arg_msg = "单据还没有经过仓库审核"
  70. GOTO ext
  71. END IF
  72. IF secflag = 1 THEN
  73. rslt = 0
  74. arg_msg = "单据已经过财务审核"
  75. GOTO ext
  76. END IF
  77. Int li_btype
  78. Long ll_accountsid
  79. SELECT btype,accountsid INTO :li_btype,:ll_accountsid
  80. FROM cw_banktype
  81. Where banktypeid = :relint_1 Using commit_transaction;
  82. IF commit_transaction.SQLCode <> 0 THEN
  83. rslt = 0
  84. arg_msg = '查询结算方式类型失败,'+ commit_transaction.SQLErrText
  85. GOTO ext
  86. END IF
  87. SELECT count(*) INTO :cnt
  88. FROM u_user
  89. Where username = :publ_operator Using commit_transaction ;
  90. IF commit_transaction.SQLCode <> 0 THEN
  91. rslt = 0
  92. arg_msg = "查询操作失败,操作员"
  93. GOTO ext
  94. END IF
  95. IF cnt = 0 THEN
  96. rslt = 0
  97. arg_msg = "操作员姓名未登记或已取消"
  98. GOTO ext
  99. END IF
  100. UPDATE u_outware
  101. SET secauditingrep = :publ_operator,
  102. secauditingdate = getdate(),
  103. secflag = 1
  104. WHERE u_outware.outwareid = :outwareid AND
  105. flag = 1 AND secflag = 0
  106. And scid = :scid Using commit_transaction;
  107. IF commit_transaction.SQLCode <> 0 THEN
  108. rslt = 0
  109. arg_msg = "财务审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  110. GOTO ext
  111. ELSEIF commit_transaction.SQLNRows = 0 THEN
  112. rslt = 0
  113. arg_msg = "单据正在财务审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  114. GOTO ext
  115. END IF
  116. FOR i = 1 To it_mxbt
  117. IF uo_update_cusprice.uf_update_custprice(thflag,0,cusid,outwaremx[i].mtrlid,outwaremx[i].mtrlcode,outwaremx[i].woodcode,outwaremx[i].status,outwaremx[i].pcode,&
  118. outwareid,outwarecode,outdate,outwaremx[i].enprice,outwaremx[i].rebate,outwaremx[i].costamt,0,outwaremx[i].mxdscrp,outwaremx[i].printid,&
  119. relint_2,False,arg_msg,outwaremx[i].rate,outwaremx[i].ware_enprice,outwaremx[i].unit) = 0 THEN
  120. rslt = 0
  121. GOTO ext
  122. END IF
  123. NEXT
  124. //附加费用
  125. Decimal ld_otheramt_sum
  126. FOR i = 1 To it_mxbt
  127. ld_otheramt_sum += outwaremx[i].otherprice
  128. NEXT
  129. IF sum_enamt <> 0 THEN
  130. Long ll_dft_itemid_take,ll_dft_itemid_yh, ll_dft_itemid_sj
  131. IF thflag = 1 THEN
  132. ls_about = outwarecode + "退货款"
  133. IF f_get_itemid(4,ll_dft_itemid_take, arg_msg) = 0 THEN // 销售退货项目
  134. rslt = 0
  135. GOTO ext
  136. END IF
  137. ELSE
  138. ls_about = outwarecode + "应收款"
  139. IF f_get_itemid(1,ll_dft_itemid_take, arg_msg) = 0 THEN // 销售收款项目
  140. rslt = 0
  141. GOTO ext
  142. END IF
  143. END IF
  144. IF part <> "" THEN
  145. ls_about += ",相关号:"+part
  146. END IF
  147. ls_about += ',联系人:'+rel_rep
  148. //摘要增加备注
  149. IF sys_option_sale_dscrp_sec = 1 THEN
  150. ls_about += ",备注:" + Trim(dscrp)
  151. END IF
  152. If lena(ls_about) > 255 Then ls_about = lefta(ls_about,250)+'...'
  153. //财务支持多币种
  154. IF sys_option_mst_multimoney = 0 THEN //本位币
  155. SELECT moneyid Into :ll_moneyid From cw_currency Where native = 1;
  156. IF commit_transaction.SQLCode <> 0 THEN
  157. rslt = 0
  158. arg_msg = '查询本位币失败!'+commit_transaction.SQLErrText
  159. GOTO ext
  160. END IF
  161. sum_bsamt = Round(sum_bsamt , sys_saleamt_round)
  162. ld_msttakeamt = sum_bsamt - sum_bsamt_tax + ld_otheramt_sum
  163. ld_otheramt = Round(otheramt * mrate, 2)
  164. ld_taxamt = sum_bsamt_tax
  165. ELSE //原币
  166. ll_moneyid = relint_2
  167. sum_enamt = Round(sum_enamt , sys_saleamt_round)
  168. ld_msttakeamt = sum_enamt - sum_enamt_tax + ld_otheramt_sum //含税金额 - 税金
  169. ld_otheramt = otheramt
  170. ld_taxamt = sum_enamt_tax
  171. END IF
  172. IF li_btype = 1 THEN
  173. IF sys_option_msttake_takeamt_secaudit = 1 THEN
  174. arg_msg = '系统选项使用了[070]客户收款单使用二级审核,只能使用客户收款单增加收款!'
  175. rslt = 0
  176. GOTO ext
  177. END IF
  178. ld_takeamt = ld_msttakeamt - ld_otheramt + ld_taxamt
  179. //ld_takeamt_tax = ld_taxamt
  180. ELSE
  181. ld_takeamt = 0
  182. //ld_takeamt_tax = 0
  183. END IF
  184. IF uo_take.add_takerec(scid,cusid,outdate,outrep,ld_msttakeamt,&
  185. ld_msttakeamt,ld_takeamt,ls_about,&
  186. outwarecode,relint_1,1,publ_operator,outwareid,0,&
  187. arg_msg,False,viewdate,ll_accountsid,ll_dft_itemid_take,ll_moneyid,part) = 0 THEN
  188. rslt = 0
  189. GOTO ext
  190. END IF
  191. //游标读费用项目
  192. Long ii = 0,arry_saletaskid[],arry_itemid[]
  193. Decimal arry_amt[]
  194. String arry_itemname[]
  195. DECLARE fyitem CURSOR FOR
  196. SELECT
  197. u_itemdef.itemname,
  198. u_outware_itemmx.itype * u_outware_itemmx.amt,
  199. u_outware_itemmx.saletaskid,
  200. u_outware_itemmx.itemid
  201. FROM u_outware_itemmx LEFT OUTER JOIN
  202. u_itemdef ON u_outware_itemmx.itemid = u_itemdef.itemid
  203. WHERE u_outware_itemmx.scid = :scid
  204. And u_outware_itemmx.outwareid = :outwareid ;
  205. OPEN fyitem;
  206. ii++
  207. FETCH fyitem Into :arry_itemname[ii],:arry_amt[ii],:arry_saletaskid[ii],:arry_itemid[ii];
  208. DO WHILE sqlca.SQLCode = 0
  209. ii++
  210. FETCH fyitem Into :arry_itemname[ii],:arry_amt[ii],:arry_saletaskid[ii],:arry_itemid[ii];
  211. LOOP
  212. CLOSE fyitem;
  213. //插入明细费用数据
  214. FOR ii = 1 To UpperBound(arry_itemname)
  215. IF arry_itemname[ii] <> '' And Not IsNull(arry_itemname[ii]) and arry_amt[ii]<>0 THEN
  216. IF uo_take.add_takerecmx(scid,uo_take.ref_takeid,outwarecode,outdate,relint_1,arry_amt[ii],0,&
  217. publ_operator,outwarecode + arry_itemname[ii],outrep,3,0,arry_itemid[ii],cusid, ll_moneyid,arg_msg,False,part) = 0 THEN
  218. rslt = 0
  219. GOTO ext
  220. END IF
  221. UPDATE u_saletask_itemmx Set amtyfh = amtyfh + :arry_amt[ii] Where scid = :scid And saletaskid = :arry_saletaskid[ii] And itemid = :arry_itemid[ii];
  222. END IF
  223. NEXT
  224. //游标读费用项目
  225. IF ld_taxamt <> 0 THEN
  226. ls_about = outwarecode + "税金" //撤审有用, 应收明细增加有用
  227. IF f_get_itemid(6,ll_dft_itemid_sj, arg_msg) = 0 THEN // 销售税金项目
  228. rslt = 0
  229. GOTO ext
  230. END IF
  231. IF uo_take.add_takerecmx(scid,uo_take.ref_takeid,outwarecode,outdate,relint_1,ld_taxamt,ld_takeamt_tax,&
  232. publ_operator,ls_about,outrep,3,0,ll_dft_itemid_sj,cusid, ll_moneyid,arg_msg,False,part) = 0 THEN
  233. rslt = 0
  234. GOTO ext
  235. END IF
  236. END IF
  237. IF ld_otheramt <> 0 THEN
  238. ls_about = outwarecode + sys_option_change_otheramt
  239. IF f_get_itemid(3,ll_dft_itemid_yh, arg_msg) = 0 THEN // 销售税金项目
  240. rslt = 0
  241. GOTO ext
  242. END IF
  243. IF uo_take.add_takerecmx(scid,uo_take.ref_takeid,outwarecode,outdate,relint_1,0 - ld_otheramt,0,&
  244. publ_operator,ls_about,outrep,3,0,ll_dft_itemid_yh,cusid, ll_moneyid,arg_msg,False,part) = 0 THEN
  245. rslt = 0
  246. GOTO ext
  247. END IF
  248. END IF
  249. // IF ld_takeamt <> 0 THEN
  250. // ls_about = outwarecode + "结算已收"
  251. //
  252. // IF uo_take.add_takerecmx(scid,uo_take.ref_takeid,outwarecode,outdate,relint_1,0,ld_takeamt,&
  253. // publ_operator,ls_about,outrep,3,0,ll_dft_itemid_take,cusid, ll_moneyid,arg_msg,FALSE,part) = 0 THEN
  254. // rslt = 0
  255. // GOTO ext
  256. // END IF
  257. // END IF
  258. UPDATE u_outware
  259. SET relint_3 = :uo_take.ref_takeid
  260. WHERE u_outware.outwareid = :outwareid
  261. AND scid = :scid
  262. AND flag = 1
  263. And secflag = 1 Using commit_transaction;
  264. IF commit_transaction.SQLCode <> 0 THEN
  265. arg_msg = '更新相关应收帐id失败'
  266. rslt = 0
  267. GOTO ext
  268. END IF
  269. END IF
  270. secflag = 1
  271. ext:
  272. IF rslt = 0 THEN
  273. ROLLBACK Using commit_transaction;
  274. ELSEIF rslt = 1 And arg_ifcommit THEN
  275. COMMIT Using commit_transaction;
  276. END IF
  277. Destroy uo_update_cusprice
  278. Destroy uo_take
  279. RETURN rslt
  280. end function
  281. public function integer c_secauditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i
  282. uo_cusprice uo_update_cusprice
  283. uo_update_cusprice = Create uo_cusprice
  284. uo_musttake uo_take
  285. uo_take = Create uo_musttake
  286. String ls_mtrlname
  287. String ls_cusname
  288. DateTime null_datetime
  289. String ls_tmpcode
  290. IF outwareid = 0 THEN
  291. rslt = 0
  292. arG_MSG = "没有撤审对象"
  293. GOTO ext
  294. END IF
  295. IF it_newbegin Or it_updatebegin THEN
  296. rslt = 0
  297. arG_MSG = "编辑状态下不可以执行撤审"
  298. GOTO ext
  299. END IF
  300. IF cwauditingflag = 1 THEN
  301. rslt = 0
  302. arG_MSG = "该单据已经总账审核,不能进行财务撤审"
  303. GOTO ext
  304. END IF
  305. IF secflag = 0 THEN
  306. rslt = 0
  307. arG_MSG = "该单据财务未审,不能进行财务撤审"
  308. GOTO ext
  309. END IF
  310. SELECT count(*) INTO :cnt
  311. FROM u_user
  312. Where username = :publ_operator Using commit_transaction ;
  313. IF commit_transaction.SQLCode <> 0 THEN
  314. rslt = 0
  315. arG_MSG = "查询操作失败,操作员"
  316. GOTO ext
  317. END IF
  318. IF cnt = 0 THEN
  319. rslt = 0
  320. arG_MSG = "操作员姓名未登记或已取消"
  321. GOTO ext
  322. END IF
  323. SetNull(null_datetime)
  324. UPDATE u_outware
  325. SET secAuditingrep = '',
  326. secAuditingdate = :null_datetime,
  327. secflag = 0,
  328. relint_3 = 0
  329. WHERE u_outware.outwareid = :outwareid
  330. And scid = :scid Using commit_transaction;
  331. IF commit_transaction.SQLCode <> 0 THEN
  332. rslt = 0
  333. arG_MSG = "财务审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  334. GOTO ext
  335. ELSEIF commit_transaction.SQLNRows = 0 THEN
  336. rslt = 0
  337. arG_MSG = "单据正在财务撤审,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  338. GOTO ext
  339. END IF
  340. FOR i = 1 To it_mxbt
  341. IF uo_update_cusprice.uf_del_cusprice(thflag,cusid,outwaremx[i].mtrlid,outwaremx[i].unit,outwaremx[i].status,outwaremx[i].woodcode,outwaremx[i].pcode,outwareid,outwaremx[i].printid,relint_2,False,arG_MSG) = 0 THEN
  342. rslt = 0
  343. GOTO ext
  344. END IF
  345. NEXT
  346. Int li_btype
  347. Long ll_accountsid
  348. SELECT btype,accountsid INTO :li_btype,:ll_accountsid
  349. FROM cw_banktype
  350. Where banktypeid = :relint_1 Using commit_transaction;
  351. IF commit_transaction.SQLCode <> 0 THEN
  352. rslt = 0
  353. arG_MSG = '查询结算方式类型失败,'+ commit_transaction.SQLErrText
  354. GOTO ext
  355. END IF
  356. IF sum_enamt <> 0 THEN
  357. Long ll_takeid, ll_listno
  358. String ls_about
  359. Boolean lb_del
  360. ll_takeid = relint_3
  361. //====================================================================
  362. // 修改:检查是否已开客户收款结算单
  363. //--------------------------------------------------------------------
  364. // 作者: lwl 日期: 2015年06月03日
  365. SELECT count(0)
  366. INTO :cnt
  367. FROM u_Bmstamtmx INNER JOIN
  368. u_Bmstamt ON u_Bmstamtmx.Baid = u_Bmstamt.Baid
  369. WHERE (u_Bmstamt.billtype = 0)
  370. And (u_Bmstamtmx.takeid = :ll_takeid);
  371. IF sqlca.SQLCode <> 0 THEN
  372. rslt = 0
  373. arG_MSG = '查询应收帐是否已经开客户收款结算单失败,' + sqlca.SQLErrText
  374. GOTO ext
  375. END IF
  376. IF cnt > 0 THEN
  377. SELECT top 1 u_Bmstamt.BaCode
  378. INTO :ls_tmpcode
  379. FROM u_Bmstamtmx INNER JOIN
  380. u_Bmstamt ON u_Bmstamtmx.Baid = u_Bmstamt.Baid
  381. WHERE (u_Bmstamt.billtype = 0)
  382. And (u_Bmstamtmx.takeid = :ll_takeid);
  383. IF sqlca.SQLCode <> 0 THEN
  384. rslt = 0
  385. arG_MSG = '查询已开客户收款结算单失败,' + sqlca.SQLErrText
  386. GOTO ext
  387. END IF
  388. rslt = 0
  389. arG_MSG = '已开客户收款结算单['+ls_tmpcode+'],不能撤审'
  390. GOTO ext
  391. END IF
  392. //====================================================================
  393. // IF li_btype = 1 THEN
  394. // ls_about = outwarecode + "结算已收"
  395. //
  396. // //删已收
  397. // SELECT listno
  398. // INTO :ll_listno
  399. // FROM u_bmsttakemx
  400. // WHERE takeid = :ll_takeid
  401. // And dscrp = :ls_about
  402. // and buildtype = 3;
  403. //
  404. // IF sqlca.SQLCode <> 0 THEN
  405. // //兼容旧程序
  406. // lb_del = False
  407. // ELSE
  408. // lb_del = True
  409. // END IF
  410. //
  411. // IF uo_take.del_takerecmx(3, ll_takeid , ll_listno,arG_MSG,False) = 0 THEN
  412. // rslt = 0
  413. // GOTO ext
  414. // END IF
  415. // END IF
  416. IF otheramt <> 0 THEN
  417. //删优惠
  418. ls_about = outwarecode + sys_option_change_otheramt
  419. SELECT listno
  420. INTO :ll_listno
  421. FROM u_bmsttakemx
  422. WHERE takeid = :ll_takeid
  423. AND dscrp = :ls_about
  424. And buildtype = 3;
  425. IF sqlca.SQLCode <> 0 THEN
  426. rslt = 0
  427. arG_MSG = "查询应收帐"+sys_option_change_otheramt+"金额明细失败,"+sqlca.SQLErrText
  428. GOTO ext
  429. END IF
  430. IF uo_take.del_takerecmx(3, ll_takeid , ll_listno,arG_MSG,False) = 0 THEN
  431. rslt = 0
  432. GOTO ext
  433. END IF
  434. END IF
  435. IF sum_enamt_tax <> 0 THEN
  436. //删税金
  437. ls_about = outwarecode + "税金"
  438. //删已收
  439. SELECT listno
  440. INTO :ll_listno
  441. FROM u_bmsttakemx
  442. WHERE takeid = :ll_takeid
  443. AND dscrp = :ls_about
  444. And buildtype = 3;
  445. IF sqlca.SQLCode <> 0 THEN
  446. rslt = 0
  447. arG_MSG = "查询应收帐税金明细失败,"+sqlca.SQLErrText
  448. GOTO ext
  449. END IF
  450. IF uo_take.del_takerecmx(3, ll_takeid , ll_listno,arG_MSG,False) = 0 THEN
  451. rslt = 0
  452. GOTO ext
  453. END IF
  454. END IF
  455. //删费用明细
  456. //游标读费用项目
  457. Long ii = 0,arry_saletaskid[],arry_itemid[]
  458. Decimal arry_amt[]
  459. String arry_itemname[]
  460. DECLARE fyitem CURSOR FOR
  461. SELECT
  462. u_itemdef.itemname,
  463. u_outware_itemmx.itype * u_outware_itemmx.amt,
  464. u_outware_itemmx.saletaskid,
  465. u_outware_itemmx.itemid
  466. FROM u_outware_itemmx LEFT OUTER JOIN
  467. u_itemdef ON u_outware_itemmx.itemid = u_itemdef.itemid
  468. WHERE u_outware_itemmx.scid = :scid
  469. And u_outware_itemmx.outwareid = :outwareid ;
  470. OPEN fyitem;
  471. ii++
  472. FETCH fyitem Into :arry_itemname[ii],:arry_amt[ii],:arry_saletaskid[ii],:arry_itemid[ii];
  473. DO WHILE sqlca.SQLCode = 0
  474. ii++
  475. FETCH fyitem Into :arry_itemname[ii],:arry_amt[ii],:arry_saletaskid[ii],:arry_itemid[ii];
  476. LOOP
  477. CLOSE fyitem;
  478. //插入明细费用数据
  479. FOR ii = 1 To UpperBound(arry_itemname)
  480. IF arry_itemname[ii] <> '' And Not IsNull(arry_itemname[ii]) THEN
  481. ll_listno = -1
  482. ls_about = outwarecode + arry_itemname[ii]
  483. SELECT listno
  484. INTO :ll_listno
  485. FROM u_bmsttakemx
  486. WHERE takeid = :ll_takeid
  487. AND dscrp = :ls_about
  488. And buildtype = 3;
  489. IF ll_listno <> -1 THEN
  490. IF uo_take.del_takerecmx(3, ll_takeid , ll_listno,arG_MSG,False) = 0 THEN
  491. rslt = 0
  492. GOTO ext
  493. END IF
  494. END IF
  495. UPDATE u_saletask_itemmx Set amtyfh = amtyfh - (:arry_amt[ii]) Where scid = :scid And saletaskid = :arry_saletaskid[ii] And itemid = :arry_itemid[ii];
  496. END IF
  497. NEXT
  498. //游标读费用项目
  499. //删费用明细
  500. IF uo_take.del_takerec(scid,1,relint_3,cusid,arG_MSG,False) = 0 THEN
  501. rslt = 0
  502. GOTO ext
  503. END IF
  504. END IF
  505. secflag = 0
  506. ext:
  507. IF rslt = 0 THEN
  508. ROLLBACK Using commit_transaction;
  509. ELSEIF rslt = 1 And arg_ifcommit THEN
  510. COMMIT Using commit_transaction;
  511. END IF
  512. Destroy uo_update_cusprice
  513. Destroy uo_take
  514. RETURN rslt
  515. end function
  516. public function integer priceaudit (long arg_scid, long arg_outwareid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,i
  517. uo_cusprice uo_price
  518. IF arg_scid < 0 THEN
  519. rslt = 0
  520. arg_msg = "错误的分部ID"
  521. GOTO ext
  522. END IF
  523. IF arg_outwareid <= 0 THEN
  524. rslt = 0
  525. arg_msg = "没有确认对象"
  526. GOTO ext
  527. END IF
  528. if getinfo(arg_scid,arg_outwareid,arg_msg) = 0 then
  529. rslt = 0
  530. goto ext
  531. end if
  532. IF priceflag = 1 THEN
  533. rslt = 0
  534. arg_msg = "单据已经确认"
  535. GOTO ext
  536. END IF
  537. uo_price = create uo_cusprice
  538. FOR i = 1 TO it_mxbt
  539. IF uo_price.uf_check_price ( cusid, outwaremx[i].mtrlid, &
  540. outwaremx[i].mtrlcode,outwaremx[i].unit,outwaremx[i].status,outwaremx[i].pcode,&
  541. outwaremx[i].woodcode,relint_2,outwaremx[i].price,arg_msg) = 0 THEN
  542. rslt = 0
  543. GOTO ext
  544. END IF
  545. NEXT
  546. UPDATE u_outware
  547. SET priceemp = :publ_operator,
  548. pricedate = getdate(),
  549. priceflag = 1
  550. WHERE u_outware.outwareid = :arg_outwareid
  551. AND priceflag = 0
  552. AND scid = :arg_scid USING commit_transaction;
  553. IF commit_transaction.SQLCode <> 0 THEN
  554. rslt = 0
  555. arg_msg = "因网络或其它原因导致确认单据操作失败"+"~n"+commit_transaction.SQLErrText
  556. GOTO ext
  557. ELSEIF commit_transaction.SQLNRows = 0 THEN
  558. rslt = 0
  559. arg_msg = "单据正在确认,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  560. GOTO ext
  561. END IF
  562. priceflag = 1
  563. ext:
  564. IF rslt = 0 THEN
  565. ROLLBACK USING commit_transaction;
  566. ELSEIF rslt = 1 AND arg_ifcommit THEN
  567. COMMIT USING commit_transaction;
  568. END IF
  569. destroy uo_price
  570. RETURN rslt
  571. end function
  572. public function integer c_priceaudit (long arg_scid, long arg_outwareid, boolean arg_ifcommit, ref string arg_msg);
  573. Long rslt = 1,i
  574. DateTime null_dt
  575. uo_cusprice uo_price
  576. SetNull(null_dt)
  577. IF arg_scid < 0 THEN
  578. rslt = 0
  579. arg_msg = "错误的分部ID"
  580. GOTO ext
  581. END IF
  582. IF arg_outwareid <= 0 THEN
  583. rslt = 0
  584. arg_msg = "没有确认对象"
  585. GOTO ext
  586. END IF
  587. IF getinfo(arg_scid,arg_outwareid,arg_msg) = 0 THEN
  588. rslt = 0
  589. GOTO ext
  590. END IF
  591. IF priceflag = 0 THEN
  592. rslt = 0
  593. arg_msg = "单据还未确认,不能反确认"
  594. GOTO ext
  595. END IF
  596. IF sys_option_confirmaudit_sale = 1 THEN
  597. IF flag = 1 THEN
  598. rslt = 0
  599. arg_msg = "销售单已仓审,不能反确认"
  600. GOTO ext
  601. END IF
  602. END IF
  603. uo_price = CREATE uo_cusprice
  604. FOR i = 1 TO it_mxbt
  605. IF uo_price.uf_check_price ( cusid, outwaremx[i].mtrlid, &
  606. outwaremx[i].mtrlcode,outwaremx[i].unit,outwaremx[i].status,&
  607. outwaremx[i].pcode,outwaremx[i].woodcode,relint_2,&
  608. outwaremx[i].price,arg_msg) = 0 THEN
  609. rslt = 0
  610. GOTO ext
  611. END IF
  612. NEXT
  613. UPDATE u_outware
  614. SET priceemp = '',
  615. pricedate = :null_dt,
  616. priceflag = 0
  617. WHERE u_outware.outwareid = :arg_outwareid
  618. AND priceflag = 1
  619. AND scid = :arg_scid USING commit_transaction;
  620. IF commit_transaction.SQLCode <> 0 THEN
  621. rslt = 0
  622. arg_msg = "因网络或其它原因导致反确认单据操作失败"+"~n"+commit_transaction.SQLErrText
  623. GOTO ext
  624. ELSEIF commit_transaction.SQLNRows = 0 THEN
  625. rslt = 0
  626. arg_msg = "单据正在反确认,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  627. GOTO ext
  628. END IF
  629. priceflag = 0
  630. ext:
  631. IF rslt = 0 THEN
  632. ROLLBACK USING commit_transaction;
  633. ELSEIF rslt = 1 AND arg_ifcommit THEN
  634. COMMIT USING commit_transaction;
  635. END IF
  636. DESTROY uo_price
  637. RETURN rslt
  638. end function
  639. public function integer p_update_outdate (long arg_scid, long arg_outwareid, datetime arg_outdate, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  640. IF arg_outwareid <= 0 THEN
  641. rslt = 0
  642. arg_msg = "错误的单据唯一码"
  643. GOTO ext
  644. END IF
  645. IF p_getinfo(arg_scid,arg_outwareid,arg_msg) = 0 THEN
  646. rslt = 0
  647. GOTO ext
  648. END IF
  649. IF priceflag <> 1 THEN
  650. rslt = 0
  651. arg_msg = "单据未确认"
  652. GOTO ext
  653. END IF
  654. IF flag <> 0 THEN
  655. rslt = 0
  656. arg_msg = "单据已仓审"
  657. GOTO ext
  658. END IF
  659. IF arg_outdate < DateTime(2000-01-01,00:00:00) THEN
  660. rslt = 0
  661. arg_msg = "销售时间错误"
  662. GOTO ext
  663. END IF
  664. UPDATE u_outware
  665. SET outdate = :arg_outdate
  666. WHERE scid = :arg_scid
  667. AND outwareid = :arg_outwareid
  668. AND priceflag = 1
  669. And flag = 0;
  670. IF sqlca.SQLCode <> 0 THEN
  671. rslt = 0
  672. arg_msg = "更新单据销售时间失败,"+sqlca.SQLErrText
  673. GOTO ext
  674. ELSEIF sqlca.SQLNRows = 0 THEN
  675. rslt = 0
  676. arg_msg = "更新单据销售时间失败,单据正在仓审...."+sqlca.SQLErrText
  677. GOTO ext
  678. END IF
  679. ext:
  680. IF rslt = 0 THEN
  681. ROLLBACK;
  682. ELSEIF rslt = 1 And arg_ifcommit THEN
  683. COMMIT;
  684. END IF
  685. RETURN rslt
  686. end function
  687. public function integer secpriceaudit (long arg_scid, long arg_outwareid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,i
  688. IF arg_scid < 0 THEN
  689. rslt = 0
  690. arg_msg = "错误的分部ID"
  691. GOTO ext
  692. END IF
  693. IF arg_outwareid <= 0 THEN
  694. rslt = 0
  695. arg_msg = "没有回单对象"
  696. GOTO ext
  697. END IF
  698. IF getinfo(arg_scid,arg_outwareid,arg_msg) = 0 THEN
  699. rslt = 0
  700. GOTO ext
  701. END IF
  702. IF secpflag = 1 THEN
  703. rslt = 0
  704. arg_msg = "单据已经回单"
  705. GOTO ext
  706. END IF
  707. UPDATE u_outware
  708. SET secpemp = :publ_operator,
  709. secpdate = getdate(),
  710. secpflag = 1
  711. WHERE u_outware.outwareid = :arg_outwareid
  712. AND secpflag = 0
  713. And scid = :arg_scid Using commit_transaction;
  714. IF commit_transaction.SQLCode <> 0 THEN
  715. rslt = 0
  716. arg_msg = "因网络或其它原因导致回单单据操作失败"+"~n"+commit_transaction.SQLErrText
  717. GOTO ext
  718. ELSEIF commit_transaction.SQLNRows = 0 THEN
  719. rslt = 0
  720. arg_msg = "单据正在回单,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  721. GOTO ext
  722. END IF
  723. secpflag = 1
  724. ext:
  725. IF rslt = 0 THEN
  726. ROLLBACK Using commit_transaction;
  727. ELSEIF rslt = 1 And arg_ifcommit THEN
  728. COMMIT Using commit_transaction;
  729. END IF
  730. RETURN rslt
  731. end function
  732. public function integer c_secpriceaudit (long arg_scid, long arg_outwareid, boolean arg_ifcommit, ref string arg_msg);
  733. Long rslt = 1,i
  734. DateTime null_dt
  735. SetNull(null_dt)
  736. IF arg_scid < 0 THEN
  737. rslt = 0
  738. arg_msg = "错误的分部ID"
  739. GOTO ext
  740. END IF
  741. IF arg_outwareid <= 0 THEN
  742. rslt = 0
  743. arg_msg = "没有回单对象"
  744. GOTO ext
  745. END IF
  746. IF getinfo(arg_scid,arg_outwareid,arg_msg) = 0 THEN
  747. rslt = 0
  748. GOTO ext
  749. END IF
  750. IF secpflag = 0 THEN
  751. rslt = 0
  752. arg_msg = "单据还未回单,不能反回单"
  753. GOTO ext
  754. END IF
  755. UPDATE u_outware
  756. SET secpemp = '',
  757. secpdate = :null_dt,
  758. secpflag = 0
  759. WHERE u_outware.outwareid = :arg_outwareid
  760. AND secpflag = 1
  761. AND scid = :arg_scid USING commit_transaction;
  762. IF commit_transaction.SQLCode <> 0 THEN
  763. rslt = 0
  764. arg_msg = "因网络或其它原因导致反回单单据操作失败"+"~n"+commit_transaction.SQLErrText
  765. GOTO ext
  766. ELSEIF commit_transaction.SQLNRows = 0 THEN
  767. rslt = 0
  768. arg_msg = "单据正在反回单,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  769. GOTO ext
  770. END IF
  771. secpflag = 0
  772. ext:
  773. IF rslt = 0 THEN
  774. ROLLBACK USING commit_transaction;
  775. ELSEIF rslt = 1 AND arg_ifcommit THEN
  776. COMMIT USING commit_transaction;
  777. END IF
  778. RETURN rslt
  779. end function
  780. public function integer auditing_chk (ref string arg_msg);Long rslt = 1
  781. Long i
  782. IF sys_option_confirmaudit_sale = 1 THEN
  783. IF priceflag = 0 THEN
  784. rslt = 0
  785. arg_msg = "系统选项[025]限制,销售单要确认后才能审核"
  786. GOTO ext
  787. END IF
  788. END IF
  789. //检查定价
  790. Decimal ld_dftsaleprice
  791. IF sys_option_outwaresale_dft_lmsaleprice = 1 THEN
  792. FOR i = 1 To it_mxbt
  793. IF outwaremx[i].dftsaleprice = 0 THEN
  794. f_get_defsaleprice(cusid,outwaremx[i].mtrlid,outwaremx[i].unit,outwaremx[i].status,outwaremx[i].pcode,outwaremx[i].woodcode,relint_2,ld_dftsaleprice,outwaremx[i].uqty)
  795. IF ld_dftsaleprice = 0 THEN
  796. rslt = 0
  797. arg_msg = "系统选项[075]限制,行:"+String(i)+",产品编号: "+String(outwaremx[i].mtrlcode)+", 需先设定客户定价"
  798. GOTO ext
  799. END IF
  800. UPDATE u_outwaremx
  801. SET dftsaleprice = :ld_dftsaleprice
  802. WHERE scid = :scid
  803. AND outwareid = :outwareid
  804. AND printid = :outwaremx[i].printid
  805. Using commit_transaction;
  806. IF commit_transaction.SQLCode <> 0 THEN
  807. rslt = 0
  808. arg_msg = "行:"+String(i)+",更新客户定价失败,"+commit_transaction.SQLErrText
  809. GOTO ext
  810. END IF
  811. outwaremx[i].dftsaleprice = ld_dftsaleprice
  812. END IF
  813. NEXT
  814. END IF
  815. IF sys_option_hide_ware = 0 THEN
  816. IF uof_check_warepdb_audit(storageid,arg_msg) = 0 THEN
  817. rslt = 0
  818. GOTO ext
  819. END IF
  820. //自动生成组装单
  821. IF sys_option_outware_if_di <> 0 THEN
  822. IF thflag = 0 THEN
  823. IF uof_create_dismantle_install(arg_msg) = 0 THEN
  824. rslt = 0
  825. GOTO ext
  826. END IF
  827. END IF
  828. END IF
  829. END IF
  830. ext:
  831. RETURN rslt
  832. end function
  833. public function integer auditing_end (ref string arg_msg);Long rslt = 1
  834. Long i
  835. uo_saletask uo_task
  836. uo_task = Create uo_saletask
  837. uo_task.commit_transaction = commit_transaction
  838. FOR i = 1 To it_mxbt
  839. IF billtype = 1 And outwaremx[i].relid > 0 And outwaremx[i].ifrel = 1 THEN
  840. IF uo_task.addmxcmpl(scid,outwaremx[i].relid,outwaremx[i].relprintid,outwaremx[i].saleqty,arg_msg,False) <> 1 THEN
  841. rslt = 0
  842. GOTO ext
  843. END IF
  844. IF uo_task.trycmplsaletask(scid,outwaremx[i].relid,arg_msg,False) = 0 THEN
  845. rslt = 0
  846. GOTO ext
  847. END IF
  848. END IF
  849. NEXT
  850. ext:
  851. Destroy uo_task
  852. RETURN rslt
  853. end function
  854. public function integer c_auditing_end (ref string arg_msg);Long rslt = 1
  855. Long i
  856. IF sys_option_hide_ware = 0 THEN
  857. //自动删除组装单
  858. IF sys_option_outware_if_di <> 0 THEN
  859. IF uof_destroy_dismantle_install(arg_msg) = 0 THEN
  860. rslt = 0
  861. GOTO ext
  862. END IF
  863. END IF
  864. END IF
  865. uo_saletask uo_task
  866. uo_task = Create uo_saletask
  867. uo_task.commit_transaction = commit_transaction
  868. FOR i = 1 To it_mxbt
  869. IF billtype = 1 And outwaremx[i].relid > 0 And ( outwaremx[i].ifrel = 1 or thflag = 1 ) THEN
  870. IF uo_task.addmxcmpl(scid,outwaremx[i].relid,outwaremx[i].relprintid, 0 - outwaremx[i].saleqty,arg_msg,False) <> 1 THEN
  871. rslt = 0
  872. GOTO ext
  873. END IF
  874. IF uo_task.trycmplsaletask(scid,outwaremx[i].relid,arg_msg,False) = 0 THEN
  875. rslt = 0
  876. GOTO ext
  877. END IF
  878. END IF
  879. NEXT
  880. ext:
  881. Destroy uo_task
  882. RETURN rslt
  883. end function
  884. public function integer c_auditing_chk (ref string arg_msg);long rslt = 1
  885. long i
  886. IF secflag = 1 THEN
  887. rslt = 0
  888. arg_msg = "单据已经过财务审核"
  889. GOTO ext
  890. END IF
  891. IF sys_option_hide_ware = 0 THEN
  892. IF billtype <> 9 THEN
  893. IF uof_check_warepdb_audit(storageid,arg_msg) = 0 THEN
  894. rslt = 0
  895. GOTO ext
  896. END IF
  897. ELSE
  898. IF Not sysautobuild THEN
  899. IF dscrp = '盘点表审核自动生成盘亏单' THEN
  900. arg_msg = '系统自动生成的单据不能手动撤审'
  901. rslt = 0
  902. GOTO ext
  903. END IF
  904. END IF
  905. END IF
  906. END IF
  907. ext:
  908. return rslt
  909. end function
  910. public function integer acceptmxmx (s_outwaremx_mx arg_mx_mx, ref string arg_msg);Int rslt = 1
  911. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  912. rslt = 0
  913. arg_msg = "非编辑状态不可以使用,操作取消"
  914. GOTO ext
  915. END IF
  916. IF IsNull(arg_mx_mx.scid) THEN arg_mx_mx.scid = 0
  917. IF IsNull(arg_mx_mx.outwareid) THEN arg_mx_mx.outwareid = 0
  918. IF IsNull(arg_mx_mx.mxprintid) THEN arg_mx_mx.mxprintid = 0
  919. IF IsNull(arg_mx_mx.printid) THEN arg_mx_mx.printid = 0
  920. IF IsNull(arg_mx_mx.packcode) THEN arg_mx_mx.packcode = ''
  921. IF IsNull(arg_mx_mx.packname) THEN arg_mx_mx.packname = ''
  922. IF IsNull(arg_mx_mx.packnum) THEN arg_mx_mx.packnum = 0
  923. IF IsNull(arg_mx_mx.net_weight) THEN arg_mx_mx.net_weight = 0
  924. IF IsNull(arg_mx_mx.gross_weight) THEN arg_mx_mx.gross_weight = 0
  925. IF IsNull(arg_mx_mx.cubage) THEN arg_mx_mx.cubage = 0
  926. it_mxmxbt++
  927. mx_mx[it_mxmxbt] = arg_mx_mx
  928. ext:
  929. RETURN rslt
  930. end function
  931. public function integer createmxmx (ref string arg_msg);Int rslt = 1
  932. s_outwaremx_mx s_mxmx[], s_empty[]
  933. Long cnt = 0
  934. Long i, j, k = 0
  935. FOR i = 1 To it_mxbt
  936. cnt = 1
  937. s_mxmx = s_empty
  938. DECLARE cur1 CURSOR FOR SELECT packcode, packname, packnum, net_weight, gross_weight, cubage
  939. FROM u_mtrldef_pack
  940. WHERE mtrlid = :outwaremx[i].mtrlid
  941. ORDER BY printid
  942. Using commit_transaction;
  943. OPEN cur1;
  944. FETCH cur1 Into :s_mxmx[cnt].packcode, :s_mxmx[cnt].packname, :s_mxmx[cnt].packnum, :s_mxmx[cnt].net_weight, :s_mxmx[cnt].gross_weight, :s_mxmx[cnt].cubage;
  945. DO WHILE commit_transaction.SQLCode = 0
  946. cnt++
  947. FETCH cur1 Into :s_mxmx[cnt].packcode, :s_mxmx[cnt].packname, :s_mxmx[cnt].packnum, :s_mxmx[cnt].net_weight, :s_mxmx[cnt].gross_weight, :s_mxmx[cnt].cubage;
  948. LOOP
  949. cnt --
  950. FOR j = 1 To cnt
  951. k++
  952. s_mxmx[j].mxprintid = k
  953. s_mxmx[j].printid = outwaremx[i].printid
  954. s_mxmx[j].packnum = s_mxmx[j].packnum * outwaremx[i].qty
  955. IF acceptmxmx(s_mxmx[j], arg_msg) <> 1 THEN
  956. rslt = 0
  957. GOTO ext
  958. END IF
  959. NEXT
  960. NEXT
  961. ext:
  962. RETURN rslt
  963. end function
  964. public function integer p_clearmx ();it_mxmxbt = 0
  965. it_mxbt_item = 0
  966. RETURN Super::p_clearmx()
  967. end function
  968. public function integer acceptmx_item (s_outware_itemmx arg_item, ref string arg_msg);Int rslt = 1
  969. Long cnt
  970. cnt = 0
  971. IF it_newbegin = False And it_updatebegin = False THEN
  972. rslt = 0
  973. arg_msg = "非编辑状态不可以使用,操作取消"
  974. GOTO ext
  975. END IF
  976. IF IsNull(arg_item.scid) THEN arg_item.scid = 0
  977. IF IsNull(arg_item.outwareid) THEN arg_item.outwareid = 0
  978. IF IsNull(arg_item.printid) THEN arg_item.printid = 0
  979. IF IsNull(arg_item.itemid) THEN arg_item.itemid = 0
  980. IF IsNull(arg_item.amt) THEN arg_item.amt = 0
  981. IF IsNull(arg_item.mxdscrp) THEN arg_item.mxdscrp = ''
  982. IF IsNull(arg_item.saletaskid) THEN arg_item.saletaskid = 0
  983. IF IsNull(arg_item.saletaskprintid) THEN arg_item.saletaskprintid = 0
  984. IF IsNull(arg_item.itype) THEN arg_item.itype =1//默认方向类型为增项
  985. IF arg_item.itemid = 0 Or arg_item.amt = 0 THEN
  986. rslt = 1
  987. GOTO ext
  988. END IF
  989. SELECT count(*)
  990. INTO :cnt
  991. FROM u_itemdef
  992. Where itemid = :arg_item.itemid;
  993. IF commit_transaction.SQLCode <> 0 THEN
  994. rslt = 0
  995. arg_msg = '查询收支项目是否存在失败,'+commit_transaction.SQLErrText
  996. GOTO ext
  997. END IF
  998. IF cnt = 0 THEN
  999. rslt = 0
  1000. arg_msg = '第'+String(arg_item.printid)+'行,收支项目不存在,请检查'
  1001. GOTO ext
  1002. END IF
  1003. it_mxbt_item++
  1004. outware_itemmx[it_mxbt_item] = arg_item
  1005. ext:
  1006. IF rslt = 0 THEN p_clearmx()
  1007. RETURN rslt
  1008. end function
  1009. public function integer save_end (ref string arg_msg);Long rslt = 1
  1010. Long i
  1011. //sys_option_chk_wkd //销售发货单开单时,使用物料清单计算 未开单库存
  1012. IF sys_option_chk_wkd = 1 THEN
  1013. IF uf_chk_assemble_qty2(scid,storageid,outwareid,arg_msg) = 0 THEN
  1014. IF it_newbegin THEN outwareid = 0 //还原outwareid
  1015. rslt = 0
  1016. GOTO ext
  1017. END IF
  1018. END IF
  1019. IF it_newbegin THEN
  1020. FOR i = 1 To it_mxmxbt
  1021. INSERT INTO u_outwaremx_mx(scid,
  1022. outwareid,
  1023. mxprintid,
  1024. printid,
  1025. packcode,
  1026. packname,
  1027. packnum,
  1028. net_weight,
  1029. gross_weight,
  1030. cubage)
  1031. VALUES (:scid,
  1032. :outwareid,
  1033. :mx_mx[i].mxprintid,
  1034. :mx_mx[i].printid,
  1035. :mx_mx[i].packcode,
  1036. :mx_mx[i].packname,
  1037. :mx_mx[i].packnum,
  1038. :mx_mx[i].net_weight,
  1039. :mx_mx[i].gross_weight,
  1040. :mx_mx[i].cubage)
  1041. Using commit_transaction;
  1042. IF commit_transaction.SQLCode <> 0 THEN
  1043. IF it_newbegin THEN outwareid = 0 //还原outwareid
  1044. rslt = 0
  1045. IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_outwaremx_mx') > 0 THEN
  1046. arg_msg = '插入单据包件明细内容失败,关键字ID重复'
  1047. ELSE
  1048. arg_msg = '因网络或其它原因导致插入单据包件明细内容失败,'+commit_transaction.SQLErrText
  1049. END IF
  1050. GOTO ext
  1051. END IF
  1052. NEXT
  1053. ELSE
  1054. IF flag = 0 And priceflag = 0 THEN
  1055. //删除原有包件明细
  1056. DELETE FROM u_outwaremx_mx
  1057. WHERE u_outwaremx_mx.outwareid = :outwareid
  1058. And u_outwaremx_mx.scid = :scid Using commit_transaction;
  1059. IF commit_transaction.SQLCode <> 0 THEN
  1060. rslt = 0
  1061. arg_msg = "删除旧有包件明细操作失败"+"~n"+commit_transaction.SQLErrText
  1062. GOTO ext
  1063. END IF
  1064. FOR i = 1 To it_mxmxbt
  1065. INSERT INTO u_outwaremx_mx(scid,
  1066. outwareid,
  1067. mxprintid,
  1068. printid,
  1069. packcode,
  1070. packname,
  1071. packnum,
  1072. net_weight,
  1073. gross_weight,
  1074. cubage)
  1075. VALUES (:scid,
  1076. :outwareid,
  1077. :mx_mx[i].mxprintid,
  1078. :mx_mx[i].printid,
  1079. :mx_mx[i].packcode,
  1080. :mx_mx[i].packname,
  1081. :mx_mx[i].packnum,
  1082. :mx_mx[i].net_weight,
  1083. :mx_mx[i].gross_weight,
  1084. :mx_mx[i].cubage)
  1085. Using commit_transaction;
  1086. IF commit_transaction.SQLCode <> 0 THEN
  1087. rslt = 0
  1088. IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_outwaremx_mx') > 0 THEN
  1089. arg_msg = '插入单据包件明细内容失败,关键字ID重复'
  1090. ELSE
  1091. arg_msg = '因网络或其它原因导致插入单据包件明细内容失败,'+commit_transaction.SQLErrText
  1092. END IF
  1093. GOTO ext
  1094. END IF
  1095. NEXT
  1096. END IF
  1097. DELETE FROM u_outware_itemmx
  1098. WHERE u_outware_itemmx.outwareid = :outwareid
  1099. And u_outware_itemmx.scid = :scid Using commit_transaction;
  1100. IF commit_transaction.SQLCode <> 0 THEN
  1101. rslt = 0
  1102. arg_msg = "删除旧有项目明细操作失败"+"~n"+commit_transaction.SQLErrText
  1103. GOTO ext
  1104. END IF
  1105. END IF
  1106. FOR i = 1 To it_mxbt_item
  1107. INSERT INTO u_outware_itemmx
  1108. (scid,
  1109. outwareid,
  1110. printid,
  1111. itemid,
  1112. amt,
  1113. mxdscrp,
  1114. saletaskid,
  1115. saletaskprintid,
  1116. itype
  1117. )
  1118. VALUES (:scid,
  1119. :outwareid,
  1120. :outware_itemmx[i].printid,
  1121. :outware_itemmx[i].itemid,
  1122. :outware_itemmx[i].amt,
  1123. :outware_itemmx[i].mxdscrp,
  1124. :outware_itemmx[i].saletaskid,
  1125. :outware_itemmx[i].saletaskprintid,
  1126. :outware_itemmx[i].itype
  1127. ) Using commit_transaction;
  1128. IF commit_transaction.SQLCode <> 0 THEN
  1129. IF it_newbegin THEN outwareid = 0 //还原outwareid
  1130. rslt = 0
  1131. arg_msg = "因网络或其它原因导致插入费用明细操作失败"+"~n"+commit_transaction.SQLErrText
  1132. GOTO ext
  1133. END IF
  1134. NEXT
  1135. ext:
  1136. RETURN rslt
  1137. end function
  1138. public function integer uof_create_dismantle_install (ref string arg_msg);Long rslt = 1
  1139. Long ll_j,ll_i,it_mxt = 1
  1140. String ls_mtrlcode, ls_plancode,ls_status,ls_woodcode,ls_pcode
  1141. Long ll_mtrlwareid,ll_mtrlid,ll_storageid
  1142. Dec ld_qty,ld_saleqty,ld_qty_b
  1143. String ls_reason
  1144. Long ll_cnt
  1145. Decimal lde_noallocqty, lde_planprice
  1146. long ll_Mtrlorigin
  1147. Decimal ld_rqty,ld_mxqty
  1148. Long j
  1149. uo_dismantle_install uo_ware_install
  1150. uo_ware_install = Create uo_dismantle_install
  1151. uo_ware_install.if_getid_ture = False
  1152. DataStore ds_mtrlware_di
  1153. ds_mtrlware_di = create DataStore
  1154. ds_mtrlware_di.dataObject = 'ds_mtrlwware_find_di'
  1155. ds_mtrlware_di.SetTransObject(sqlca)
  1156. ls_reason = '销售发货单:'+outwarecode+'自动组装'
  1157. SELECT count(*)
  1158. INTO :ll_cnt
  1159. FROM u_dismantle_install
  1160. WHERE reason = :ls_reason
  1161. And billtype = 0;
  1162. IF sqlca.SQLCode <> 0 THEN
  1163. arg_msg = '查询自动组装相关单据失败!'+sqlca.SQLErrText
  1164. rslt = 0
  1165. GOTO ext
  1166. END IF
  1167. IF ll_cnt > 0 THEN
  1168. arg_msg = '单据已经有自动组装单!'
  1169. rslt = 0
  1170. GOTO ext
  1171. END IF
  1172. String ls_cusname
  1173. SELECT name
  1174. INTO :ls_cusname
  1175. FROM u_cust
  1176. Where cusid = :cusid;
  1177. IF sqlca.SQLCode <> 0 THEN
  1178. arg_msg = '查询客户信息失败!'+sqlca.SQLErrText
  1179. rslt = 0
  1180. GOTO ext
  1181. END IF
  1182. FOR ll_j = 1 To it_mxbt
  1183. ll_mtrlwareid = outwaremx[ll_j].mtrlwareid
  1184. ld_saleqty = outwaremx[ll_j].qty
  1185. it_mxt = 1
  1186. SELECT u_mtrlware.mtrlid,
  1187. u_mtrlware.planprice,
  1188. u_mtrlware.storageid,
  1189. u_mtrlware.status,
  1190. u_mtrlware.woodcode,
  1191. u_mtrlware.pcode,
  1192. u_mtrlware.plancode,
  1193. u_mtrldef.mtrlcode,
  1194. u_mtrlware.noallocqty,
  1195. u_mtrldef.Mtrlorigin
  1196. INTO :ll_mtrlid,
  1197. :lde_planprice,
  1198. :ll_storageid,
  1199. :ls_status,
  1200. :ls_woodcode,
  1201. :ls_pcode,
  1202. :ls_plancode,
  1203. :ls_mtrlcode,
  1204. :lde_noallocqty,
  1205. :ll_Mtrlorigin
  1206. FROM u_mtrldef,
  1207. u_mtrlware
  1208. WHERE ( u_mtrldef.mtrlid = u_mtrlware.mtrlid )
  1209. And ( u_mtrlware.mtrlwareid = :ll_mtrlwareid );
  1210. IF sqlca.SQLCode <> 0 THEN
  1211. rslt = 0
  1212. arg_msg = '第'+String(ll_j)+'行,查询物料库存信息失败.'+sqlca.SQLErrText
  1213. GOTO ext
  1214. END IF
  1215. if sys_option_outware_if_di = 2 then
  1216. if ll_Mtrlorigin = 3 then CONTINUE // 当选项为2时自动组装需要排除外协属性的物料
  1217. end if
  1218. IF lde_noallocqty > 0 THEN
  1219. //存在一种情况,同一张单有多行相同明细(不同订单),库存数是之前的明细组装的
  1220. IF ll_j > 1 THEN
  1221. ld_qty_b = 0
  1222. FOR ll_i = 1 To ll_j - 1
  1223. IF ll_mtrlwareid = outwaremx[ll_i].mtrlwareid THEN
  1224. ld_qty_b += outwaremx[ll_i].qty
  1225. END IF
  1226. NEXT
  1227. END IF
  1228. IF lde_noallocqty - ld_qty_b >= ld_saleqty THEN //足够库存的, 不需要组装
  1229. CONTINUE
  1230. ELSEIF lde_noallocqty - ld_qty_b > 0 THEN //部分库存,只安装差额
  1231. ld_saleqty = outwaremx[ll_j].qty - (lde_noallocqty - ld_qty_b)
  1232. END IF
  1233. END IF
  1234. //计算组装结构
  1235. Long ll_SonMtrlid[]
  1236. String ls_pf_status[]
  1237. Decimal ld_Sonscale[]
  1238. int ls_Mtrlorigin[]
  1239. String ls_mtrlname,ls_status_find
  1240. Decimal ld_noallocqty,ld_allqty,ld_maxqty
  1241. DECLARE cur_pf CURSOR FOR
  1242. SELECT u_PrdPF.SonMtrlid,
  1243. u_PrdPF.Sonscale,
  1244. u_PrdPF.status
  1245. FROM u_PrdPF
  1246. Where u_PrdPF.mtrlid = :ll_mtrlid;
  1247. OPEN cur_pf;
  1248. FETCH cur_pf Into :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ls_pf_status[it_mxt];
  1249. DO WHILE sqlca.SQLCode = 0
  1250. it_mxt++
  1251. FETCH cur_pf Into :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ls_pf_status[it_mxt];
  1252. LOOP
  1253. it_mxt = it_mxt - 1
  1254. CLOSE cur_pf;
  1255. IF it_mxt = 0 THEN
  1256. IF sys_option_outware_if_di <> 0 THEN //没有bom的,成功跳过
  1257. CONTINUE
  1258. //elseif sys_option_outware_if_di = 2 then //没有bom的,错误提示
  1259. // rslt = 0
  1260. // arg_msg = '第'+String(ll_j)+'行,该产品没有建立组装结构,不能计算'
  1261. // GOTO ext
  1262. END IF
  1263. END IF
  1264. ld_maxqty = 1000000
  1265. FOR ll_i = 1 To it_mxt
  1266. SELECT mtrlname,Mtrlorigin INTO :ls_mtrlname,:ll_Mtrlorigin
  1267. FROM u_mtrldef
  1268. Where mtrlid = :ll_SonMtrlid[ll_i];
  1269. IF sqlca.SQLCode <> 0 THEN
  1270. rslt = 0
  1271. arg_msg = '第'+String(ll_j)+'行,查询产品资料失败,'+sqlca.SQLErrText
  1272. GOTO ext
  1273. END IF
  1274. ls_Mtrlorigin[ll_i] = ll_Mtrlorigin
  1275. if sys_option_outware_if_di = 2 then
  1276. if ll_Mtrlorigin = 3 then CONTINUE // 当选项为2时自动组装需要排除外协属性的物料
  1277. end if
  1278. IF sys_option_if_color = 1 THEN
  1279. ls_status_find = ls_status
  1280. ELSE
  1281. ls_status_find = ls_pf_status[ll_i]
  1282. END IF
  1283. ld_noallocqty = 0
  1284. ld_allqty = 0
  1285. SELECT sum(noallocqty) INTO :ld_noallocqty
  1286. FROM u_mtrlware
  1287. WHERE storageid = :ll_storageid
  1288. AND mtrlid = :ll_SonMtrlid[ll_i]
  1289. And status = :ls_status_find;
  1290. IF sqlca.SQLCode <> 0 THEN
  1291. rslt = 0
  1292. arg_msg = '第'+String(ll_j)+'行,查询该产品组装材料'+ls_mtrlname+'的库存资料失败'
  1293. GOTO ext
  1294. END IF
  1295. ld_allqty = ld_noallocqty/ld_Sonscale[ll_i]
  1296. ld_maxqty = Min(ld_maxqty,ld_allqty)
  1297. IF IsNull(ld_maxqty) THEN ld_maxqty = 0
  1298. NEXT
  1299. ld_qty = Truncate ( ld_maxqty, 0 )
  1300. IF ld_saleqty > ld_qty THEN
  1301. rslt = 0
  1302. arg_msg = '第'+String(ll_j)+'行,产品没有足够的组装材料库存~n'+'发货单组装数量:'+String(ld_saleqty,'#,###0.##')+',库存最大可装数:'+String(ld_qty,'#,###0.##')
  1303. GOTO ext
  1304. END IF
  1305. String mx_status,mx_woodcode,mx_plancode,mx_pcode,mx_mtrlcode
  1306. Dec mx_noallocqty,mx_cost
  1307. Long mx_mtrlwareid,mx_dxflag,mx_sptid
  1308. IF uo_ware_install.newbegin(0,arg_msg) = 0 THEN //新建
  1309. rslt = 0
  1310. GOTO ext
  1311. END IF
  1312. uo_ware_install.billdate = outdate //DateTime(Today(),Now()) // 发生时间
  1313. uo_ware_install.rep = publ_operator // 经手人
  1314. uo_ware_install.dscrp = ls_reason+","+ls_cusname //备注
  1315. uo_ware_install.reason = ls_reason //原因
  1316. uo_ware_install.storageid = ll_storageid
  1317. uo_ware_install.mtrlid = ll_mtrlid
  1318. uo_ware_install.mtrlwareid = ll_mtrlwareid
  1319. uo_ware_install.status = ls_status
  1320. uo_ware_install.woodcode = ls_woodcode
  1321. uo_ware_install.pcode = ls_pcode
  1322. uo_ware_install.plancode = ls_plancode
  1323. uo_ware_install.qty = ld_saleqty
  1324. uo_ware_install.addqty = 0
  1325. uo_ware_install.price = lde_planprice
  1326. uo_ware_install.buildtype = 0
  1327. uo_ware_install.mtrlcode = ls_mtrlcode
  1328. decimal lde_planprice_temp //保存时计算主表的单价的公式改为 等于明细标准数量*明细单价的合计//后改为明细单价合计 不需要*数量
  1329. lde_planprice_temp=0
  1330. Long num
  1331. FOR ll_i = 1 To it_mxt
  1332. if sys_option_outware_if_di = 2 then
  1333. if ls_Mtrlorigin[ll_i] = 3 then CONTINUE // 当选项为2时自动组装需要排除外协属性的物料
  1334. end if
  1335. IF sys_option_if_color = 1 THEN
  1336. ls_status_find = ls_status
  1337. ELSE
  1338. ls_status_find = ls_pf_status[ll_i]
  1339. END IF
  1340. //清单每行全部装载数
  1341. ld_rqty = ld_saleqty * ld_Sonscale[ll_i]
  1342. ds_mtrlware_di.retrieve(ll_SonMtrlid[ll_i],ll_storageid,ls_status_find)
  1343. FOR j = 1 to ds_mtrlware_di.rowcount()
  1344. IF ld_rqty = 0 THEN CONTINUE
  1345. mx_mtrlwareid = ds_mtrlware_di.Object.mtrlwareid[j]
  1346. mx_status = ds_mtrlware_di.Object.status[j]
  1347. mx_woodcode = ds_mtrlware_di.Object.woodcode[j]
  1348. mx_plancode = ds_mtrlware_di.Object.plancode[j]
  1349. mx_pcode = ds_mtrlware_di.Object.pcode[j]
  1350. mx_noallocqty = ds_mtrlware_di.Object.noallocqty[j]
  1351. mx_cost = ds_mtrlware_di.Object.cost[j]
  1352. mx_dxflag = ds_mtrlware_di.Object.dxflag[j]
  1353. mx_sptid = ds_mtrlware_di.Object.sptid[j]
  1354. mx_mtrlcode = ds_mtrlware_di.Object.mtrlcode[j]
  1355. IF mx_noallocqty >= ld_rqty THEN
  1356. ld_mxqty = ld_rqty
  1357. ld_rqty = 0
  1358. ELSE
  1359. ld_mxqty = mx_noallocqty
  1360. ld_rqty = ld_rqty - mx_noallocqty
  1361. END IF
  1362. num++
  1363. IF uo_ware_install.acceptmx(num,&
  1364. ll_storageid,&
  1365. mx_mtrlwareid,&
  1366. ll_SonMtrlid[ll_i],&
  1367. ld_mxqty,&
  1368. 0,&
  1369. mx_cost,&
  1370. mx_status,&
  1371. mx_plancode,&
  1372. mx_woodcode,&
  1373. '',&
  1374. mx_mtrlcode,&
  1375. mx_pcode,&
  1376. mx_dxflag,&
  1377. mx_sptid,&
  1378. arg_msg,&
  1379. ld_Sonscale[ll_i]) = 0 THEN
  1380. rslt = 0
  1381. GOTO ext
  1382. END IF
  1383. lde_planprice_temp= lde_planprice_temp + ld_mxqty * mx_cost
  1384. NEXT
  1385. NEXT
  1386. uo_ware_install.price=lde_planprice_temp / ld_saleqty
  1387. IF uo_ware_install.Save(arg_msg,False) = 0 THEN
  1388. rslt = 0
  1389. GOTO ext
  1390. END IF
  1391. IF uo_ware_install.getinfo(uo_ware_install.billid,arg_msg) = 0 THEN
  1392. rslt = 0
  1393. GOTO ext
  1394. END IF
  1395. IF uo_ware_install.auditing(publ_operator,False,arg_msg) = 0 THEN
  1396. rslt = 0
  1397. GOTO ext
  1398. END IF
  1399. NEXT
  1400. ext:
  1401. Destroy uo_ware_install
  1402. IF rslt = 0 THEN
  1403. // ROLLBACK Using commit_transaction;
  1404. ELSEIF rslt = 1 THEN
  1405. // COMMIT Using commit_transaction;
  1406. END IF
  1407. RETURN rslt
  1408. end function
  1409. public function integer uof_destroy_dismantle_install (ref string arg_msg);Long rslt = 1
  1410. Long ll_row,ll_ucrow, ll_j,ll_i,it_mxt = 1,i
  1411. String ls_mtrlcode, ls_plancode,ls_status,ls_woodcode,ls_pcode
  1412. Long ll_mtrlwareid,ll_mtrlid,ll_storageid
  1413. Dec ls_noallocqty,ls_planprice,ls_cost,ld_qty,ld_saleqty
  1414. String ls_reason
  1415. Long ll_cnt
  1416. long ll_billid, ll_billid_arr[]
  1417. string ls_billcode, ls_billcode_arr[]
  1418. uo_dismantle_install uo_ware_install
  1419. uo_ware_install = Create uo_dismantle_install
  1420. uo_ware_install.sysautobuild = true
  1421. ls_reason = '销售发货单:'+outwarecode+'自动组装'
  1422. //读取单据
  1423. DECLARE cur_getdi CURSOR FOR
  1424. SELECT billid , billcode
  1425. FROM u_dismantle_install
  1426. WHERE billtype = 0
  1427. AND reason = :ls_reason
  1428. Using commit_transaction;
  1429. OPEN cur_getdi;
  1430. DO WHILE commit_transaction.SQLCode = 0
  1431. FETCH cur_getdi Into :ll_billid, :ls_billcode;
  1432. IF commit_transaction.SQLCode <> 0 THEN EXIT
  1433. ll_cnt++
  1434. ll_billid_arr[ll_cnt] = ll_billid
  1435. ls_billcode_arr[ll_cnt] = ls_billcode
  1436. LOOP
  1437. CLOSE cur_getdi;
  1438. FOR ll_j = 1 To ll_cnt
  1439. IF uo_ware_install.getinfo(ll_billid_arr[ll_j],arg_msg) = 0 THEN
  1440. rslt = 0
  1441. GOTO ext
  1442. END IF
  1443. IF uo_ware_install.c_auditing(False,arg_msg) = 0 THEN
  1444. rslt = 0
  1445. GOTO ext
  1446. END IF
  1447. IF uo_ware_install.del(ll_billid_arr[ll_j],False,arg_msg) = 0 THEN
  1448. rslt = 0
  1449. GOTO ext
  1450. END IF
  1451. NEXT
  1452. ext:
  1453. destroy uo_ware_install
  1454. IF rslt = 0 THEN
  1455. // ROLLBACK Using commit_transaction;
  1456. ELSEIF rslt = 1 THEN
  1457. // COMMIT Using commit_transaction;
  1458. END IF
  1459. return rslt
  1460. end function
  1461. public function integer add_fy_takerecmx ();Long i, j, rslt = 1
  1462. Long ll_rowcnt = 0,child_row, count, ll_addmxcnt,ll_itemid,ll_saletaskid
  1463. Decimal amt,sum_amt_1 = 0
  1464. datastore dw_itemmx
  1465. dw_itemmx = Create datastore
  1466. dw_itemmx.DataObject = 'dw_outware_itemmx_edit'
  1467. dw_itemmx.SetTransObject(sqlca)
  1468. dw_itemmx.Retrieve(scid,outwareid)
  1469. FOR i = 1 To dw_itemmx.RowCount()
  1470. ll_itemid = dw_itemmx.Object.u_outware_itemmx_itemid[i]
  1471. ll_saletaskid = dw_itemmx.Object.u_outware_itemmx_saletaskid[i]
  1472. amt = dw_itemmx.Object.u_outware_itemmx_amt[i] * dw_itemmx.Object.u_outware_itemmx_itype[i]
  1473. sum_amt_1 = sum_amt_1 + amt
  1474. UPDATE u_saletask_itemmx Set amtyfh = amtyfh + :amt Where scid = :scid And saletaskid = :ll_saletaskid And itemid = :ll_itemid;
  1475. NEXT
  1476. COMMIT;
  1477. uo_musttake uo_take
  1478. uo_take = Create uo_musttake
  1479. String ls_mtrlname
  1480. String ls_about,arg_msg
  1481. Decimal ld_takeamt = 0,ld_msttakeamt = 0, ld_otheramt = 0,ld_taxamt,ld_takeamt_tax
  1482. Long ll_moneyid,ll_accountsid,ll_dft_itemid_take,li_btype
  1483. SELECT btype,accountsid INTO :li_btype,:ll_accountsid
  1484. FROM cw_banktype
  1485. Where banktypeid = :relint_1 Using commit_transaction;
  1486. IF commit_transaction.SQLCode <> 0 THEN
  1487. rslt = 0
  1488. arg_msg = '查询结算方式类型失败,'+ commit_transaction.SQLErrText
  1489. GOTO ext
  1490. END IF
  1491. SELECT itemid INTO :ll_dft_itemid_take
  1492. FROM u_itemdef
  1493. Where dfttype = 1 Using commit_transaction;
  1494. IF commit_transaction.SQLCode <> 0 THEN
  1495. arg_msg = '查询默认销售收款项目资料失败,'+commit_transaction.SQLErrText
  1496. rslt = 0
  1497. GOTO ext
  1498. END IF
  1499. //财务支持多币种
  1500. IF sys_option_mst_multimoney = 0 THEN //本位币
  1501. SELECT moneyid Into :ll_moneyid From cw_currency Where native = 1;
  1502. IF commit_transaction.SQLCode <> 0 THEN
  1503. rslt = 0
  1504. arg_msg = '查询本位币失败!'+commit_transaction.SQLErrText
  1505. GOTO ext
  1506. END IF
  1507. ELSE //原币
  1508. ll_moneyid = relint_2
  1509. END IF
  1510. ld_msttakeamt = sum_amt_1
  1511. ld_msttakeamt = sum_amt_1
  1512. ls_about = outwarecode + "的费用明细"
  1513. part = 'fhd_fy'
  1514. //IF uo_take.add_takerec(scid,cusid,outdate,outrep,ld_msttakeamt,&
  1515. // ld_msttakeamt,ld_takeamt,ls_about,&
  1516. // outwarecode,relint_1,1,publ_operator,outwareid,0,&
  1517. // arg_msg,False,outdate,ll_accountsid,ll_dft_itemid_take,ll_moneyid,part) = 0 THEN
  1518. // rslt = 0
  1519. // GOTO ext
  1520. //END IF
  1521. ext:
  1522. Destroy dw_itemmx
  1523. IF rslt = 0 THEN
  1524. MessageBox("错误","生成费用明细失败" + arg_msg)
  1525. END IF
  1526. RETURN rslt
  1527. end function
  1528. public function integer c_add_fy_takerecmx ();Long i, j, rslt = 1
  1529. Long ll_rowcnt = 0,child_row, count, ll_addmxcnt,ll_itemid,ll_saletaskid
  1530. Decimal amt
  1531. datastore dw_itemmx
  1532. dw_itemmx = Create datastore
  1533. dw_itemmx.DataObject = 'dw_outware_itemmx_edit'
  1534. dw_itemmx.SetTransObject(sqlca)
  1535. dw_itemmx.Retrieve(scid,outwareid)
  1536. FOR i = 1 To dw_itemmx.RowCount()
  1537. ll_itemid = dw_itemmx.Object.u_outware_itemmx_itemid[i]
  1538. ll_saletaskid = dw_itemmx.Object.u_outware_itemmx_saletaskid[i]
  1539. amt = dw_itemmx.Object.u_outware_itemmx_amt[i] * dw_itemmx.Object.u_outware_itemmx_itype[i]
  1540. UPDATE u_saletask_itemmx Set amtyfh = amtyfh - (:amt) Where scid = :scid And saletaskid = :ll_saletaskid And itemid = :ll_itemid;
  1541. NEXT
  1542. COMMIT;
  1543. long ll_takeid
  1544. string arg_msg
  1545. select takeid into :ll_takeid from u_Bmsttake where u_Bmsttake.scid=:scid and u_Bmsttake.outwareid =:outwareid and u_Bmsttake.relcode='fhd_fy';
  1546. uo_musttake uo_take
  1547. uo_take = Create uo_musttake
  1548. //IF uo_take.del_takerec(scid,1,ll_takeid,cusid,arg_msg,False) = 0 THEN
  1549. // rslt = 0
  1550. // GOTO ext
  1551. //END IF
  1552. //ext:
  1553. Destroy dw_itemmx
  1554. IF rslt = 0 THEN
  1555. MessageBox("错误","删除费用明细失败" + arg_msg)
  1556. END IF
  1557. RETURN rslt
  1558. end function
  1559. public function integer uf_chk_assemble_qty (long arg_scid, long arg_storageid, long arg_outwareid, ref string arg_msg);Int rslt = 1
  1560. Long i,j,k,new_it_mxbt
  1561. Long li_flag //检查物料是否有清单
  1562. s_outwaremx temp_outwaremx[],new_outwaremx[] ,new_sonmtrl_outwaremx[],null_outwaremx[] //明细结构数组
  1563. temp_outwaremx = outwaremx
  1564. Long ll_flag1
  1565. FOR i = 1 To it_mxbt
  1566. FOR j = 1 To UpperBound(new_outwaremx)
  1567. IF temp_outwaremx[i].mtrlwareid = new_outwaremx[j].mtrlwareid THEN
  1568. new_outwaremx[j].qty = new_outwaremx[j].qty + temp_outwaremx[i].qty
  1569. GOTO nxt1
  1570. END IF
  1571. NEXT
  1572. new_it_mxbt++
  1573. new_outwaremx[new_it_mxbt].mtrlwareid = temp_outwaremx[i].mtrlwareid
  1574. new_outwaremx[new_it_mxbt].mtrlid = temp_outwaremx[i].mtrlid
  1575. new_outwaremx[new_it_mxbt].qty = temp_outwaremx[i].qty
  1576. new_outwaremx[new_it_mxbt].status = temp_outwaremx[i].status
  1577. new_outwaremx[new_it_mxbt].woodcode = temp_outwaremx[i].woodcode
  1578. new_outwaremx[new_it_mxbt].pcode = temp_outwaremx[i].pcode
  1579. nxt1:
  1580. NEXT
  1581. Decimal i_noauditingqty = 0 //已开单未审
  1582. Decimal i_noallocqty = 0 //现库存数
  1583. Decimal i_nowbjmxqty
  1584. FOR i = 1 To UpperBound(new_outwaremx)
  1585. i_noauditingqty = 0
  1586. i_noallocqty = 0
  1587. //计算库存数
  1588. SELECT
  1589. IsNull(u_mtrlware.noallocqty,0)
  1590. Into
  1591. :i_noallocqty
  1592. From u_mtrlware Left Outer join uv_mtrlware_noauditingqty
  1593. On ( u_mtrlware.mtrlwareid = uv_mtrlware_noauditingqty.mtrlwareid)
  1594. And ( u_mtrlware.scid = uv_mtrlware_noauditingqty.scid) Inner join
  1595. u_mtrldef On ( u_mtrlware.mtrlid = u_mtrldef.mtrlid )
  1596. Where ( u_mtrlware.scid = :arg_scid )
  1597. And (u_mtrlware.storageid = :arg_storageid)
  1598. And ( u_mtrlware.mtrlwareid = :new_outwaremx[i].mtrlwareid )
  1599. Using commit_transaction;
  1600. //计算已开单数
  1601. SELECT isnull(sum(u_outwaremx.uqty),0) INTO :i_noauditingqty FROM u_outwaremx INNER join u_outware
  1602. on u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid
  1603. WHERE u_outwaremx.scid = :arg_scid AND
  1604. u_outware.flag = 0 AND
  1605. u_outwaremx.outwareid <> :arg_outwareid AND
  1606. u_outwaremx.mtrlwareid = :new_outwaremx[i].mtrlwareid
  1607. Using commit_transaction;
  1608. //计算上级已开未审总和
  1609. SELECT ISNULL(SUM(u_PrdPF.Sonscale * u_outwaremx.qty),0) AS sumqty INTO :i_nowbjmxqty
  1610. FROM u_PrdPF
  1611. INNER JOIN u_outwaremx ON u_outwaremx.mtrlid = u_PrdPF.mtrlid
  1612. INNER JOIN u_outware ON u_outware.scid = u_outwaremx.scid
  1613. AND u_outware.outwareid = u_outwaremx.outwareid
  1614. WHERE (u_outware.flag = 0)
  1615. AND (u_PrdPF.SonMtrlid = :new_outwaremx[i].mtrlid)
  1616. AND (u_PrdPF.STATUS = :new_outwaremx[i].status)
  1617. AND (u_PrdPF.woodcode = :new_outwaremx[i].woodcode)
  1618. AND (u_PrdPF.pcode = :new_outwaremx[i].pcode)
  1619. AND u_outwaremx.scid = :arg_scid
  1620. AND u_outwaremx.outwareid <> :arg_outwareid
  1621. Using commit_transaction;
  1622. IF SQLCA.SQLCODE <> 0 THEN
  1623. i_nowbjmxqty = 0
  1624. END IF
  1625. //检查是否有清单
  1626. li_flag = 0
  1627. SELECT count(*) INTO :li_flag
  1628. FROM u_PrdPF
  1629. Where u_PrdPF.mtrlid = :new_outwaremx[i].mtrlid;
  1630. IF IsNull(li_flag) THEN li_flag = 0
  1631. IF li_flag = 0 THEN //没有清单
  1632. new_outwaremx[i].qty = new_outwaremx[i].qty + i_noauditingqty + i_nowbjmxqty
  1633. ELSE
  1634. new_outwaremx[i].qty = new_outwaremx[i].qty + i_noauditingqty - i_noallocqty + i_nowbjmxqty
  1635. END IF
  1636. NEXT
  1637. //查下级物料清单
  1638. Long cur_mxt_pf
  1639. Long ll_SonMtrlid[],temp_ll[]
  1640. String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[],temp_str[]
  1641. Decimal ld_Sonscale[]
  1642. new_it_mxbt = 0
  1643. new_sonmtrl_outwaremx = null_outwaremx //物料清单汇总
  1644. FOR i = 1 To UpperBound(new_outwaremx)
  1645. cur_mxt_pf = 1
  1646. ll_SonMtrlid = temp_ll
  1647. ls_pf_status = temp_str
  1648. ls_pf_woodcode = temp_str
  1649. ls_pf_pcode = temp_str
  1650. li_flag = 0
  1651. SELECT count(*) INTO :li_flag
  1652. FROM u_PrdPF
  1653. Where u_PrdPF.mtrlid = :new_outwaremx[i].mtrlid;
  1654. IF IsNull(li_flag) THEN li_flag = 0
  1655. IF li_flag = 0 THEN //没有清单
  1656. FOR k = 1 To UpperBound(new_sonmtrl_outwaremx)
  1657. IF new_sonmtrl_outwaremx[k].mtrlid = new_outwaremx[i].mtrlid And new_sonmtrl_outwaremx[k].status = new_outwaremx[i].status And new_sonmtrl_outwaremx[k].woodcode = new_outwaremx[i].woodcode And new_sonmtrl_outwaremx[k].pcode = new_outwaremx[i].pcode THEN
  1658. new_sonmtrl_outwaremx[k].qty = new_sonmtrl_outwaremx[k].qty + new_outwaremx[i].qty
  1659. GOTO nxt0
  1660. END IF
  1661. NEXT
  1662. new_it_mxbt++
  1663. new_sonmtrl_outwaremx[new_it_mxbt].mtrlid = new_outwaremx[i].mtrlid
  1664. new_sonmtrl_outwaremx[new_it_mxbt].qty = new_outwaremx[i].qty
  1665. new_sonmtrl_outwaremx[new_it_mxbt].status = new_outwaremx[i].status
  1666. new_sonmtrl_outwaremx[new_it_mxbt].woodcode = new_outwaremx[i].woodcode
  1667. new_sonmtrl_outwaremx[new_it_mxbt].pcode = new_outwaremx[i].pcode
  1668. nxt0:
  1669. END IF //没有清单
  1670. IF li_flag <> 0 THEN //有清单
  1671. DECLARE cur_pf CURSOR FOR
  1672. SELECT u_PrdPF.SonMtrlid,
  1673. u_PrdPF.Sonscale,
  1674. u_PrdPF.status,
  1675. u_PrdPF.woodcode,
  1676. u_PrdPF.pcode
  1677. FROM u_PrdPF
  1678. Where u_PrdPF.mtrlid = :new_outwaremx[i].mtrlid;
  1679. OPEN cur_pf;
  1680. FETCH cur_pf Into :ll_SonMtrlid[cur_mxt_pf],:ld_Sonscale[cur_mxt_pf],:ls_pf_status[cur_mxt_pf],:ls_pf_woodcode[cur_mxt_pf],:ls_pf_pcode[cur_mxt_pf];
  1681. DO WHILE sqlca.SQLCode = 0
  1682. cur_mxt_pf++
  1683. FETCH cur_pf Into :ll_SonMtrlid[cur_mxt_pf],:ld_Sonscale[cur_mxt_pf],:ls_pf_status[cur_mxt_pf],:ls_pf_woodcode[cur_mxt_pf],:ls_pf_pcode[cur_mxt_pf];
  1684. LOOP
  1685. cur_mxt_pf = cur_mxt_pf - 1
  1686. CLOSE cur_pf;
  1687. //物料清单 放到新数组
  1688. FOR j = 1 To cur_mxt_pf
  1689. FOR k = 1 To UpperBound(new_sonmtrl_outwaremx)
  1690. IF new_sonmtrl_outwaremx[k].mtrlid = ll_SonMtrlid[j] And new_sonmtrl_outwaremx[k].status = ls_pf_status[j] And new_sonmtrl_outwaremx[k].woodcode = ls_pf_woodcode[j] And new_sonmtrl_outwaremx[k].pcode = ls_pf_pcode[j] THEN
  1691. new_sonmtrl_outwaremx[k].qty = new_sonmtrl_outwaremx[k].qty + ld_Sonscale[j] * new_outwaremx[i].qty
  1692. GOTO nxt2
  1693. END IF
  1694. NEXT
  1695. new_it_mxbt++
  1696. new_sonmtrl_outwaremx[new_it_mxbt].mtrlid = ll_SonMtrlid[j]
  1697. new_sonmtrl_outwaremx[new_it_mxbt].qty = ld_Sonscale[j] * new_outwaremx[i].qty
  1698. new_sonmtrl_outwaremx[new_it_mxbt].status = ls_pf_status[j]
  1699. new_sonmtrl_outwaremx[new_it_mxbt].woodcode = ls_pf_woodcode[j]
  1700. new_sonmtrl_outwaremx[new_it_mxbt].pcode = ls_pf_pcode[j]
  1701. NEXT
  1702. END IF //有清单
  1703. nxt2:
  1704. NEXT
  1705. //检查下级清单够不够库存
  1706. String ls_mtrlcode,ls_mtrlname
  1707. Decimal ld_compareqty
  1708. FOR i = 1 To UpperBound(new_sonmtrl_outwaremx)
  1709. i_noallocqty = 0
  1710. ls_mtrlcode = ''
  1711. ls_mtrlname = ''
  1712. //计算库存数
  1713. SELECT
  1714. u_mtrldef.mtrlcode,
  1715. u_mtrldef.mtrlname,
  1716. IsNull(sum(u_mtrlware.noallocqty),0)
  1717. Into
  1718. :ls_mtrlcode,
  1719. :ls_mtrlname,
  1720. :i_noallocqty
  1721. From u_mtrlware
  1722. Left Outer join uv_mtrlware_noauditingqty
  1723. On ( u_mtrlware.mtrlwareid = uv_mtrlware_noauditingqty.mtrlwareid)
  1724. And ( u_mtrlware.scid = uv_mtrlware_noauditingqty.scid) Inner join
  1725. u_mtrldef On ( u_mtrlware.mtrlid = u_mtrldef.mtrlid )
  1726. Where ( u_mtrlware.scid = :arg_scid )
  1727. And (u_mtrlware.storageid = :arg_storageid)
  1728. And ( u_mtrlware.mtrlid = :new_sonmtrl_outwaremx[i].mtrlid )
  1729. And ( u_mtrlware.status = :new_sonmtrl_outwaremx[i].status )
  1730. And ( u_mtrlware.woodcode = :new_sonmtrl_outwaremx[i].woodcode )
  1731. And ( u_mtrlware.pcode = :new_sonmtrl_outwaremx[i].pcode )
  1732. Group By u_mtrldef.mtrlcode,
  1733. u_mtrldef.mtrlname
  1734. Using commit_transaction;
  1735. //计算下级已开单数
  1736. SELECT isnull(sum(u_outwaremx.uqty),0) INTO :i_noauditingqty FROM u_outwaremx INNER join u_outware
  1737. on u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid
  1738. WHERE u_outwaremx.scid = :arg_scid AND
  1739. u_outware.flag = 0 AND
  1740. u_outwaremx.outwareid <> :arg_outwareid
  1741. And ( u_outwaremx.scid = :arg_scid )
  1742. And ( u_outwaremx.mtrlid = :new_sonmtrl_outwaremx[i].mtrlid )
  1743. And ( u_outwaremx.status = :new_sonmtrl_outwaremx[i].status )
  1744. And ( u_outwaremx.woodcode = :new_sonmtrl_outwaremx[i].woodcode )
  1745. And ( u_outwaremx.pcode = :new_sonmtrl_outwaremx[i].pcode )
  1746. Using commit_transaction;
  1747. //计算上级已开未审总和
  1748. SELECT ISNULL(SUM(u_PrdPF.Sonscale * u_outwaremx.qty),0) AS sumqty INTO :i_nowbjmxqty
  1749. FROM u_PrdPF
  1750. INNER JOIN u_outwaremx ON u_outwaremx.mtrlid = u_PrdPF.mtrlid
  1751. INNER JOIN u_outware ON u_outware.scid = u_outwaremx.scid
  1752. AND u_outware.outwareid = u_outwaremx.outwareid
  1753. WHERE (u_outware.flag = 0)
  1754. AND (u_PrdPF.SonMtrlid = :new_sonmtrl_outwaremx[i].mtrlid)
  1755. AND (u_PrdPF.STATUS = :new_sonmtrl_outwaremx[i].status)
  1756. AND (u_PrdPF.woodcode = :new_sonmtrl_outwaremx[i].woodcode)
  1757. AND (u_PrdPF.pcode = :new_sonmtrl_outwaremx[i].pcode)
  1758. AND u_outwaremx.scid = :arg_scid
  1759. AND u_outwaremx.outwareid <> :arg_outwareid
  1760. Using commit_transaction;
  1761. IF SQLCA.SQLCODE <> 0 THEN
  1762. i_nowbjmxqty = 0
  1763. END IF
  1764. ld_compareqty = i_noallocqty - i_noauditingqty - i_nowbjmxqty
  1765. IF new_sonmtrl_outwaremx[i].qty > ld_compareqty THEN
  1766. IF arg_msg = '' THEN
  1767. arg_msg = '物料编码:' + String(ls_mtrlcode) + ' 物料名称:' + String(ls_mtrlname) + ' 总需求数(本单+其他已开单):' + String(new_sonmtrl_outwaremx[i].qty,'#,##0.00') + ' 当前库存数(扣减已开单未审):' + String(ld_compareqty,'#,##0.00') + ' 还差:' + String(new_sonmtrl_outwaremx[i].qty - ld_compareqty,'#,##0.00') + '~r~n'
  1768. ELSE
  1769. arg_msg = arg_msg + '~r~n' + '物料编码:' + String(ls_mtrlcode) + ' 物料名称:' + String(ls_mtrlname) + ' 总需求数(本单+其他已开单):' + String(new_sonmtrl_outwaremx[i].qty,'#,##0.00') + ' 当前库存数(扣减已开单未审):' + String(ld_compareqty,'#,##0.00') + ' 还差:' + String(new_sonmtrl_outwaremx[i].qty - ld_compareqty,'#,##0.00') + '~r~n'
  1770. END IF
  1771. END IF
  1772. NEXT
  1773. IF arg_msg <> '' THEN
  1774. rslt = 0
  1775. END IF
  1776. RETURN rslt
  1777. // //数量相关的检查
  1778. // //*****检查大于未开数不可以开单
  1779. // IF billtype <> 9 THEN//盘亏单不检查
  1780. // IF flag = 0 THEN
  1781. //
  1782. // Decimal ld_mx_qty //本单当前累计数量
  1783. // Decimal ol_mtrl_qty = 0 //本单保存前开单数量
  1784. // Int ls_noallocflag
  1785. //
  1786. // IF s_mx.uqty > 0 THEN
  1787. // SELECT noallocflag INTO :ls_noallocflag
  1788. // FROM u_storage
  1789. // Where storageid = :storageid;
  1790. // IF sqlca.SQLCode <> 0 THEN
  1791. // rslt = 0
  1792. // arg_msg = '查询仓库允许使用未开单库存属性失败'+sqlca.SQLErrText
  1793. // GOTO ext
  1794. // END IF
  1795. //
  1796. // IF ls_noallocflag = 1 THEN
  1797. //
  1798. // IF it_updatebegin THEN //修改
  1799. // SELECT sum(u_outwaremx.qty)
  1800. // INTO :ol_mtrl_qty
  1801. // FROM u_outwaremx
  1802. // WHERE u_outwaremx.outwareid = :outwareid
  1803. // AND u_outwaremx.mtrlwareid = :s_mx.mtrlwareid
  1804. // And scid = :scid;
  1805. // IF sqlca.SQLCode <> 0 THEN
  1806. // rslt = 0
  1807. // arg_msg = '第' + String(s_mx.printid) + '行,查询原开单数量失败'
  1808. // GOTO ext
  1809. // END IF
  1810. // if isnull(ol_mtrl_qty) then ol_mtrl_qty = 0
  1811. // END IF //IF it_updatebegin THEN //修改
  1812. //
  1813. // FOR ll_i = 1 To it_mxbt
  1814. // IF s_mx.mtrlwareid = outwaremx[ll_i].mtrlwareid THEN
  1815. // ld_mx_qty = ld_mx_qty + outwaremx[ll_i].qty
  1816. // END IF
  1817. // NEXT
  1818. //
  1819. // ld_mx_qty = ld_mx_qty + Round(s_mx.uqty * s_mx.rate,sys_option_unit_dec_sale) //s_mx.qty
  1820. //
  1821. //
  1822. // IF ld_mx_qty > ( i_allouseqty + ol_mtrl_qty ) THEN
  1823. // rslt = 0
  1824. // arg_msg = '第' + String(s_mx.printid) + '行,' + String(i_mtrlcode)+"库存未开单数不够,不能开单.未开单数{"+String(i_allouseqty - i_notauditqty + ol_mtrl_qty,'#####,0.00##')+"}"
  1825. // GOTO ext
  1826. // END IF
  1827. // END IF //IF ls_noallocflag = 1 THEN
  1828. // END IF //IF s_mx.uqty > 0 THEN
  1829. // END IF
  1830. // END IF
  1831. //END IF
  1832. //
  1833. // //检查物料库存ID
  1834. //SELECT
  1835. // u_mtrlware.noallocqty,
  1836. // INTO
  1837. // :i_allouseqty
  1838. // FROM u_mtrlware left OUTER join uv_mtrlware_noauditingqty
  1839. // on ( u_mtrlware.mtrlwareid = uv_mtrlware_noauditingqty.mtrlwareid)
  1840. // AND ( u_mtrlware.scid = uv_mtrlware_noauditingqty.scid) INNER JOIN
  1841. // u_mtrldef ON ( u_mtrlware.mtrlid = u_mtrldef.mtrlid )
  1842. // WHERE ( u_mtrlware.scid = :scid )
  1843. // AND ( u_mtrlware.mtrlwareid = :s_mx.mtrlwareid )
  1844. // Using commit_transaction;
  1845. //IF commit_transaction.SQLCode <> 0 THEN
  1846. // rslt = 0
  1847. // arg_msg = "第" + String(s_mx.printid) + "行,查询操作失败,库存信息错误"
  1848. // GOTO ext
  1849. //END IF
  1850. end function
  1851. public function integer auditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i
  1852. Dec new_noallocqty = 0
  1853. Long ls_newid
  1854. IF outwareid = 0 THEN
  1855. rslt = 0
  1856. arg_msg = "没有审核对象"
  1857. GOTO ext
  1858. END IF
  1859. IF it_newbegin Or it_updatebegin THEN
  1860. rslt = 0
  1861. arg_msg = "编辑状态下不可以执行审核"
  1862. GOTO ext
  1863. END IF
  1864. IF flag = 1 THEN
  1865. rslt = 0
  1866. arg_msg = "单据已经审核"
  1867. GOTO ext
  1868. END IF
  1869. IF auditing_chk(arg_msg) = 0 THEN
  1870. rslt = 0
  1871. GOTO ext
  1872. END IF
  1873. UPDATE u_outware
  1874. SET Auditingrep = :publ_operator,
  1875. Auditingdate = getdate(),
  1876. flag = 1
  1877. WHERE u_outware.outwareid = :outwareid
  1878. AND flag = 0
  1879. And scid = :scid Using commit_transaction;
  1880. IF commit_transaction.SQLCode <> 0 THEN
  1881. rslt = 0
  1882. arg_msg = "审核单据操作失败"+"~n"
  1883. GOTO ext
  1884. ELSEIF commit_transaction.SQLNRows = 0 THEN
  1885. rslt = 0
  1886. arg_msg = "单据正在审核,请稍后查询。"+"~n"
  1887. GOTO ext
  1888. END IF
  1889. Long li_if_fifo = 0
  1890. SELECT if_fifo
  1891. INTO :li_if_fifo
  1892. FROM u_storage
  1893. Where storageid = :storageid Using commit_transaction;
  1894. IF commit_transaction.SQLCode <> 0 THEN
  1895. arg_msg = "查询仓库存货核算方法错误!"
  1896. rslt = 0
  1897. GOTO ext
  1898. END IF
  1899. uo_saletask uo_task
  1900. uo_task = Create uo_saletask
  1901. uo_task.commit_transaction = commit_transaction
  1902. IF sys_option_hide_ware = 0 THEN
  1903. FOR i = 1 To it_mxbt
  1904. Decimal ld_ref_costamt,ld_ref_costamt_notax
  1905. Long li_mtrlwaremxid = 0
  1906. // If billtype = 1 And outwaremx[i].relid > 0 Then
  1907. // If uo_task.addmxcmpl(scid,outwaremx[i].relid,outwaremx[i].relprintid,outwaremx[i].qty,arg_msg,False) <> 1 Then
  1908. // arg_msg = '退货明细行:'+String(i)+','+arg_msg
  1909. // rslt = 0
  1910. // Goto ext
  1911. // End If
  1912. // End If
  1913. IF li_if_fifo = 0 THEN //移动平均法
  1914. IF p_update_cost(outwaremx[i],ld_ref_costamt,ld_ref_costamt_notax,arg_msg,False) = 0 THEN
  1915. rslt = 0
  1916. GOTO ext
  1917. END IF
  1918. ELSE
  1919. IF p_update_cost_fifo(outwaremx[i],ld_ref_costamt,ld_ref_costamt_notax,arg_msg,False) = 0 THEN
  1920. rslt = 0
  1921. GOTO ext
  1922. END IF
  1923. END IF
  1924. Decimal dec_fifo_inprice,dec_fifo_inprice_notax
  1925. //dec_fifo_inprice = outwaremx[i].enprice * outwaremx[i].rebate
  1926. //负数出仓 取库存cost作为入仓成本单价
  1927. dec_fifo_inprice = 0
  1928. SELECT cost,cost_notax Into :dec_fifo_inprice,:dec_fifo_inprice_notax From u_mtrlware Where scid = :scid And mtrlwareid = :outwaremx[i].mtrlwareid;
  1929. IF dec_fifo_inprice > 0 THEN
  1930. ELSE
  1931. dec_fifo_inprice = 0
  1932. END IF
  1933. IF dec_fifo_inprice_notax > 0 THEN
  1934. ELSE
  1935. dec_fifo_inprice_notax = 0
  1936. END IF
  1937. IF p_update_mtrlware ( outwaremx[i].mtrlwareid, outwaremx[i].mtrlid, &
  1938. outwaremx[i].mtrlcode, storageid, outwaremx[i].plancode,&
  1939. outwaremx[i].status, outwaremx[i].qty,outwaremx[i].addqty, ld_ref_costamt,&
  1940. outwaremx[i].planprice, outwaremx[i].sptid, outwaremx[i].dxflag,&
  1941. outwaremx[i].woodcode, outwaremx[i].pcode,arg_msg,ld_ref_costamt_notax) = 0 THEN
  1942. arg_msg = "行:"+String(i)+","+arg_msg
  1943. rslt = 0
  1944. GOTO ext
  1945. END IF
  1946. //先进先出法 ,加入进仓批 u_mtrlware_inmx star
  1947. IF li_if_fifo = 1 And outwaremx[i].qty < 0 THEN //负数 使用先进先出
  1948. IF f_add_mtrlware_inmx(scid, outwaremx[i].mtrlwareid,outwareid,outwaremx[i].printid,outwarecode,outdate,outwaremx[i].qty,dec_fifo_inprice,dec_fifo_inprice_notax,1,False,commit_transaction,arg_msg) = 0 THEN
  1949. rslt = 0
  1950. GOTO ext
  1951. END IF
  1952. IF f_trigger_fifo_procedure(scid,outwaremx[i].mtrlwareid,outdate,1,outwareid,li_mtrlwaremxid,False,commit_transaction,arg_msg) = 0 THEN //负数等于进仓
  1953. rslt = 0
  1954. GOTO ext
  1955. END IF
  1956. //重算结存表
  1957. IF f_cmp_fifo_warebalc(scid,outwaremx[i].mtrlwareid,False,commit_transaction,arg_msg) = 0 THEN
  1958. rslt = 0
  1959. GOTO ext
  1960. END IF
  1961. END IF
  1962. IF li_if_fifo = 1 And outwaremx[i].qty > 0 THEN //正数
  1963. IF f_trigger_fifo_procedure(scid,outwaremx[i].mtrlwareid,outdate,2,outwareid,li_mtrlwaremxid,False,commit_transaction,arg_msg) = 0 THEN
  1964. rslt = 0
  1965. GOTO ext
  1966. END IF
  1967. //重算结存表
  1968. IF f_cmp_fifo_warebalc(scid,outwaremx[i].mtrlwareid,False,commit_transaction,arg_msg) = 0 THEN
  1969. rslt = 0
  1970. GOTO ext
  1971. END IF
  1972. END IF
  1973. //先进先出法 ,加入进仓批 u_mtrlware_inmx end
  1974. NEXT
  1975. //检查是否正确生成进仓批
  1976. IF li_if_fifo = 1 THEN
  1977. FOR i = 1 To it_mxbt
  1978. IF f_check_mtrlware_inmx(scid, outwaremx[i].mtrlwareid,commit_transaction,arg_msg) = 0 THEN
  1979. IF uf_w_cmp_fifo_cb_bill(scid,outwaremx[i].mtrlwareid,False,arg_msg) = 0 THEN //尝试修复
  1980. rslt = 0
  1981. arg_msg = '第' + String(i) + '行 ' + arg_msg
  1982. GOTO ext
  1983. ELSE
  1984. IF f_check_mtrlware_inmx(scid, outwaremx[i].mtrlwareid,commit_transaction,arg_msg) = 0 THEN //再检查一次
  1985. rslt = 0
  1986. arg_msg = '第' + String(i) + '行 ' + arg_msg
  1987. GOTO ext
  1988. END IF
  1989. END IF
  1990. END IF
  1991. NEXT
  1992. END IF
  1993. END IF
  1994. IF auditing_end(arg_msg) = 0 THEN
  1995. rslt = 0
  1996. GOTO ext
  1997. END IF
  1998. flag = 1
  1999. ext:
  2000. IF rslt = 0 THEN
  2001. ROLLBACK Using commit_transaction;
  2002. IF billname <> "" THEN
  2003. arg_msg = billname + ',' + arg_msg
  2004. END IF
  2005. ELSEIF rslt = 1 And arg_ifcommit THEN
  2006. COMMIT Using commit_transaction;
  2007. END IF
  2008. RETURN rslt
  2009. end function
  2010. public function integer auditing_th (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i
  2011. Dec new_noallocqty = 0
  2012. Long ls_newid
  2013. IF outwareid = 0 THEN
  2014. rslt = 0
  2015. arg_msg = "没有审核对象"
  2016. GOTO ext
  2017. END IF
  2018. IF it_newbegin Or it_updatebegin THEN
  2019. rslt = 0
  2020. arg_msg = "编辑状态下不可以执行审核"
  2021. GOTO ext
  2022. END IF
  2023. IF flag = 1 THEN
  2024. rslt = 0
  2025. arg_msg = "单据已经审核"
  2026. GOTO ext
  2027. END IF
  2028. IF auditing_chk(arg_msg) = 0 THEN
  2029. rslt = 0
  2030. GOTO ext
  2031. END IF
  2032. UPDATE u_outware
  2033. SET Auditingrep = :publ_operator,
  2034. Auditingdate = getdate(),
  2035. flag = 1
  2036. WHERE u_outware.outwareid = :outwareid
  2037. AND flag = 0
  2038. And scid = :scid Using commit_transaction;
  2039. IF commit_transaction.SQLCode <> 0 THEN
  2040. rslt = 0
  2041. arg_msg = "审核单据操作失败"+"~n"
  2042. GOTO ext
  2043. ELSEIF commit_transaction.SQLNRows = 0 THEN
  2044. rslt = 0
  2045. arg_msg = "单据正在审核,请稍后查询。"+"~n"
  2046. GOTO ext
  2047. END IF
  2048. Long li_if_fifo = 0
  2049. SELECT if_fifo
  2050. INTO :li_if_fifo
  2051. FROM u_storage
  2052. Where storageid = :storageid Using commit_transaction;
  2053. IF commit_transaction.SQLCode <> 0 THEN
  2054. arg_msg = "查询仓库存货核算方法错误!"
  2055. rslt = 0
  2056. GOTO ext
  2057. END IF
  2058. uo_saletask uo_task
  2059. uo_task = Create uo_saletask
  2060. uo_task.commit_transaction = commit_transaction
  2061. IF sys_option_hide_ware = 0 THEN
  2062. FOR i = 1 To it_mxbt
  2063. Decimal ld_ref_costamt,ld_ref_costamt_notax
  2064. Long li_mtrlwaremxid = 0
  2065. If billtype = 1 And outwaremx[i].relid > 0 Then
  2066. If uo_task.addmxcmpl(scid,outwaremx[i].relid,outwaremx[i].relprintid,outwaremx[i].qty,arg_msg,False) <> 1 Then
  2067. arg_msg = '退货明细行:'+String(i)+','+arg_msg
  2068. rslt = 0
  2069. Goto ext
  2070. End If
  2071. End If
  2072. IF li_if_fifo = 0 THEN //移动平均法
  2073. IF p_update_cost(outwaremx[i],ld_ref_costamt,ld_ref_costamt_notax,arg_msg,False) = 0 THEN
  2074. rslt = 0
  2075. GOTO ext
  2076. END IF
  2077. ELSE
  2078. IF p_update_cost_fifo(outwaremx[i],ld_ref_costamt,ld_ref_costamt_notax,arg_msg,False) = 0 THEN
  2079. rslt = 0
  2080. GOTO ext
  2081. END IF
  2082. END IF
  2083. Decimal dec_fifo_inprice,dec_fifo_inprice_notax
  2084. //dec_fifo_inprice = outwaremx[i].enprice * outwaremx[i].rebate
  2085. //负数出仓 取库存cost作为入仓成本单价
  2086. dec_fifo_inprice = 0
  2087. SELECT cost,cost_notax Into :dec_fifo_inprice,:dec_fifo_inprice_notax From u_mtrlware Where scid = :scid And mtrlwareid = :outwaremx[i].mtrlwareid;
  2088. IF dec_fifo_inprice > 0 THEN
  2089. ELSE
  2090. dec_fifo_inprice = 0
  2091. END IF
  2092. IF dec_fifo_inprice_notax > 0 THEN
  2093. ELSE
  2094. dec_fifo_inprice_notax = 0
  2095. END IF
  2096. IF p_update_mtrlware ( outwaremx[i].mtrlwareid, outwaremx[i].mtrlid, &
  2097. outwaremx[i].mtrlcode, storageid, outwaremx[i].plancode,&
  2098. outwaremx[i].status, outwaremx[i].qty,outwaremx[i].addqty, ld_ref_costamt,&
  2099. outwaremx[i].planprice, outwaremx[i].sptid, outwaremx[i].dxflag,&
  2100. outwaremx[i].woodcode, outwaremx[i].pcode,arg_msg,ld_ref_costamt_notax) = 0 THEN
  2101. arg_msg = "行:"+String(i)+","+arg_msg
  2102. rslt = 0
  2103. GOTO ext
  2104. END IF
  2105. //先进先出法 ,加入进仓批 u_mtrlware_inmx star
  2106. IF li_if_fifo = 1 And outwaremx[i].qty < 0 THEN //负数 使用先进先出
  2107. IF f_add_mtrlware_inmx(scid, outwaremx[i].mtrlwareid,outwareid,outwaremx[i].printid,outwarecode,outdate,outwaremx[i].qty,dec_fifo_inprice,dec_fifo_inprice_notax,1,False,commit_transaction,arg_msg) = 0 THEN
  2108. rslt = 0
  2109. GOTO ext
  2110. END IF
  2111. IF f_trigger_fifo_procedure(scid,outwaremx[i].mtrlwareid,outdate,1,outwareid,li_mtrlwaremxid,False,commit_transaction,arg_msg) = 0 THEN //负数等于进仓
  2112. rslt = 0
  2113. GOTO ext
  2114. END IF
  2115. //重算结存表
  2116. IF f_cmp_fifo_warebalc(scid,outwaremx[i].mtrlwareid,False,commit_transaction,arg_msg) = 0 THEN
  2117. rslt = 0
  2118. GOTO ext
  2119. END IF
  2120. END IF
  2121. IF li_if_fifo = 1 And outwaremx[i].qty > 0 THEN //正数
  2122. IF f_trigger_fifo_procedure(scid,outwaremx[i].mtrlwareid,outdate,2,outwareid,li_mtrlwaremxid,False,commit_transaction,arg_msg) = 0 THEN
  2123. rslt = 0
  2124. GOTO ext
  2125. END IF
  2126. //重算结存表
  2127. IF f_cmp_fifo_warebalc(scid,outwaremx[i].mtrlwareid,False,commit_transaction,arg_msg) = 0 THEN
  2128. rslt = 0
  2129. GOTO ext
  2130. END IF
  2131. END IF
  2132. //先进先出法 ,加入进仓批 u_mtrlware_inmx end
  2133. NEXT
  2134. //检查是否正确生成进仓批
  2135. IF li_if_fifo = 1 THEN
  2136. FOR i = 1 To it_mxbt
  2137. IF f_check_mtrlware_inmx(scid, outwaremx[i].mtrlwareid,commit_transaction,arg_msg) = 0 THEN
  2138. IF uf_w_cmp_fifo_cb_bill(scid,outwaremx[i].mtrlwareid,False,arg_msg) = 0 THEN //尝试修复
  2139. rslt = 0
  2140. arg_msg = '第' + String(i) + '行 ' + arg_msg
  2141. GOTO ext
  2142. ELSE
  2143. IF f_check_mtrlware_inmx(scid, outwaremx[i].mtrlwareid,commit_transaction,arg_msg) = 0 THEN //再检查一次
  2144. rslt = 0
  2145. arg_msg = '第' + String(i) + '行 ' + arg_msg
  2146. GOTO ext
  2147. END IF
  2148. END IF
  2149. END IF
  2150. NEXT
  2151. END IF
  2152. END IF
  2153. IF auditing_end(arg_msg) = 0 THEN
  2154. rslt = 0
  2155. GOTO ext
  2156. END IF
  2157. flag = 1
  2158. ext:
  2159. IF rslt = 0 THEN
  2160. ROLLBACK Using commit_transaction;
  2161. IF billname <> "" THEN
  2162. arg_msg = billname + ',' + arg_msg
  2163. END IF
  2164. ELSEIF rslt = 1 And arg_ifcommit THEN
  2165. COMMIT Using commit_transaction;
  2166. END IF
  2167. RETURN rslt
  2168. end function
  2169. public function integer uf_chk_assemble_qty2 (long arg_scid, long arg_storageid, long arg_outwareid, ref string arg_msg);Int rslt = 1
  2170. Long i,j,k
  2171. Long new_it_mxbt
  2172. Long cur_mxt_pf
  2173. Long ll_SonMtrlid[],temp_ll[]
  2174. String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[],temp_str[]
  2175. Decimal ld_Sonscale[]
  2176. Decimal i_noauditingqty = 0 //已开单未审
  2177. Decimal i_noallocqty = 0 //现库存数
  2178. Decimal i_nowbjmxqty //上级已开单数
  2179. Long cnt
  2180. String ls_mtrlcode,ls_mtrlname
  2181. Decimal ld_compareqty,i_nowwaremxqty
  2182. s_outwaremx temp_outwaremx[],new_outwaremx[] ,new_sonmtrl_outwaremx[],null_outwaremx[] //明细结构数组
  2183. temp_outwaremx = outwaremx
  2184. FOR i = 1 To it_mxbt
  2185. FOR j = 1 To UpperBound(new_outwaremx)
  2186. IF temp_outwaremx[i].mtrlwareid = new_outwaremx[j].mtrlwareid THEN
  2187. new_outwaremx[j].qty = new_outwaremx[j].qty + temp_outwaremx[i].qty
  2188. GOTO nxt1
  2189. END IF
  2190. NEXT
  2191. new_it_mxbt++
  2192. new_outwaremx[new_it_mxbt].mtrlwareid = temp_outwaremx[i].mtrlwareid
  2193. new_outwaremx[new_it_mxbt].mtrlid = temp_outwaremx[i].mtrlid
  2194. new_outwaremx[new_it_mxbt].qty = temp_outwaremx[i].qty
  2195. new_outwaremx[new_it_mxbt].status = temp_outwaremx[i].status
  2196. new_outwaremx[new_it_mxbt].woodcode = temp_outwaremx[i].woodcode
  2197. new_outwaremx[new_it_mxbt].pcode = temp_outwaremx[i].pcode
  2198. nxt1:
  2199. NEXT
  2200. FOR i = 1 To UpperBound(new_outwaremx)
  2201. SELECT count(*) INTO :cnt
  2202. FROM u_PrdPF
  2203. Where u_PrdPF.mtrlid = :new_outwaremx[i].mtrlid;
  2204. new_sonmtrl_outwaremx = null_outwaremx
  2205. new_it_mxbt = 0
  2206. IF cnt = 0 THEN
  2207. new_it_mxbt = 1
  2208. new_sonmtrl_outwaremx[new_it_mxbt].mtrlwareid = new_outwaremx[i].mtrlwareid
  2209. new_sonmtrl_outwaremx[new_it_mxbt].mtrlid = new_outwaremx[i].mtrlid
  2210. new_sonmtrl_outwaremx[new_it_mxbt].qty = new_outwaremx[i].qty
  2211. new_sonmtrl_outwaremx[new_it_mxbt].status = new_outwaremx[i].status
  2212. new_sonmtrl_outwaremx[new_it_mxbt].woodcode = new_outwaremx[i].woodcode
  2213. new_sonmtrl_outwaremx[new_it_mxbt].pcode = new_outwaremx[i].pcode
  2214. ELSE
  2215. Decimal ld_kkdqty,ld_topUqty,ld_topOcqty
  2216. SELECT u_mtrlware.noallocqty INTO :ld_topOcqty
  2217. FROM u_mtrlware
  2218. where (u_mtrlware.scid = :arg_scid)
  2219. AND ( u_mtrlware.mtrlwareid = :new_outwaremx[i].mtrlwareid) Using commit_transaction;
  2220. IF SQLCA.SQLCODE <> 0 THEN
  2221. ld_topOcqty = 0
  2222. END IF
  2223. SELECT isnull(sum(u_outwaremx.uqty),0) INTO :ld_topUqty FROM u_outwaremx INNER join u_outware
  2224. on u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid
  2225. WHERE u_outwaremx.scid = :arg_scid AND
  2226. u_outware.flag = 0 AND
  2227. u_outwaremx.outwareid <> :arg_outwareid
  2228. And ( u_outwaremx.scid = :arg_scid )
  2229. And ( u_outwaremx.mtrlid = :new_outwaremx[i].mtrlid )
  2230. And ( u_outwaremx.status = :new_outwaremx[i].status )
  2231. And ( u_outwaremx.woodcode = :new_outwaremx[i].woodcode )
  2232. And ( u_outwaremx.pcode = :new_outwaremx[i].pcode )
  2233. And ( u_outwaremx.mtrlwareid = :new_outwaremx[i].mtrlwareid )
  2234. Using commit_transaction;
  2235. IF SQLCA.SQLCODE <> 0 THEN
  2236. ld_topUqty = 0
  2237. END IF
  2238. ld_kkdqty = new_outwaremx[i].qty - (ld_topOcqty - ld_topUqty )
  2239. IF ld_kkdqty <= 0 THEN CONTINUE
  2240. cur_mxt_pf = 1
  2241. DECLARE cur_pf CURSOR FOR
  2242. SELECT u_PrdPF.SonMtrlid,
  2243. u_PrdPF.Sonscale,
  2244. u_PrdPF.status,
  2245. u_PrdPF.woodcode,
  2246. u_PrdPF.pcode
  2247. FROM u_PrdPF
  2248. Where u_PrdPF.mtrlid = :new_outwaremx[i].mtrlid;
  2249. OPEN cur_pf;
  2250. FETCH cur_pf Into :ll_SonMtrlid[cur_mxt_pf],:ld_Sonscale[cur_mxt_pf],:ls_pf_status[cur_mxt_pf],:ls_pf_woodcode[cur_mxt_pf],:ls_pf_pcode[cur_mxt_pf];
  2251. DO WHILE sqlca.SQLCode = 0
  2252. cur_mxt_pf++
  2253. FETCH cur_pf Into :ll_SonMtrlid[cur_mxt_pf],:ld_Sonscale[cur_mxt_pf],:ls_pf_status[cur_mxt_pf],:ls_pf_woodcode[cur_mxt_pf],:ls_pf_pcode[cur_mxt_pf];
  2254. LOOP
  2255. cur_mxt_pf = cur_mxt_pf - 1
  2256. CLOSE cur_pf;
  2257. FOR j = 1 To cur_mxt_pf
  2258. new_it_mxbt++
  2259. new_sonmtrl_outwaremx[new_it_mxbt].mtrlwareid = 0
  2260. new_sonmtrl_outwaremx[new_it_mxbt].mtrlid = ll_SonMtrlid[j]
  2261. new_sonmtrl_outwaremx[new_it_mxbt].qty = ld_Sonscale[j] * ld_kkdqty
  2262. new_sonmtrl_outwaremx[new_it_mxbt].status = ls_pf_status[j]
  2263. new_sonmtrl_outwaremx[new_it_mxbt].woodcode = ls_pf_woodcode[j]
  2264. new_sonmtrl_outwaremx[new_it_mxbt].pcode = ls_pf_pcode[j]
  2265. NEXT
  2266. END IF
  2267. FOR k = 1 To UpperBound(new_sonmtrl_outwaremx)
  2268. SELECT mtrlcode,mtrlname
  2269. INTO :ls_mtrlcode,:ls_mtrlname
  2270. FROM u_mtrldef
  2271. WHERE mtrlid = :new_sonmtrl_outwaremx[k].mtrlid Using commit_transaction;
  2272. //计算库存数
  2273. SELECT IsNull(sum(u_mtrlware.noallocqty), 0) INTO :i_noallocqty
  2274. FROM u_mtrlware
  2275. LEFT OUTER JOIN uv_mtrlware_noauditingqty ON (u_mtrlware.mtrlwareid = uv_mtrlware_noauditingqty.mtrlwareid)
  2276. AND (u_mtrlware.scid = uv_mtrlware_noauditingqty.scid)
  2277. INNER JOIN u_mtrldef ON (u_mtrlware.mtrlid = u_mtrldef.mtrlid)
  2278. WHERE (u_mtrlware.scid = :arg_scid)
  2279. AND (u_mtrlware.mtrlid = :new_sonmtrl_outwaremx [k].mtrlid)
  2280. AND (u_mtrlware.STATUS = :new_sonmtrl_outwaremx [k].STATUS)
  2281. AND (u_mtrlware.woodcode = :new_sonmtrl_outwaremx [k].woodcode)
  2282. AND (u_mtrlware.pcode = :new_sonmtrl_outwaremx [k].pcode)
  2283. AND (u_mtrlware.mtrlwareid = :new_sonmtrl_outwaremx [k].mtrlwareid OR :new_sonmtrl_outwaremx [k].mtrlwareid = 0) Using commit_transaction;
  2284. //计算已开单未审数
  2285. SELECT isnull(sum(u_outwaremx.uqty),0) INTO :i_noauditingqty FROM u_outwaremx INNER join u_outware
  2286. on u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid
  2287. WHERE u_outwaremx.scid = :arg_scid AND
  2288. u_outware.flag = 0 AND
  2289. u_outwaremx.outwareid <> :arg_outwareid
  2290. And ( u_outwaremx.scid = :arg_scid )
  2291. And ( u_outwaremx.mtrlid = :new_sonmtrl_outwaremx[k].mtrlid )
  2292. And ( u_outwaremx.status = :new_sonmtrl_outwaremx[k].status )
  2293. And ( u_outwaremx.woodcode = :new_sonmtrl_outwaremx[k].woodcode )
  2294. And ( u_outwaremx.pcode = :new_sonmtrl_outwaremx[k].pcode )
  2295. And ( u_outwaremx.mtrlwareid = :new_sonmtrl_outwaremx[k].mtrlwareid OR :new_sonmtrl_outwaremx[k].mtrlwareid = 0 )
  2296. Using commit_transaction;
  2297. //计算上级已开未审总和
  2298. SELECT ISNULL(SUM(u_PrdPF.Sonscale * u_outwaremx.qty),0) AS sumqty INTO :i_nowbjmxqty
  2299. FROM u_PrdPF
  2300. INNER JOIN u_outwaremx ON u_outwaremx.mtrlid = u_PrdPF.mtrlid
  2301. INNER JOIN u_outware ON u_outware.scid = u_outwaremx.scid
  2302. AND u_outware.outwareid = u_outwaremx.outwareid
  2303. WHERE (u_outware.flag = 0)
  2304. AND (u_PrdPF.SonMtrlid = :new_sonmtrl_outwaremx[k].mtrlid)
  2305. AND (u_PrdPF.STATUS = :new_sonmtrl_outwaremx[k].status)
  2306. AND (u_PrdPF.woodcode = :new_sonmtrl_outwaremx[k].woodcode)
  2307. AND (u_PrdPF.pcode = :new_sonmtrl_outwaremx[k].pcode)
  2308. AND u_outwaremx.scid = :arg_scid
  2309. AND u_outwaremx.outwareid <> :arg_outwareid
  2310. AND u_outwaremx.mtrlwareid <> :new_outwaremx[i].mtrlwareid
  2311. Using commit_transaction;
  2312. IF SQLCA.SQLCODE <> 0 THEN
  2313. i_nowbjmxqty = 0
  2314. END IF
  2315. SELECT sum(TMP.noallocqty * TMP.Sonscale) INTO :i_nowwaremxqty
  2316. FROM (
  2317. SELECT DISTINCT u_mtrlware.scid
  2318. ,u_mtrlware.mtrlwareid
  2319. ,u_mtrlware.noallocqty
  2320. ,u_PrdPF.Sonscale
  2321. FROM u_PrdPF
  2322. INNER JOIN u_outwaremx ON u_outwaremx.mtrlid = u_PrdPF.mtrlid
  2323. INNER JOIN u_outware ON u_outware.scid = u_outwaremx.scid
  2324. AND u_outware.outwareid = u_outwaremx.outwareid
  2325. LEFT OUTER JOIN u_mtrlware ON u_mtrlware.scid = u_outwaremx.scid
  2326. AND u_mtrlware.mtrlwareid = u_outwaremx.mtrlwareid
  2327. WHERE (u_outware.flag = 0)
  2328. AND (u_PrdPF.SonMtrlid = :new_sonmtrl_outwaremx [k].mtrlid)
  2329. AND (u_PrdPF.STATUS = :new_sonmtrl_outwaremx [k].STATUS)
  2330. AND (u_PrdPF.woodcode = :new_sonmtrl_outwaremx [k].woodcode)
  2331. AND (u_PrdPF.pcode = :new_sonmtrl_outwaremx [k].pcode)
  2332. AND u_outwaremx.scid = :arg_scid
  2333. AND u_outwaremx.outwareid <> :arg_outwareid
  2334. AND u_outwaremx.mtrlwareid <> :new_outwaremx [i].mtrlwareid
  2335. ) AS TMP Using commit_transaction;
  2336. IF SQLCA.SQLCODE <> 0 THEN
  2337. i_nowwaremxqty = 0
  2338. END IF
  2339. IF ISNULL(i_nowwaremxqty) THEN i_nowwaremxqty = 0
  2340. i_nowbjmxqty = i_nowbjmxqty - i_nowwaremxqty
  2341. IF i_nowbjmxqty <= 0 THEN
  2342. i_nowbjmxqty = 0
  2343. END IF
  2344. //得出剩余可以开单的数量
  2345. ld_compareqty = i_noallocqty - i_noauditingqty - i_nowbjmxqty
  2346. IF new_sonmtrl_outwaremx[k].qty > ld_compareqty THEN
  2347. arg_msg += "物料:"+ls_mtrlcode + "【"+ls_mtrlname+"】"+",不够可用数冲减:"+"剩余可用数为(包含库存数-已开单未审核-上级占用):"+String(ld_compareqty,"#,##0.00###")+",本次开单数为:"+String(new_sonmtrl_outwaremx[k].qty,"#,##0.00###")+"~r~n"
  2348. END IF
  2349. NEXT
  2350. NEXT
  2351. IF arg_msg <> '' THEN
  2352. rslt = 0
  2353. END IF
  2354. RETURN rslt
  2355. end function
  2356. on uo_outware_sale.create
  2357. call super::create
  2358. end on
  2359. on uo_outware_sale.destroy
  2360. call super::destroy
  2361. end on