$PBExportHeader$w_outware_sale_mx4di.srw forward global type w_outware_sale_mx4di from w_publ_base end type type cb_ok from uo_imflatbutton within w_outware_sale_mx4di end type type dw_1 from datawindow within w_outware_sale_mx4di end type type cbx_1 from checkbox within w_outware_sale_mx4di end type end forward global type w_outware_sale_mx4di from w_publ_base integer width = 3616 integer height = 1628 string title = "销售收货单明细自动组装" boolean minbox = false windowtype windowtype = response! cb_ok cb_ok dw_1 dw_1 cbx_1 cbx_1 end type global w_outware_sale_mx4di w_outware_sale_mx4di type variables s_edit_index_tran s_tran long ins_scid,ins_outwareid string ins_outwarecode end variables on w_outware_sale_mx4di.create int iCurrent call super::create this.cb_ok=create cb_ok this.dw_1=create dw_1 this.cbx_1=create cbx_1 iCurrent=UpperBound(this.Control) this.Control[iCurrent+1]=this.cb_ok this.Control[iCurrent+2]=this.dw_1 this.Control[iCurrent+3]=this.cbx_1 end on on w_outware_sale_mx4di.destroy call super::destroy destroy(this.cb_ok) destroy(this.dw_1) destroy(this.cbx_1) end on event open;call super::open;dw_1.settransobject(sqlca) s_tran=Message.PowerObjectParm ins_scid = s_tran.b_long ins_outwareid = s_tran.c_long ins_outwarecode = s_tran.c_string dw_1.retrieve( ins_scid,ins_outwareid) dw_1.setfocus() end event type cb_func from w_publ_base`cb_func within w_outware_sale_mx4di boolean visible = false end type type cb_exit from w_publ_base`cb_exit within w_outware_sale_mx4di integer x = 2025 integer y = 1404 integer picsize = 16 end type type cb_ok from uo_imflatbutton within w_outware_sale_mx4di integer x = 1458 integer y = 1404 integer width = 311 integer height = 96 integer taborder = 20 boolean bringtotop = true string normalpicname = "ok.bmp" integer picsize = 16 end type event clicked;call super::clicked;Long ll_row,ll_ucrow, ll_j,ll_i,rslt = 1,it_mxt = 1,i String ls_mtrlcode, ls_plancode,ls_status,ls_woodcode,ls_pcode Long ls_mtrlwareid,ls_mtrlid,ls_storageid Dec ls_noallocqty,ls_planprice,ls_cost,ld_qty,ld_saleqty String arg_msg //String ls_outwarecode String ls_reason Long ll_cnt dw_1.AcceptText() uo_dismantle_install uo_ware_install uo_ware_install = Create uo_dismantle_install FOR ll_j = 1 To dw_1.RowCount() IF dw_1.Object.ch[ll_j] = 0 THEN CONTINUE //勾选的才处理 ls_mtrlwareid = dw_1.Object.u_outwaremx_mtrlwareid[ll_j] ld_saleqty = dw_1.Object.u_outwaremx_qty[ll_j] SELECT u_mtrlware.mtrlwareid , u_mtrlware.mtrlid, u_mtrlware.noallocqty, u_mtrlware.planprice, u_mtrlware.storageid, u_mtrlware.plancode, u_mtrlware.status, u_mtrlware.woodcode, u_mtrlware.pcode, u_mtrldef.mtrlcode INTO :ls_mtrlwareid, :ls_mtrlid, :ls_noallocqty, :ls_planprice, :ls_storageid, :ls_plancode, :ls_status, :ls_woodcode, :ls_pcode, :ls_mtrlcode FROM u_mtrldef, u_mtrlware WHERE ( u_mtrldef.mtrlid = u_mtrlware.mtrlid ) And ( u_mtrlware.mtrlwareid = :ls_mtrlwareid ); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '第'+String(ll_j)+'行,查询物料库存信息失败.'+sqlca.SQLErrText GOTO ext END IF //计算组装结构 Long ll_SonMtrlid[] String ls_pf_status[] Decimal ld_Sonscale[] String ls_mtrlname,ls_status_find Decimal ld_noallocqty,ld_allqty,ld_maxqty it_mxt = 1 DECLARE cur_pf CURSOR FOR SELECT u_PrdPF.SonMtrlid, u_PrdPF.Sonscale, u_PrdPF.status FROM u_PrdPF Where u_PrdPF.mtrlid = :ls_mtrlid; OPEN cur_pf; FETCH cur_pf Into :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ls_pf_status[it_mxt]; DO WHILE sqlca.SQLCode = 0 it_mxt++ FETCH cur_pf Into :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ls_pf_status[it_mxt]; LOOP it_mxt = it_mxt - 1 CLOSE cur_pf; IF it_mxt = 0 THEN rslt = 0 arg_msg = '第'+String(ll_j)+'行,该产品没有建立组装结构,不能计算' GOTO ext END IF ld_maxqty = 1000000 FOR ll_i = 1 To it_mxt SELECT mtrlname INTO :ls_mtrlname FROM u_mtrldef Where mtrlid = :ll_SonMtrlid[ll_i]; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '第'+String(ll_j)+'行,查询产品资料失败,'+sqlca.SQLErrText GOTO ext END IF IF sys_option_if_color = 1 THEN ls_status_find = ls_status ELSE ls_status_find = ls_pf_status[ll_i] END IF ld_noallocqty = 0 ld_allqty = 0 SELECT sum(noallocqty) INTO :ld_noallocqty FROM u_mtrlware WHERE storageid = :ls_storageid AND mtrlid = :ll_SonMtrlid[ll_i] And status = :ls_status_find; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '第'+String(ll_j)+'行,查询该产品组装材料'+ls_mtrlname+'的库存资料失败' GOTO ext END IF ld_allqty = ld_noallocqty/ld_Sonscale[ll_i] ld_maxqty = Min(ld_maxqty,ld_allqty) IF IsNull(ld_maxqty) THEN ld_maxqty = 0 NEXT ld_qty = Truncate ( ld_maxqty, 0 ) IF ld_saleqty > ld_qty THEN rslt = 0 arg_msg = '第'+String(ll_j)+'行,产品没有足够的组装材料库存~n'+'发货单组装数量:'+String(ld_saleqty,'#,###0.##')+',库存最大可装数:'+String(ld_qty,'#,###0.##') GOTO ext END IF String mx_status,mx_woodcode,mx_plancode,mx_pcode,mx_mtrlcode Dec mx_noallocqty,mx_cost Long mx_mtrlwareid,mx_dxflag,mx_sptid IF uo_ware_install.newbegin(0,arg_msg) = 0 THEN //新建 rslt = 0 GOTO ext END IF ls_reason = '销售发货单:'+ins_outwarecode+'自动组装' uo_ware_install.billdate = DateTime(Today(),Now()) // 发生时间 uo_ware_install.rep = publ_operator // 经手人 uo_ware_install.dscrp = ls_reason //备注 uo_ware_install.reason = ls_reason uo_ware_install.storageid = ls_storageid uo_ware_install.mtrlid = ls_mtrlid uo_ware_install.mtrlwareid = ls_mtrlwareid uo_ware_install.status = ls_status uo_ware_install.plancode = ls_pcode uo_ware_install.woodcode = ls_woodcode uo_ware_install.qty = ld_saleqty uo_ware_install.addqty = 0 uo_ware_install.price = ls_planprice uo_ware_install.buildtype = 0 uo_ware_install.mtrlcode = ls_mtrlcode FOR ll_i = 1 To it_mxt IF sys_option_if_color = 1 THEN ls_status_find = ls_status ELSE ls_status_find = ls_pf_status[ll_i] END IF SELECT mtrlwareid, status, woodcode, plancode, pcode, noallocqty, cost = case u_mtrlware.noallocqty when 0 then 0 else u_mtrlware.wareamt/u_mtrlware.noallocqty END, dxflag, sptid, mtrlcode INTO :mx_mtrlwareid, :mx_status, :mx_woodcode, :mx_plancode, :mx_pcode, :mx_noallocqty, :mx_cost, :mx_dxflag, :mx_sptid, :mx_mtrlcode FROM u_mtrlware,u_mtrldef WHERE u_mtrlware.mtrlid = u_mtrldef.mtrlid AND u_mtrlware.mtrlid = :ll_SonMtrlid[ll_i] AND u_mtrlware.storageid = :ls_storageid And u_mtrlware.status = :ls_status_find; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '第'+String(ll_j)+'行,查询该产品组装材料的库存资料失败>>'+sqlca.SQLErrText GOTO ext END IF IF uo_ware_install.acceptmx(ll_i,& ls_storageid,& mx_mtrlwareid,& ll_SonMtrlid[ll_i],& ld_saleqty * ld_Sonscale[ll_i],& 0,& mx_cost,& mx_status,& mx_plancode,& mx_woodcode,& '',& mx_mtrlcode,& mx_pcode,& mx_dxflag,& mx_sptid,& arg_msg,& ld_Sonscale[ll_i]) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_ware_install.Save(arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware_install.getinfo(uo_ware_install.billid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware_install.auditing(publ_operator,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF NEXT ext: IF rslt = 0 THEN ROLLBACK Using sqlca; MessageBox('错误',arg_msg,stopsign!,OK!) RETURN ELSEIF rslt = 1 THEN COMMIT Using sqlca; MessageBox('提示','自动组装成功',information!,OK!) Close(Parent) END IF end event type dw_1 from datawindow within w_outware_sale_mx4di integer width = 3584 integer height = 1348 integer taborder = 30 boolean bringtotop = true string title = "none" string dataobject = "dw_outware_sale_mx4di" boolean livescroll = true borderstyle borderstyle = stylelowered! end type event constructor;f_title_change(this) end event type cbx_1 from checkbox within w_outware_sale_mx4di integer x = 389 integer y = 1424 integer width = 402 integer height = 60 boolean bringtotop = true integer textsize = -9 integer weight = 400 fontcharset fontcharset = gb2312charset! fontpitch fontpitch = variable! string facename = "宋体" long textcolor = 33554432 long backcolor = 134217739 string text = "全选" end type event clicked;Long i dw_1.setredraw(false) IF This.Checked THEN FOR i = 1 To dw_1.RowCount() dw_1.Object.ch[i] = 1 NEXT ELSE FOR i = 1 To dw_1.RowCount() dw_1.Object.ch[i] = 0 NEXT END IF dw_1.setredraw(true) end event