TMP

TMP
Dim cqty

Private Sub btn_s_Click()

    
'判断各条件是否符合
    If mb.Text = "" Then MsgBox "请选择主板料号!", vbCritical, "错误": mb.SetFocus: Exit Sub
    
If panelo.Text = "" Then MsgBox "请选择原屏料号!", vbCritical, "错误": panelo.SetFocus: Exit Sub
    
If paneln.Text = "" Then MsgBox "请选择新屏料号!", vbCritical, "错误": paneln.SetFocus: Exit Sub
    
If loc.Text = "" Then MsgBox "请选择库位!", vbCritical, "错误": loc.SetFocus: Exit Sub

    
If Replace(Split(panelo.Text, "/")(0), "-F", "") = Replace(paneln.Text, "-F", "") Then
        
MsgBox "原屏与新屏不能相同!", vbCritical, "提示"
        
Exit Sub
    
End If

    btn_s.Enabled 
= False
    btnOk.Enabled 
= False

    FG1.Clear
    FG1.Rows 
= 1
    FG1.FixedRows 
= 0
    FG1.AddItem 
" " & vbTab & "料号" & vbTab & "描述" & vbTab & "用量", 0
    FG1.FixedRows 
= 1
    FG2.Clear
    FG2.Rows 
= 1
    FG2.FixedRows 
= 0
    FG2.AddItem 
" " & vbTab & "料号" & vbTab & "描述" & vbTab & "用量", 0
    FG2.FixedRows 
= 1

    
'取该机型原屏配所选主板的逻辑关系物料
    ConSQL

    
Set rs = CreateObject("adodb.recordset")
    SQL 
= "select skd_comp,skd_qty_per,(select rtrim(pt_desc1)+rtrim(pt_desc2) from pt_mstr where pt_part=skd_comp) as skd_desc from skd_det where skd_model='" & md.Caption & "' and skd_pt_no1='" & Replace(Split(panelo.Text, "/")(0), "-F", "") & "' and skd_pt_no2='" & mb.Text & "'"
    rs.Open SQL, ConnSQL, 
1, 1
    i 
= 1
    
Do While Not rs.EOF
        FG1.AddItem 
" " & vbTab & Trim(rs("skd_comp")) & vbTab & rs("skd_desc") & vbTab & rs("skd_qty_per"), i
        i 
= i + 1
        rs.MoveNext
    
Loop

    
'取原屏共用料里的差异料
    Set rs = CreateObject("adodb.recordset")
    SQL 
= "select skps_comp,skps_qty_per,(select rtrim(pt_desc1)+rtrim(pt_desc2) from pt_mstr where pt_part=skps_comp) as skps_desc from skps_mstr where skps_model='" & md.Caption & "' and skps_part='" & Replace(Split(panelo.Text, "/")(0), "-F", "") & "'"
    rs.Open SQL, ConnSQL, 
1, 1
    i 
= 1
    
Do While Not rs.EOF
        FG1.AddItem 
" " & vbTab & Trim(rs("skps_comp")) & vbTab & rs("skps_desc") & vbTab & rs("skps_qty_per"), i
        i 
= i + 1
        rs.MoveNext
    
Loop

    
'取新屏的逻辑关系差异料
    Set rs = CreateObject("adodb.recordset")
    SQL 
= "select skd_comp,skd_qty_per,(select rtrim(pt_desc1)+rtrim(pt_desc2) from pt_mstr where pt_part=skd_comp) as skd_desc from skd_det where skd_model='" & md.Caption & "' and skd_pt_no1='" & Replace(paneln.Text, "-F", "") & "' and skd_pt_no2='" & mb.Text & "'"
    rs.Open SQL, ConnSQL, 
1, 1
    i 
= 1
    
Do While Not rs.EOF
        FG2.AddItem 
" " & vbTab & Trim(rs("skd_comp")) & vbTab & rs("skd_desc") & vbTab & rs("skd_qty_per"), i
        i 
= i + 1
        rs.MoveNext
    
Loop

    
'取新屏共用料里的差异料
    Set rs = CreateObject("adodb.recordset")
    SQL 
