w_outware_sale_mx4di.srw 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. $PBExportHeader$w_outware_sale_mx4di.srw
  2. forward
  3. global type w_outware_sale_mx4di from w_publ_base
  4. end type
  5. type cb_ok from uo_imflatbutton within w_outware_sale_mx4di
  6. end type
  7. type dw_1 from datawindow within w_outware_sale_mx4di
  8. end type
  9. type cbx_1 from checkbox within w_outware_sale_mx4di
  10. end type
  11. end forward
  12. global type w_outware_sale_mx4di from w_publ_base
  13. integer width = 3616
  14. integer height = 1628
  15. string title = "销售收货单明细自动组装"
  16. boolean minbox = false
  17. windowtype windowtype = response!
  18. cb_ok cb_ok
  19. dw_1 dw_1
  20. cbx_1 cbx_1
  21. end type
  22. global w_outware_sale_mx4di w_outware_sale_mx4di
  23. type variables
  24. s_edit_index_tran s_tran
  25. long ins_scid,ins_outwareid
  26. string ins_outwarecode
  27. end variables
  28. on w_outware_sale_mx4di.create
  29. int iCurrent
  30. call super::create
  31. this.cb_ok=create cb_ok
  32. this.dw_1=create dw_1
  33. this.cbx_1=create cbx_1
  34. iCurrent=UpperBound(this.Control)
  35. this.Control[iCurrent+1]=this.cb_ok
  36. this.Control[iCurrent+2]=this.dw_1
  37. this.Control[iCurrent+3]=this.cbx_1
  38. end on
  39. on w_outware_sale_mx4di.destroy
  40. call super::destroy
  41. destroy(this.cb_ok)
  42. destroy(this.dw_1)
  43. destroy(this.cbx_1)
  44. end on
  45. event open;call super::open;dw_1.settransobject(sqlca)
  46. s_tran=Message.PowerObjectParm
  47. ins_scid = s_tran.b_long
  48. ins_outwareid = s_tran.c_long
  49. ins_outwarecode = s_tran.c_string
  50. dw_1.retrieve( ins_scid,ins_outwareid)
  51. dw_1.setfocus()
  52. end event
  53. type cb_func from w_publ_base`cb_func within w_outware_sale_mx4di
  54. boolean visible = false
  55. end type
  56. type cb_exit from w_publ_base`cb_exit within w_outware_sale_mx4di
  57. integer x = 2025
  58. integer y = 1404
  59. integer picsize = 16
  60. end type
  61. type cb_ok from uo_imflatbutton within w_outware_sale_mx4di
  62. integer x = 1458
  63. integer y = 1404
  64. integer width = 311
  65. integer height = 96
  66. integer taborder = 20
  67. boolean bringtotop = true
  68. string normalpicname = "ok.bmp"
  69. integer picsize = 16
  70. end type
  71. event clicked;call super::clicked;Long ll_row,ll_ucrow, ll_j,ll_i,rslt = 1,it_mxt = 1,i
  72. String ls_mtrlcode, ls_plancode,ls_status,ls_woodcode,ls_pcode
  73. Long ls_mtrlwareid,ls_mtrlid,ls_storageid
  74. Dec ls_noallocqty,ls_planprice,ls_cost,ld_qty,ld_saleqty
  75. String arg_msg
  76. //String ls_outwarecode
  77. String ls_reason
  78. Long ll_cnt
  79. dw_1.AcceptText()
  80. uo_dismantle_install uo_ware_install
  81. uo_ware_install = Create uo_dismantle_install
  82. FOR ll_j = 1 To dw_1.RowCount()
  83. IF dw_1.Object.ch[ll_j] = 0 THEN CONTINUE //勾选的才处理
  84. ls_mtrlwareid = dw_1.Object.u_outwaremx_mtrlwareid[ll_j]
  85. ld_saleqty = dw_1.Object.u_outwaremx_qty[ll_j]
  86. SELECT u_mtrlware.mtrlwareid ,
  87. u_mtrlware.mtrlid,
  88. u_mtrlware.noallocqty,
  89. u_mtrlware.planprice,
  90. u_mtrlware.storageid,
  91. u_mtrlware.plancode,
  92. u_mtrlware.status,
  93. u_mtrlware.woodcode,
  94. u_mtrlware.pcode,
  95. u_mtrldef.mtrlcode
  96. INTO :ls_mtrlwareid,
  97. :ls_mtrlid,
  98. :ls_noallocqty,
  99. :ls_planprice,
  100. :ls_storageid,
  101. :ls_plancode,
  102. :ls_status,
  103. :ls_woodcode,
  104. :ls_pcode,
  105. :ls_mtrlcode
  106. FROM u_mtrldef,
  107. u_mtrlware
  108. WHERE ( u_mtrldef.mtrlid = u_mtrlware.mtrlid )
  109. And ( u_mtrlware.mtrlwareid = :ls_mtrlwareid );
  110. IF sqlca.SQLCode <> 0 THEN
  111. rslt = 0
  112. arg_msg = '第'+String(ll_j)+'行,查询物料库存信息失败.'+sqlca.SQLErrText
  113. GOTO ext
  114. END IF
  115. //计算组装结构
  116. Long ll_SonMtrlid[]
  117. String ls_pf_status[]
  118. Decimal ld_Sonscale[]
  119. String ls_mtrlname,ls_status_find
  120. Decimal ld_noallocqty,ld_allqty,ld_maxqty
  121. it_mxt = 1
  122. DECLARE cur_pf CURSOR FOR
  123. SELECT u_PrdPF.SonMtrlid,
  124. u_PrdPF.Sonscale,
  125. u_PrdPF.status
  126. FROM u_PrdPF
  127. Where u_PrdPF.mtrlid = :ls_mtrlid;
  128. OPEN cur_pf;
  129. FETCH cur_pf Into :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ls_pf_status[it_mxt];
  130. DO WHILE sqlca.SQLCode = 0
  131. it_mxt++
  132. FETCH cur_pf Into :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ls_pf_status[it_mxt];
  133. LOOP
  134. it_mxt = it_mxt - 1
  135. CLOSE cur_pf;
  136. IF it_mxt = 0 THEN
  137. rslt = 0
  138. arg_msg = '第'+String(ll_j)+'行,该产品没有建立组装结构,不能计算'
  139. GOTO ext
  140. END IF
  141. ld_maxqty = 1000000
  142. FOR ll_i = 1 To it_mxt
  143. SELECT mtrlname INTO :ls_mtrlname
  144. FROM u_mtrldef
  145. Where mtrlid = :ll_SonMtrlid[ll_i];
  146. IF sqlca.SQLCode <> 0 THEN
  147. rslt = 0
  148. arg_msg = '第'+String(ll_j)+'行,查询产品资料失败,'+sqlca.SQLErrText
  149. GOTO ext
  150. END IF
  151. IF sys_option_if_color = 1 THEN
  152. ls_status_find = ls_status
  153. ELSE
  154. ls_status_find = ls_pf_status[ll_i]
  155. END IF
  156. ld_noallocqty = 0
  157. ld_allqty = 0
  158. SELECT sum(noallocqty) INTO :ld_noallocqty
  159. FROM u_mtrlware
  160. WHERE storageid = :ls_storageid
  161. AND mtrlid = :ll_SonMtrlid[ll_i]
  162. And status = :ls_status_find;
  163. IF sqlca.SQLCode <> 0 THEN
  164. rslt = 0
  165. arg_msg = '第'+String(ll_j)+'行,查询该产品组装材料'+ls_mtrlname+'的库存资料失败'
  166. GOTO ext
  167. END IF
  168. ld_allqty = ld_noallocqty/ld_Sonscale[ll_i]
  169. ld_maxqty = Min(ld_maxqty,ld_allqty)
  170. IF IsNull(ld_maxqty) THEN ld_maxqty = 0
  171. NEXT
  172. ld_qty = Truncate ( ld_maxqty, 0 )
  173. IF ld_saleqty > ld_qty THEN
  174. rslt = 0
  175. arg_msg = '第'+String(ll_j)+'行,产品没有足够的组装材料库存~n'+'发货单组装数量:'+String(ld_saleqty,'#,###0.##')+',库存最大可装数:'+String(ld_qty,'#,###0.##')
  176. GOTO ext
  177. END IF
  178. String mx_status,mx_woodcode,mx_plancode,mx_pcode,mx_mtrlcode
  179. Dec mx_noallocqty,mx_cost
  180. Long mx_mtrlwareid,mx_dxflag,mx_sptid
  181. IF uo_ware_install.newbegin(0,arg_msg) = 0 THEN //新建
  182. rslt = 0
  183. GOTO ext
  184. END IF
  185. ls_reason = '销售发货单:'+ins_outwarecode+'自动组装'
  186. uo_ware_install.billdate = DateTime(Today(),Now()) // 发生时间
  187. uo_ware_install.rep = publ_operator // 经手人
  188. uo_ware_install.dscrp = ls_reason //备注
  189. uo_ware_install.reason = ls_reason
  190. uo_ware_install.storageid = ls_storageid
  191. uo_ware_install.mtrlid = ls_mtrlid
  192. uo_ware_install.mtrlwareid = ls_mtrlwareid
  193. uo_ware_install.status = ls_status
  194. uo_ware_install.plancode = ls_pcode
  195. uo_ware_install.woodcode = ls_woodcode
  196. uo_ware_install.qty = ld_saleqty
  197. uo_ware_install.addqty = 0
  198. uo_ware_install.price = ls_planprice
  199. uo_ware_install.buildtype = 0
  200. uo_ware_install.mtrlcode = ls_mtrlcode
  201. FOR ll_i = 1 To it_mxt
  202. IF sys_option_if_color = 1 THEN
  203. ls_status_find = ls_status
  204. ELSE
  205. ls_status_find = ls_pf_status[ll_i]
  206. END IF
  207. SELECT mtrlwareid,
  208. status,
  209. woodcode,
  210. plancode,
  211. pcode,
  212. noallocqty,
  213. cost = case u_mtrlware.noallocqty when 0 then 0 else u_mtrlware.wareamt/u_mtrlware.noallocqty END,
  214. dxflag,
  215. sptid,
  216. mtrlcode
  217. INTO :mx_mtrlwareid,
  218. :mx_status,
  219. :mx_woodcode,
  220. :mx_plancode,
  221. :mx_pcode,
  222. :mx_noallocqty,
  223. :mx_cost,
  224. :mx_dxflag,
  225. :mx_sptid,
  226. :mx_mtrlcode
  227. FROM u_mtrlware,u_mtrldef
  228. WHERE u_mtrlware.mtrlid = u_mtrldef.mtrlid
  229. AND u_mtrlware.mtrlid = :ll_SonMtrlid[ll_i]
  230. AND u_mtrlware.storageid = :ls_storageid
  231. And u_mtrlware.status = :ls_status_find;
  232. IF sqlca.SQLCode <> 0 THEN
  233. rslt = 0
  234. arg_msg = '第'+String(ll_j)+'行,查询该产品组装材料的库存资料失败>>'+sqlca.SQLErrText
  235. GOTO ext
  236. END IF
  237. IF uo_ware_install.acceptmx(ll_i,&
  238. ls_storageid,&
  239. mx_mtrlwareid,&
  240. ll_SonMtrlid[ll_i],&
  241. ld_saleqty * ld_Sonscale[ll_i],&
  242. 0,&
  243. mx_cost,&
  244. mx_status,&
  245. mx_plancode,&
  246. mx_woodcode,&
  247. '',&
  248. mx_mtrlcode,&
  249. mx_pcode,&
  250. mx_dxflag,&
  251. mx_sptid,&
  252. arg_msg,&
  253. ld_Sonscale[ll_i]) = 0 THEN
  254. rslt = 0
  255. GOTO ext
  256. END IF
  257. NEXT
  258. IF uo_ware_install.Save(arg_msg,False) = 0 THEN
  259. rslt = 0
  260. GOTO ext
  261. END IF
  262. IF uo_ware_install.getinfo(uo_ware_install.billid,arg_msg) = 0 THEN
  263. rslt = 0
  264. GOTO ext
  265. END IF
  266. IF uo_ware_install.auditing(publ_operator,False,arg_msg) = 0 THEN
  267. rslt = 0
  268. GOTO ext
  269. END IF
  270. NEXT
  271. ext:
  272. IF rslt = 0 THEN
  273. ROLLBACK Using sqlca;
  274. MessageBox('错误',arg_msg,stopsign!,OK!)
  275. RETURN
  276. ELSEIF rslt = 1 THEN
  277. COMMIT Using sqlca;
  278. MessageBox('提示','自动组装成功',information!,OK!)
  279. Close(Parent)
  280. END IF
  281. end event
  282. type dw_1 from datawindow within w_outware_sale_mx4di
  283. integer width = 3584
  284. integer height = 1348
  285. integer taborder = 30
  286. boolean bringtotop = true
  287. string title = "none"
  288. string dataobject = "dw_outware_sale_mx4di"
  289. boolean livescroll = true
  290. borderstyle borderstyle = stylelowered!
  291. end type
  292. event constructor;f_title_change(this)
  293. end event
  294. type cbx_1 from checkbox within w_outware_sale_mx4di
  295. integer x = 389
  296. integer y = 1424
  297. integer width = 402
  298. integer height = 60
  299. boolean bringtotop = true
  300. integer textsize = -9
  301. integer weight = 400
  302. fontcharset fontcharset = gb2312charset!
  303. fontpitch fontpitch = variable!
  304. string facename = "宋体"
  305. long textcolor = 33554432
  306. long backcolor = 134217739
  307. string text = "全选"
  308. end type
  309. event clicked;Long i
  310. dw_1.setredraw(false)
  311. IF This.Checked THEN
  312. FOR i = 1 To dw_1.RowCount()
  313. dw_1.Object.ch[i] = 1
  314. NEXT
  315. ELSE
  316. FOR i = 1 To dw_1.RowCount()
  317. dw_1.Object.ch[i] = 0
  318. NEXT
  319. END IF
  320. dw_1.setredraw(true)
  321. end event