|
@@ -667,142 +667,142 @@ Public Class 生產排程表
|
667
|
667
|
End If
|
668
|
668
|
Dim 完工日期 As String = 完工日期_dtp.Value.ToString("yyyy/MM/dd")
|
669
|
669
|
|
670
|
|
- '' 執行原料庫存檢查作業
|
671
|
|
- 'Dim 產品BOM編號 As String
|
672
|
|
- 'Dim BOM明細料號 As New Dictionary(Of String, Tuple(Of String, Decimal))
|
673
|
|
- 'Dim 配比流水號 As String = "" : Dim 混凝土用量 As String = "" : Dim 混凝土料號 As String = ""
|
674
|
|
-
|
675
|
|
- ''SQL_產品BOM表_產品流水號查詢_讀取(料號_tb.Text)
|
676
|
|
- 'SQL_產品BOM表_產品流水號查詢_讀取(明細選擇料號)
|
677
|
|
- 'If dr.Read Then
|
678
|
|
- ' 產品BOM編號 = dr("產品流水號").ToString
|
679
|
|
-
|
680
|
|
- ' SQL_產品BOM明細表_配比號查詢(產品BOM編號)
|
681
|
|
- ' If dr.Read Then
|
682
|
|
- ' 配比流水號 = dr("配比流水號").ToString
|
683
|
|
- ' 混凝土用量 = dr("數量").ToString
|
684
|
|
- ' 混凝土料號 = dr("物料料號").ToString
|
685
|
|
- ' End If
|
686
|
|
-
|
687
|
|
- ' SQL_產品BOM明細表_料號查詢_讀取(產品BOM編號)
|
688
|
|
- ' While dr.Read
|
689
|
|
- ' ' 將 "物料料號" 作為 Key,並存放名稱和數量到 Tuple
|
690
|
|
- ' Dim 物料料號 As String = dr("物料料號").ToString
|
691
|
|
- ' Dim 原料名稱 As String = dr("原料名稱").ToString
|
692
|
|
- ' Dim 原料數量 As Decimal = CDec(dr("數量"))
|
693
|
|
- ' BOM明細料號.Add(物料料號, Tuple.Create(原料名稱, 原料數量))
|
694
|
|
- ' End While
|
695
|
|
- 'Else
|
696
|
|
- ' MGB("錯誤! 此產品找不到產品流水號。", 1)
|
697
|
|
- ' Exit Sub
|
698
|
|
- 'End If
|
699
|
|
-
|
700
|
|
- 'Dim 砂庫存量 As Decimal = 取得水泥原料庫存量("砂")
|
701
|
|
- 'Dim 三分石庫存量 As Decimal = 取得水泥原料庫存量("三分石")
|
702
|
|
- 'Dim 六分石庫存量 As Decimal = 取得水泥原料庫存量("六分石")
|
703
|
|
- 'Dim 水泥庫存量 As Decimal = 取得水泥原料庫存量("水泥")
|
704
|
|
- 'Dim 爐石庫存量 As Decimal = 取得水泥原料庫存量("爐石")
|
705
|
|
- 'Dim 藥劑庫存量 As Decimal = 取得水泥原料庫存量("藥劑")
|
706
|
|
-
|
707
|
|
- 'Dim 砂用量 As Decimal = (取得水泥原料配比用量(配比流水號, "砂I") + 取得水泥原料配比用量(配比流水號, "砂II")) * CDec(混凝土用量)
|
708
|
|
- 'Dim 三分石用量 As Decimal = 取得水泥原料配比用量(配比流水號, "三分石") * CDec(混凝土用量)
|
709
|
|
- 'Dim 六分石用量 As Decimal = 取得水泥原料配比用量(配比流水號, "六分石") * CDec(混凝土用量)
|
710
|
|
- 'Dim 水泥用量 As Decimal = (取得水泥原料配比用量(配比流水號, "水泥I") + 取得水泥原料配比用量(配比流水號, "水泥II")) * CDec(混凝土用量)
|
711
|
|
- 'Dim 爐石用量 As Decimal = 取得水泥原料配比用量(配比流水號, "爐石") * CDec(混凝土用量)
|
712
|
|
- 'Dim 藥劑用量 As Decimal = 取得水泥原料配比用量(配比流水號, "藥劑") * CDec(混凝土用量)
|
713
|
|
-
|
714
|
|
- 'If 砂用量 > 砂庫存量 Then MGB("砂庫存量不足!", 1) : Exit Sub
|
715
|
|
- 'If 三分石用量 > 三分石庫存量 Then MGB("三分石庫存量不足!", 1) : Exit Sub
|
716
|
|
- 'If 六分石用量 > 六分石庫存量 Then MGB("六分石庫存量不足!", 1) : Exit Sub
|
717
|
|
- 'If 水泥用量 > 水泥庫存量 Then MGB("水泥庫存量不足!", 1) : Exit Sub
|
718
|
|
- 'If 爐石用量 > 爐石庫存量 Then MGB("爐石庫存量不足!", 1) : Exit Sub
|
719
|
|
- 'If 藥劑用量 > 藥劑庫存量 Then MGB("藥劑用量不足!", 1) : Exit Sub
|
720
|
|
-
|
721
|
|
- 'Try
|
722
|
|
- ' ' 遍歷 BOM明細料號 Dictionary 的每個項目進行庫存檢查
|
723
|
|
- ' For Each kvp As KeyValuePair(Of String, Tuple(Of String, Decimal)) In BOM明細料號
|
724
|
|
- ' Dim 料號 As String = kvp.Key
|
725
|
|
- ' Dim 名稱 As String = kvp.Value.Item1
|
726
|
|
- ' Dim 計算數量 As Decimal = CDec(kvp.Value.Item2) * CDec(入庫數_tb.Text)
|
727
|
|
- ' Dim 新庫存編號 As String = 產生新流水號("SK", "原料庫存表", "庫存編號")
|
728
|
|
-
|
729
|
|
- ' If 出庫作業系統.檢查庫存(新庫存編號, 料號, 計算數量.ToString) Then
|
730
|
|
- ' ' 庫存充足,無需動作
|
731
|
|
- ' Else
|
732
|
|
- ' ' 顯示包含 "料號" 和 "名稱" 的訊息
|
733
|
|
- ' MessageBox.Show("庫存不足!料號:" & 料號 & " 名稱:" & 名稱 & " 所需數量:" & 計算數量, "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning)
|
734
|
|
- ' End If
|
735
|
|
- ' Next
|
736
|
|
-
|
737
|
|
- ' 所有原料充足,執行產品入庫更新
|
738
|
|
- PA = 明細流水號_tb.Text : PA1 = 項次_tb.Text : PA2 = 入庫數_tb.Text
|
|
670
|
+ ' 執行原料庫存檢查作業
|
|
671
|
+ Dim 產品BOM編號 As String
|
|
672
|
+ Dim BOM明細料號 As New Dictionary(Of String, Tuple(Of String, Decimal))
|
|
673
|
+ Dim 配比流水號 As String = "" : Dim 混凝土用量 As String = "" : Dim 混凝土料號 As String = ""
|
|
674
|
+
|
|
675
|
+ 'SQL_產品BOM表_產品流水號查詢_讀取(料號_tb.Text)
|
|
676
|
+ SQL_產品BOM表_產品流水號查詢_讀取(明細選擇料號)
|
|
677
|
+ If dr.Read Then
|
|
678
|
+ 產品BOM編號 = dr("產品流水號").ToString
|
|
679
|
+
|
|
680
|
+ SQL_產品BOM明細表_配比號查詢(產品BOM編號)
|
|
681
|
+ If dr.Read Then
|
|
682
|
+ 配比流水號 = dr("配比流水號").ToString
|
|
683
|
+ 混凝土用量 = dr("數量").ToString
|
|
684
|
+ 混凝土料號 = dr("物料料號").ToString
|
|
685
|
+ End If
|
|
686
|
+
|
|
687
|
+ SQL_產品BOM明細表_料號查詢_讀取(產品BOM編號)
|
|
688
|
+ While dr.Read
|
|
689
|
+ ' 將 "物料料號" 作為 Key,並存放名稱和數量到 Tuple
|
|
690
|
+ Dim 物料料號 As String = dr("物料料號").ToString
|
|
691
|
+ Dim 原料名稱 As String = dr("原料名稱").ToString
|
|
692
|
+ Dim 原料數量 As Decimal = CDec(dr("數量"))
|
|
693
|
+ BOM明細料號.Add(物料料號, Tuple.Create(原料名稱, 原料數量))
|
|
694
|
+ End While
|
|
695
|
+ Else
|
|
696
|
+ MGB("錯誤! 此產品找不到產品流水號。", 1)
|
|
697
|
+ Exit Sub
|
|
698
|
+ End If
|
|
699
|
+
|
|
700
|
+ Dim 砂庫存量 As Decimal = 取得水泥原料庫存量("砂")
|
|
701
|
+ Dim 三分石庫存量 As Decimal = 取得水泥原料庫存量("三分石")
|
|
702
|
+ Dim 六分石庫存量 As Decimal = 取得水泥原料庫存量("六分石")
|
|
703
|
+ Dim 水泥庫存量 As Decimal = 取得水泥原料庫存量("水泥")
|
|
704
|
+ Dim 爐石庫存量 As Decimal = 取得水泥原料庫存量("爐石")
|
|
705
|
+ Dim 藥劑庫存量 As Decimal = 取得水泥原料庫存量("藥劑")
|
|
706
|
+
|
|
707
|
+ Dim 砂用量 As Decimal = (取得水泥原料配比用量(配比流水號, "砂I") + 取得水泥原料配比用量(配比流水號, "砂II")) * CDec(混凝土用量)
|
|
708
|
+ Dim 三分石用量 As Decimal = 取得水泥原料配比用量(配比流水號, "三分石") * CDec(混凝土用量)
|
|
709
|
+ Dim 六分石用量 As Decimal = 取得水泥原料配比用量(配比流水號, "六分石") * CDec(混凝土用量)
|
|
710
|
+ Dim 水泥用量 As Decimal = (取得水泥原料配比用量(配比流水號, "水泥I") + 取得水泥原料配比用量(配比流水號, "水泥II")) * CDec(混凝土用量)
|
|
711
|
+ Dim 爐石用量 As Decimal = 取得水泥原料配比用量(配比流水號, "爐石") * CDec(混凝土用量)
|
|
712
|
+ Dim 藥劑用量 As Decimal = 取得水泥原料配比用量(配比流水號, "藥劑") * CDec(混凝土用量)
|
|
713
|
+
|
|
714
|
+ If 砂用量 > 砂庫存量 Then MGB("砂庫存量不足!", 1) : Exit Sub
|
|
715
|
+ If 三分石用量 > 三分石庫存量 Then MGB("三分石庫存量不足!", 1) : Exit Sub
|
|
716
|
+ If 六分石用量 > 六分石庫存量 Then MGB("六分石庫存量不足!", 1) : Exit Sub
|
|
717
|
+ If 水泥用量 > 水泥庫存量 Then MGB("水泥庫存量不足!", 1) : Exit Sub
|
|
718
|
+ If 爐石用量 > 爐石庫存量 Then MGB("爐石庫存量不足!", 1) : Exit Sub
|
|
719
|
+ If 藥劑用量 > 藥劑庫存量 Then MGB("藥劑用量不足!", 1) : Exit Sub
|
|
720
|
+
|
|
721
|
+ Try
|
|
722
|
+ ' 遍歷 BOM明細料號 Dictionary 的每個項目進行庫存檢查
|
|
723
|
+ For Each kvp As KeyValuePair(Of String, Tuple(Of String, Decimal)) In BOM明細料號
|
|
724
|
+ Dim 料號 As String = kvp.Key
|
|
725
|
+ Dim 名稱 As String = kvp.Value.Item1
|
|
726
|
+ Dim 計算數量 As Decimal = CDec(kvp.Value.Item2) * CDec(入庫數_tb.Text)
|
|
727
|
+ Dim 新庫存編號 As String = 產生新流水號("SK", "原料庫存表", "庫存編號")
|
|
728
|
+
|
|
729
|
+ If 出庫作業系統.檢查庫存(新庫存編號, 料號, 計算數量.ToString) Then
|
|
730
|
+ ' 庫存充足,無需動作
|
|
731
|
+ Else
|
|
732
|
+ ' 顯示包含 "料號" 和 "名稱" 的訊息
|
|
733
|
+ MessageBox.Show("庫存不足!料號:" & 料號 & " 名稱:" & 名稱 & " 所需數量:" & 計算數量, "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning)
|
|
734
|
+ End If
|
|
735
|
+ Next
|
|
736
|
+
|
|
737
|
+ ' 所有原料充足,執行產品入庫更新
|
|
738
|
+ PA = 明細流水號_tb.Text : PA1 = 項次_tb.Text : PA2 = 入庫數_tb.Text
|
739
|
739
|
SQL_排程表完工項目資料_更新(完工日期) : Set_排程清單() : 產品庫存表.Set_生產庫存清單()
|
740
|
740
|
PA = "" : PA1 = "" : PA2 = "" : conn.Close()
|
741
|
741
|
|
742
|
|
- 'Catch ex As Exception
|
743
|
|
- ' MessageBox.Show("庫存檢查失敗:" & ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error)
|
744
|
|
- 'End Try
|
745
|
|
-
|
746
|
|
- 'Dim 對應水泥出庫單號 As String = "" : Dim 讀取水泥出庫單 As Boolean = True
|
747
|
|
- 'Try
|
748
|
|
- ' ' 遍歷 BOM明細料號 Dictionary 的每個項目進行庫存檢查
|
749
|
|
- ' For Each kvp As KeyValuePair(Of String, Tuple(Of String, Decimal)) In BOM明細料號
|
750
|
|
- ' ' 產生新出庫單號
|
751
|
|
- ' Dim 新出庫單號 As String = 原料編號產生器.產生出庫單號(編號代碼.生產領料)
|
752
|
|
- ' Dim 新異動單號 As String = 原料編號產生器.產生異動編號(編號代碼.生產領料)
|
753
|
|
- ' Dim 料號 As String = kvp.Key
|
754
|
|
- ' Dim 名稱 As String = kvp.Value.Item1
|
755
|
|
- ' Dim 計算數量 As Decimal = CDec(kvp.Value.Item2) * CDec(入庫數_tb.Text)
|
756
|
|
-
|
757
|
|
- ' ' 從表單取得輸入值
|
758
|
|
- ' Dim 物料ID As String = 料號
|
759
|
|
- ' Dim 出庫用途 As String = "生產領料"
|
760
|
|
- ' Dim 數量 As String = 計算數量.ToString
|
761
|
|
- ' Dim 領料部門 As String = "生產部"
|
762
|
|
- ' Dim 出庫日期 As String = 完工日期
|
763
|
|
- ' Dim 備註 As String = "NA"
|
764
|
|
- ' Dim 經辦人員 As String = gUserName
|
765
|
|
- ' Dim 來源單編號 As String = 明細流水號_tb.Text
|
766
|
|
- ' Dim 異動類型 As String = "出庫異動"
|
767
|
|
-
|
768
|
|
- ' If 讀取水泥出庫單 Then
|
769
|
|
- ' 對應水泥出庫單號 = 新出庫單號
|
770
|
|
- ' 讀取水泥出庫單 = False
|
771
|
|
- ' End If
|
772
|
|
-
|
773
|
|
- ' ' 執行出庫作業
|
774
|
|
- ' 出庫作業系統.執行出庫(新出庫單號, 物料ID, 出庫用途, 數量, 領料部門, 出庫日期, 經辦人員, 備註, 來源單編號, 新異動單號, 異動類型)
|
775
|
|
-
|
776
|
|
- ' Next
|
777
|
|
- 'Catch ex As Exception
|
778
|
|
- ' MessageBox.Show("原料出庫失敗:" & ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error)
|
779
|
|
- 'End Try
|
780
|
|
-
|
781
|
|
- 'Dim 混凝土新號 As String
|
782
|
|
- 'If 砂用量 > 0 Then
|
783
|
|
- ' 混凝土新號 = 產生新流水號("DP", "混凝土庫存表", "混凝土流水號")
|
784
|
|
- ' SQL_混凝土配比表_新增(混凝土新號, 混凝土料號, 配比流水號, "砂", "", 砂用量.ToString, 對應水泥出庫單號)
|
785
|
|
- 'End If
|
786
|
|
- 'If 三分石用量 > 0 Then
|
787
|
|
- ' 混凝土新號 = 產生新流水號("DP", "混凝土庫存表", "混凝土流水號")
|
788
|
|
- ' SQL_混凝土配比表_新增(混凝土新號, 混凝土料號, 配比流水號, "三分石", "", 三分石用量.ToString, 對應水泥出庫單號)
|
789
|
|
- 'End If
|
790
|
|
- 'If 六分石用量 > 0 Then
|
791
|
|
- ' 混凝土新號 = 產生新流水號("DP", "混凝土庫存表", "混凝土流水號")
|
792
|
|
- ' SQL_混凝土配比表_新增(混凝土新號, 混凝土料號, 配比流水號, "六分石", "", 六分石用量.ToString, 對應水泥出庫單號)
|
793
|
|
- 'End If
|
794
|
|
- 'If 水泥用量 > 0 Then
|
795
|
|
- ' 混凝土新號 = 產生新流水號("DP", "混凝土庫存表", "混凝土流水號")
|
796
|
|
- ' SQL_混凝土配比表_新增(混凝土新號, 混凝土料號, 配比流水號, "水泥", "", 水泥用量.ToString, 對應水泥出庫單號)
|
797
|
|
- 'End If
|
798
|
|
- 'If 爐石用量 > 0 Then
|
799
|
|
- ' 混凝土新號 = 產生新流水號("DP", "混凝土庫存表", "混凝土流水號")
|
800
|
|
- ' SQL_混凝土配比表_新增(混凝土新號, 混凝土料號, 配比流水號, "爐石", "", 爐石用量.ToString, 對應水泥出庫單號)
|
801
|
|
- 'End If
|
802
|
|
- 'If 藥劑用量 > 0 Then
|
803
|
|
- ' 混凝土新號 = 產生新流水號("DP", "混凝土庫存表", "混凝土流水號")
|
804
|
|
- ' SQL_混凝土配比表_新增(混凝土新號, 混凝土料號, 配比流水號, "藥劑", "", 藥劑用量.ToString, 對應水泥出庫單號)
|
805
|
|
- 'End If
|
|
742
|
+ Catch ex As Exception
|
|
743
|
+ MessageBox.Show("庫存檢查失敗:" & ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error)
|
|
744
|
+ End Try
|
|
745
|
+
|
|
746
|
+ Dim 對應水泥出庫單號 As String = "" : Dim 讀取水泥出庫單 As Boolean = True
|
|
747
|
+ Try
|
|
748
|
+ ' 遍歷 BOM明細料號 Dictionary 的每個項目進行庫存檢查
|
|
749
|
+ For Each kvp As KeyValuePair(Of String, Tuple(Of String, Decimal)) In BOM明細料號
|
|
750
|
+ ' 產生新出庫單號
|
|
751
|
+ Dim 新出庫單號 As String = 原料編號產生器.產生出庫單號(編號代碼.生產領料)
|
|
752
|
+ Dim 新異動單號 As String = 原料編號產生器.產生異動編號(編號代碼.生產領料)
|
|
753
|
+ Dim 料號 As String = kvp.Key
|
|
754
|
+ Dim 名稱 As String = kvp.Value.Item1
|
|
755
|
+ Dim 計算數量 As Decimal = CDec(kvp.Value.Item2) * CDec(入庫數_tb.Text)
|
|
756
|
+
|
|
757
|
+ ' 從表單取得輸入值
|
|
758
|
+ Dim 物料ID As String = 料號
|
|
759
|
+ Dim 出庫用途 As String = "生產領料"
|
|
760
|
+ Dim 數量 As String = 計算數量.ToString
|
|
761
|
+ Dim 領料部門 As String = "生產部"
|
|
762
|
+ Dim 出庫日期 As String = 完工日期
|
|
763
|
+ Dim 備註 As String = "NA"
|
|
764
|
+ Dim 經辦人員 As String = gUserName
|
|
765
|
+ Dim 來源單編號 As String = 明細流水號_tb.Text
|
|
766
|
+ Dim 異動類型 As String = "出庫異動"
|
|
767
|
+
|
|
768
|
+ If 讀取水泥出庫單 Then
|
|
769
|
+ 對應水泥出庫單號 = 新出庫單號
|
|
770
|
+ 讀取水泥出庫單 = False
|
|
771
|
+ End If
|
|
772
|
+
|
|
773
|
+ ' 執行出庫作業
|
|
774
|
+ 出庫作業系統.執行出庫(新出庫單號, 物料ID, 出庫用途, 數量, 領料部門, 出庫日期, 經辦人員, 備註, 來源單編號, 新異動單號, 異動類型)
|
|
775
|
+
|
|
776
|
+ Next
|
|
777
|
+ Catch ex As Exception
|
|
778
|
+ MessageBox.Show("原料出庫失敗:" & ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error)
|
|
779
|
+ End Try
|
|
780
|
+
|
|
781
|
+ Dim 混凝土新號 As String
|
|
782
|
+ If 砂用量 > 0 Then
|
|
783
|
+ 混凝土新號 = 產生新流水號("DP", "混凝土庫存表", "混凝土流水號")
|
|
784
|
+ SQL_混凝土配比表_新增(混凝土新號, 混凝土料號, 配比流水號, "砂", "", 砂用量.ToString, 對應水泥出庫單號)
|
|
785
|
+ End If
|
|
786
|
+ If 三分石用量 > 0 Then
|
|
787
|
+ 混凝土新號 = 產生新流水號("DP", "混凝土庫存表", "混凝土流水號")
|
|
788
|
+ SQL_混凝土配比表_新增(混凝土新號, 混凝土料號, 配比流水號, "三分石", "", 三分石用量.ToString, 對應水泥出庫單號)
|
|
789
|
+ End If
|
|
790
|
+ If 六分石用量 > 0 Then
|
|
791
|
+ 混凝土新號 = 產生新流水號("DP", "混凝土庫存表", "混凝土流水號")
|
|
792
|
+ SQL_混凝土配比表_新增(混凝土新號, 混凝土料號, 配比流水號, "六分石", "", 六分石用量.ToString, 對應水泥出庫單號)
|
|
793
|
+ End If
|
|
794
|
+ If 水泥用量 > 0 Then
|
|
795
|
+ 混凝土新號 = 產生新流水號("DP", "混凝土庫存表", "混凝土流水號")
|
|
796
|
+ SQL_混凝土配比表_新增(混凝土新號, 混凝土料號, 配比流水號, "水泥", "", 水泥用量.ToString, 對應水泥出庫單號)
|
|
797
|
+ End If
|
|
798
|
+ If 爐石用量 > 0 Then
|
|
799
|
+ 混凝土新號 = 產生新流水號("DP", "混凝土庫存表", "混凝土流水號")
|
|
800
|
+ SQL_混凝土配比表_新增(混凝土新號, 混凝土料號, 配比流水號, "爐石", "", 爐石用量.ToString, 對應水泥出庫單號)
|
|
801
|
+ End If
|
|
802
|
+ If 藥劑用量 > 0 Then
|
|
803
|
+ 混凝土新號 = 產生新流水號("DP", "混凝土庫存表", "混凝土流水號")
|
|
804
|
+ SQL_混凝土配比表_新增(混凝土新號, 混凝土料號, 配比流水號, "藥劑", "", 藥劑用量.ToString, 對應水泥出庫單號)
|
|
805
|
+ End If
|
806
|
806
|
|
807
|
807
|
End If
|
808
|
808
|
Else
|