= "select skps_comp,skps_qty_per,(select rtrim(pt_desc1)+rtrim(pt_desc2) from pt_mstr where pt_part=skps_comp) as skps_desc from skps_mstr where skps_model='" & md.Caption & "' and skps_part='" & Replace(paneln.Text, "-F", "") & "'"
    rs.Open SQL, ConnSQL, 
1, 1
    i 
= 1
    
Do While Not rs.EOF
        FG2.AddItem 
" " & vbTab & Trim(rs("skps_comp")) & vbTab & rs("skps_desc") & vbTab & rs("skps_qty_per"), i
        i 
= i + 1
        rs.MoveNext
    
Loop

    
'给有差异的物料加颜色
    '先把表1遍历一遍
    For i = 0 To FG1.Rows - 2
        tmp 
= 0
        
For j = 0 To FG2.Rows - 2
            
If FG1.TextMatrix(i, 1) = FG2.TextMatrix(j, 1) Then
                tmp 
= 1
            
End If
        
Next j
        
If tmp = 0 Then FG1.Col = 1: FG1.Row = i: FG1.CellForeColor = vbRed: FG1.Col = 2: FG1.Row = i: FG1.CellForeColor = vbRed
    
Next i
    
'再把表2反过来遍历一遍
    For i = 0 To FG2.Rows - 2
        tmp 
= 0
        
For j = 0 To FG1.Rows - 2
            
If FG2.TextMatrix(i, 1) = FG1.TextMatrix(j, 1) Then
                tmp 
= 1
            
End If
        
Next j
        
If tmp = 0 Then FG2.Col = 1: FG2.Row = i: FG2.CellForeColor = vbRed: FG2.Col = 2: FG2.Row = i: FG2.CellForeColor = vbRed
    
Next i

    btn_s.Enabled 
= True
    btnOk.Enabled 
= True
End Sub

Private Sub Btnok_Click()
    
If MsgBox(vbCrLf & "你确定要更改吗?" & vbCrLf & vbCrLf, vbInformation + vbOKCancel, "提示") = vbCancel Then Exit Sub

    btnOk.Enabled 
= False
    btn_s.Enabled 
= False

    ConSQL

    
'判断变更数量是否大于原订单数
    If Int(qty.Text) > Int(cqty) Then
        
MsgBox "更改数量不能大于订单数量!", vbCritical, "错误"
        qty.SetFocus
        btnOk.Enabled 
= True
        btn_s.Enabled 
= True
        
Exit Sub
    
End If

    
'判断原屏数量是否够减
    SQL = "select * from wod_det where wod_qty_req>=" & qty.Text & " and wod_nbr='" & wod_nbr.Text & "' and wod_part='" & Split(panelo.Text, "/")(0) & "'"
    
Set rs = CreateObject("adodb.recordset")
    rs.Open SQL, ConnSQL, 
1, 1
    
If rs.EOF Then
        
MsgBox "原屏在物料清单中需求量小于更改数,不可更改!", vbCritical, "错误"
        btn_s.Enabled 
= True
        
Exit Sub
    
End If

    
'判断原屏差异料在物料清单中是否够减
    For i = 1 To FG1.Rows - 2
        FG1.Col 
= 1: FG1.Row = i
        
If FG1.CellForeColor = vbRed Then
            SQL 
= "select * from wod_det where wod_qty_req>=" & qty.Text & "*" & FG1.TextMatrix(i, 3) & " and wod_nbr='" & wod_nbr.Text & "' and wod_part='" & FG1.TextMatrix(i, 1) & "'"
            
Set rs = CreateObject("adodb.recordset")
            rs.Open SQL, ConnSQL, 
1, 1
            
If rs.EOF Then
                
MsgBox "" & FG1.TextMatrix(i, 1) & " 在物料清单中需求量小于更改数,不可更改!", vbCritical, "错误"
                btn_s.Enabled 
= True
                
Exit Sub
            
End If
        
End If
    
