uo_saletask_ll.sru 89 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763
  1. $PBExportHeader$uo_saletask_ll.sru
  2. forward
  3. global type uo_saletask_ll from nonvisualobject
  4. end type
  5. type s_saletaskmx from structure within uo_saletask_ll
  6. end type
  7. type s_saletaskmx_mx from structure within uo_saletask_ll
  8. end type
  9. type s_saletaskmx_in from structure within uo_saletask_ll
  10. end type
  11. end forward
  12. type s_saletaskmx from structure
  13. long mtrlid
  14. decimal { 10 } saleqty
  15. decimal { 10 } plprice
  16. decimal { 10 } acprice
  17. string dscrp
  18. string mtrlcode
  19. decimal { 10 } fprice
  20. decimal { 5 } rebate
  21. string status
  22. long printid
  23. string woodcode
  24. string pcode
  25. string mtrlcuscode
  26. string mtrlchangecode
  27. decimal { 10 } enprice
  28. string outtype
  29. decimal { 10 } dftsaleprice
  30. integer auditflag
  31. string auditemp
  32. datetime auditdate
  33. datetime requiredate
  34. string pfcode
  35. string dscrp2
  36. decimal { 10 } scidprice
  37. decimal { 10 } inwareqty
  38. decimal { 10 } usaleqty
  39. decimal { 10 } uprice
  40. decimal { 5 } rate
  41. string unit
  42. decimal { 5 } capacity
  43. end type
  44. type s_saletaskmx_mx from structure
  45. long mtrlwareid
  46. decimal { 10 } qty
  47. end type
  48. type s_saletaskmx_in from structure
  49. long mtrlid
  50. string status
  51. string woodcode
  52. string pcode
  53. string plancode
  54. string mxdscrp
  55. decimal { 5 } fprice
  56. long printid
  57. decimal { 10 } qty
  58. long storageid
  59. end type
  60. global type uo_saletask_ll from nonvisualobject
  61. end type
  62. global uo_saletask_ll uo_saletask_ll
  63. type variables
  64. Public ProtectedWrite Long taskid
  65. Public ProtectedWrite String taskcode
  66. Public ProtectedWrite DateTime opdate
  67. Public ProtectedWrite String operator
  68. Public ProtectedWrite Int status
  69. Public ProtectedWrite DateTime accomplishdate
  70. Public ProtectedWrite String permit_emp
  71. Public ProtectedWrite String last_emp
  72. Public ProtectedWrite Long ctmint
  73. Long scid
  74. Long banktypeid
  75. Long moneyid
  76. Decimal damt
  77. Decimal otheramt
  78. Decimal mrate
  79. Int Kind
  80. Long cusid
  81. String assign_emp
  82. DateTime requiredate
  83. DateTime taskdate
  84. String freight
  85. String dscrp
  86. String dscrp2
  87. String relcode
  88. String paytype
  89. String freight_tele
  90. String cus_address
  91. String cus_tele
  92. String cus_fax
  93. String upname
  94. Decimal msttakeamt,takeamt
  95. Long audit_buildtype
  96. Transaction commit_transaction //数据commit事务
  97. Private:
  98. s_saletaskmx saletaskmx[] //明细结构
  99. s_saletaskmx_in saletaskmx_in[] //明细结构
  100. Long it_mxbt_in = 0 //来料加工订单收料明细
  101. Long it_mxbt = 0 //明细结构数组末指针
  102. Boolean it_newbegin = True //新建标志
  103. Boolean it_updatebegin = False //修改标志
  104. s_saletaskmx_mx taskmx[]
  105. Long it_mxbt_mx = 0
  106. Decimal mx_sumqty = 0
  107. String uo_option_change_status
  108. String uo_option_change_woodcode
  109. String uo_option_change_pcode
  110. Int uo_option_saletask_secaudit
  111. Int uo_option_if_oa_saletask
  112. Int uo_option_taskplancode_auto_ll
  113. Int uo_option_autocreate_buy_cp
  114. Int uo_option_m_msttake
  115. Int uo_option_taskaudit_dprice
  116. Int uo_option_if_msg
  117. Int uo_option_saletask_fore_secaudit
  118. Int uo_option_saletask_addware
  119. Int uo_option_unit_dec
  120. end variables
  121. forward prototypes
  122. public function integer p_reset ()
  123. public function integer p_clearmx ()
  124. public function integer savesubmit (string arg_operator, ref string arg_msg, boolean arg_ifcommit)
  125. private function integer uof_p_check_dprice (ref string arg_msg)
  126. public function integer acceptmx_in (long arg_mtrlid, long arg_printid, string arg_mtrlcode, long arg_storageid, decimal arg_qty, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, decimal arg_fprice, string arg_mxdscrp, ref string arg_msg)
  127. public function integer acceptmx (long arg_mtrlid, decimal arg_uqty, string arg_unit, decimal arg_rate, decimal arg_uprice, decimal arg_rebate, string arg_dscrp, string arg_dscrp2, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, string arg_mtrlcuscode, long arg_printid, string arg_outtype, datetime arg_requiredate, decimal arg_scidprice, ref string arg_msg)
  128. private function integer p_getinfo (long arg_taskid, ref string arg_msg)
  129. public function integer getinfo (long arg_taskid, ref string arg_msg)
  130. public function integer addmxcmpl (long arg_taskid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit)
  131. public function integer addmxcmpl_in (long arg_taskid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit)
  132. public function integer cancel (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  133. public function integer canceloapermit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  134. public function integer updateassignqty (long arg_scid, long arg_taskid, long arg_printid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit)
  135. public function integer updatebegin (long arg_taskid, ref string arg_msg)
  136. public function integer trycmplsaletask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  137. public function integer tempstoptask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  138. public function integer stopsaletask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  139. public function integer stopmx (long arg_taskid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, ref string arg_msg, boolean arg_commit)
  140. public function integer salepermit (long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit)
  141. public function integer propermit (long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit)
  142. public function integer trycmptask_fore (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  143. public function integer add_dscrp (long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit)
  144. public function integer ddpermit (long arg_taskid, long arg_printid, integer arg_flag, ref string arg_msg, boolean arg_ifcommit)
  145. public function integer p_cprqplan (long arg_taskid, long arg_printid, long arg_flag, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit)
  146. public function integer cancelpermit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  147. public function integer checkmxcmpl (long arg_taskid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg)
  148. public function integer finishtask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  149. public function integer cancelpropermit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  150. public function integer updatebqty (long arg_taskid, long arg_printid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit)
  151. public function integer updateinwareqty (long arg_taskid, long arg_printid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit)
  152. public function integer newbegin ()
  153. end prototypes
  154. public function integer p_reset ();//int p_reset()
  155. //清除对象及其明细
  156. scid = 0
  157. taskid = 0
  158. taskcode = ''
  159. operator = ''
  160. status = 0
  161. damt = 0
  162. otheramt = 0
  163. banktypeid = 0
  164. moneyid = 0
  165. relcode = ''
  166. freight_tele = ''
  167. msttakeamt = 0
  168. takeamt = 0
  169. it_newbegin = FALSE
  170. it_updatebegin = FALSE
  171. //清除明细
  172. p_clearmx()
  173. RETURN 1
  174. end function
  175. public function integer p_clearmx ();//INT p_clearmx()
  176. //清除明细
  177. it_mxbt=0
  178. it_mxbt_in=0
  179. RETURN 1
  180. end function
  181. public function integer savesubmit (string arg_operator, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0,i,j
  182. Long ls_newtaskid
  183. DateTime server_datetime
  184. Long ll_taskid
  185. String ls_sccode
  186. String ls_mtrlcuscode
  187. IF uo_option_taskplancode_auto_ll = -1000 THEN
  188. arg_msg = '选项:[133]来料加工订单生产批号类型,读取初始默认值失败,操作取消!'
  189. rslt = 0
  190. GOTO ext
  191. END IF
  192. IF IsNull(dscrp) THEN dscrp = ''
  193. IF IsNull(dscrp2) THEN dscrp2 = ''
  194. IF IsNull(assign_emp) THEN assign_emp = ''
  195. IF IsNull(arg_operator) THEN arg_operator = ''
  196. IF IsNull(paytype) THEN paytype = ''
  197. IF IsNull(relcode) THEN relcode = ''
  198. IF IsNull(banktypeid) THEN banktypeid = 0
  199. IF IsNull(moneyid) THEN moneyid = 0
  200. IF IsNull(damt) THEN damt = 0
  201. IF IsNull(otheramt) THEN otheramt = 0
  202. IF IsNull(mrate) THEN mrate = 0
  203. IF IsNull(Kind) THEN Kind = 0
  204. IF IsNull(freight) THEN freight = ''
  205. IF IsNull(freight_tele) THEN freight_tele = ''
  206. IF IsNull(cus_address) THEN cus_address = ''
  207. IF IsNull(cus_tele) THEN cus_tele = ''
  208. IF IsNull(cus_fax) THEN cus_fax = ''
  209. IF IsNull(upname) THEN upname = ''
  210. IF IsNull(msttakeamt) THEN msttakeamt = 0
  211. operator = arg_operator
  212. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  213. rslt = 0
  214. arg_msg = "非编辑状态不可以提交"
  215. GOTO ext
  216. END IF
  217. IF Trim(assign_emp) = '' THEN
  218. rslt = 0
  219. arg_msg = "请输入订单业务员"
  220. GOTO ext
  221. END IF
  222. cnt = 0
  223. SELECT count(*) INTO :cnt
  224. FROM u_cust
  225. Where cusid = :cusid USING commit_transaction ;
  226. IF commit_transaction.SQLCode <> 0 THEN
  227. rslt = 0
  228. arg_msg = "查询操作失败,客户资料"
  229. GOTO ext
  230. END IF
  231. IF cnt = 0 THEN
  232. rslt = 0
  233. arg_msg = "客户未定义或错误"
  234. GOTO ext
  235. END IF
  236. cnt = 0
  237. SELECT count(*) INTO :cnt
  238. FROM cw_banktype
  239. Where banktypeid = :banktypeid;
  240. IF commit_transaction.SQLCode <> 0 THEN
  241. arg_msg = '查询结算方式失败'
  242. rslt = 0
  243. GOTO ext
  244. END IF
  245. IF cnt = 0 THEN
  246. arg_msg = '结算方式不存在'
  247. rslt = 0
  248. GOTO ext
  249. END IF
  250. cnt = 0
  251. SELECT count(*) INTO :cnt
  252. FROM cw_currency
  253. Where moneyid = :moneyid;
  254. IF commit_transaction.SQLCode <> 0 THEN
  255. arg_msg = '查询币种失败'
  256. rslt = 0
  257. GOTO ext
  258. END IF
  259. IF cnt = 0 THEN
  260. arg_msg = '币种资料不存在'
  261. rslt = 0
  262. GOTO ext
  263. END IF
  264. IF mrate = 0 THEN
  265. arg_msg = '币种汇率错误'
  266. rslt = 0
  267. GOTO ext
  268. END IF
  269. SELECT Top 1 getdate() INTO :server_datetime FROM u_user USING commit_transaction ;
  270. IF commit_transaction.SQLCode <> 0 THEN
  271. rslt = 0
  272. arg_msg = "查询操作失败,日期 "
  273. GOTO ext
  274. END IF
  275. IF f_check_inoutdate(0,taskdate,FALSE,arg_msg) = 0 THEN
  276. rslt = 0
  277. GOTO ext
  278. END IF
  279. IF Date(taskdate) > Date(requiredate) THEN
  280. arg_msg = '交货日期不能在订货日期前'
  281. rslt = 0
  282. GOTO ext
  283. END IF
  284. IF it_mxbt = 0 THEN //如果输入物料资料错则已经清空
  285. rslt = 0
  286. arg_msg = "没有正确销售订单明细内容"
  287. GOTO ext
  288. END IF
  289. cnt = 0
  290. SELECT count(*) INTO :cnt
  291. FROM u_user
  292. Where username = :operator USING commit_transaction ;
  293. IF commit_transaction.SQLCode <> 0 THEN
  294. rslt = 0
  295. arg_msg = "查询操作失败,操作员!"
  296. GOTO ext
  297. END IF
  298. IF cnt = 0 THEN
  299. rslt = 0
  300. arg_msg = "操作员姓名未登记或已取消!"
  301. GOTO ext
  302. END IF
  303. opdate = server_datetime //填写单据建立时间(最近修改时间)
  304. ////////////////////////////////////////////// //开始区分:新建/更新 处理
  305. IF taskid = 0 THEN //新建
  306. ll_taskid = f_sys_scidentity(0,"u_saletask_ll","taskid",arg_msg,TRUE,id_sqlca)
  307. IF ll_taskid <= 0 THEN
  308. rslt = 0
  309. GOTO ext
  310. END IF
  311. //取分部代号
  312. IF f_get_sccode(scid,commit_transaction,ls_sccode,arg_msg) = 0 THEN
  313. rslt = 0
  314. GOTO ext
  315. END IF
  316. taskcode = getid(0,ls_sccode + 'SJ',Date(server_datetime),FALSE,commit_transaction)
  317. IF taskcode = "err" THEN
  318. taskcode = ''
  319. rslt = 0
  320. arg_msg = "无法获取来料加工订单编号"+"~n"+sqlca.SQLErrText
  321. GOTO ext
  322. END IF
  323. INSERT INTO u_saletask_ll
  324. ( scid,
  325. taskcode,
  326. cusid,
  327. requiredate,
  328. status,
  329. opemp,
  330. assign_emp,
  331. permit_emp,
  332. dscrp,
  333. dscrp2,
  334. opdate,
  335. taskid,
  336. damt,
  337. otheramt,
  338. freight,
  339. taskdate,
  340. banktypeid,
  341. moneyid,
  342. relcode,
  343. paytype,
  344. freight_tele,
  345. cus_address,
  346. cus_tele,
  347. cus_fax,
  348. mrate,
  349. upname,
  350. msttakeamt)
  351. VALUES ( :scid,
  352. :taskcode,
  353. :cusid,
  354. :requiredate,
  355. :status,
  356. :operator,
  357. :assign_emp,
  358. :permit_emp,
  359. :dscrp,
  360. :dscrp2,
  361. :opdate,
  362. :ll_taskid,
  363. :damt,
  364. :otheramt,
  365. :freight,
  366. :taskdate,
  367. :banktypeid,
  368. :moneyid,
  369. :relcode,
  370. :paytype,
  371. :freight_tele,
  372. :cus_address,
  373. :cus_tele,
  374. :cus_fax,
  375. :mrate,
  376. :upname,
  377. :msttakeamt) USING commit_transaction ;
  378. IF commit_transaction.SQLCode <> 0 THEN
  379. rslt = 0
  380. arg_msg = "因网络或其它原因导致插入销售订单操作失败"+"~n"+commit_transaction.SQLErrText
  381. GOTO ext
  382. END IF
  383. //读取新taskid
  384. taskid = ll_taskid
  385. FOR i = 1 TO it_mxbt
  386. ls_mtrlcuscode = ''
  387. CHOOSE CASE uo_option_taskplancode_auto_ll
  388. CASE 1
  389. ls_mtrlcuscode = saletaskmx[i].mtrlcuscode
  390. CASE 2
  391. ls_mtrlcuscode = taskcode
  392. CASE 3
  393. ls_mtrlcuscode = relcode
  394. CASE ELSE
  395. arg_msg = '错误的生产批号,管理员请在系统选项设置先设定好订单批号模式'
  396. rslt = 0
  397. GOTO ext
  398. END CHOOSE
  399. INSERT INTO u_saletaskmx_ll
  400. ( scid,
  401. saleqty,
  402. price,
  403. mtrlid,
  404. taskid,
  405. mxdscrp,
  406. mxdscrp2,
  407. fprice,
  408. rebate,
  409. status,
  410. printid,
  411. woodcode,
  412. pcode,
  413. mtrlcuscode,
  414. enprice,
  415. outtypestr,
  416. dftsaleprice,
  417. requiredate,
  418. pfcode,
  419. scidprice,
  420. usaleqty,
  421. unit,
  422. rate)
  423. VALUES (:scid,
  424. :saletaskmx[i].saleqty,
  425. :saletaskmx[i].acprice,
  426. :saletaskmx[i].mtrlid,
  427. :ll_taskid,
  428. :saletaskmx[i].dscrp,
  429. :saletaskmx[i].dscrp2,
  430. :saletaskmx[i].fprice,
  431. :saletaskmx[i].rebate,
  432. :saletaskmx[i].status,
  433. :saletaskmx[i].printid,
  434. :saletaskmx[i].woodcode,
  435. :saletaskmx[i].pcode,
  436. :ls_mtrlcuscode,
  437. :saletaskmx[i].enprice,
  438. :saletaskmx[i].outtype,
  439. :saletaskmx[i].dftsaleprice,
  440. :saletaskmx[i].requiredate,
  441. :saletaskmx[i].pfcode,
  442. :saletaskmx[i].scidprice,
  443. :saletaskmx[i].usaleqty,
  444. :saletaskmx[i].unit,
  445. :saletaskmx[i].rate) USING commit_transaction;
  446. IF commit_transaction.SQLCode <> 0 THEN
  447. taskid = 0 //还原taskid
  448. rslt = 0
  449. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText
  450. GOTO ext
  451. END IF
  452. NEXT
  453. FOR j = 1 TO it_mxbt_in
  454. INSERT INTO u_saletaskmx_in
  455. (scid,
  456. taskid,
  457. printid,
  458. mtrlid,
  459. plancode,
  460. status,
  461. woodcode,
  462. pcode,
  463. qty,
  464. fprice,
  465. mxdscrp,
  466. storageid)
  467. VALUES
  468. (:scid,
  469. :ll_taskid,
  470. :saletaskmx_in[j].printid,
  471. :saletaskmx_in[j].mtrlid,
  472. :saletaskmx_in[j].plancode,
  473. :saletaskmx_in[j].status,
  474. :saletaskmx_in[j].woodcode,
  475. :saletaskmx_in[j].pcode,
  476. :saletaskmx_in[j].qty,
  477. :saletaskmx_in[j].fprice,
  478. :saletaskmx_in[j].mxdscrp,
  479. :saletaskmx_in[j].storageid) USING commit_transaction;
  480. IF commit_transaction.SQLCode <> 0 THEN
  481. taskid = 0 //还原taskid
  482. rslt = 0
  483. arg_msg = "因网络或其它原因导致插入收料明细操作失败"+"~n"+commit_transaction.SQLErrText
  484. GOTO ext
  485. END IF
  486. NEXT
  487. ELSE //////////////////////////////////////////////// //更新
  488. UPDATE u_saletask_ll
  489. SET kind = :Kind,
  490. cusid = :cusid,
  491. requiredate = :requiredate,
  492. assign_emp = :assign_emp,
  493. dscrp = :dscrp,
  494. dscrp2 = :dscrp2,
  495. moddate = :opdate,
  496. modemp = :operator,
  497. damt = :damt,
  498. otheramt = :otheramt,
  499. freight = :freight,
  500. taskdate = :taskdate,
  501. banktypeid = :banktypeid,
  502. moneyid = :moneyid,
  503. relcode = :relcode,
  504. paytype = :paytype,
  505. freight_tele = :freight_tele,
  506. cus_address = :cus_address,
  507. cus_tele = :cus_tele,
  508. cus_fax = :cus_fax,
  509. mrate = :mrate,
  510. upname = :upname,
  511. msttakeamt = :msttakeamt
  512. WHERE taskid = :taskid
  513. AND scid = :scid
  514. AND status = 0 USING commit_transaction;
  515. IF commit_transaction.SQLCode <> 0 OR commit_transaction.SQLNRows <= 0 THEN
  516. rslt = 0
  517. arg_msg = "因网络或其它原因导致更新来料加工订单操作失败"+"~n"+commit_transaction.SQLErrText
  518. GOTO ext
  519. END IF
  520. //删除原有明细
  521. DELETE FROM u_saletaskmx_ll
  522. Where u_saletaskmx_ll.taskid = :taskid AND u_saletaskmx_ll.scid = :scid USING commit_transaction;
  523. IF commit_transaction.SQLCode <> 0 THEN
  524. rslt = 0
  525. arg_msg = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText
  526. GOTO ext
  527. END IF
  528. FOR i = 1 TO it_mxbt
  529. ls_mtrlcuscode = ''
  530. CHOOSE CASE uo_option_taskplancode_auto_ll
  531. CASE 1
  532. ls_mtrlcuscode = saletaskmx[i].mtrlcuscode
  533. CASE 2
  534. ls_mtrlcuscode = taskcode
  535. CASE 3
  536. ls_mtrlcuscode = relcode
  537. CASE ELSE
  538. arg_msg = '错误的生产批号,管理员请先设定好订单批号模式'
  539. rslt = 0
  540. GOTO ext
  541. END CHOOSE
  542. INSERT INTO u_saletaskmx_ll
  543. ( scid,
  544. taskid,
  545. mtrlid,
  546. saleqty,
  547. price,
  548. mxdscrp,
  549. mxdscrp2,
  550. fprice,
  551. rebate,
  552. status,
  553. printid,
  554. woodcode,
  555. pcode,
  556. mtrlcuscode,
  557. enprice,
  558. outtypestr,
  559. dftsaleprice,
  560. requiredate,
  561. pfcode,
  562. scidprice,
  563. usaleqty,
  564. unit,
  565. rate)
  566. VALUES (:scid,
  567. :taskid,
  568. :saletaskmx[i].mtrlid,
  569. :saletaskmx[i].saleqty,
  570. :saletaskmx[i].acprice,
  571. :saletaskmx[i].dscrp,
  572. :saletaskmx[i].dscrp2,
  573. :saletaskmx[i].fprice,
  574. :saletaskmx[i].rebate,
  575. :saletaskmx[i].status,
  576. :saletaskmx[i].printid,
  577. :saletaskmx[i].woodcode,
  578. :saletaskmx[i].pcode,
  579. :ls_mtrlcuscode,
  580. :saletaskmx[i].enprice,
  581. :saletaskmx[i].outtype,
  582. :saletaskmx[i].dftsaleprice,
  583. :saletaskmx[i].requiredate,
  584. :saletaskmx[i].pfcode,
  585. :saletaskmx[i].scidprice,
  586. :saletaskmx[i].usaleqty,
  587. :saletaskmx[i].unit,
  588. :saletaskmx[i].rate
  589. ) USING commit_transaction;
  590. IF commit_transaction.SQLCode <> 0 THEN
  591. rslt = 0
  592. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText
  593. GOTO ext
  594. END IF
  595. NEXT
  596. DELETE FROM u_saletaskmx_in
  597. Where u_saletaskmx_in.taskid = :taskid AND scid = :scid USING commit_transaction;
  598. IF commit_transaction.SQLCode <> 0 THEN
  599. rslt = 0
  600. arg_msg = "删除旧有收料明细操作失败"+"~n"+commit_transaction.SQLErrText
  601. GOTO ext
  602. END IF
  603. FOR j = 1 TO it_mxbt_in
  604. INSERT INTO u_saletaskmx_in
  605. (scid,
  606. taskid,
  607. printid,
  608. mtrlid,
  609. plancode,
  610. status,
  611. woodcode,
  612. pcode,
  613. qty,
  614. fprice,
  615. mxdscrp,
  616. storageid)
  617. VALUES
  618. (:scid,
  619. :taskid,
  620. :saletaskmx_in[j].printid,
  621. :saletaskmx_in[j].mtrlid,
  622. :saletaskmx_in[j].plancode,
  623. :saletaskmx_in[j].status,
  624. :saletaskmx_in[j].woodcode,
  625. :saletaskmx_in[j].pcode,
  626. :saletaskmx_in[j].qty,
  627. :saletaskmx_in[j].fprice,
  628. :saletaskmx_in[j].mxdscrp,
  629. :saletaskmx_in[j].storageid) USING commit_transaction;
  630. IF commit_transaction.SQLCode <> 0 THEN
  631. taskid = 0 //还原taskid
  632. rslt = 0
  633. arg_msg = "因网络或其它原因导致插入收料明细操作失败"+"~n"+commit_transaction.SQLErrText
  634. GOTO ext
  635. END IF
  636. NEXT
  637. END IF
  638. it_newbegin = FALSE
  639. it_updatebegin = FALSE
  640. ext:
  641. IF rslt = 0 THEN
  642. ROLLBACK USING commit_transaction;
  643. p_clearmx()
  644. ELSEIF arg_ifcommit AND rslt = 1 THEN
  645. COMMIT USING commit_transaction;
  646. END IF
  647. RETURN rslt
  648. end function
  649. private function integer uof_p_check_dprice (ref string arg_msg);Int rslt = 1
  650. Long ll_i
  651. String ls_mtrlcode
  652. Decimal ld_dftsaleprice
  653. IF uo_option_taskaudit_dprice = -1000 THEN
  654. arg_msg = '选项:[051]销售订单审核前必须有定价,读取初始默认值失败,操作取消!'
  655. rslt = 0
  656. GOTO ext
  657. END IF
  658. IF uo_option_taskaudit_dprice = 0 THEN
  659. rslt = 1
  660. GOTO ext
  661. END IF
  662. FOR ll_i = 1 TO it_mxbt
  663. ls_mtrlcode = saletaskmx[ll_i].mtrlcode
  664. ld_dftsaleprice = saletaskmx[ll_i].dftsaleprice
  665. IF saletaskmx[ll_i].outtype <> '' THEN CONTINUE
  666. IF ld_dftsaleprice = 0 THEN
  667. arg_msg = '物料:'+ls_mtrlcode+'未有定价,请检查'
  668. rslt = 0
  669. GOTO ext
  670. END IF
  671. NEXT
  672. ext:
  673. RETURN rslt
  674. end function
  675. public function integer acceptmx_in (long arg_mtrlid, long arg_printid, string arg_mtrlcode, long arg_storageid, decimal arg_qty, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, decimal arg_fprice, string arg_mxdscrp, ref string arg_msg);Int rslt = 1
  676. Long cnt = 0,ls_i
  677. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  678. rslt = 0
  679. arg_msg = "非编辑状态不可以使用,操作取消"
  680. GOTO ext
  681. END IF
  682. IF uo_option_change_status = '-1000' THEN
  683. arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!'
  684. rslt = 0
  685. GOTO ext
  686. END IF
  687. IF uo_option_change_woodcode = '-1000' THEN
  688. arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!'
  689. rslt = 0
  690. GOTO ext
  691. END IF
  692. IF uo_option_change_pcode = '-1000' THEN
  693. arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!'
  694. rslt = 0
  695. GOTO ext
  696. END IF
  697. //清除空值
  698. IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0
  699. IF IsNull(arg_qty) THEN arg_qty = 0
  700. IF IsNull(arg_fprice) THEN arg_fprice = 0
  701. IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = ''
  702. IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = ''
  703. IF IsNull(arg_status) THEN arg_status = ''
  704. IF IsNull(arg_woodcode) THEN arg_woodcode = ''
  705. IF IsNull(arg_pcode) THEN arg_pcode = ''
  706. IF IsNull(arg_printid) THEN arg_printid = 0
  707. IF IsNull(arg_plancode) THEN arg_plancode = ''
  708. IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = ''
  709. IF IsNull(arg_storageid) THEN arg_storageid = 0
  710. IF arg_mtrlid = 0 OR arg_qty = 0 THEN
  711. rslt = 1
  712. GOTO ext
  713. END IF
  714. IF arg_storageid = 0 THEN
  715. rslt = 0
  716. arg_msg = '请选择仓库,第'+String(arg_printid)+'行'
  717. GOTO ext
  718. END IF
  719. IF f_check_status(1,arg_status) = 0 THEN
  720. rslt = 0
  721. arg_msg = "查询操作失败,可能'+uo_option_change_status+'未定义,物料:"+arg_mtrlcode+",内容:"+arg_status
  722. GOTO ext
  723. END IF
  724. IF f_check_status(2,arg_woodcode) = 0 THEN
  725. rslt = 0
  726. arg_msg = "查询操作失败,可能'+uo_option_change_woodcode+'未定义,物料:"+arg_mtrlcode+",内容:"+arg_woodcode
  727. GOTO ext
  728. END IF
  729. IF f_check_status(3,arg_pcode) = 0 THEN
  730. rslt = 0
  731. arg_msg = "查询操作失败,可能'+uo_option_change_pcode+'未定义,物料:"+arg_mtrlcode+",内容:"+arg_pcode
  732. GOTO ext
  733. END IF
  734. IF arg_fprice < 0 THEN
  735. rslt = 0
  736. arg_msg = "物料编码:" + String(arg_mtrlcode)+" 单价错误"
  737. GOTO ext
  738. END IF
  739. FOR ls_i = 1 TO it_mxbt_in //合并重复项
  740. IF saletaskmx_in[ls_i].mtrlid = arg_mtrlid AND &
  741. saletaskmx_in[ls_i].status = arg_status AND &
  742. saletaskmx_in[ls_i].pcode = arg_pcode AND &
  743. saletaskmx_in[ls_i].plancode = arg_plancode AND &
  744. saletaskmx_in[ls_i].woodcode = arg_woodcode and &
  745. saletaskmx_in[ls_i].storageid = arg_storageid THEN
  746. saletaskmx_in[ls_i].qty = saletaskmx_in[ls_i].qty+arg_qty
  747. rslt = 1
  748. GOTO ext
  749. END IF
  750. NEXT
  751. //写入内容
  752. it_mxbt_in++
  753. saletaskmx_in[it_mxbt_in].mtrlid = arg_mtrlid
  754. saletaskmx_in[it_mxbt_in].qty = arg_qty
  755. saletaskmx_in[it_mxbt_in].fprice = arg_fprice
  756. saletaskmx_in[it_mxbt_in].mxdscrp = arg_mxdscrp
  757. saletaskmx_in[it_mxbt_in].status = arg_status
  758. saletaskmx_in[it_mxbt_in].printid = arg_printid
  759. saletaskmx_in[it_mxbt_in].woodcode = arg_woodcode
  760. saletaskmx_in[it_mxbt_in].pcode = arg_pcode
  761. saletaskmx_in[it_mxbt_in].plancode = arg_plancode
  762. saletaskmx_in[it_mxbt_in].storageid = arg_storageid
  763. ext:
  764. IF rslt = 0 THEN p_clearmx()
  765. RETURN rslt
  766. end function
  767. public function integer acceptmx (long arg_mtrlid, decimal arg_uqty, string arg_unit, decimal arg_rate, decimal arg_uprice, decimal arg_rebate, string arg_dscrp, string arg_dscrp2, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, string arg_mtrlcuscode, long arg_printid, string arg_outtype, datetime arg_requiredate, decimal arg_scidprice, ref string arg_msg);Int rslt = 1
  768. Long cnt = 0,ls_i
  769. Decimal ld_dftsaleprice
  770. Decimal ld_planprice
  771. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  772. rslt = 0
  773. arg_msg = "非编辑状态不可以使用,操作取消"
  774. GOTO ext
  775. END IF
  776. //清除空值
  777. IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0
  778. IF IsNull(arg_uqty) THEN arg_uqty = 0
  779. IF IsNull(arg_uprice) THEN arg_uprice = 0
  780. IF IsNull(arg_rebate) THEN arg_rebate = 0
  781. IF arg_rebate = 0 THEN arg_rebate = 1
  782. IF IsNull(arg_dscrp) THEN arg_dscrp = ''
  783. IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = ''
  784. IF IsNull(arg_status) THEN arg_status = ''
  785. IF IsNull(arg_woodcode) THEN arg_woodcode = ''
  786. IF IsNull(arg_pcode) THEN arg_pcode = ''
  787. IF IsNull(arg_printid) THEN arg_printid = 0
  788. IF IsNull(arg_outtype) THEN arg_outtype = ''
  789. IF IsNull(arg_mtrlcuscode) THEN arg_mtrlcuscode = ''
  790. IF IsNull(arg_dscrp2) THEN arg_dscrp2 = ''
  791. IF IsNull(arg_unit) THEN arg_unit = ''
  792. IF IsNull(arg_rate) THEN arg_rate = 1
  793. IF arg_rate = 0 THEN arg_rate = 1
  794. IF IsNull(arg_uprice) THEN arg_uprice = 0
  795. IF uo_option_change_status = '-1000' THEN
  796. arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!'
  797. rslt = 0
  798. GOTO ext
  799. END IF
  800. IF uo_option_change_woodcode = '-1000' THEN
  801. arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!'
  802. rslt = 0
  803. GOTO ext
  804. END IF
  805. IF uo_option_change_pcode = '-1000' THEN
  806. arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!'
  807. rslt = 0
  808. GOTO ext
  809. END IF
  810. IF uo_option_m_msttake = -1000 THEN
  811. arg_msg = '选项:[045]系统使用多币种应收帐,读取初始默认值失败,操作取消!'
  812. rslt = 0
  813. GOTO ext
  814. END IF
  815. IF uo_option_unit_dec = -1000 THEN
  816. arg_msg = '选项:[023]辅助单位转换库存单位小数位,读取初始默认值失败,操作取消!'
  817. rslt = 0
  818. GOTO ext
  819. END IF
  820. IF arg_mtrlid = 0 OR arg_uqty = 0 THEN
  821. rslt = 1
  822. GOTO ext
  823. END IF
  824. IF f_check_status(1,arg_status) = 0 THEN
  825. rslt = 0
  826. arg_msg = "查询操作失败,可能"+uo_option_change_status+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_status
  827. GOTO ext
  828. END IF
  829. IF f_check_status(2,arg_woodcode) = 0 THEN
  830. rslt = 0
  831. arg_msg = "查询操作失败,可能"+uo_option_change_woodcode+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_woodcode
  832. GOTO ext
  833. END IF
  834. IF f_check_status(3,arg_pcode) = 0 THEN
  835. rslt = 0
  836. arg_msg = "查询操作失败,可能"+uo_option_change_pcode+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_pcode
  837. GOTO ext
  838. END IF
  839. IF arg_uprice * arg_rebate < 0 THEN
  840. rslt = 0
  841. arg_msg = "产品:" + String(arg_mtrlcode)+" 单价错误"
  842. GOTO ext
  843. END IF
  844. IF arg_rebate <= 0 THEN
  845. arg_msg = '折扣错误,请检查'
  846. rslt = 0
  847. GOTO ext
  848. END IF
  849. String ls_pfcode
  850. ls_pfcode = f_get_dft_pf(arg_mtrlid)
  851. //检查物料id
  852. Int li_statusflag
  853. Decimal ld_capacity,ld_capacity_zj
  854. s_mtrlcfg_expr s_pz[]
  855. String ls_status_zj
  856. long ll_i
  857. SELECT planprice,statusflag,capacity
  858. INTO :ld_planprice,:li_statusflag,:ld_capacity
  859. FROM u_mtrldef
  860. Where u_mtrldef.mtrlid = :arg_mtrlid ;
  861. IF sqlca.SQLCode <> 0 THEN
  862. rslt = 0
  863. arg_msg = "查询操作失败,产品计划价"
  864. GOTO ext
  865. END IF
  866. IF li_statusflag = 2 AND Trim(arg_status) = '' THEN
  867. rslt = 0
  868. arg_msg = '第'+String(arg_printid)+'行,产品:'+arg_mtrlcode+' 属于组合配置类型,但没有输入配置,请检查'
  869. GOTO ext
  870. END IF
  871. //IF li_statusflag = 2 THEN
  872. // ld_capacity = 0
  873. // f_checkpz(arg_status,s_pz[])
  874. // FOR ll_i = 1 TO UpperBound(s_pz)
  875. // ls_status_zj = s_pz[ll_i].cfgname
  876. //
  877. // SELECT capacity
  878. // INTO :ld_capacity_zj
  879. // FROM u_mtrl_configure
  880. // WHERE mtrlid = :arg_mtrlid
  881. // AND Name = :ls_status_zj;
  882. // IF commit_transaction.SQLCode <> 0 THEN
  883. // rslt = 0
  884. // arg_msg = "查询子件 "+ls_status_zj+" 产能参数操作失败"
  885. // GOTO ext
  886. // END IF
  887. //
  888. // ld_capacity = ld_capacity + ld_capacity_zj * Dec(s_pz[ll_i].qty)
  889. //
  890. // NEXT
  891. //
  892. //END IF
  893. ld_dftsaleprice = 0
  894. f_get_defsaleprice(cusid,arg_mtrlid,arg_status,arg_pcode,arg_woodcode,moneyid,ld_dftsaleprice)
  895. //写入内容
  896. it_mxbt++
  897. saletaskmx[it_mxbt].dftsaleprice = ld_dftsaleprice
  898. saletaskmx[it_mxbt].mtrlid = arg_mtrlid
  899. saletaskmx[it_mxbt].usaleqty = arg_uqty
  900. saletaskmx[it_mxbt].saleqty = Round(arg_uqty * arg_rate,uo_option_unit_dec)
  901. saletaskmx[it_mxbt].plprice = ld_planprice
  902. saletaskmx[it_mxbt].dscrp = arg_dscrp
  903. saletaskmx[it_mxbt].dscrp2 = arg_dscrp2
  904. saletaskmx[it_mxbt].mtrlcode = arg_mtrlcode
  905. saletaskmx[it_mxbt].status = arg_status
  906. saletaskmx[it_mxbt].printid = arg_printid
  907. saletaskmx[it_mxbt].woodcode = arg_woodcode
  908. saletaskmx[it_mxbt].pcode = arg_pcode
  909. saletaskmx[it_mxbt].mtrlcuscode = arg_mtrlcuscode
  910. saletaskmx[it_mxbt].unit = arg_unit
  911. saletaskmx[it_mxbt].rate = arg_rate
  912. //saletaskmx[it_mxbt].uprice = arg_uprice
  913. saletaskmx[it_mxbt].enprice = arg_uprice // * arg_rebate//Round((arg_uprice * arg_uqty)/(Round(arg_uqty * arg_rate,uo_option_unit_dec)),10)
  914. saletaskmx[it_mxbt].rebate = arg_rebate
  915. saletaskmx[it_mxbt].fprice = arg_uprice * mrate / arg_rate
  916. saletaskmx[it_mxbt].acprice = saletaskmx[it_mxbt].fprice * arg_rebate
  917. saletaskmx[it_mxbt].scidprice = arg_scidprice
  918. saletaskmx[it_mxbt].outtype = arg_outtype
  919. saletaskmx[it_mxbt].requiredate = arg_requiredate
  920. saletaskmx[it_mxbt].pfcode = ls_pfcode
  921. IF uo_option_m_msttake = 1 THEN //使用多币种
  922. msttakeamt = msttakeamt + arg_uprice * arg_uqty * arg_rebate
  923. ELSE // 系统不使用多币种,转换为人民币
  924. msttakeamt = msttakeamt + arg_uprice * arg_uqty * arg_rebate * mrate
  925. END IF
  926. ext:
  927. IF rslt = 0 THEN p_clearmx()
  928. RETURN rslt
  929. end function
  930. private function integer p_getinfo (long arg_taskid, ref string arg_msg);Int rslt = 1
  931. SELECT scid,
  932. taskid,
  933. TaskCode,
  934. kind,
  935. CusID,
  936. requiredate,
  937. accomplishdate,
  938. Status,
  939. Opemp,
  940. Assign_Emp,
  941. Permit_Emp,
  942. Dscrp,
  943. Dscrp2,
  944. opdate,
  945. damt,
  946. otheramt,
  947. freight,
  948. taskdate,
  949. banktypeid ,
  950. moneyid,
  951. relcode,
  952. paytype,
  953. freight_tele,
  954. cus_address,
  955. cus_tele,
  956. cus_fax,
  957. mrate,
  958. upname,
  959. ctmint,
  960. msttakeamt,
  961. takeamt
  962. INTO :scid,
  963. :taskid,
  964. :TaskCode,
  965. :Kind,
  966. :CusID,
  967. :requiredate,
  968. :accomplishdate,
  969. :Status,
  970. :Operator,
  971. :Assign_Emp,
  972. :Permit_Emp,
  973. :Dscrp,
  974. :Dscrp2,
  975. :opdate ,
  976. :damt,
  977. :otheramt,
  978. :freight,
  979. :taskdate,
  980. :banktypeid,
  981. :moneyid,
  982. :relcode,
  983. :paytype,
  984. :freight_tele,
  985. :cus_address,
  986. :cus_tele,
  987. :cus_fax,
  988. :mrate,
  989. :upname,
  990. :ctmint,
  991. :msttakeamt,
  992. :takeamt
  993. FROM u_SaleTask_ll
  994. Where u_SaleTask_ll.taskid = :arg_taskid
  995. USING commit_transaction;
  996. IF commit_transaction.SQLCode <> 0 THEN
  997. rslt = 0
  998. ARG_MSG = '查询订单内容失败(错误来料加工订单唯一码)'
  999. GOTO ext
  1000. END IF
  1001. ext:
  1002. RETURN rslt
  1003. end function
  1004. public function integer getinfo (long arg_taskid, ref string arg_msg);//getinfo(long arg_taskid,string arg_msg)
  1005. //0 失败 1成功
  1006. Int rslt = 1,i = 1,j = 1 ,no_mxcheck = 0
  1007. IF arg_taskid <= 0 THEN
  1008. rslt = 0
  1009. arg_msg = '错误销售订单唯一码'
  1010. GOTO ext
  1011. END IF
  1012. IF p_getinfo(arg_taskid,arg_msg) = 0 THEN
  1013. rslt = 0
  1014. GOTO ext
  1015. END IF
  1016. //用游标读取明细
  1017. DECLARE cur_inwaermx CURSOR FOR
  1018. SELECT u_saletaskmx_ll.mtrlid,
  1019. u_saletaskmx_ll.saleqty,
  1020. u_saletaskmx_ll.price,
  1021. u_saletaskmx_ll.mxdscrp,
  1022. u_saletaskmx_ll.mxdscrp2,
  1023. u_mtrldef.mtrlcode,
  1024. u_saletaskmx_ll.fprice,
  1025. u_saletaskmx_ll.rebate,
  1026. u_saletaskmx_ll.status,
  1027. u_saletaskmx_ll.printid,
  1028. u_saletaskmx_ll.woodcode,
  1029. u_saletaskmx_ll.pcode,
  1030. u_saletaskmx_ll.mtrlcuscode,
  1031. u_saletaskmx_ll.enprice,
  1032. u_saletaskmx_ll.outtypestr,
  1033. u_saletaskmx_ll.dftsaleprice,
  1034. u_saletaskmx_ll.requiredate,
  1035. u_saletaskmx_ll.pfcode,
  1036. u_saletaskmx_ll.scidprice
  1037. FROM u_saletaskmx_ll,u_mtrldef
  1038. WHERE u_saletaskmx_ll.taskid = :arg_taskid AND
  1039. u_saletaskmx_ll.mtrlid = u_mtrldef.mtrlid
  1040. USING commit_transaction;
  1041. OPEN cur_inwaermx;
  1042. FETCH cur_inwaermx INTO :saletaskmx[i].mtrlid,:saletaskmx[i].saleqty,
  1043. :saletaskmx[i].acprice,:saletaskmx[i].dscrp,:saletaskmx[i].dscrp2,
  1044. :saletaskmx[i].mtrlcode,:saletaskmx[i].fprice,
  1045. :saletaskmx[i].rebate,:saletaskmx[i].status,
  1046. :saletaskmx[i].printid,:saletaskmx[i].woodcode,
  1047. :saletaskmx[i].pcode,:saletaskmx[i].mtrlcuscode,
  1048. :saletaskmx[i].enprice,:saletaskmx[i].outtype,
  1049. :saletaskmx[i].dftsaleprice,
  1050. :saletaskmx[i].requiredate,
  1051. :saletaskmx[i].pfcode,:saletaskmx[i].scidprice;
  1052. DO WHILE sqlca.SQLCode = 0
  1053. i++
  1054. FETCH cur_inwaermx INTO :saletaskmx[i].mtrlid,:saletaskmx[i].saleqty,
  1055. :saletaskmx[i].acprice,:saletaskmx[i].dscrp,:saletaskmx[i].dscrp2,
  1056. :saletaskmx[i].mtrlcode,:saletaskmx[i].fprice,
  1057. :saletaskmx[i].rebate,:saletaskmx[i].status,
  1058. :saletaskmx[i].printid,:saletaskmx[i].woodcode,
  1059. :saletaskmx[i].pcode,:saletaskmx[i].mtrlcuscode,
  1060. :saletaskmx[i].enprice,:saletaskmx[i].outtype,
  1061. :saletaskmx[i].dftsaleprice,
  1062. :saletaskmx[i].requiredate,
  1063. :saletaskmx[i].pfcode,:saletaskmx[i].scidprice;
  1064. LOOP
  1065. CLOSE cur_inwaermx;
  1066. //检验明细是否读入完整
  1067. SELECT count(*) INTO :no_mxcheck
  1068. FROM u_saletaskmx_ll
  1069. Where u_saletaskmx_ll.taskid = :arg_taskid
  1070. USING commit_transaction;
  1071. IF commit_transaction.SQLCode <> 0 THEN
  1072. rslt = 0
  1073. arg_msg = "查询操作失败,销售订单明细数量"
  1074. GOTO ext
  1075. END IF
  1076. IF i <> (no_mxcheck+1) THEN
  1077. rslt = 0
  1078. arg_msg = "查询操作失败,销售订单明细"
  1079. GOTO ext
  1080. END IF
  1081. it_mxbt = i - 1
  1082. //读取来料加工订单收料明细
  1083. //用游标读取明细
  1084. DECLARE cur_saletaskmx_in CURSOR FOR
  1085. SELECT u_saletaskmx_in.mtrlid,
  1086. u_saletaskmx_in.qty,
  1087. u_saletaskmx_in.fprice,
  1088. u_saletaskmx_in.mxdscrp,
  1089. u_saletaskmx_in.status,
  1090. u_saletaskmx_in.printid,
  1091. u_saletaskmx_in.woodcode,
  1092. u_saletaskmx_in.pcode,
  1093. u_saletaskmx_in.plancode,
  1094. u_saletaskmx_in.storageid
  1095. FROM u_saletaskmx_in
  1096. WHERE u_saletaskmx_in.taskid = :arg_taskid
  1097. USING commit_transaction;
  1098. OPEN cur_saletaskmx_in;
  1099. FETCH cur_saletaskmx_in INTO :saletaskmx_in[j].mtrlid,:saletaskmx_in[j].qty,
  1100. :saletaskmx_in[j].fprice,:saletaskmx_in[j].mxdscrp,
  1101. :saletaskmx_in[j].status,:saletaskmx_in[j].printid,:saletaskmx_in[j].woodcode,
  1102. :saletaskmx_in[j].pcode,:saletaskmx_in[j].plancode,:saletaskmx_in[j].storageid;
  1103. DO WHILE sqlca.SQLCode = 0
  1104. j++
  1105. FETCH cur_saletaskmx_in INTO :saletaskmx_in[j].mtrlid,:saletaskmx_in[j].qty,
  1106. :saletaskmx_in[j].fprice,:saletaskmx_in[j].mxdscrp,
  1107. :saletaskmx_in[j].status,:saletaskmx_in[j].printid,:saletaskmx_in[j].woodcode,
  1108. :saletaskmx_in[j].pcode,:saletaskmx_in[j].plancode,:saletaskmx_in[j].storageid;
  1109. LOOP
  1110. CLOSE cur_saletaskmx_in;
  1111. //检验明细是否读入完整
  1112. SELECT count(*) INTO :no_mxcheck
  1113. FROM u_saletaskmx_in
  1114. Where u_saletaskmx_in.taskid = :arg_taskid
  1115. USING commit_transaction;
  1116. IF commit_transaction.SQLCode <> 0 THEN
  1117. rslt = 0
  1118. arg_msg = "查询操作失败,销售订单明细数量"
  1119. GOTO ext
  1120. END IF
  1121. IF j <> (no_mxcheck+1) THEN
  1122. rslt = 0
  1123. arg_msg = "查询操作失败,销售订单明细"
  1124. GOTO ext
  1125. END IF
  1126. it_mxbt_in = j - 1
  1127. it_newbegin = FALSE
  1128. it_updatebegin = FALSE
  1129. ext:
  1130. IF rslt = 0 THEN p_reset()
  1131. RETURN rslt
  1132. end function
  1133. public function integer addmxcmpl (long arg_taskid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  1134. IF arg_taskid <= 0 THEN
  1135. rslt = 0
  1136. arg_msg = '错误销售订单唯一码'
  1137. GOTO ext
  1138. END IF
  1139. IF arg_addqty = 0 THEN
  1140. rslt = 1
  1141. GOTO ext
  1142. END IF
  1143. IF p_getinfo(arg_taskid,arg_msg) = 0 THEN
  1144. rslt = 0
  1145. GOTO ext
  1146. END IF
  1147. IF status <> 1 AND status <> 5 THEN
  1148. rslt = 0
  1149. IF status <> 1 THEN
  1150. arg_msg = "销售订单只有在进行状态下才可以执行进仓"
  1151. ELSEIF status <> 5 THEN
  1152. arg_msg = "销售订单只有在完成状态下才可以撤消进仓"
  1153. END IF
  1154. GOTO ext
  1155. END IF
  1156. Decimal ls_usaleqty,ls_consignedqty
  1157. String ls_mtrlcode
  1158. SELECT u_saletaskmx_ll.usaleqty,
  1159. u_saletaskmx_ll.consignedqty,
  1160. u_mtrldef.mtrlcode
  1161. INTO :ls_usaleqty,
  1162. :ls_consignedqty,
  1163. :ls_mtrlcode
  1164. FROM u_saletaskmx_ll ,u_mtrldef
  1165. WHERE ( u_saletaskmx_ll.taskid = :arg_taskid ) AND
  1166. ( u_saletaskmx_ll.printid = :arg_printid ) AND
  1167. ( u_saletaskmx_ll.stopflag = 0 ) AND
  1168. ( u_saletaskmx_ll.mtrlid = u_mtrldef.mtrlid) USING commit_transaction ;
  1169. IF commit_transaction.SQLCode <> 0 THEN
  1170. rslt = 0
  1171. arg_msg = "因网络或错误产品编码["+ls_mtrlcode+"]导致查询销售订单已完成数量操作失败"+"~n"+sqlca.SQLErrText
  1172. GOTO ext
  1173. END IF
  1174. IF ls_usaleqty < ls_consignedqty+arg_addqty THEN
  1175. rslt = 0
  1176. arg_msg = "产品["+ls_mtrlcode+"]的未完成数量只有"+String(ls_usaleqty - ls_consignedqty,'#,##0.0#')+",不能出仓"+String(arg_addqty,'#,##0.0#')
  1177. GOTO ext
  1178. END IF
  1179. UPDATE u_saletaskmx_ll
  1180. SET consignedqty = consignedqty +:arg_addqty
  1181. WHERE ( u_saletaskmx_ll.taskid = :arg_taskid ) AND
  1182. ( u_saletaskmx_ll.printid = :arg_printid ) AND
  1183. ( u_saletaskmx_ll.stopflag = 0 ) USING commit_transaction;
  1184. IF commit_transaction.SQLCode <> 0 THEN
  1185. rslt = 0
  1186. arg_msg = "因网络或错误产品唯一码导致销售订单完成数量操作失败"+"~n"+ commit_transaction.SQLErrText
  1187. GOTO ext
  1188. END IF
  1189. it_newbegin = FALSE
  1190. it_updatebegin = FALSE
  1191. ext:
  1192. IF rslt = 0 THEN
  1193. ROLLBACK USING commit_transaction;
  1194. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1195. COMMIT USING commit_transaction;
  1196. END IF
  1197. p_reset()
  1198. RETURN (rslt)
  1199. end function
  1200. public function integer addmxcmpl_in (long arg_taskid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  1201. IF arg_taskid <= 0 THEN
  1202. rslt = 0
  1203. ARG_MSG = '错误销售订单唯一码'
  1204. GOTO ext
  1205. END IF
  1206. IF arg_addqty = 0 THEN
  1207. rslt = 1
  1208. GOTO ext
  1209. END IF
  1210. IF p_getinfo(arg_taskid,ARG_MSG) = 0 THEN
  1211. rslt = 0
  1212. GOTO ext
  1213. END IF
  1214. IF status <> 1 AND status <> 5 THEN
  1215. rslt = 0
  1216. IF status <> 1 THEN
  1217. ARG_MSG = "销售订单只有在进行状态下才可以执行收料进仓"
  1218. ELSEIF status <> 5 THEN
  1219. ARG_MSG = "销售订单只有在完成状态下才可以撤消收料进仓"
  1220. END IF
  1221. GOTO ext
  1222. END IF
  1223. Decimal ls_SaleQty,ls_consignedQty
  1224. String ls_mtrlcode
  1225. SELECT u_SaleTaskMx_in.Qty,
  1226. u_SaleTaskMx_in.consignedQty,
  1227. u_mtrldef.mtrlcode
  1228. INTO :ls_SaleQty,
  1229. :ls_consignedQty,
  1230. :ls_mtrlcode
  1231. FROM u_SaleTaskMx_in ,u_mtrldef
  1232. WHERE ( u_SaleTaskMx_in.TaskID = :arg_taskid ) AND
  1233. ( u_SaleTaskMx_in.printid = :arg_printid ) and
  1234. ( u_SaleTaskMx_in.mtrlid = u_mtrldef.mtrlid) USING commit_transaction ;
  1235. IF commit_transaction.SQLCode <> 0 THEN
  1236. rslt = 0
  1237. ARG_MSG = "因网络或错误产品编码["+ls_mtrlcode+"]导致查询销售订单已完成数量操作失败"+"~n"+SQLCA.SQLErrText
  1238. GOTO ext
  1239. END IF
  1240. IF ls_SaleQty < ls_consignedQty+arg_addqty THEN
  1241. rslt = 0
  1242. ARG_MSG = "产品["+ls_mtrlcode+"]的未完成收料数量只有"+String(ls_SaleQty - ls_consignedQty,'#,##0.0#')+",不能出仓"+String(arg_addqty,'#,##0.0#')
  1243. GOTO ext
  1244. END IF
  1245. UPDATE u_SaleTaskMx_in
  1246. SET consignedQty = consignedQty +:arg_addqty
  1247. WHERE ( u_SaleTaskMx_in.TaskID = :arg_taskid ) AND
  1248. ( u_SaleTaskMx_in.printid = :arg_printid )
  1249. USING commit_transaction;
  1250. IF commit_transaction.SQLCode <> 0 THEN
  1251. rslt = 0
  1252. ARG_MSG = "因网络或错误产品唯一码导致销售订单收料完成数量操作失败"+"~n"+ commit_transaction.SQLErrText
  1253. GOTO ext
  1254. END IF
  1255. it_newbegin = FALSE
  1256. it_updatebegin = FALSE
  1257. ext:
  1258. IF rslt = 0 THEN
  1259. ROLLBACK USING commit_transaction;
  1260. ELSEIF arg_ifcommit and rslt = 1 THEN
  1261. COMMIT USING commit_transaction;
  1262. END IF
  1263. p_reset()
  1264. Return (rslt)
  1265. end function
  1266. public function integer cancel (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1267. IF arg_taskid <= 0 THEN
  1268. rslt = 0
  1269. arg_msg = '错误销售订单唯一码'
  1270. GOTO ext
  1271. END IF
  1272. IF p_getinfo(arg_taskid,arg_msg) = 0 THEN
  1273. rslt = 0
  1274. GOTO ext
  1275. END IF
  1276. IF Status <> 0 THEN
  1277. rslt = 0
  1278. arg_msg = "订单已经审核,不可以删除"
  1279. GOTO ext
  1280. END IF
  1281. //IF sys_option_if_OA = 1 AND audit_buildtype = 0 THEN
  1282. // IF f_check_if_oaflow( arg_scid,arg_taskid,6,arg_msg ) = 0 THEN
  1283. // rslt = 0
  1284. // GOTO ext
  1285. // END IF
  1286. //END IF
  1287. DELETE FROM u_saletask_ll
  1288. Where u_saletask_ll.taskid = :arg_taskid
  1289. USING commit_transaction ;
  1290. IF commit_transaction.SQLCode <> 0 THEN
  1291. rslt = 0
  1292. arg_msg = "删除来料加工订单操作失败"+"~n"+commit_transaction.SQLErrText
  1293. ROLLBACK USING commit_transaction;
  1294. GOTO ext
  1295. END IF
  1296. DELETE FROM u_saletaskmx_ll
  1297. Where taskid = :arg_taskid
  1298. USING commit_transaction;
  1299. IF commit_transaction.SQLCode <> 0 THEN
  1300. rslt = 0
  1301. arg_msg = "删除来料加工订单发货明细操作失败"+"~n"+commit_transaction.SQLErrText
  1302. ROLLBACK USING commit_transaction;
  1303. GOTO ext
  1304. END IF
  1305. DELETE FROM u_SaleTaskMx_in
  1306. Where taskid = :arg_taskid
  1307. USING commit_transaction;
  1308. IF commit_transaction.SQLCode <> 0 THEN
  1309. rslt = 0
  1310. arg_msg = "删除来料加工订单收料明细操作失败"+"~n"+commit_transaction.SQLErrText
  1311. ROLLBACK USING commit_transaction;
  1312. GOTO ext
  1313. END IF
  1314. it_newbegin = FALSE
  1315. it_updatebegin = FALSE
  1316. IF arg_ifcommit AND rslt = 1 THEN
  1317. COMMIT USING commit_transaction;
  1318. END IF
  1319. ext:
  1320. p_reset()
  1321. Return (rslt)
  1322. end function
  1323. public function integer canceloapermit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);//相关OA公文被否决时调用
  1324. Int rslt = 1,cnt = 0
  1325. DateTime nulldate
  1326. Decimal ls_consignedQty
  1327. SetNull(nulldate)
  1328. IF uo_option_saletask_secaudit = -1000 THEN
  1329. arg_msg = '选项:[035]销售订单使用二级审核,读取初始默认值失败,操作取消!'
  1330. rslt = 0
  1331. GOTO ext
  1332. END IF
  1333. IF uo_option_if_oa_saletask = -1000 THEN
  1334. arg_msg = '选项:[043]销售订单使用OA审批流程,读取初始默认值失败,操作取消!'
  1335. rslt = 0
  1336. GOTO ext
  1337. END IF
  1338. IF arg_taskid <= 0 THEN
  1339. rslt = 0
  1340. ARG_MSG = '错误销售订单唯一码'
  1341. GOTO ext
  1342. END IF
  1343. IF getinfo(arg_taskid,ARG_MSG) = 0 THEN
  1344. rslt = 0
  1345. GOTO ext
  1346. END IF
  1347. IF ctmint > 0 THEN
  1348. ARG_MSG = '单据已截数,不能操作'
  1349. rslt = 0
  1350. GOTO ext
  1351. END IF
  1352. IF NOT (uo_option_saletask_secaudit = 1 AND uo_option_if_oa_saletask = 1) THEN
  1353. rslt = 0
  1354. ARG_MSG = '系统设置没有使用OA审批流程,请联系管理员'
  1355. GOTO ext
  1356. END IF
  1357. IF Status <> 4 THEN
  1358. rslt = 0
  1359. ARG_MSG = "订单只有在已待生产审核状态才可以执行撤消审核,请核对"
  1360. GOTO ext
  1361. END IF
  1362. SELECT count(*) INTO :cnt
  1363. FROM u_order_ml
  1364. WHERE scid = :scid
  1365. AND taskid = :arg_taskid
  1366. AND ordertype = 2
  1367. USING commit_transaction;
  1368. IF commit_transaction.SQLCode <> 0 THEN
  1369. rslt = 0
  1370. ARG_MSG = "因网络或其它原因导致查询销售订单排产数量操作失败"+"~n"+commit_transaction.SQLErrText
  1371. GOTO ext
  1372. END IF
  1373. IF cnt > 0 THEN
  1374. rslt = 0
  1375. ARG_MSG = "销售订单已经有相关生产计划,不可以撤消审核"
  1376. GOTO ext
  1377. END IF
  1378. cnt = 0
  1379. SELECT count(*)
  1380. INTO :cnt
  1381. FROM u_outware_ll,u_outwaremx_ll
  1382. WHERE ( u_outware_ll.outwareid = u_outwaremx_ll.outwareid ) AND
  1383. ( u_outwaremx_ll.relid = :arg_taskid )
  1384. USING commit_transaction;
  1385. IF commit_transaction.SQLCode <> 0 THEN
  1386. rslt = 0
  1387. ARG_MSG = "因网络或其它原因导致查询销售订单发货数量操作失败"+"~n"+commit_transaction.SQLErrText
  1388. GOTO ext
  1389. END IF
  1390. IF cnt > 0 THEN
  1391. rslt = 0
  1392. ARG_MSG = "销售订单已经有相关出仓单据,不可以撤消审核"
  1393. GOTO ext
  1394. END IF
  1395. SELECT sum(u_saletaskmx_ll.consignedQty)
  1396. INTO :ls_consignedQty
  1397. FROM u_saletaskmx_ll
  1398. WHERE ( u_saletaskmx_ll.TaskID = :arg_taskid ) AND
  1399. ( u_saletaskmx_ll.stopflag = 0 ) USING commit_transaction ;
  1400. IF commit_transaction.SQLCode <> 0 THEN
  1401. rslt = 0
  1402. ARG_MSG = "查询销售订单已完成数量操作失败"+"~n"+SQLCA.SQLErrText
  1403. GOTO ext
  1404. END IF
  1405. IF ls_consignedQty > 0 THEN
  1406. rslt = 0
  1407. ARG_MSG = "销售订单已有完成数量,不能撤审"
  1408. GOTO ext
  1409. END IF
  1410. UPDATE u_SaleTask_ll
  1411. SET Status = 0,
  1412. permit_emp = '',
  1413. permit_date = :nulldate
  1414. WHERE TaskID = :arg_taskid
  1415. AND status = 4
  1416. USING commit_transaction ;
  1417. IF commit_transaction.SQLCode <> 0 THEN
  1418. rslt = 0
  1419. ARG_MSG = "因网络或其它原因导致销售订单撤消审核操作失败"+"~n"+commit_transaction.SQLErrText
  1420. GOTO ext
  1421. ELSEIF commit_transaction.SQLNRows = 0 THEN
  1422. rslt = 0
  1423. ARG_MSG = "单据正在撤审,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  1424. GOTO ext
  1425. END IF
  1426. //默认订单调度
  1427. Long i
  1428. FOR i = 1 TO it_mxbt
  1429. IF p_cprqplan(arg_taskid,saletaskmx[i].printid,0,saletaskmx[i].saleqty,ARG_MSG,FALSE) = 0 THEN
  1430. rslt = 0
  1431. GOTO ext
  1432. END IF
  1433. NEXT
  1434. it_newbegin = FALSE
  1435. it_updatebegin = FALSE
  1436. ext:
  1437. IF rslt = 0 THEN
  1438. ROLLBACK USING commit_transaction;
  1439. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1440. COMMIT USING commit_transaction;
  1441. END IF
  1442. p_reset()
  1443. RETURN (rslt)
  1444. end function
  1445. public function integer updateassignqty (long arg_scid, long arg_taskid, long arg_printid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);
  1446. Int rslt = 1
  1447. Dec ld_SaleQty,ld_AssignQty
  1448. IF p_getinfo(arg_taskid,arg_msg) = 0 THEN
  1449. rslt = 0
  1450. GOTO ext
  1451. END IF
  1452. IF status = 0 THEN
  1453. arg_msg = '订单未审核,不能更新!'
  1454. rslt = 0
  1455. GOTO ext
  1456. END IF
  1457. SELECT SaleQty,
  1458. AssignQty
  1459. INTO :ld_SaleQty,
  1460. :ld_AssignQty
  1461. FROM u_SaleTaskMx_ll
  1462. WHERE taskid = :arg_taskid AND
  1463. printid = :arg_printid USING commit_transaction;
  1464. IF commit_transaction.SQLCode <> 0 THEN
  1465. arg_msg = '查询销售订单已排产数量失败!'+commit_transaction.SQLErrText
  1466. rslt = 0
  1467. GOTO ext
  1468. END IF
  1469. IF ld_SaleQty - ld_AssignQty < arg_qty THEN
  1470. arg_msg = '排产数量大于待生产数!'
  1471. rslt = 0
  1472. GOTO ext
  1473. END IF
  1474. UPDATE u_SaleTaskMx_ll
  1475. SET AssignQty = AssignQty + :arg_qty
  1476. WHERE taskid = :arg_taskid AND
  1477. printid = :arg_printid USING commit_transaction;
  1478. IF commit_transaction.SQLCode <> 0 THEN
  1479. arg_msg = '更新排产数失败>>'+commit_transaction.SQLErrText
  1480. rslt = 0
  1481. GOTO ext
  1482. END IF
  1483. ext:
  1484. IF rslt = 1 AND arg_ifcommit THEN
  1485. COMMIT USING commit_transaction;
  1486. ELSEIF rslt = 0 THEN
  1487. ROLLBACK USING commit_transaction;
  1488. END IF
  1489. RETURN rslt
  1490. end function
  1491. public function integer updatebegin (long arg_taskid, ref string arg_msg);Long rslt = 1,CNT = 0
  1492. IF uo_option_if_oa_saletask = -1000 THEN
  1493. arg_msg = '选项:[043]销售订单使用OA审批流程,读取初始默认值失败,操作取消!'
  1494. rslt = 0
  1495. GOTO ext
  1496. END IF
  1497. IF arg_taskid <= 0 THEN
  1498. rslt = 0
  1499. arg_msg = '错误销售订单唯一码'
  1500. GOTO ext
  1501. END IF
  1502. IF p_getinfo(arg_taskid,arg_msg) = 0 THEN
  1503. rslt = 0
  1504. GOTO ext
  1505. END IF
  1506. IF Status <> 0 THEN
  1507. rslt = 0
  1508. arg_msg = '已经处于审核或完成等状态,不可以修改,如果订单未完成并要修改请先撤销审核'
  1509. GOTO ext
  1510. END IF
  1511. IF uo_option_if_oa_saletask = 1 AND audit_buildtype = 0 THEN
  1512. IF f_check_if_oaflow(scid,arg_taskid,6,arg_msg ) = 0 THEN
  1513. rslt = 0
  1514. GOTO ext
  1515. END IF
  1516. END IF
  1517. it_newbegin = FALSE
  1518. it_updatebegin = TRUE
  1519. p_clearmx() //清除明细
  1520. msttakeamt = 0
  1521. ext:
  1522. IF rslt = 0 THEN p_reset()
  1523. RETURN rslt
  1524. end function
  1525. public function integer trycmplsaletask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1526. Long cnt = 0,ll_status
  1527. DateTime null_dt
  1528. SetNull(null_dt)
  1529. IF arg_taskid <= 0 THEN
  1530. rslt = 0
  1531. arg_msg = '错误销售订单唯一码'
  1532. GOTO ext
  1533. END IF
  1534. IF p_getinfo(arg_taskid,arg_msg) = 0 THEN
  1535. rslt = 0
  1536. GOTO ext
  1537. END IF
  1538. IF status <> 1 AND status <> 5 THEN
  1539. rslt = 0
  1540. IF status <> 1 THEN
  1541. arg_msg = "销售订单只有在进行状态下才可以执行设完成状态"
  1542. ELSEIF status <> 5 THEN
  1543. arg_msg = "销售订单只有在完成状态下才可以执行撤消完成状态"
  1544. END IF
  1545. GOTO ext
  1546. END IF
  1547. Decimal ls_zerook
  1548. Boolean if_finish
  1549. if_finish = TRUE
  1550. DECLARE zero_cur CURSOR FOR
  1551. SELECT u_saletaskmx_ll.usaleqty - u_saletaskmx_ll.consignedqty
  1552. FROM u_saletaskmx_ll
  1553. WHERE ( u_saletaskmx_ll.taskid = :arg_taskid ) AND
  1554. ( u_saletaskmx_ll.stopflag = 0 )
  1555. USING commit_transaction ;
  1556. OPEN zero_cur;
  1557. FETCH zero_cur INTO :ls_zerook;
  1558. DO WHILE commit_transaction.SQLCode = 0
  1559. IF if_finish THEN
  1560. IF ls_zerook > 0 THEN if_finish = FALSE
  1561. END IF
  1562. FETCH zero_cur INTO :ls_zerook;
  1563. LOOP
  1564. CLOSE zero_cur;
  1565. IF status = 1 AND if_finish THEN
  1566. UPDATE u_saletask_ll
  1567. SET status = 5,
  1568. accomplishdate = getdate(),
  1569. finishemp = :publ_operator
  1570. WHERE ( u_saletask_ll.taskid = :arg_taskid )
  1571. USING commit_transaction;
  1572. IF commit_transaction.SQLCode <> 0 THEN
  1573. rslt = 0
  1574. arg_msg = "因网络或其他原因导致销售订单完成状态设置操作失败"+"~n"+commit_transaction.SQLErrText
  1575. ROLLBACK USING commit_transaction;
  1576. GOTO ext
  1577. END IF
  1578. END IF
  1579. IF status = 5 AND NOT if_finish THEN
  1580. UPDATE u_saletask_ll
  1581. SET status = 1,
  1582. accomplishdate = :null_dt,
  1583. finishemp = ''
  1584. WHERE ( u_saletask_ll.taskid = :arg_taskid )
  1585. USING commit_transaction;
  1586. IF commit_transaction.SQLCode <> 0 THEN
  1587. rslt = 0
  1588. arg_msg = "因网络或其他原因导致销售订单撤消完成状态设置操作失败"+"~n"+commit_transaction.SQLErrText
  1589. ROLLBACK USING commit_transaction;
  1590. GOTO ext
  1591. END IF
  1592. END IF
  1593. it_newbegin = FALSE
  1594. it_updatebegin = FALSE
  1595. ext:
  1596. IF rslt = 0 THEN
  1597. ROLLBACK USING commit_transaction;
  1598. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1599. COMMIT USING commit_transaction;
  1600. END IF
  1601. p_reset()
  1602. RETURN (rslt)
  1603. end function
  1604. public function integer tempstoptask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  1605. IF arg_taskid <= 0 THEN
  1606. rslt = 0
  1607. ARG_MSG = '错误销售订单唯一码'
  1608. GOTO ext
  1609. END IF
  1610. IF p_getinfo(arg_taskid,ARG_MSG) = 0 THEN
  1611. rslt = 0
  1612. GOTO ext
  1613. END IF
  1614. IF Status <> 1 AND Status <> 2 THEN
  1615. rslt = 0
  1616. ARG_MSG = "订单只有在进行状态或暂停状态才可以执行暂停/取消暂停操作"
  1617. GOTO ext
  1618. END IF
  1619. IF Status = 1 THEN
  1620. UPDATE u_SaleTask_ll
  1621. SET Status = 2,stopemp = :publ_operator
  1622. Where TaskID = :arg_taskid
  1623. USING commit_transaction;
  1624. IF commit_transaction.SQLCode <> 0 THEN
  1625. rslt = 0
  1626. ARG_MSG = "因网络或其它原因导致暂停销售订单操作失败"+"~n"+commit_transaction.SQLErrText
  1627. GOTO ext
  1628. END IF
  1629. ELSE
  1630. UPDATE u_SaleTask_ll
  1631. SET Status = 1,stopemp = ''
  1632. Where TaskID = :arg_taskid
  1633. USING commit_transaction ;
  1634. IF commit_transaction.SQLCode <> 0 THEN
  1635. rslt = 0
  1636. ARG_MSG = "因网络或其它原因导致取消暂停销售订单操作失败"+"~n"+commit_transaction.SQLErrText
  1637. GOTO ext
  1638. END IF
  1639. END IF
  1640. it_newbegin = FALSE
  1641. it_updatebegin = FALSE
  1642. ext:
  1643. IF rslt = 0 THEN
  1644. ROLLBACK USING commit_transaction;
  1645. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1646. COMMIT USING commit_transaction;
  1647. END IF
  1648. p_reset()
  1649. Return (rslt)
  1650. end function
  1651. public function integer stopsaletask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  1652. IF uo_option_if_oa_saletask = -1000 THEN
  1653. arg_msg = '选项:[043]销售订单使用OA审批流程,读取初始默认值失败,操作取消!'
  1654. rslt = 0
  1655. GOTO ext
  1656. END IF
  1657. IF arg_taskid <= 0 THEN
  1658. rslt = 0
  1659. ARG_MSG = '错误销售订单唯一码'
  1660. GOTO ext
  1661. END IF
  1662. IF p_getinfo(arg_taskid,ARG_MSG) = 0 THEN
  1663. rslt = 0
  1664. GOTO ext
  1665. END IF
  1666. IF Status <> 1 THEN
  1667. rslt = 0
  1668. ARG_MSG = "订单只有在进行状态才可以执行终止,请核对"
  1669. GOTO ext
  1670. END IF
  1671. IF uo_option_if_oa_saletask = 1 AND audit_buildtype = 0 THEN
  1672. IF f_check_if_oaflow(scid,arg_taskid,6,ARG_MSG ) = 0 THEN
  1673. rslt = 0
  1674. GOTO ext
  1675. END IF
  1676. END IF
  1677. UPDATE u_SaleTask_ll
  1678. SET Status = 3,
  1679. accomplishdate = getdate() ,
  1680. stopemp = :publ_operator
  1681. WHERE TaskID = :arg_taskid
  1682. USING commit_transaction ;
  1683. IF commit_transaction.SQLCode <> 0 THEN
  1684. rslt = 0
  1685. ARG_MSG = "因网络或其它原因导致终止销售订单操作失败"+"~n"+commit_transaction.SQLErrText
  1686. GOTO ext
  1687. END IF
  1688. it_newbegin = FALSE
  1689. it_updatebegin = FALSE
  1690. ext:
  1691. IF rslt = 0 THEN
  1692. ROLLBACK USING commit_transaction;
  1693. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1694. COMMIT USING commit_transaction;
  1695. END IF
  1696. p_reset()
  1697. RETURN (rslt)
  1698. end function
  1699. public function integer stopmx (long arg_taskid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, ref string arg_msg, boolean arg_commit);Int rslt = 1
  1700. Int li_flag,li_bjflag
  1701. string ls_outtype
  1702. DateTime null_dt
  1703. Decimal ld_notconsignedqty
  1704. SetNull(null_dt)
  1705. IF p_getinfo(arg_taskid,arg_msg) = 0 THEN
  1706. rslt = 0
  1707. GOTO ext
  1708. END IF
  1709. IF status <> 1 THEN
  1710. arg_msg = '订单只能在进行状态下才能操作'
  1711. rslt = 0
  1712. GOTO ext
  1713. END IF
  1714. SELECT stopflag,outtypestr INTO :li_flag,:ls_outtype
  1715. FROM u_saletaskmx_ll
  1716. WHERE taskid = :arg_taskid
  1717. AND printid = :arg_printid;
  1718. IF sqlca.SQLCode <> 0 THEN
  1719. arg_msg = '查询明细物料'+arg_mtrlcode+'中止标记失败'
  1720. rslt = 0
  1721. GOTO ext
  1722. END IF
  1723. IF arg_flag = 0 THEN
  1724. IF li_flag = 0 THEN
  1725. arg_msg = '明细物料'+arg_mtrlcode+'还未中止,不能取消中止'
  1726. rslt = 0
  1727. GOTO ext
  1728. END IF
  1729. ELSE
  1730. IF li_flag = 1 THEN
  1731. arg_msg = '明细物料'+arg_mtrlcode+'已中止,不能重复中止'
  1732. rslt = 0
  1733. GOTO ext
  1734. END IF
  1735. END IF
  1736. IF arg_flag = 1 THEN
  1737. SELECT u_saletaskmx_ll.usaleQty - u_saletaskmx_ll.consignedqty
  1738. INTO :ld_notconsignedqty
  1739. FROM u_saletaskmx_ll
  1740. WHERE taskid = :arg_taskid
  1741. AND printid = :arg_printid;
  1742. IF sqlca.SQLCode <> 0 THEN
  1743. arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败'
  1744. rslt = 0
  1745. GOTO ext
  1746. END IF
  1747. IF ld_notconsignedqty <= 0 THEN
  1748. arg_msg = '明细物料'+arg_mtrlcode+'已完成收货,不能中止'
  1749. rslt = 0
  1750. GOTO ext
  1751. END IF
  1752. if ls_outtype = '补件' and li_bjflag = 1 then
  1753. arg_msg = '该明细内容为补件明细,并已审核,不能中止'
  1754. rslt = 0
  1755. goto ext
  1756. end if
  1757. END IF
  1758. IF arg_flag = 0 THEN
  1759. UPDATE u_saletaskmx_ll
  1760. SET stopflag = 0,
  1761. stopemp = '',
  1762. stopdate = :null_dt,
  1763. stopreason = ''
  1764. WHERE taskid = :arg_taskid
  1765. AND printid = :arg_printid;
  1766. ELSE
  1767. UPDATE u_saletaskmx_ll
  1768. SET stopflag = 1,
  1769. stopemp = :publ_operator,
  1770. stopdate = getdate(),
  1771. stopreason = :arg_stopreason
  1772. WHERE taskid = :arg_taskid
  1773. AND printid = :arg_printid;
  1774. END IF
  1775. IF sqlca.SQLCode <> 0 THEN
  1776. arg_msg = '更新明细'+arg_mtrlcode+'中止标记失败,'+sqlca.SQLErrText
  1777. rslt = 0
  1778. GOTO ext
  1779. END IF
  1780. IF trycmplsaletask(arg_taskid,arg_msg,FALSE) = 0 THEN
  1781. rslt = 0
  1782. GOTO ext
  1783. END IF
  1784. ext:
  1785. IF rslt = 0 THEN
  1786. ROLLBACK;
  1787. ELSEIF rslt = 1 AND arg_commit THEN
  1788. COMMIT;
  1789. END IF
  1790. RETURN rslt
  1791. end function
  1792. public function integer salepermit (long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  1793. IF uo_option_saletask_secaudit = -1000 THEN
  1794. arg_msg = '选项:[035]销售订单使用二级审核,读取初始默认值失败,操作取消!'
  1795. rslt = 0
  1796. GOTO ext
  1797. END IF
  1798. IF uo_option_if_oa_saletask = -1000 THEN
  1799. arg_msg = '选项:[043]销售订单使用OA审批流程,读取初始默认值失败,操作取消!'
  1800. rslt = 0
  1801. GOTO ext
  1802. END IF
  1803. IF uo_option_if_msg = -1000 THEN
  1804. arg_msg = '选项:[044]销售订单使用消息确认,读取初始默认值失败,操作取消!'
  1805. rslt = 0
  1806. GOTO ext
  1807. END IF
  1808. IF uo_option_saletask_addware = -1000 THEN
  1809. arg_msg = '选项:[039]销售订单审核自动加0库存,读取初始默认值失败,操作取消!'
  1810. rslt = 0
  1811. GOTO ext
  1812. END IF
  1813. IF arg_taskid <= 0 THEN
  1814. rslt = 0
  1815. arg_msg = '错误销售订单唯一码'
  1816. GOTO ext
  1817. END IF
  1818. IF getinfo(arg_taskid,arg_msg) = 0 THEN
  1819. rslt = 0
  1820. GOTO ext
  1821. END IF
  1822. IF status <> 0 THEN
  1823. rslt = 0
  1824. arg_msg = "订单已经审核或已作其它处理,操作取消"
  1825. GOTO ext
  1826. END IF
  1827. //IF sys_option_if_oa = 1 AND audit_buildtype = 0 THEN
  1828. // IF f_check_if_oaflow(arg_scid,arg_taskid,6,arg_msg ) = 0 THEN
  1829. // rslt = 0
  1830. // GOTO ext
  1831. // END IF
  1832. //END IF
  1833. IF uof_p_check_dprice(arg_msg) = 0 THEN
  1834. rslt = 0
  1835. GOTO ext
  1836. END IF
  1837. cnt = 0
  1838. SELECT count(*) INTO :cnt
  1839. FROM u_user
  1840. Where username = :arg_emp USING commit_transaction;
  1841. IF commit_transaction.SQLCode <> 0 THEN
  1842. rslt = 0
  1843. arg_msg = "查询操作失败,操作员!"
  1844. GOTO ext
  1845. END IF
  1846. IF cnt = 0 THEN
  1847. rslt = 0
  1848. arg_msg = "操作员姓名未登记或已取消!"
  1849. GOTO ext
  1850. END IF
  1851. IF uo_option_saletask_secaudit = 0 THEN
  1852. UPDATE u_saletask_ll
  1853. SET permit_emp = :arg_emp ,
  1854. permit_date = getdate(),
  1855. p_Auditingdate = getdate(),
  1856. p_Auditingrep = :arg_emp,
  1857. status = 1
  1858. WHERE taskid = :arg_taskid
  1859. AND status = 0
  1860. USING commit_transaction;
  1861. IF commit_transaction.SQLCode <> 0 THEN
  1862. rslt = 0
  1863. arg_msg = "因网络或其它原因导致订单审核操作失败"+"~n"+commit_transaction.SQLErrText
  1864. GOTO ext
  1865. ELSEIF commit_transaction.SQLNRows = 0 THEN
  1866. rslt = 0
  1867. arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  1868. GOTO ext
  1869. END IF
  1870. ELSE
  1871. UPDATE u_saletask_ll
  1872. SET permit_emp = :arg_emp ,
  1873. permit_date = getdate(),
  1874. status = 4
  1875. WHERE taskid = :arg_taskid
  1876. AND status = 0
  1877. USING commit_transaction;
  1878. IF commit_transaction.SQLCode <> 0 THEN
  1879. rslt = 0
  1880. arg_msg = "因网络或其它原因导致订单审核操作失败"+"~n"+commit_transaction.SQLErrText
  1881. GOTO ext
  1882. ELSEIF commit_transaction.SQLNRows = 0 THEN
  1883. rslt = 0
  1884. arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  1885. GOTO ext
  1886. END IF
  1887. END IF
  1888. //成品仓加0库存
  1889. //-----------------------------------------------
  1890. IF uo_option_saletask_addware = 1 AND Kind > 0 THEN
  1891. Long ll_storageid_arr[],ll_storageid
  1892. Long ll_scid_arr[],ll_scid
  1893. String ll_storagename_arr[],ls_storagename
  1894. Long ll_j,count,ll_i
  1895. Int li_balctype_arr[],li_balctype
  1896. Long ll_cusid
  1897. String ls_status,ls_mtrlcode,ls_pcode,ls_woodcode,ls_plancode
  1898. Long ll_mtrlwareid,ll_mtrlid
  1899. DECLARE pf_cur CURSOR FOR
  1900. SELECT u_storage.storageid,
  1901. u_storage.storagename,
  1902. u_storage.scid,
  1903. u_storage.balctype
  1904. FROM u_storage
  1905. Where ( u_storage.mtrlprp = 0 );
  1906. OPEN pf_cur;
  1907. FETCH pf_cur INTO :ll_storageid,:ls_storagename,:ll_scid,:li_balctype;
  1908. DO WHILE sqlca.SQLCode = 0
  1909. count++
  1910. ll_storageid_arr[count] = ll_storageid
  1911. ll_storagename_arr[count] = ls_storagename
  1912. ll_scid_arr[count] = ll_scid
  1913. li_balctype_arr[count] = li_balctype
  1914. FETCH pf_cur INTO :ll_storageid,:ls_storagename,:ll_scid,:li_balctype;
  1915. LOOP
  1916. CLOSE pf_cur;
  1917. FOR ll_i = 1 TO it_mxbt
  1918. ll_mtrlid = saletaskmx[ll_i].mtrlid
  1919. ls_mtrlcode = saletaskmx[ll_i].mtrlcode
  1920. ls_status = saletaskmx[ll_i].status
  1921. ls_pcode = saletaskmx[ll_i].pcode
  1922. ls_woodcode = saletaskmx[ll_i].woodcode
  1923. ls_plancode = saletaskmx[ll_i].mtrlcuscode
  1924. FOR ll_j = 1 TO count
  1925. IF li_balctype_arr[ll_j] = 1 THEN
  1926. ll_cusid = cusid
  1927. ELSE
  1928. ll_cusid = 0
  1929. END IF
  1930. SELECT top 1 mtrlwareid INTO :ll_mtrlwareid
  1931. FROM u_mtrlware
  1932. WHERE mtrlid = :ll_mtrlid
  1933. AND status = :ls_status
  1934. AND storageid = :ll_storageid_arr[ll_j]
  1935. AND woodcode = :ls_woodcode
  1936. AND plancode = :ls_plancode
  1937. AND pcode = :ls_pcode
  1938. AND sptid = :ll_cusid;
  1939. IF sqlca.SQLCode = -1 THEN
  1940. arg_msg = '查询:'+ls_mtrlcode+'仓库:'+ll_storagename_arr[ll_j]+'库存失败'
  1941. rslt = 0
  1942. GOTO ext
  1943. ELSEIF sqlca.SQLCode = 100 THEN
  1944. ll_mtrlwareid = 0
  1945. ll_mtrlwareid = f_sys_scidentity(ll_scid_arr[ll_j],"u_mtrlware","mtrlwareid",arg_msg,TRUE,id_sqlca)
  1946. IF ll_mtrlwareid <= 0 THEN
  1947. rslt = 0
  1948. GOTO ext
  1949. END IF
  1950. INSERT INTO u_mtrlware(scid,mtrlwareid,mtrlid,storageid,noallocqty,status,plancode,woodcode,pcode,sptid)
  1951. Values(:ll_scid_arr[ll_j],:ll_mtrlwareid,:ll_mtrlid,:ll_storageid_arr[ll_j],0,:ls_status,:ls_plancode,:ls_woodcode,:ls_pcode,:ll_cusid);
  1952. IF sqlca.SQLCode <> 0 THEN
  1953. arg_msg = '产品:'+ls_mtrlcode+'仓库:'+ll_storagename_arr[ll_j]+'加0库存失败或物料已经有库存,请检查'
  1954. rslt = 0
  1955. GOTO ext
  1956. END IF
  1957. END IF
  1958. NEXT
  1959. NEXT
  1960. END IF
  1961. IF uo_option_if_msg = 1 THEN
  1962. IF f_billmsg(scid,taskcode,taskcode+'销售订单确认',taskcode+'销售订单确认',commit_transaction,arg_msg,FALSE) = 0 THEN
  1963. rslt = 0
  1964. GOTO ext
  1965. END IF
  1966. END IF
  1967. //默认订单调度
  1968. Long i
  1969. IF uo_option_saletask_secaudit = 0 THEN
  1970. FOR i = 1 TO it_mxbt
  1971. IF p_cprqplan(arg_taskid,saletaskmx[i].printid,1,saletaskmx[i].saleqty,arg_msg,FALSE) = 0 THEN
  1972. rslt = 0
  1973. GOTO ext
  1974. END IF
  1975. NEXT
  1976. END IF
  1977. IF uo_option_if_oa_saletask = 1 AND uo_option_saletask_secaudit = 1 THEN
  1978. IF f_oa(commit_transaction,FALSE,arg_msg,6,scid,taskid,taskcode,relcode,dscrp) = 0 THEN
  1979. rslt = 0
  1980. GOTO ext
  1981. END IF
  1982. END IF
  1983. it_newbegin = FALSE
  1984. it_updatebegin = FALSE
  1985. ext:
  1986. IF rslt = 0 THEN
  1987. ROLLBACK USING commit_transaction;
  1988. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1989. COMMIT USING commit_transaction;
  1990. END IF
  1991. p_reset()
  1992. RETURN rslt
  1993. end function
  1994. public function integer propermit (long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);//salepermit
  1995. Int rslt = 1,cnt = 0
  1996. IF uo_option_saletask_secaudit = -1000 THEN
  1997. arg_msg = '选项:[035]销售订单使用二级审核,读取初始默认值失败,操作取消!'
  1998. rslt = 0
  1999. GOTO ext
  2000. END IF
  2001. IF uo_option_if_oa_saletask = -1000 THEN
  2002. arg_msg = '选项:[043]销售订单使用OA审批流程,读取初始默认值失败,操作取消!'
  2003. rslt = 0
  2004. GOTO ext
  2005. END IF
  2006. IF uo_option_saletask_fore_secaudit = -1000 THEN
  2007. arg_msg = '选项:[088]销售预测单二级审核,读取初始默认值失败,操作取消!'
  2008. rslt = 0
  2009. GOTO ext
  2010. END IF
  2011. IF arg_taskid <= 0 THEN
  2012. rslt = 0
  2013. arg_msg = '错误销售订单唯一码'
  2014. GOTO ext
  2015. END IF
  2016. IF getinfo(arg_taskid,arg_msg) = 0 THEN
  2017. rslt = 0
  2018. GOTO ext
  2019. END IF
  2020. IF status <> 4 THEN
  2021. rslt = 0
  2022. arg_msg = "订单不是在待生产审状态,操作取消"
  2023. GOTO ext
  2024. END IF
  2025. IF Kind <> 0 THEN
  2026. IF uo_option_if_oa_saletask = 1 AND uo_option_saletask_fore_secaudit = 1 AND audit_buildtype = 0 THEN
  2027. IF f_check_if_oaflow(scid,arg_taskid,6,arg_msg ) = 0 THEN
  2028. rslt = 0
  2029. GOTO ext
  2030. END IF
  2031. END IF
  2032. END IF
  2033. Long i
  2034. FOR i = 1 TO it_mxbt
  2035. IF p_cprqplan(arg_taskid,saletaskmx[i].printid,1,saletaskmx[i].saleqty,arg_msg,FALSE) = 0 THEN
  2036. rslt = 0
  2037. GOTO ext
  2038. END IF
  2039. NEXT
  2040. cnt = 0
  2041. SELECT count(*) INTO :cnt
  2042. FROM u_user
  2043. Where username = :arg_emp USING commit_transaction;
  2044. IF commit_transaction.SQLCode <> 0 THEN
  2045. rslt = 0
  2046. arg_msg = "查询操作失败,操作员!"
  2047. GOTO ext
  2048. END IF
  2049. IF cnt = 0 THEN
  2050. rslt = 0
  2051. arg_msg = "操作员姓名未登记或已取消!"
  2052. GOTO ext
  2053. END IF
  2054. UPDATE u_saletask_ll
  2055. SET p_Auditingdate = getdate(),
  2056. p_Auditingrep = :arg_emp,
  2057. status = 1
  2058. WHERE taskid = :arg_taskid
  2059. AND status = 4
  2060. USING commit_transaction;
  2061. IF commit_transaction.SQLCode <> 0 THEN
  2062. rslt = 0
  2063. arg_msg = "因网络或其它原因导致订单生产审核操作失败"+"~n"+commit_transaction.SQLErrText
  2064. GOTO ext
  2065. ELSEIF commit_transaction.SQLNRows = 0 THEN
  2066. rslt = 0
  2067. arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  2068. GOTO ext
  2069. END IF
  2070. it_newbegin = FALSE
  2071. it_updatebegin = FALSE
  2072. ext:
  2073. IF rslt = 0 THEN
  2074. ROLLBACK USING commit_transaction;
  2075. ELSEIF arg_ifcommit AND rslt = 1 THEN
  2076. COMMIT USING commit_transaction;
  2077. END IF
  2078. p_reset()
  2079. Return (rslt)
  2080. end function
  2081. public function integer trycmptask_fore (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);//trycmplsaletask(arg_taskid,arg_msg,arg_ifcommit)
  2082. Int rslt = 1,cnt = 0,ll_status
  2083. DateTime null_dt
  2084. SetNull(null_dt)
  2085. IF arg_taskid <= 0 THEN
  2086. rslt = 0
  2087. arg_msg = '错误销售订单唯一码'
  2088. GOTO ext
  2089. END IF
  2090. IF p_getinfo(arg_taskid,arg_msg) = 0 THEN
  2091. rslt = 0
  2092. GOTO ext
  2093. END IF
  2094. IF Kind <> 0 THEN
  2095. rslt = 0
  2096. arg_msg = '不是销售预测单不能按进仓数来完成单据'
  2097. GOTO ext
  2098. END IF
  2099. IF status <> 1 AND status <> 5 THEN
  2100. rslt = 0
  2101. IF status <> 1 THEN
  2102. arg_msg = "销售订单只有在进行状态下才可以执行设完成状态"
  2103. ELSEIF status <> 5 THEN
  2104. arg_msg = "销售订单只有在完成状态下才可以执行撤消完成状态"
  2105. END IF
  2106. GOTO ext
  2107. END IF
  2108. Decimal ls_zerook
  2109. Boolean if_finish
  2110. if_finish = TRUE
  2111. DECLARE zero_cur CURSOR FOR
  2112. SELECT u_saletaskmx.saleqty - u_saletaskmx.inwareqty
  2113. FROM u_saletaskmx
  2114. WHERE ( u_saletaskmx.taskid = :arg_taskid ) AND
  2115. ( u_saletaskmx.stopflag = 0 )
  2116. USING commit_transaction ;
  2117. OPEN zero_cur;
  2118. FETCH zero_cur INTO :ls_zerook;
  2119. DO WHILE commit_transaction.SQLCode = 0
  2120. IF if_finish THEN
  2121. IF ls_zerook > 0 THEN if_finish = FALSE
  2122. END IF
  2123. FETCH zero_cur INTO :ls_zerook;
  2124. LOOP
  2125. CLOSE zero_cur;
  2126. IF status = 1 AND if_finish THEN
  2127. UPDATE u_saletask
  2128. SET status = 5,
  2129. accomplishdate = getdate(),
  2130. finishemp = :publ_operator
  2131. WHERE ( u_saletask.taskid = :arg_taskid )
  2132. USING commit_transaction;
  2133. IF commit_transaction.SQLCode <> 0 THEN
  2134. rslt = 0
  2135. arg_msg = "因网络或其他原因导致销售订单完成状态设置操作失败"+"~n"+commit_transaction.SQLErrText
  2136. ROLLBACK USING commit_transaction;
  2137. GOTO ext
  2138. END IF
  2139. END IF
  2140. IF status = 5 AND NOT if_finish THEN
  2141. UPDATE u_saletask
  2142. SET status = 1,
  2143. accomplishdate = :null_dt,
  2144. finishemp = ''
  2145. WHERE ( u_saletask.taskid = :arg_taskid )
  2146. USING commit_transaction;
  2147. IF commit_transaction.SQLCode <> 0 THEN
  2148. rslt = 0
  2149. arg_msg = "因网络或其他原因导致销售订单撤消完成状态设置操作失败"+"~n"+commit_transaction.SQLErrText
  2150. ROLLBACK USING commit_transaction;
  2151. GOTO ext
  2152. END IF
  2153. END IF
  2154. it_newbegin = FALSE
  2155. it_updatebegin = FALSE
  2156. ext:
  2157. IF rslt = 0 THEN
  2158. ROLLBACK USING commit_transaction;
  2159. ELSEIF arg_ifcommit AND rslt = 1 THEN
  2160. COMMIT USING commit_transaction;
  2161. END IF
  2162. p_reset()
  2163. Return (rslt)
  2164. end function
  2165. public function integer add_dscrp (long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  2166. arg_newdescppart = Trim(arg_newdescppart)
  2167. IF it_updatebegin OR it_newbegin THEN
  2168. rslt = 0
  2169. arG_MSG = "编辑状态下不可用"
  2170. GOTO ext
  2171. END IF
  2172. IF arg_newdescppart = '' THEN
  2173. rslt = 0
  2174. arG_MSG = "要添加内容为空,操作取消"
  2175. GOTO ext
  2176. END IF
  2177. IF p_getinfo(arg_taskid,arG_MSG) = 0 THEN
  2178. rslt = 0
  2179. GOTO ext
  2180. END IF
  2181. IF status = 0 THEN
  2182. rslt = 0
  2183. arG_MSG = "待销售审核状态下不可用"
  2184. GOTO ext
  2185. END IF
  2186. UPDATE u_saletask_ll
  2187. SET DSCRP = DSCRP+' '+:arg_newdescppart
  2188. Where u_saletask_ll.taskid = :arg_taskid
  2189. USING commit_transaction ;
  2190. IF commit_transaction.SQLCode <> 0 THEN
  2191. rslt = 0
  2192. arG_MSG = "因网络或其它原因导致添加销售订单备注操作失败"+"~n"+ commit_transaction.SQLErrText
  2193. GOTO ext
  2194. END IF
  2195. DSCRP = DSCRP+' '+arg_newdescppart
  2196. it_newbegin = FALSE
  2197. it_updatebegin = FALSE
  2198. ext:
  2199. IF rslt = 0 THEN
  2200. ROLLBACK USING commit_transaction;
  2201. ELSEIF arg_ifcommit THEN
  2202. COMMIT USING commit_transaction;
  2203. END IF
  2204. p_reset()
  2205. RETURN (rslt)
  2206. end function
  2207. public function integer ddpermit (long arg_taskid, long arg_printid, integer arg_flag, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  2208. Int li_ddflag,li_stopflag
  2209. Long ll_mtrlid,ll_scid
  2210. Decimal ld_bqty
  2211. DateTime ldt_null
  2212. SetNull(ldt_null)
  2213. IF uo_option_autocreate_buy_cp = -1000 THEN
  2214. arg_msg = '选项:[113]销售订单调度审核自动建立成品申购单,读取初始默认值失败,操作取消!'
  2215. rslt = 0
  2216. GOTO ext
  2217. END IF
  2218. uo_requestbuy uo_rqbuy
  2219. uo_rqbuy = CREATE uo_requestbuy
  2220. SELECT u_saletaskmx_ll.mtrlid,
  2221. u_saletaskmx_ll.ddflag,
  2222. u_saletaskmx_ll.stopflag,
  2223. u_saletask_ll.scid
  2224. INTO :ll_mtrlid,
  2225. :li_ddflag,
  2226. :li_stopflag,
  2227. :ll_scid
  2228. FROM u_saletaskmx_ll,u_saletask_ll
  2229. WHERE u_saletaskmx_ll.taskid = u_saletask_ll.taskid
  2230. AND u_saletaskmx_ll.taskid = :arg_taskid
  2231. AND u_saletaskmx_ll.printid = :arg_printid USING commit_transaction;
  2232. IF commit_transaction.SQLCode <> 0 THEN
  2233. rslt = 0
  2234. arg_msg = '查询订单产品明细失败 '+SQLCA.SQLErrText
  2235. GOTO ext
  2236. END IF
  2237. IF li_stopflag = 1 THEN
  2238. rslt = 0
  2239. arg_msg = '该订单明细已经终止,不能再调度审核'
  2240. GOTO ext
  2241. END IF
  2242. Int li_ifautodd
  2243. SELECT ifautodd INTO :li_ifautodd
  2244. FROM u_mtrldef
  2245. Where mtrlid = :ll_mtrlid ;
  2246. IF commit_transaction.SQLCode <> 0 THEN
  2247. arg_msg = '查询订单明细物料是否自动调度失败,'+SQLCA.SQLErrText
  2248. rslt = 0
  2249. GOTO ext
  2250. END IF
  2251. IF li_ifautodd = 0 THEN
  2252. IF arg_flag = 0 THEN
  2253. IF li_ddflag = 1 THEN
  2254. rslt = 0
  2255. arg_msg = '该订单明细已经调度审核'
  2256. GOTO ext
  2257. END IF
  2258. ELSE
  2259. IF li_ddflag = 0 THEN
  2260. rslt = 0
  2261. arg_msg = '该订单明细未调度审核'
  2262. GOTO ext
  2263. END IF
  2264. END IF
  2265. END IF
  2266. IF arg_flag = 0 THEN
  2267. IF uo_option_autocreate_buy_cp = 1 THEN
  2268. ld_bqty = 0
  2269. SELECT bqty INTO :ld_bqty
  2270. FROM u_saletaskmx_ll
  2271. WHERE taskid = :arg_taskid
  2272. AND printid = :arg_printid USING commit_transaction;
  2273. IF commit_transaction.SQLCode <> 0 THEN
  2274. rslt = 0
  2275. arg_msg = '查询订单明细安排采购数量失败 ' + SQLCA.SQLErrText
  2276. GOTO ext
  2277. END IF
  2278. IF ld_bqty > 0 THEN
  2279. Long ll_cusid
  2280. String ls_mtrlcode,ls_status,ls_woodcode,ls_pcode,ls_unit
  2281. SELECT u_saletaskmx_ll.mtrlid,
  2282. u_saletaskmx_ll.status,
  2283. u_saletaskmx_ll.woodcode,
  2284. u_saletaskmx_ll.pcode,
  2285. u_mtrldef.mtrlcode,
  2286. u_mtrldef.unit,
  2287. u_saletask_ll.cusid
  2288. INTO :ll_mtrlid,
  2289. :ls_status,
  2290. :ls_woodcode,
  2291. :ls_pcode,
  2292. :ls_mtrlcode,
  2293. :ls_unit,
  2294. :ll_cusid
  2295. FROM u_saletaskmx_ll,
  2296. u_mtrldef,
  2297. u_saletask_ll
  2298. WHERE u_saletaskmx_ll.mtrlid = u_mtrldef.mtrlid
  2299. AND u_saletask_ll.taskid = u_saletaskmx_ll.taskid
  2300. AND u_saletaskmx_ll.taskid = :arg_taskid
  2301. AND u_saletaskmx_ll.printid = :arg_printid USING commit_transaction;
  2302. IF commit_transaction.SQLCode <> 0 THEN
  2303. rslt = 0
  2304. arg_msg = '查询订单明细内容失败 ' + SQLCA.SQLErrText
  2305. GOTO ext
  2306. END IF
  2307. s_requestbuy arg_s_rqbuy
  2308. arg_s_rqbuy.scid = ll_scid
  2309. arg_s_rqbuy.requestbuyid = 0
  2310. arg_s_rqbuy.requestbuydate = DateTime(Today(),Time(0))
  2311. arg_s_rqbuy.assign_emp = publ_operator
  2312. arg_s_rqbuy.relcode = ''
  2313. arg_s_rqbuy.dscrp = ''
  2314. arg_s_rqbuy.ifauto = 1
  2315. arg_s_rqbuy.billtype = 1
  2316. arg_s_rqbuy.arg_s_rqbuymx[1].mtrlcode = ls_mtrlcode
  2317. arg_s_rqbuy.arg_s_rqbuymx[1].uqty = ld_bqty
  2318. arg_s_rqbuy.arg_s_rqbuymx[1].unit = ls_unit
  2319. arg_s_rqbuy.arg_s_rqbuymx[1].status = ls_status
  2320. arg_s_rqbuy.arg_s_rqbuymx[1].woodcode = ls_woodcode
  2321. arg_s_rqbuy.arg_s_rqbuymx[1].pcode = ls_pcode
  2322. arg_s_rqbuy.arg_s_rqbuymx[1].mxdscrp = ''
  2323. arg_s_rqbuy.arg_s_rqbuymx[1].mtrlid = ll_mtrlid
  2324. arg_s_rqbuy.arg_s_rqbuymx[1].orderid = arg_taskid
  2325. arg_s_rqbuy.arg_s_rqbuymx[1].wrkgrpid = 0
  2326. arg_s_rqbuy.arg_s_rqbuymx[1].ifrel = 1
  2327. arg_s_rqbuy.arg_s_rqbuymx[1].printid = 1
  2328. arg_s_rqbuy.arg_s_rqbuymx[1].rate = 1
  2329. arg_s_rqbuy.arg_s_rqbuymx[1].dftsptid = ll_cusid
  2330. arg_s_rqbuy.arg_s_rqbuymx[1].relprintid = arg_printid
  2331. IF uo_rqbuy.Save(arg_s_rqbuy,publ_operator,arg_msg,FALSE) = 0 THEN
  2332. rslt = 0
  2333. GOTO ext
  2334. END IF
  2335. IF uo_rqbuy.audit(ll_scid,uo_rqbuy.uo_requestbuyid,publ_operator,arg_msg,FALSE) = 0 THEN
  2336. rslt = 0
  2337. GOTO ext
  2338. END IF
  2339. IF uo_rqbuy.audit_2(ll_scid,uo_rqbuy.uo_requestbuyid,publ_operator,arg_msg,FALSE) = 0 THEN
  2340. rslt = 0
  2341. GOTO ext
  2342. END IF
  2343. END IF
  2344. END IF
  2345. UPDATE u_saletaskmx_ll
  2346. SET ddflag = 1,
  2347. dddate = getdate(),
  2348. ddemp = :publ_operator
  2349. WHERE ddflag = 0
  2350. AND taskid = :arg_taskid
  2351. AND printid = :arg_printid USING commit_transaction;
  2352. IF commit_transaction.SQLCode <> 0 THEN
  2353. rslt = 0
  2354. arg_msg = '更新订单明细调度审核标记失败 ' + SQLCA.SQLErrText
  2355. GOTO ext
  2356. END IF
  2357. ELSE
  2358. IF uo_option_autocreate_buy_cp = 1 THEN
  2359. Long ll_requestbuyid[]
  2360. Long ll_i,i
  2361. i = 1
  2362. DECLARE cur_rqbuy CURSOR FOR
  2363. SELECT u_requestbuy.requestbuyid
  2364. FROM u_requestbuymx,u_requestbuy
  2365. WHERE u_requestbuymx.requestbuyid = u_requestbuy.requestbuyid
  2366. AND u_requestbuy.scid = :ll_scid
  2367. AND u_requestbuymx.orderid = :arg_taskid
  2368. AND u_requestbuymx.relprintid = :arg_printid
  2369. AND u_requestbuy.billtype = 1 USING commit_transaction;
  2370. OPEN cur_rqbuy;
  2371. FETCH cur_rqbuy INTO :ll_requestbuyid[i];
  2372. DO WHILE commit_transaction.SQLCode = 0
  2373. i++
  2374. FETCH cur_rqbuy INTO :ll_requestbuyid[i];
  2375. LOOP
  2376. CLOSE cur_rqbuy;
  2377. FOR ll_i = 1 TO i - 1
  2378. IF uo_rqbuy.caudit_2(ll_scid,ll_requestbuyid[ll_i],0,arg_msg,FALSE) = 0 THEN
  2379. rslt = 0
  2380. GOTO ext
  2381. END IF
  2382. IF uo_rqbuy.caudit(ll_scid,ll_requestbuyid[ll_i],0,arg_msg,FALSE) = 0 THEN
  2383. rslt = 0
  2384. GOTO ext
  2385. END IF
  2386. IF uo_rqbuy.del(ll_scid,ll_requestbuyid[ll_i],0,arg_msg,FALSE) = 0 THEN
  2387. rslt = 0
  2388. GOTO ext
  2389. END IF
  2390. NEXT
  2391. ELSE
  2392. //检查申购单
  2393. SELECT count(*) INTO :cnt
  2394. FROM u_requestbuymx,u_requestbuy
  2395. WHERE u_requestbuymx.requestbuyid = u_requestbuy.requestbuyid
  2396. AND u_requestbuy.scid = :ll_scid
  2397. AND u_requestbuymx.orderid = :arg_taskid
  2398. AND u_requestbuymx.relprintid = :arg_printid
  2399. AND u_requestbuy.billtype = 1 USING commit_transaction;
  2400. IF commit_transaction.SQLCode <> 0 THEN
  2401. rslt = 0
  2402. arg_msg = '查询订单相关成品申购单失败'
  2403. GOTO ext
  2404. END IF
  2405. IF cnt <> 0 THEN
  2406. rslt = 0
  2407. arg_msg = '订单已经存在相关成品申购单.不可以撤销审核'
  2408. GOTO ext
  2409. END IF
  2410. END IF
  2411. //检查生产计划
  2412. SELECT count(*) INTO :cnt
  2413. FROM u_Order_ml INNER JOIN
  2414. u_order_ml_mx ON u_Order_ml.scid = u_order_ml_mx.scid AND
  2415. u_Order_ml.OrderID = u_order_ml_mx.orderid
  2416. WHERE u_order_ml_mx.taskid = :arg_taskid
  2417. AND u_order_ml_mx.taskmxid = :arg_printid
  2418. AND u_order_ml_mx.scid = :ll_scid
  2419. AND u_Order_ml.ordertype = 2
  2420. USING commit_transaction;
  2421. IF commit_transaction.SQLCode <> 0 THEN
  2422. rslt = 0
  2423. arg_msg = '查询订单相关生产计划失败'
  2424. GOTO ext
  2425. END IF
  2426. IF cnt <> 0 THEN
  2427. rslt = 0
  2428. arg_msg = '订单已经存在相关生产计划.不可以撤销审核'
  2429. GOTO ext
  2430. END IF
  2431. UPDATE u_saletaskmx_ll
  2432. SET ddflag = 0,
  2433. dddate = :ldt_null,
  2434. ddemp = ''
  2435. WHERE ddflag = 1
  2436. AND taskid = :arg_taskid
  2437. AND printid = :arg_printid USING commit_transaction;
  2438. IF commit_transaction.SQLCode <> 0 THEN
  2439. rslt = 0
  2440. arg_msg = '更新订单明细调度审核标记失败 ' + SQLCA.SQLErrText
  2441. GOTO ext
  2442. END IF
  2443. END IF
  2444. ext:
  2445. IF rslt = 0 THEN
  2446. ROLLBACK;
  2447. ELSEIF rslt = 1 AND arg_ifcommit THEN
  2448. COMMIT;
  2449. END IF
  2450. DESTROY uo_rqbuy
  2451. RETURN rslt
  2452. end function
  2453. public function integer p_cprqplan (long arg_taskid, long arg_printid, long arg_flag, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  2454. Int li_stopflag,li_ddflag
  2455. Long ll_mtrlid,cnt
  2456. DateTime ldt_null
  2457. SetNull(ldt_null)
  2458. IF arg_taskid <= 0 THEN
  2459. rslt = 0
  2460. ARG_MSG = '错误销售订单唯一码'
  2461. GOTO ext
  2462. END IF
  2463. SELECT mtrlid,ddflag,stopflag
  2464. INTO :ll_mtrlid,:li_ddflag,:li_stopflag
  2465. FROM u_saletaskmx_ll
  2466. WHERE u_saletaskmx_ll.taskid = :arg_taskid
  2467. AND u_saletaskmx_ll.printid = :arg_printid USING commit_transaction;
  2468. IF commit_transaction.SQLCode <> 0 THEN
  2469. ARG_MSG = '查询订单信息失败,'+sqlca.SQLErrText
  2470. rslt = 0
  2471. GOTO ext
  2472. END IF
  2473. IF li_stopflag = 1 THEN
  2474. rslt = 0
  2475. ARG_MSG = '查询订单明细已经终止,请检查'
  2476. GOTO ext
  2477. END IF
  2478. Int li_ifautodd
  2479. SELECT ifautodd INTO :li_ifautodd
  2480. FROM u_mtrldef
  2481. Where mtrlid = :ll_mtrlid ;
  2482. IF commit_transaction.SQLCode <> 0 THEN
  2483. ARG_MSG = '查询订单明细物料是否自动调度失败,'+sqlca.SQLErrText
  2484. rslt = 0
  2485. GOTO ext
  2486. END IF
  2487. IF arg_flag = 1 THEN
  2488. Int li_mtrlorigin
  2489. String ls_mtrlcode
  2490. Int li_iflljg
  2491. SELECT mtrlorigin,mtrlcode,iflljg
  2492. INTO :li_mtrlorigin,:ls_mtrlcode,:li_iflljg
  2493. FROM u_mtrldef
  2494. Where mtrlid = :ll_mtrlid USING commit_transaction;
  2495. IF commit_transaction.SQLCode <> 0 THEN
  2496. rslt = 0
  2497. ARG_MSG = '查询订单产品['+ls_mtrlcode+']来源失败'
  2498. GOTO ext
  2499. END IF
  2500. IF li_mtrlorigin = 0 THEN
  2501. IF li_iflljg = 0 THEN
  2502. UPDATE u_saletaskmx_ll
  2503. SET pqty = :arg_qty
  2504. WHERE taskid = :arg_taskid
  2505. AND printid = :arg_printid USING commit_transaction;
  2506. IF commit_transaction.SQLCode <> 0 THEN
  2507. rslt = 0
  2508. ARG_MSG = '更新订单产品['+ls_mtrlcode+']排产数量失败'
  2509. GOTO ext
  2510. END IF
  2511. ELSE
  2512. UPDATE u_saletaskmx_ll
  2513. SET lqty = :arg_qty
  2514. WHERE taskid = :arg_taskid
  2515. AND printid = :arg_printid USING commit_transaction;
  2516. IF commit_transaction.SQLCode <> 0 THEN
  2517. rslt = 0
  2518. ARG_MSG = '更新订单产品['+ls_mtrlcode+']客户来料数量失败'
  2519. GOTO ext
  2520. END IF
  2521. END IF
  2522. ELSEIF li_mtrlorigin = 2 THEN
  2523. UPDATE u_saletaskmx_ll
  2524. SET bqty = :arg_qty
  2525. WHERE taskid = :arg_taskid
  2526. AND printid = :arg_printid USING commit_transaction;
  2527. IF commit_transaction.SQLCode <> 0 THEN
  2528. rslt = 0
  2529. ARG_MSG = '更新订单产品['+ls_mtrlcode+']采购数量失败'
  2530. GOTO ext
  2531. END IF
  2532. ELSEIF li_mtrlorigin = 3 THEN
  2533. UPDATE u_saletaskmx_ll
  2534. SET wqty = :arg_qty
  2535. WHERE taskid = :arg_taskid
  2536. AND printid = :arg_printid USING commit_transaction;
  2537. IF commit_transaction.SQLCode <> 0 THEN
  2538. rslt = 0
  2539. ARG_MSG = '更新订单产品['+ls_mtrlcode+']外协数量失败'
  2540. GOTO ext
  2541. END IF
  2542. ELSEIF li_mtrlorigin = 6 THEN
  2543. UPDATE u_saletaskmx_ll
  2544. SET lqty = :arg_qty
  2545. WHERE taskid = :arg_taskid
  2546. AND printid = :arg_printid USING commit_transaction;
  2547. IF commit_transaction.SQLCode <> 0 THEN
  2548. rslt = 0
  2549. ARG_MSG = '更新订单产品['+ls_mtrlcode+']客户来料数量失败'
  2550. GOTO ext
  2551. END IF
  2552. END IF
  2553. ELSE
  2554. IF li_ifautodd = 0 THEN
  2555. IF li_ddflag = 1 THEN
  2556. rslt = 0
  2557. ARG_MSG = '该订单明细已经调度审核'
  2558. GOTO ext
  2559. END IF
  2560. END IF
  2561. UPDATE u_saletaskmx_ll
  2562. SET pqty = 0,bqty = 0,wqty = 0,lqty = 0
  2563. WHERE taskid = :arg_taskid
  2564. AND printid = :arg_printid USING commit_transaction;
  2565. IF commit_transaction.SQLCode <> 0 THEN
  2566. rslt = 0
  2567. ARG_MSG = '更新订单产品['+ls_mtrlcode+']调度数量失败'
  2568. GOTO ext
  2569. END IF
  2570. END IF
  2571. IF li_ifautodd = 1 THEN
  2572. IF arg_flag = 1 THEN
  2573. IF ddpermit(arg_taskid,arg_printid,0,ARG_MSG,FALSE) = 0 THEN
  2574. rslt = 0
  2575. GOTO ext
  2576. END IF
  2577. ELSE
  2578. IF ddpermit(arg_taskid,arg_printid,1,ARG_MSG,FALSE) = 0 THEN
  2579. rslt = 0
  2580. GOTO ext
  2581. END IF
  2582. END IF
  2583. END IF
  2584. ext:
  2585. IF rslt = 0 THEN
  2586. ROLLBACK ;
  2587. ELSEIF rslt = 1 AND arg_ifcommit THEN
  2588. COMMIT;
  2589. END IF
  2590. Return (rslt)
  2591. end function
  2592. public function integer cancelpermit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  2593. DateTime nulldate
  2594. Decimal ls_consignedQty
  2595. SetNull(nulldate)
  2596. IF uo_option_saletask_secaudit = -1000 THEN
  2597. arg_msg = '选项:[035]销售订单使用二级审核,读取初始默认值失败,操作取消!'
  2598. rslt = 0
  2599. GOTO ext
  2600. END IF
  2601. IF uo_option_if_oa_saletask = -1000 THEN
  2602. arg_msg = '选项:[043]销售订单使用OA审批流程,读取初始默认值失败,操作取消!'
  2603. rslt = 0
  2604. GOTO ext
  2605. END IF
  2606. IF arg_taskid <= 0 THEN
  2607. rslt = 0
  2608. ARG_MSG = '错误销售订单唯一码'
  2609. GOTO ext
  2610. END IF
  2611. IF getinfo(arg_taskid,ARG_MSG) = 0 THEN
  2612. rslt = 0
  2613. GOTO ext
  2614. END IF
  2615. IF ctmint > 0 THEN
  2616. ARG_MSG = '单据已截数,不能操作'
  2617. rslt = 0
  2618. GOTO ext
  2619. END IF
  2620. IF uo_option_saletask_secaudit = 0 OR (uo_option_saletask_secaudit = 1 AND uo_option_if_oa_saletask = 1) THEN
  2621. IF Status <> 1 THEN
  2622. rslt = 0
  2623. IF (uo_option_saletask_secaudit = 1 AND uo_option_if_oa_saletask = 1) THEN
  2624. ARG_MSG = "订单正在执行审批流程,只有在在进行状态才可以执行撤消审核"
  2625. ELSE
  2626. ARG_MSG = "订单只有在已审核状态才可以执行撤消审核,请核对"
  2627. END IF
  2628. GOTO ext
  2629. END IF
  2630. ELSE
  2631. IF Status <> 4 THEN
  2632. rslt = 0
  2633. ARG_MSG = "订单只有在已待生产审核状态才可以执行撤消审核,请核对"
  2634. GOTO ext
  2635. END IF
  2636. END IF
  2637. SELECT count(*) INTO :cnt
  2638. FROM u_order_ml
  2639. WHERE scid = :scid
  2640. AND taskid = :arg_taskid
  2641. AND ordertype = 2
  2642. USING commit_transaction;
  2643. IF commit_transaction.SQLCode <> 0 THEN
  2644. rslt = 0
  2645. ARG_MSG = "因网络或其它原因导致查询销售订单排产数量操作失败"+"~n"+commit_transaction.SQLErrText
  2646. GOTO ext
  2647. END IF
  2648. IF cnt > 0 THEN
  2649. rslt = 0
  2650. ARG_MSG = "销售订单已经有相关生产计划,不可以撤消审核"
  2651. GOTO ext
  2652. END IF
  2653. cnt = 0
  2654. SELECT count(*)
  2655. INTO :cnt
  2656. FROM u_outware_ll,u_outwaremx_ll
  2657. WHERE ( u_outware_ll.outwareid = u_outwaremx_ll.outwareid ) AND
  2658. ( u_outwaremx_ll.relid = :arg_taskid ) USING commit_transaction;
  2659. IF commit_transaction.SQLCode <> 0 THEN
  2660. rslt = 0
  2661. ARG_MSG = "因网络或其它原因导致查询销售订单发货数量操作失败"+"~n"+commit_transaction.SQLErrText
  2662. GOTO ext
  2663. END IF
  2664. IF cnt > 0 THEN
  2665. rslt = 0
  2666. ARG_MSG = "销售订单已经有相关出仓单据,不可以撤消审核"
  2667. GOTO ext
  2668. END IF
  2669. SELECT sum(u_saletaskmx_ll.consignedQty)
  2670. INTO :ls_consignedQty
  2671. FROM u_saletaskmx_ll
  2672. WHERE ( u_saletaskmx_ll.TaskID = :arg_taskid ) AND
  2673. ( u_saletaskmx_ll.stopflag = 0 ) USING commit_transaction ;
  2674. IF commit_transaction.SQLCode <> 0 THEN
  2675. rslt = 0
  2676. ARG_MSG = "查询销售订单已完成数量操作失败"+"~n"+SQLCA.SQLErrText
  2677. GOTO ext
  2678. END IF
  2679. IF ls_consignedQty > 0 THEN
  2680. rslt = 0
  2681. ARG_MSG = "销售订单已有完成数量,不能撤审"
  2682. GOTO ext
  2683. END IF
  2684. //来料加工订单,检查是否已开收料单
  2685. cnt = 0
  2686. SELECT count(*)
  2687. INTO :cnt
  2688. FROM u_inware,u_inwaremx
  2689. WHERE ( u_inware.billtype = 5 ) AND
  2690. ( u_inware.scid = u_inwaremx.scid ) AND
  2691. ( u_inware.inwareid = u_inwaremx.inwareid ) AND
  2692. ( u_inwaremx.relid = :arg_taskid ) AND
  2693. ( u_inware.scid = :scid) USING commit_transaction;
  2694. IF commit_transaction.SQLCode <> 0 THEN
  2695. rslt = 0
  2696. ARG_MSG = "因网络或其它原因导致查询销售订单发货数量操作失败"+"~n"+commit_transaction.SQLErrText
  2697. GOTO ext
  2698. END IF
  2699. IF cnt > 0 THEN
  2700. rslt = 0
  2701. ARG_MSG = "来料加工订单已经有相关收料进仓单据,不可以撤消审核"
  2702. GOTO ext
  2703. END IF
  2704. SELECT sum(u_saletaskmx_in.consignedQty)
  2705. INTO :ls_consignedQty
  2706. FROM u_saletaskmx_in
  2707. WHERE ( u_saletaskmx_in.TaskID = :arg_taskid )
  2708. USING commit_transaction ;
  2709. IF commit_transaction.SQLCode <> 0 THEN
  2710. rslt = 0
  2711. ARG_MSG = "查询来料加工订单已收料数量操作失败"+"~n"+SQLCA.SQLErrText
  2712. GOTO ext
  2713. END IF
  2714. IF ls_consignedQty > 0 THEN
  2715. rslt = 0
  2716. ARG_MSG = "来料加工订单已有收料数量,不能撤审"
  2717. GOTO ext
  2718. END IF
  2719. IF uo_option_saletask_secaudit = 0 OR (uo_option_saletask_secaudit = 1 AND uo_option_if_oa_saletask = 1) THEN
  2720. UPDATE u_SaleTask_ll
  2721. SET Status = 0,
  2722. permit_emp = '',
  2723. permit_date = :nulldate,
  2724. p_Auditingrep = '',
  2725. p_Auditingdate = :nulldate
  2726. WHERE TaskID = :arg_taskid
  2727. AND status = 1
  2728. USING commit_transaction ;
  2729. IF commit_transaction.SQLCode <> 0 THEN
  2730. rslt = 0
  2731. ARG_MSG = "因网络或其它原因导致销售订单撤消审核操作失败"+"~n"+commit_transaction.SQLErrText
  2732. GOTO ext
  2733. ELSEIF commit_transaction.SQLNRows = 0 THEN
  2734. rslt = 0
  2735. ARG_MSG = "单据正在撤审,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  2736. GOTO ext
  2737. END IF
  2738. ELSE
  2739. UPDATE u_SaleTask_ll
  2740. SET Status = 0,
  2741. permit_emp = '',
  2742. permit_date = :nulldate
  2743. WHERE TaskID = :arg_taskid
  2744. AND status = 4
  2745. USING commit_transaction ;
  2746. IF commit_transaction.SQLCode <> 0 THEN
  2747. rslt = 0
  2748. ARG_MSG = "因网络或其它原因导致销售订单撤消审核操作失败"+"~n"+commit_transaction.SQLErrText
  2749. GOTO ext
  2750. ELSEIF commit_transaction.SQLNRows = 0 THEN
  2751. rslt = 0
  2752. ARG_MSG = "单据正在撤审,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  2753. GOTO ext
  2754. END IF
  2755. END IF
  2756. //默认订单调度
  2757. Long i
  2758. FOR i = 1 TO it_mxbt
  2759. IF p_cprqplan(arg_taskid,saletaskmx[i].printid,0,saletaskmx[i].saleqty,ARG_MSG,FALSE) = 0 THEN
  2760. rslt = 0
  2761. GOTO ext
  2762. END IF
  2763. NEXT
  2764. it_newbegin = FALSE
  2765. it_updatebegin = FALSE
  2766. ext:
  2767. IF rslt = 0 THEN
  2768. ROLLBACK USING commit_transaction;
  2769. ELSEIF arg_ifcommit AND rslt = 1 THEN
  2770. COMMIT USING commit_transaction;
  2771. END IF
  2772. p_reset()
  2773. RETURN (rslt)
  2774. end function
  2775. public function integer checkmxcmpl (long arg_taskid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg);
  2776. Int rslt = 1
  2777. long cnt = 0
  2778. IF arg_taskid <= 0 THEN
  2779. rslt = 0
  2780. ARG_MSG = '错误销售订单唯一码'
  2781. GOTO ext
  2782. END IF
  2783. IF arg_addqty = 0 THEN
  2784. rslt = 1
  2785. GOTO ext
  2786. END IF
  2787. rslt = p_getinfo(arg_taskid,ARG_MSG)
  2788. IF rslt = 0 THEN GOTO ext
  2789. IF Status <> 1 THEN
  2790. rslt = 0
  2791. ARG_MSG = "销售订单只有在进行状态下才可以执行进仓"
  2792. GOTO ext
  2793. END IF
  2794. Decimal ls_saleQty,ls_assignQty
  2795. String ls_mtrlcode
  2796. SELECT u_saleTaskMx.saleQty,
  2797. u_saleTaskMx.assignqty,
  2798. u_mtrldef.mtrlcode
  2799. INTO :ls_saleQty,
  2800. :ls_assignQty,
  2801. :ls_mtrlcode
  2802. FROM u_saleTaskMx ,u_mtrldef
  2803. WHERE ( u_saleTaskMx.TaskID = :arg_taskid ) AND
  2804. ( u_saleTaskMx.MtrlID = :arg_mtrlid ) AND
  2805. ( u_mtrldef.mtrlid = u_saleTaskMx.MtrlID )
  2806. USING commit_transaction;
  2807. IF commit_transaction.SQLCode <> 0 THEN
  2808. rslt = 0
  2809. ARG_MSG = "因网络或错误物料编码["+ls_mtrlcode+"]导致查询销售订单已完成数量操作失败"+"~n"+commit_transaction.SQLErrText
  2810. GOTO ext
  2811. END IF
  2812. IF ls_saleQty < ls_assignQty + arg_addqty THEN
  2813. rslt = 0
  2814. ARG_MSG = "物料["+ls_mtrlcode+"]的订单未完成数量只有"+String(ls_saleQty - ls_assignQty,'#,##0.0#')+",不能入库"+String(arg_addqty,'#,##0.0#')
  2815. GOTO ext
  2816. END IF
  2817. ext:
  2818. p_reset()
  2819. RETURN (rslt)
  2820. end function
  2821. public function integer finishtask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  2822. Long cnt = 0
  2823. IF uo_option_if_oa_saletask = -1000 THEN
  2824. arg_msg = '选项:[043]销售订单使用OA审批流程,读取初始默认值失败,操作取消!'
  2825. rslt = 0
  2826. GOTO ext
  2827. END IF
  2828. IF p_getinfo(arg_taskid,arg_msg) = 0 THEN
  2829. rslt = 0
  2830. GOTO ext
  2831. END IF
  2832. IF rslt = 0 THEN GOTO ext
  2833. IF Status <> 1 THEN
  2834. rslt = 0
  2835. arg_msg = "销售订单只有在进行状态才可以执行完成,请核对"
  2836. GOTO ext
  2837. END IF
  2838. IF uo_option_if_oa_saletask = 1 AND audit_buildtype = 0 THEN
  2839. IF f_check_if_oaflow(scid,arg_taskid,6,arg_msg ) = 0 THEN
  2840. rslt = 0
  2841. GOTO ext
  2842. END IF
  2843. END IF
  2844. UPDATE u_SaleTask
  2845. SET status = 5,
  2846. accomplishdate = getdate(),
  2847. finishemp = :publ_operator
  2848. WHERE ( u_SaleTask.TaskID = :arg_taskid )
  2849. USING commit_transaction;
  2850. IF commit_transaction.SQLCode <> 0 THEN
  2851. rslt = 0
  2852. arg_msg = "因网络或其它原因导致完成销售订单操作失败"+"~n"+commit_transaction.SQLErrText
  2853. ROLLBACK USING commit_transaction;
  2854. GOTO ext
  2855. END IF
  2856. ext:
  2857. IF arg_ifcommit AND rslt = 1 THEN
  2858. COMMIT USING commit_transaction;
  2859. END IF
  2860. p_reset()
  2861. RETURN (rslt)
  2862. end function
  2863. public function integer cancelpropermit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);
  2864. Int rslt = 1,cnt = 0
  2865. DateTime nulldate
  2866. Decimal ls_consignedQty
  2867. SetNull(nulldate)
  2868. IF arg_taskid <= 0 THEN
  2869. rslt = 0
  2870. ARG_MSG = '错误销售订单唯一码'
  2871. GOTO ext
  2872. END IF
  2873. IF getinfo(arg_taskid,ARG_MSG) = 0 THEN
  2874. rslt = 0
  2875. GOTO ext
  2876. END IF
  2877. IF ctmint > 0 THEN
  2878. ARG_MSG = '单据已截数,不能操作'
  2879. rslt = 0
  2880. GOTO ext
  2881. END IF
  2882. IF Status <> 1 THEN
  2883. rslt = 0
  2884. ARG_MSG = "订单只有在进行状态才可以执行撤消生产审核,请核对"
  2885. GOTO ext
  2886. END IF
  2887. SELECT count(*) INTO :cnt
  2888. FROM u_order_ml
  2889. WHERE taskid = :arg_taskid
  2890. and ordertype = 2
  2891. USING commit_transaction;
  2892. IF commit_transaction.SQLCode <> 0 THEN
  2893. rslt = 0
  2894. ARG_MSG = "因网络或其它原因导致查询销售订单排产数量操作失败"+"~n"+commit_transaction.SQLErrText
  2895. GOTO ext
  2896. END IF
  2897. IF cnt > 0 THEN
  2898. rslt = 0
  2899. ARG_MSG = "销售订单已经有相关生产计划,不可以撤消审核"
  2900. GOTO ext
  2901. END IF
  2902. cnt = 0
  2903. SELECT count(*)
  2904. INTO :cnt
  2905. FROM u_outware_ll,u_outwaremx_ll
  2906. WHERE ( u_outware_ll.outwareid = u_outwaremx_ll.outwareid ) AND
  2907. ( u_outwaremx_ll.relid = :arg_taskid ) USING commit_transaction;
  2908. IF commit_transaction.SQLCode <> 0 THEN
  2909. rslt = 0
  2910. ARG_MSG = "因网络或其它原因导致查询销售订单发货数量操作失败"+"~n"+commit_transaction.SQLErrText
  2911. GOTO ext
  2912. END IF
  2913. IF cnt > 0 THEN
  2914. rslt = 0
  2915. ARG_MSG = "销售订单已经有相关出仓单据,不可以撤消审核"
  2916. GOTO ext
  2917. END IF
  2918. SELECT sum(u_SaleTaskMx_ll.consignedQty)
  2919. INTO :ls_consignedQty
  2920. FROM u_SaleTaskMx_ll
  2921. WHERE ( u_SaleTaskMx_ll.TaskID = :arg_taskid ) AND
  2922. ( u_SaleTaskMx_ll.stopflag = 0 ) USING commit_transaction ;
  2923. IF commit_transaction.SQLCode <> 0 THEN
  2924. rslt = 0
  2925. ARG_MSG = "查询来料加工订单已完成数量操作失败"+"~n"+SQLCA.SQLErrText
  2926. GOTO ext
  2927. END IF
  2928. IF ls_consignedQty > 0 THEN
  2929. rslt = 0
  2930. ARG_MSG = "来料加工订单已有完成数量,不能撤审"
  2931. GOTO ext
  2932. END IF
  2933. //来料加工订单,检查是否已开收料单
  2934. cnt = 0
  2935. SELECT count(*)
  2936. INTO :cnt
  2937. FROM u_inware,u_inwaremx
  2938. WHERE ( u_inware.billtype = 5 ) AND
  2939. ( u_inware.scid = u_inwaremx.scid ) AND
  2940. ( u_inware.inwareid = u_inwaremx.inwareid ) AND
  2941. ( u_inwaremx.relid = :arg_taskid ) AND
  2942. ( u_inware.scid = :scid) USING commit_transaction;
  2943. IF commit_transaction.SQLCode <> 0 THEN
  2944. rslt = 0
  2945. ARG_MSG = "因网络或其它原因导致查询销售订单发货数量操作失败"+"~n"+commit_transaction.SQLErrText
  2946. GOTO ext
  2947. END IF
  2948. IF cnt > 0 THEN
  2949. rslt = 0
  2950. ARG_MSG = "来料加工订单已经有相关收料进仓单据,不可以撤消审核"
  2951. GOTO ext
  2952. END IF
  2953. SELECT sum(u_SaleTaskMx_in.consignedQty)
  2954. INTO :ls_consignedQty
  2955. FROM u_SaleTaskMx_in
  2956. WHERE ( u_SaleTaskMx_in.TaskID = :arg_taskid )
  2957. USING commit_transaction ;
  2958. IF commit_transaction.SQLCode <> 0 THEN
  2959. rslt = 0
  2960. ARG_MSG = "查询来料加工订单已收料数量操作失败"+"~n"+SQLCA.SQLErrText
  2961. GOTO ext
  2962. END IF
  2963. IF ls_consignedQty > 0 THEN
  2964. rslt = 0
  2965. ARG_MSG = "来料加工订单已有收料数量,不能撤审"
  2966. GOTO ext
  2967. END IF
  2968. //默认订单调度
  2969. Long i
  2970. FOR i = 1 TO it_mxbt
  2971. IF p_cprqplan(arg_taskid,saletaskmx[i].printid,0,saletaskmx[i].saleqty,ARG_MSG,FALSE) = 0 THEN
  2972. rslt = 0
  2973. GOTO ext
  2974. END IF
  2975. NEXT
  2976. UPDATE u_SaleTask_ll
  2977. SET Status = 4,
  2978. p_Auditingrep = '',
  2979. p_Auditingdate = :nulldate
  2980. WHERE TaskID = :arg_taskid
  2981. AND status = 1
  2982. USING commit_transaction ;
  2983. IF commit_transaction.SQLCode <> 0 THEN
  2984. rslt = 0
  2985. ARG_MSG = "因网络或其它原因导致销售订单撤消审核操作失败"+"~n"+commit_transaction.SQLErrText
  2986. GOTO ext
  2987. ELSEIF commit_transaction.SQLNRows = 0 THEN
  2988. rslt = 0
  2989. ARG_MSG = "单据正在撤审,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  2990. GOTO ext
  2991. END IF
  2992. it_newbegin = FALSE
  2993. it_updatebegin = FALSE
  2994. ext:
  2995. IF rslt = 0 THEN
  2996. ROLLBACK USING commit_transaction;
  2997. ELSEIF arg_ifcommit AND rslt = 1 THEN
  2998. COMMIT USING commit_transaction;
  2999. END IF
  3000. p_reset()
  3001. Return (rslt)
  3002. end function
  3003. public function integer updatebqty (long arg_taskid, long arg_printid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  3004. Dec ld_SaleQty,ld_finishbQty,ld_bqty
  3005. IF p_getinfo(arg_taskid,arg_msg) = 0 THEN
  3006. rslt = 0
  3007. GOTO ext
  3008. END IF
  3009. IF status = 0 THEN
  3010. arg_msg = '订单未审核,不能更新!'
  3011. rslt = 0
  3012. GOTO ext
  3013. END IF
  3014. SELECT bqty,
  3015. finishbqty
  3016. INTO :ld_bqty,
  3017. :ld_finishbQty
  3018. FROM u_saletaskmx_ll
  3019. WHERE taskid = :arg_taskid AND
  3020. printid = :arg_printid USING commit_transaction;
  3021. IF commit_transaction.SQLCode <> 0 THEN
  3022. arg_msg = '查询销售订单已申购数量失败!'+commit_transaction.SQLErrText
  3023. rslt = 0
  3024. GOTO ext
  3025. END IF
  3026. IF ld_bqty - ld_finishbQty < arg_qty THEN
  3027. arg_msg = '申购数量大于待申购数!'
  3028. rslt = 0
  3029. GOTO ext
  3030. END IF
  3031. UPDATE u_saletaskmx_ll
  3032. SET finishbqty = finishbqty + :arg_qty
  3033. WHERE taskid = :arg_taskid AND
  3034. printid = :arg_printid USING commit_transaction;
  3035. IF commit_transaction.SQLCode <> 0 THEN
  3036. arg_msg = '更新订单申购数失败>>'+commit_transaction.SQLErrText
  3037. rslt = 0
  3038. GOTO ext
  3039. END IF
  3040. ext:
  3041. IF rslt = 1 AND arg_ifcommit THEN
  3042. COMMIT USING commit_transaction;
  3043. ELSEIF rslt = 0 THEN
  3044. ROLLBACK USING commit_transaction;
  3045. END IF
  3046. RETURN rslt
  3047. end function
  3048. public function integer updateinwareqty (long arg_taskid, long arg_printid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);
  3049. Int rslt = 1
  3050. Dec ld_SaleQty,ld_inwareQty
  3051. IF p_getinfo(arg_taskid,arg_msg) = 0 THEN
  3052. rslt = 0
  3053. GOTO ext
  3054. END IF
  3055. IF status = 0 THEN
  3056. arg_msg = '订单未审核,不能更新!'
  3057. rslt = 0
  3058. GOTO ext
  3059. END IF
  3060. SELECT SaleQty,
  3061. inwareQty
  3062. INTO :ld_SaleQty,
  3063. :ld_inwareQty
  3064. FROM u_saletaskmx_ll
  3065. WHERE taskid = :arg_taskid AND
  3066. printid = :arg_printid USING commit_transaction;
  3067. IF commit_transaction.SQLCode <> 0 THEN
  3068. arg_msg = '查询销售订单明细已进仓数量失败!'+commit_transaction.SQLErrText
  3069. rslt = 0
  3070. GOTO ext
  3071. END IF
  3072. IF ld_SaleQty - ld_inwareQty < arg_qty THEN
  3073. arg_msg = '进仓数量大于未进仓数!'
  3074. rslt = 0
  3075. GOTO ext
  3076. END IF
  3077. UPDATE u_saletaskmx_ll
  3078. SET inwareQty = inwareQty + :arg_qty
  3079. WHERE taskid = :arg_taskid AND
  3080. printid = :arg_printid USING commit_transaction;
  3081. IF commit_transaction.SQLCode <> 0 THEN
  3082. arg_msg = '更新进仓数失败>>'+commit_transaction.SQLErrText
  3083. rslt = 0
  3084. GOTO ext
  3085. END IF
  3086. ext:
  3087. IF rslt = 1 AND arg_ifcommit THEN
  3088. COMMIT USING commit_transaction;
  3089. ELSEIF rslt = 0 THEN
  3090. ROLLBACK USING commit_transaction;
  3091. END IF
  3092. RETURN rslt
  3093. end function
  3094. public function integer newbegin ();//重置对象,设定业务类型与关联ID,准备建立新单
  3095. //0 fail 1 success
  3096. int rslt=1
  3097. long CNT=0
  3098. p_reset()
  3099. it_newbegin=TRUE
  3100. it_updatebegin=FALSE
  3101. return rslt
  3102. end function
  3103. on uo_saletask_ll.create
  3104. call super::create
  3105. TriggerEvent( this, "constructor" )
  3106. end on
  3107. on uo_saletask_ll.destroy
  3108. TriggerEvent( this, "destructor" )
  3109. call super::destroy
  3110. end on
  3111. event constructor;String arg_msg
  3112. String str_optionvalue
  3113. str_optionvalue = ''
  3114. f_get_sys_option_value('029',str_optionvalue,arg_msg)
  3115. uo_option_change_status = str_optionvalue
  3116. str_optionvalue = ''
  3117. f_get_sys_option_value('027',str_optionvalue,arg_msg)
  3118. uo_option_change_woodcode = str_optionvalue
  3119. str_optionvalue = ''
  3120. f_get_sys_option_value('028',str_optionvalue,arg_msg)
  3121. uo_option_change_pcode = str_optionvalue
  3122. str_optionvalue = ''
  3123. f_get_sys_option_value('035',str_optionvalue,arg_msg)
  3124. uo_option_saletask_secaudit = Long(str_optionvalue)
  3125. str_optionvalue = ''
  3126. f_get_sys_option_value('043',str_optionvalue,arg_msg)
  3127. uo_option_if_oa_saletask = Long(str_optionvalue)
  3128. str_optionvalue = ''
  3129. f_get_sys_option_value('133',str_optionvalue,arg_msg)
  3130. uo_option_taskplancode_auto_ll = Long(str_optionvalue)
  3131. str_optionvalue = ''
  3132. f_get_sys_option_value('113',str_optionvalue,arg_msg)
  3133. uo_option_autocreate_buy_cp = Long(str_optionvalue)
  3134. str_optionvalue = ''
  3135. f_get_sys_option_value('045',str_optionvalue,arg_msg)
  3136. uo_option_m_msttake = Long(str_optionvalue)
  3137. str_optionvalue = ''
  3138. f_get_sys_option_value('051',str_optionvalue,arg_msg)
  3139. uo_option_taskaudit_dprice = Long(str_optionvalue)
  3140. str_optionvalue = ''
  3141. f_get_sys_option_value('044',str_optionvalue,arg_msg)
  3142. uo_option_if_msg = Long(str_optionvalue)
  3143. str_optionvalue = ''
  3144. f_get_sys_option_value('088',str_optionvalue,arg_msg)
  3145. uo_option_saletask_fore_secaudit = Long(str_optionvalue)
  3146. str_optionvalue = ''
  3147. f_get_sys_option_value('039',str_optionvalue,arg_msg)
  3148. uo_option_saletask_addware = Long(str_optionvalue)
  3149. str_optionvalue = ''
  3150. f_get_sys_option_value('023',str_optionvalue,arg_msg)
  3151. uo_option_unit_dec = Long(str_optionvalue)
  3152. end event