$PBExportHeader$w_inware_cp_autoscll.srw forward global type w_inware_cp_autoscll from w_publ_base end type type dw_1 from u_dw_rbtnfilter within w_inware_cp_autoscll end type type dw_2 from u_dw_rbtnfilter within w_inware_cp_autoscll end type type cb_scll from uo_imflatbutton within w_inware_cp_autoscll end type type cbx_all from checkbox within w_inware_cp_autoscll end type type st_1 from statictext within w_inware_cp_autoscll end type type ddlb_1 from dropdownlistbox within w_inware_cp_autoscll end type type cb_storage from uo_imflatbutton within w_inware_cp_autoscll end type type ln_bar from line within w_inware_cp_autoscll end type type ln_bar2 from line within w_inware_cp_autoscll end type type r_bar from rectangle within w_inware_cp_autoscll end type type ln_1 from line within w_inware_cp_autoscll end type type ln_2 from line within w_inware_cp_autoscll end type end forward global type w_inware_cp_autoscll from w_publ_base integer width = 3634 integer height = 2304 string title = "生产进仓单辅助领料" boolean minbox = false windowtype windowtype = response! windowstate windowstate = maximized! event retrieve_mx ( ) dw_1 dw_1 dw_2 dw_2 cb_scll cb_scll cbx_all cbx_all st_1 st_1 ddlb_1 ddlb_1 cb_storage cb_storage ln_bar ln_bar ln_bar2 ln_bar2 r_bar r_bar ln_1 ln_1 ln_2 ln_2 end type global w_inware_cp_autoscll w_inware_cp_autoscll type variables s_edit_index_tran s_tran long ins_mtrlid,ins_scid int ins_storagetype = 0 // 0 - 取较少 1 - 取较多 decimal ins_cmpqty = 0 decimal ins_qty = 0 string ins_warecode = '' end variables forward prototypes public subroutine wf_cmp_enoughqty () public subroutine wf_setdefault (long arg_ifstorage, long arg_ifwrkgrpid) end prototypes event retrieve_mx();Long ll_row Long ll_mtrlid String ls_status,ls_woodcode,ls_pcode ll_row = dw_1.GetRow() IF ll_row <= 0 THEN dw_2.Reset() ELSE ll_mtrlid = dw_1.Object.u_prdpf_sonmtrlid[ll_row] ls_status = dw_1.Object.u_prdpf_status[ll_row] dw_2.Retrieve(ll_mtrlid,ls_status,ins_scid) END IF end event public subroutine wf_cmp_enoughqty ();//Decimal ld_min_rate,ld_max_rate,ld_cmpqty ////计算参考可生产数 //SELECT Min(Case (u_orderrqmtrl_scll.truerqqty - u_orderrqmtrl_scll.dstrqty) when 0 THEN 1 ELSE IsNull(uv_mtrlware.noallocqty, 0)/(u_orderrqmtrl_scll.truerqqty - u_orderrqmtrl_scll.dstrqty) END ) //INTO :ld_min_rate //FROM u_orderrqmtrl_scll Left Outer JOIN //uv_mtrlware ON u_orderrqmtrl_scll.MtrlID = uv_mtrlware.MtrlID AND //u_orderrqmtrl_scll.status = uv_mtrlware.status AND //u_orderrqmtrl_scll.woodcode = uv_mtrlware.woodcode AND //u_orderrqmtrl_scll.pcode = uv_mtrlware.pcode AND //u_orderrqmtrl_scll.scid = uv_mtrlware.scid //Where u_orderrqmtrl_scll.orderid = :ins_orderid //AND u_orderrqmtrl_scll.scid = :ins_scid; //IF sqlca.SQLCode <> 0 THEN // ld_min_rate = 0 //END IF // //IF ld_min_rate >= 1 THEN // // SELECT max(case u_orderrqmtrl_scll.truerqqty when 0 then 1 else (u_orderrqmtrl_scll.truerqqty - u_orderrqmtrl_scll.dstrqty) / u_orderrqmtrl_scll.truerqqty end ) // INTO :ld_max_rate // FROM u_orderrqmtrl_scll // WHERE u_orderrqmtrl_scll.orderid = :ins_orderid // AND u_orderrqmtrl_scll.scid = :ins_scid; // IF sqlca.SQLCode <> 0 THEN // ld_max_rate = 1 // END IF // // SELECT orderqty * :ld_max_rate // INTO :ld_cmpqty // FROM u_order_ml // WHERE orderid = :ins_orderid // AND scid = :ins_scid; // IF sqlca.SQLCode <> 0 THEN // ld_cmpqty = 0 // END IF // //ELSE // SELECT orderqty * :ld_min_rate // INTO :ld_cmpqty // FROM u_order_ml // WHERE orderid = :ins_orderid // AND scid = :ins_scid; // IF sqlca.SQLCode <> 0 THEN // ld_cmpqty = 0 // END IF //END IF //ins_cmpqty = ld_cmpqty ////em_qty.text = string(ld_cmpqty,'###0.'+Fill('#',f_sys_option_unit_dec())) ////st_msg.Text = '该指令参考可生产数:'+String(ld_cmpqty,'###0.'+Fill('#',f_sys_option_unit_dec())) // // // end subroutine public subroutine wf_setdefault (long arg_ifstorage, long arg_ifwrkgrpid);Int rslt = 1 Long ll_i Long ll_mtrlid String ls_status,ls_woodcode,ls_pcode Long ll_storageid,ll_wrkgrpid,ll_workgroupid dw_1.AcceptText() FOR ll_i = 1 TO dw_1.RowCount() ll_mtrlid = dw_1.Object.u_PrdPF_SonMtrlid[ll_i] ls_status = dw_1.Object.u_PrdPF_status[ll_i] ls_woodcode = dw_1.Object.u_PrdPF_woodcode[ll_i] ls_pcode = dw_1.Object.u_PrdPF_pcode[ll_i] ll_wrkgrpid = dw_1.Object.workgroupid[ll_i] IF arg_ifstorage = 1 THEN IF ins_storagetype = 0 THEN SELECT top 1 u_mtrlware.storageid INTO :ll_storageid FROM u_mtrlware,u_storage WHERE u_mtrlware.mtrlid = :ll_mtrlid AND u_mtrlware.status = :ls_status AND u_mtrlware.woodcode = :ls_woodcode AND u_mtrlware.pcode = :ls_pcode AND u_mtrlware.storageid = u_storage.storageid AND u_mtrlware.noallocqty > 0 Order By u_mtrlware.noallocqty; ELSE SELECT top 1 u_mtrlware.storageid INTO :ll_storageid FROM u_mtrlware,u_storage WHERE u_mtrlware.mtrlid = :ll_mtrlid AND u_mtrlware.status = :ls_status AND u_mtrlware.woodcode = :ls_woodcode AND u_mtrlware.pcode = :ls_pcode AND u_mtrlware.storageid = u_storage.storageid Order By u_mtrlware.noallocqty Desc; END IF IF sqlca.SQLCode <> 0 THEN ll_storageid = 0 END IF dw_1.Object.storageid[ll_i] = ll_storageid END IF IF arg_ifwrkgrpid = 1 THEN SELECT top 1 u_workgroup.workgroupid INTO :ll_workgroupid FROM u_workgroup left OUTER join u_sc_workgroup on u_workgroup.wrkGrpid = u_sc_workgroup.wrkGrpid Where u_sc_workgroup.wrkGrpid = :ll_wrkgrpid; IF sqlca.SQLCode <> 0 THEN ll_workgroupid = 0 END IF dw_1.Object.workgroupid[ll_i] = ll_workgroupid END IF NEXT dw_1.AcceptText() end subroutine event resize;call super::resize;ln_bar.EndX = THIS.Width ln_bar2.EndX = THIS.Width ln_1.EndX = THIS.Width ln_2.EndX = THIS.Width r_bar.Width = THIS.Width dw_1.Width = THIS.Width - dw_1.X - 40 - dw_2.width dw_1.Height = THIS.Height - dw_1.Y - 150 dw_2.Height = dw_1.Height dw_2.x = dw_1.x + dw_1.Width + 5 end event on w_inware_cp_autoscll.create int iCurrent call super::create this.dw_1=create dw_1 this.dw_2=create dw_2 this.cb_scll=create cb_scll this.cbx_all=create cbx_all this.st_1=create st_1 this.ddlb_1=create ddlb_1 this.cb_storage=create cb_storage this.ln_bar=create ln_bar this.ln_bar2=create ln_bar2 this.r_bar=create r_bar this.ln_1=create ln_1 this.ln_2=create ln_2 iCurrent=UpperBound(this.Control) this.Control[iCurrent+1]=this.dw_1 this.Control[iCurrent+2]=this.dw_2 this.Control[iCurrent+3]=this.cb_scll this.Control[iCurrent+4]=this.cbx_all this.Control[iCurrent+5]=this.st_1 this.Control[iCurrent+6]=this.ddlb_1 this.Control[iCurrent+7]=this.cb_storage this.Control[iCurrent+8]=this.ln_bar this.Control[iCurrent+9]=this.ln_bar2 this.Control[iCurrent+10]=this.r_bar this.Control[iCurrent+11]=this.ln_1 this.Control[iCurrent+12]=this.ln_2 end on on w_inware_cp_autoscll.destroy call super::destroy destroy(this.dw_1) destroy(this.dw_2) destroy(this.cb_scll) destroy(this.cbx_all) destroy(this.st_1) destroy(this.ddlb_1) destroy(this.cb_storage) destroy(this.ln_bar) destroy(this.ln_bar2) destroy(this.r_bar) destroy(this.ln_1) destroy(this.ln_2) end on event open;call super::open;dw_1.SetTransObject(sqlca) dw_2.SetTransObject(sqlca) s_tran = Message.PowerObjectParm ins_scid = s_tran.b_long ins_mtrlid = s_tran.c_long ins_qty = s_tran.b_decimal ins_warecode = s_tran.b_string //wf_cmp_enoughqty() //只显未自已管的仓库 datawindowchild childdw dw_1.SetTransObject (sqlca) dw_1.GetChild("storageid",childdw) childdw.SetTransObject (sqlca) IF childdw.Retrieve(ins_scid) = 0 THEN childdw.InsertRow(0) END IF // dw_1.Retrieve(ins_mtrlid,ins_qty) //查询默认值,仓库,工作中心 wf_setdefault(1,1) //参数1:是否查找仓库,参数2:是否查找工作中心 end event type cb_func from w_publ_base`cb_func within w_inware_cp_autoscll boolean visible = false end type type cb_exit from w_publ_base`cb_exit within w_inware_cp_autoscll integer x = 585 integer width = 151 integer height = 164 integer picsize = 16 toolbaralignment pic_align = alignattop! boolean border = false end type type dw_1 from u_dw_rbtnfilter within w_inware_cp_autoscll integer y = 180 integer width = 2405 integer height = 2000 integer taborder = 20 boolean bringtotop = true string dataobject = "dw_inware_cp_autoscll_list" boolean hscrollbar = true boolean vscrollbar = true end type event rowfocuschanged;call super::rowfocuschanged;IF currentrow > 0 THEN THIS.SelectRow(0,FALSE) THIS.SelectRow(currentrow,TRUE) END IF parent.triggerevent('retrieve_mx') end event event clicked;call super::clicked;IF row > 0 THEN THIS.SelectRow(0,FALSE) THIS.SelectRow(row,TRUE) this.setrow(row) END IF end event type dw_2 from u_dw_rbtnfilter within w_inware_cp_autoscll integer x = 2414 integer y = 180 integer width = 1179 integer height = 2000 integer taborder = 20 boolean bringtotop = true string dataobject = "dw_inware_cp_autoscll_mtrlware_mx\" boolean hscrollbar = true boolean vscrollbar = true end type event rowfocuschanged;call super::rowfocuschanged;IF currentrow > 0 THEN THIS.SelectRow(0,FALSE) THIS.SelectRow(currentrow,TRUE) END IF end event type cb_scll from uo_imflatbutton within w_inware_cp_autoscll integer width = 329 integer height = 164 integer taborder = 30 boolean bringtotop = true string text = "生成领料单" string normalpicname = "ok.bmp" integer picsize = 16 toolbaralignment pic_align = alignattop! boolean border = false end type event clicked;call super::clicked;//1.检查仓库,工作中心是否已填写 //2.检查仓库是否有库存 Long ll_i,ll_j Long cnt ,ll_cnt Long ll_mtrlid Long ll_storageid String ls_status,ls_woodcode,ls_pcode Decimal ld_emqty,ld_rate cnt = 0 FOR ll_i = 1 TO dw_1.RowCount() IF dw_1.Object.ch[ll_i] = 1 THEN IF dw_1.Object.storageid[ll_i] = 0 OR & dw_1.Object.workgroupid[ll_i] = 0 THEN MessageBox('提示','第'+String(ll_i)+'行,仓库及工组信息不完整,请检查!',information!,ok!) RETURN END IF ll_storageid = dw_1.Object.storageid[ll_i] ll_mtrlid = dw_1.Object.u_PrdPF_sonmtrlid[ll_i] ls_status = dw_1.Object.u_PrdPF_status[ll_i] ls_woodcode = dw_1.Object.u_PrdPF_woodcode[ll_i] ls_pcode = dw_1.Object.u_PrdPF_pcode[ll_i] ll_cnt = 0 SELECT count(*) INTO :ll_cnt FROM u_mtrlware WHERE storageid = :ll_storageid AND mtrlid = :ll_mtrlid AND status = :ls_status AND woodcode = :ls_woodcode AND pcode = :ls_pcode; IF sqlca.SQLCode <> 0 THEN MessageBox('错误','第'+String(ll_i)+'行,查询库存信息失败!',stopsign!,ok!) RETURN END IF IF ll_cnt = 0 THEN MessageBox('错误','第'+String(ll_i)+'行,相关用料在该仓库没有库存,请检查!',stopsign!,ok!) RETURN END IF cnt++ END IF NEXT IF cnt = 0 THEN MessageBox('提示','请选择要领料的内容',information!,ok!) RETURN END IF //3.按仓库,工组将内容分组 Long ll_storageid_arr[],ll_workgroupid_arr[] Long ll_arr ll_arr = 0 FOR ll_i = 1 TO dw_1.RowCount() IF dw_1.Object.ch[ll_i] = 1 THEN FOR ll_j = 1 TO ll_arr IF dw_1.Object.storageid[ll_i] = ll_storageid_arr[ll_j] AND & dw_1.Object.workgroupid[ll_i] = ll_workgroupid_arr[ll_j] THEN GOTO next_ END IF NEXT ll_arr++ ll_storageid_arr[ll_arr] = dw_1.Object.storageid[ll_i] ll_workgroupid_arr[ll_arr] = dw_1.Object.workgroupid[ll_i] END IF next_: NEXT //4.建立领料单 Long i,j Long ll_mtrlwareid Decimal ld_cost Long ll_printid Long ll_cp_mtrlid,ll_ifrel,ll_relid,ll_relprintid, ll_relid2 String arg_msg uo_outware_scll uo_ware uo_ware = CREATE uo_outware_scll uo_ware.if_getid_ture = FALSE uo_ware.commit_transaction = sqlca FOR i = 1 TO ll_arr IF uo_ware.newbegin(ins_scid,3,arg_msg) = 0 THEN ROLLBACK; MessageBox('错误',arg_msg,stopsign!,ok!) RETURN END IF uo_ware.outdate = DateTime(Today(),Time(0)) uo_ware.outrep = publ_operator uo_ware.part = ins_warecode uo_ware.dscrp = '生产进仓单:'+ins_warecode+' 辅助生成' uo_ware.cusname = '' uo_ware.storageid = ll_storageid_arr[i] uo_ware.relid = ll_workgroupid_arr[i] uo_ware.relint_1 = 0 ll_printid = 0 FOR j = 1 TO dw_1.RowCount() IF dw_1.Object.storageid[j] = ll_storageid_arr[i] AND & dw_1.Object.workgroupid[j] = ll_workgroupid_arr[i] AND & dw_1.Object.ch[j] = 1 THEN ll_printid++ ll_mtrlid = dw_1.Object.u_PrdPF_SonMtrlid[j] ls_status = dw_1.Object.u_PrdPF_status[j] ls_woodcode = dw_1.Object.u_PrdPF_woodcode[j] ls_pcode = dw_1.Object.u_PrdPF_pcode[j] SELECT top 1 mtrlwareid,cost INTO :ll_mtrlwareid,:ld_cost FROM u_mtrlware WHERE storageid = :ll_storageid_arr[i] AND mtrlid = :ll_mtrlid AND status = :ls_status AND woodcode = :ls_woodcode AND pcode = :ls_pcode Order By noallocqty Desc; IF sqlca.SQLCode <> 0 THEN ROLLBACK; MessageBox('错误','查询库存信息失败,第'+String(j)+'行',stopsign!,ok!) RETURN END IF IF uo_ware.acceptmx(ll_mtrlwareid,& dw_1.Object.reqty[j],& dw_1.Object.addqty[j],& ld_cost,& 1,& '',& ll_printid,& arg_msg,& ll_ifrel,& ll_relid,& ll_relprintid,& ll_relid2,& ins_mtrlid,0,0,& dw_1.Object.u_mtrldef_unit[j],1,'','') = 0 THEN ROLLBACK; MessageBox('错误',arg_msg,stopsign!,ok!) RETURN END IF END IF NEXT IF uo_ware.Save(FALSE,arg_msg) = 0 THEN ROLLBACK; MessageBox('错误',arg_msg,stopsign!,ok!) RETURN END IF NEXT COMMIT; DESTROY uo_ware MessageBox('提示','生成领料单成功!',information!,ok!) Close(PARENT) end event type cbx_all from checkbox within w_inware_cp_autoscll integer x = 1189 integer y = 80 integer width = 261 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 = 67108864 string text = "全选" boolean checked = true end type event constructor;this.backcolor = 14215660 end event event clicked;Long ll_i dw_1.SetRedraw(FALSE) IF THIS.Checked THEN FOR ll_i = 1 TO dw_1.RowCount() dw_1.Object.ch[ll_i] = 1 NEXT ELSE FOR ll_i = 1 TO dw_1.RowCount() dw_1.Object.ch[ll_i] = 0 NEXT END IF dw_1.SetRedraw(TRUE) end event type st_1 from statictext within w_inware_cp_autoscll integer x = 1481 integer y = 84 integer width = 453 integer height = 48 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 = "仓库默认选择策略" boolean focusrectangle = false end type event constructor;this.backcolor = 14215660 end event type ddlb_1 from dropdownlistbox within w_inware_cp_autoscll integer x = 1947 integer y = 68 integer width = 645 integer height = 300 integer taborder = 20 boolean bringtotop = true integer textsize = -9 integer weight = 400 fontcharset fontcharset = gb2312charset! fontpitch fontpitch = variable! string facename = "宋体" long textcolor = 33554432 string text = "先取库存较少的仓库" boolean sorted = false boolean vscrollbar = true string item[] = {"先取库存较少的仓库","先取库存较多的仓库"} borderstyle borderstyle = stylelowered! end type event selectionchanged;IF THIS.Text = '先取库存较少的仓库' THEN ins_storagetype = 0 ELSE ins_storagetype = 1 END IF f_SetProfileString (sys_empid, "w_order_ml_zl_autoscll", "storagetype", String(ins_storagetype)) end event event constructor;ins_storagetype = Long(f_ProfileString (sys_empid, "w_order_ml_zl_autoscll", "storagetype", "0")) IF ins_storagetype = 0 THEN ddlb_1.Text = '先取库存较少的仓库' ELSE ddlb_1.Text = '先取库存较多的仓库' END IF end event type cb_storage from uo_imflatbutton within w_inware_cp_autoscll integer x = 329 integer width = 256 integer height = 164 integer taborder = 30 boolean bringtotop = true string text = "查找仓库" string normalpicname = "FIND.BMP" integer picsize = 16 toolbaralignment pic_align = alignattop! boolean border = false end type event clicked;call super::clicked;IF MessageBox('询问','是否确定要按['+ddlb_1.Text+']的规则查找仓库?',question!,yesno!) = 2 THEN RETURN wf_setdefault(1,0) end event type ln_bar from line within w_inware_cp_autoscll long linecolor = 268435456 integer linethickness = 4 integer beginy = 168 integer endx = 2007 integer endy = 168 end type type ln_bar2 from line within w_inware_cp_autoscll long linecolor = 16777215 integer linethickness = 4 integer beginy = 172 integer endx = 2039 integer endy = 172 end type type r_bar from rectangle within w_inware_cp_autoscll long linecolor = 16777215 integer linethickness = 4 long fillcolor = 1073741824 integer x = 1531 integer width = 146 integer height = 68 end type event constructor;this.fillcolor = 14215660 this.linecolor = 14215660 this.x = -1 this.y = -1 this.height = ln_bar.beginy - 5 end event type ln_1 from line within w_inware_cp_autoscll boolean visible = false long linecolor = 268435456 integer linethickness = 4 integer beginy = 272 integer endx = 2007 integer endy = 272 end type type ln_2 from line within w_inware_cp_autoscll boolean visible = false long linecolor = 16777215 integer linethickness = 4 integer beginy = 276 integer endx = 2039 integer endy = 276 end type