Next i

    
'变更原屏数量
    SQL = "update wod_det set wod_qty_req=wod_qty_req-" & qty.Text & " where wod_nbr='" & wod_nbr.Text & "' and wod_part='" & Split(panelo.Text, "/")(0) & "'"
    
Set rs = CreateObject("adodb.recordset")
    rs.Open SQL, ConnSQL, 
1, 1

    
'判断是否有新屏料号
    SQL = "select * from wod_det where wod_nbr='" & wod_nbr.Text & "' and wod_part='" & paneln.Text & "'"
    
Set rs = CreateObject("adodb.recordset")
    rs.Open SQL, ConnSQL, 
1, 1

    
If Not rs.EOF Then
        
'如有,直接加上数量
        SQL = "update wod_det set wod_qty_req=wod_qty_req+" & qty.Text & " where wod_nbr='" & wod_nbr.Text & "' and wod_part='" & paneln.Text & "'"
    
Else
        
'如没有,则新加一行
        SQL = "insert wod_det(wod_seq,wod_site,wod_nbr,wod_part,wod_loc,wod_qty_per,wod_qty_req,wod_due_date) "
        SQL 
= SQL & "select (select max(wod_seq)+1 from wod_det where wod_nbr='" & wod_nbr.Text & "' and wod_part like '742%'),1010,'" & wod_nbr.Text & "','" & paneln.Text & "','" & loc.Text & "',1," & qty.Text & ",getdate()"
    
End If

    
Set rs = CreateObject("adodb.recordset")
    rs.Open SQL, ConnSQL, 
1, 1

    
'变更差异料内容
    For i = 1 To FG1.Rows - 2
        FG1.Col 
= 1: FG1.Row = i
        
'把原屏红色的物料数量减掉
        If FG1.CellForeColor = vbRed Then
            SQL 
= "update wod_det set wod_qty_req=wod_qty_req-" & qty.Text & "*" & FG1.TextMatrix(i, 3) & " where wod_nbr='" & wod_nbr.Text & "' and wod_part='" & FG1.TextMatrix(i, 1) & "'"
            
Set rs = CreateObject("adodb.recordset")
            rs.Open SQL, ConnSQL, 
1, 1
        
End If
    
Next i

    
For i = 1 To FG2.Rows - 2
        FG2.Col 
= 1: FG2.Row = i
        
'判断新屏红色的物料是否存在
        If FG2.CellForeColor = vbRed Then

            SQL 
= "select * from wod_det where wod_nbr='" & wod_nbr.Text & "' and wod_part='" & FG2.TextMatrix(i, 1) & "'"
            
Set rs = CreateObject("adodb.recordset")
            rs.Open SQL, ConnSQL, 
1, 1

            
If Not rs.EOF Then
                
'如有,直接加上数量
                SQL = "update wod_det set wod_qty_req=wod_qty_req+" & qty.Text & "*" & FG2.TextMatrix(i, 3) & " where wod_nbr='" & wod_nbr.Text & "' and wod_part='" & FG2.TextMatrix(i, 1) & "'"
            
Else
                
'如没有,则新加一行
                SQL = "insert wod_det(wod_seq,wod_site,wod_nbr,wod_part,wod_loc,wod_qty_per,wod_qty_req,wod_due_date) "
                SQL 
= SQL & "select (select isnull(max(wod_seq)+1,1) from wod_det where wod_nbr='" & wod_nbr.Text & "' and wod_seq<1000),1010,'" & wod_nbr.Text & "','" & FG2.TextMatrix(i, 1) & "',(select pt_loc_iss from pt_mstr where pt_part='" & FG2.TextMatrix(i, 1) & "')," & FG2.TextMatrix(i, 3) & "," & qty.Text * FG2.TextMatrix(i, 3) & ",getdate()"
            
End If

            
Set rs = CreateObject("adodb.recordset")
            rs.Open SQL, ConnSQL, 
1, 1
        
End If
    
Next i

    
MsgBox "更改成功,请到生产单物料清单里核对一遍!", vbInformation, "提示"

End Sub

Private Sub Form_Load()
    FG1.Clear
    FG1.Cols 
= 4
    FG1.Rows 
= 1
    FG1.FixedRows 
= 0
    FG1.AddItem 
" " & vbTab & "料号" & vbTab & "描述" & vbTab & "用量", 0
    FG1.FixedRows 
= 1
    
With FG1
        .ColWidth(
0) = 300
        .ColWidth(
1) = 1500
        .ColWidth(
2) = 5200
        .ColWidth(
3) = 500
        
For i = 0 To .Cols - 1
            .FixedAlignment(i) 
= flexAlignLeftCenter
            .ColAlignment(i) 
= flexAlignLeftCenter
        
Next
    
End With
    
    FG2.Clear
    FG2.Cols 
= 4
    FG2.Rows 
= 1
    FG2.FixedRows 
= 0
    FG2.AddItem 
" " & vbTab & "料号" & vbTab & "描述" & vbTab & "用量", 0
    FG2.FixedRows 
= 1
    
With FG2
        .ColWidth(
0) = 300
        .ColWidth(
1) = 1500
        .ColWidth(
2) = 5200
        .ColWidth(
3) = 500
        
For i = 0 To .Cols - 1
            .FixedAlignment(i) 
= flexAlignLeftCenter
            .ColAlignment(i) 
= flexAlignLeftCenter
        
Next
    
End With
    
    tips.Caption 
= "使用说明:1.输生产单号;2.填写要更改的屏数量;3.选原屏料号;" & vbCrLf & "4.选新屏料号;5.选库位;6.计算差异料;7.确认无误后更改进物料清单。"
End Sub


Private Sub wod_nbr_LostFocus()
    btnOk.Enabled 
= False

    ConSQL
    
If Len(wod_nbr.Text) <> 0 Then
        
Set rs = CreateObject("adodb.recordset")
        SQL 
= "select wo_qty_ord,(select pt_group from pt_mstr where pt_part=wo_part) as model from wo_mstr where wo_nbr = '" & Trim(wod_nbr.Text) & "' and wo_status<>'C'"
        rs.Open SQL, ConnSQL, 
1, 1

        
If rs.EOF Then
            
MsgBox "生产单不存在或已关闭!", vbCritical, "错误"
            wod_nbr.SetFocus
            
Exit Sub
        
End If

        
Dim model
        model 
= rs("model")
        md.Caption 
= model
        orderqty.Caption 
= "生产数量:" & rs(0)
        cqty 
= rs(0)

        mb.Clear
        panelo.Clear
        paneln.Clear

        
Set rs = CreateObject("adodb.recordset")
        SQL 
= "select * from wod_det where wod_nbr = '" & Trim(wod_nbr.Text) & "' and (wod_part like '941-11%' or wod_part like '742%') and wod_qty_req>0"
        rs.Open SQL, ConnSQL, 
1, 1
        
Do While Not rs.EOF
            
'把主板加进下拉框
            If Left(rs("wod_part"), 3) = "941" Then
                mb.AddItem (
Trim(rs("wod_part")))
            
End If
            
'把屏加进下拉框
            If Left(rs("wod_part"), 3) = "742" Then
                panelo.AddItem (
Trim(rs("wod_part")) & "/" & rs("wod_loc"))
            
End If
            rs.MoveNext
        
Loop
        
If mb.ListCount > 0 Then mb.ListIndex = 0
        
If panelo.ListCount > 0 Then panelo.ListIndex = 0

        
'根据机型和主板,取该机型在逻辑关系里维护的屏,加进新屏的下拉框
        Set rs = CreateObject("adodb.recordset")
        SQL 
= "select distinct sk_pt_no1 from sk_mstr where sk_model='" & model & "' and sk_pt_no2 in(select wod_part from wod_det where wod_nbr='" & Trim(wod_nbr.Text) & "' and wod_part like '941-11%')"
        rs.Open SQL, ConnSQL, 
1, 1
        
Do While Not rs.EOF
            paneln.AddItem (
Trim(rs("sk_pt_no1")))
            rs.MoveNext
        
Loop
    
End If

    btn_s.Enabled 
= True
End Sub

 

posted @ 2010-10-28 14:35  觅剑  阅读(297)  评论(0)    收藏  举报