MES系统详解
一、数据库语句
这里我们可以根据mes系统的特点,唯一主键functionkey查询对应的权限信息里面包含对应文件名称,首先进入的winform
二、使用步骤
1.权限表查询
select * from tblsysfunction where functionkey = ''
2.新增菜单,需要同时新增菜单表和权限表
1.向菜单表插入数据
--insert into TBLSYSMENUITEM(MODULENO,MENUNO,MENUNAME,MENUTYPE,MENUORDER,PARENTMENUNO,ACTIVEMODULE)
values
--('ENT','CUSTOMER DZ','客戶定制資料',0,10,'CUSTOMER CONFIG','WIP')
2.向权限表插入数据
Insert into tblsysfunction(FUNCTIONNO,FUNCTIONNAME,FUNCTIONORDER,MODULENO,EXECUTIONFILE,FUNCTIONKEY)
values('CUSTOMER DZ','客戶定制資料','21101.9','ENT','ET_CustomerDZ.dll','LC')
3.功能大全
**text文本默认显示当前登录用户
'显示当前登录的用户昵称,gUserNo是框架中封装好的
当前登录用户的昵称编号,也是登录名
txtEmployeeNo.Text = gUserNo
4.将原来的只读lable默认显示改为可编辑
12
3
'2012/03/28, Aaron, 新增自動編碼判斷
If blnAutoGetSerialNo = True Then
btnGetBaseLotNo.Enabled = True
'这里将原来的taxtBaseLotNO.Enableed = False改为了True
txtBaseLotNo.Enabled = True
Else
btnGetBaseLotNo.Enabled = False
txtBaseLotNo.Enabled = True
End If
5.提示弹窗,可以中英文切换
iMESExceptionManager.ExceptionManager.iMESMsgBoxShowDialog(ChgTranslateName_Msg("0000-200001", "[%LC%]"), MsgBoxStyle.Exclamation, Me.Text)
6.多选框,选择然后打印按钮
添加一个打印按钮
1.第一步
这段代码的主要功能
是向数据集dsLotState中名为strLotState的DataTable添加一个名为"checkFlag"的列,
该列的数据类型为布尔型,默认值为False,
并且不允许为空,同时允许通过默认视图编辑该表。
Dim colCheckFlag As New DataColumn
colCheckFlag.ColumnName = "checkFlag"
colCheckFlag.DataType = System.Type.GetType("System.Boolean")
colCheckFlag.DefaultValue = False
colCheckFlag.AllowDBNull = False
dsLotState.Tables(strLotState).Columns.Add(colCheckFlag)
dsLotState.Tables(strLotState).DefaultView.AllowEdit = True
中间代码解读
Dim colCheckFlag As New DataColumn
这一行声明了一个新的DataColumn对象,并命名为colCheckFlag。DataColumn是用于表示DataTable中一列的类。
colCheckFlag.ColumnName = "checkFlag"
这一行设置了DataColumn对象的ColumnName属性,即列的名称为"checkFlag"。
colCheckFlag.DataType = System.Type.GetType("System.Boolean")
这里设置了DataColumn的数据类型。通过System.Type.GetType方法获取了一个代表布尔型(Boolean)的Type对象,并将其赋值给colCheckFlag的DataType属性。
colCheckFlag.DefaultValue = False
这一行指定了当表中添加新行时,如果未明确设置该列的值,则默认值为False。
colCheckFlag.AllowDBNull = False
设置AllowDBNull属性为False,这意味着这一列不接受空值(DBNull)。
dsLotState.Tables(strLotState).Columns.Add(colCheckFlag)
这一行将新创建的colCheckFlag列添加到名为strLotState的DataTable的列集合中。
dsLotState.Tables(strLotState).DefaultView.AllowEdit = True
最后一行设置了对应DataTable的默认视图(DefaultView)的AllowEdit属性为True,这意味着允许通过这个视图编辑表中的数据。
2.第二步
.CellActivation = Activation.AllowEdit
3.第三步
'多选框加上
iugLotState.iMESUltraGrid.DisplayLayout.Override.AllowUpdate = Infragistics.Win.DefaultableBoolean.True
iugLotState.iMESUltraGrid.Rows.ExpandAll(True)
AllowUpdate属性确定用户是否可以在UltraGrid中直接编辑单元格。
设置为True后,用户将能够修改网格中的数据。
4.找到系统中打印按钮,根据系统中的来进行复刻 在pd107
5.打印按钮实现
Private Sub btnPrint_Click(sender As Object, e As EventArgs) Handles btnPrint.Click
Dim dt As DataTable = dsLotState.Tables(strLotState)
Dim selectDt As DataRow() = dt.Select("checkFlag = True")
For Each dr As DataRow In selectDt
PrintByLotNo(dr("LotNo").ToString)
Next
End Sub
打印的按钮里面调用的两个方法
方法一
Private Sub PrintByLotNo(ByVal lotNo As String)
' 变量
Dim txtLabelNo As String = "ceshi"
Dim txtLabelType As String = "SN"
Dim txtMaterialNo As String = ""
Dim txtPrinterName As String = ""
Dim PrintMode As String = ""
Dim strFormatFileName As String = "ceshi"
Dim txtLotNo As String = lotNo
Dim txtComponentNo As String = ""
Dim strReturn As String = ""
Dim dtPrint As New DataTable
Dim printDoc As New PrintDocument
txtPrinterName = printDoc.PrinterSettings.PrinterName
If txtLabelNo = "" Then
iMESExceptionManager.ExceptionManager.iMESMsgBoxShowDialog(ChgTranslateName_Msg("ENXXX", "[%LabelNo%]!"), MsgBoxStyle.Exclamation, Me.Text)
Exit Sub
End If
If txtLabelType = "MATERIAL" Then
If txtMaterialNo = "" Then
iMESExceptionManager.ExceptionManager.iMESMsgBoxShowDialog(ChgTranslateName_Msg("0000-200001", "[%MaterialNo%]!"), MsgBoxStyle.Exclamation, Me.Text)
Exit Sub
End If
Else
If txtLotNo = "" Then
iMESExceptionManager.ExceptionManager.iMESMsgBoxShowDialog(ChgTranslateName_Msg("0000-200001", "[%LotNo%]!"), MsgBoxStyle.Exclamation, Me.Text)
Exit Sub
End If
End If
If txtPrinterName = "" Then
iMESExceptionManager.ExceptionManager.iMESMsgBoxShowDialog(ChgTranslateName_Msg("0000-200001", "[%PrinterName%]"), MsgBoxStyle.Exclamation, Me.Text)
Exit Sub
End If
funGetLabelValue(txtLabelNo.Trim, txtLotNo.Trim, txtComponentNo.Trim)
If dsLabel.Tables(tblLabel) Is Nothing Then
iMESExceptionManager.ExceptionManager.iMESMsgBoxShowDialog(ChgTranslateName_Msg("ENXXX", "[%LabelValue%]!"), MsgBoxStyle.Exclamation, Me.Text)
Exit Sub
End If
If dsLabel.Tables(tblLabel).DefaultView.Count = 0 Then
iMESExceptionManager.ExceptionManager.iMESMsgBoxShowDialog(ChgTranslateName_Msg("ENXXX", "[%LabelValue%]!"), MsgBoxStyle.Exclamation, Me.Text)
Exit Sub
End If
'[Mantis:73208]2020/06/15,Boyi,Print move to PD_Kit
'Load PrintMode
PrintMode = objPDK.LoadPrintMode
'Print
If (PrintMode.ToUpper = "Bartender".ToUpper) Then
'strReturn = objPDK.PrintLabel(PrintMode, strLabelPath, strLabelExe, strLabelPath_x86, strLabelDataPath, strDataFileName, txtPrinterName.Text, strFormatFileName, dsLabel.Tables(tblLabel))
strReturn = objPDK.LabelPrint_ByNamedItem(dsLabel.Tables(tblLabel), strFormatFileName, txtPrinterName, True,, IIf(txtPrinterName = ChgTranslateName("PREVIEW", gLanguageMode), True, False))
ElseIf (PrintMode.ToUpper = "Codesoft".ToUpper) Then
'dtPrint = objPDK.GetCodeSoftItemNameDt(dsLabel.Tables(tblLabel))
'strReturn = objPDK.PrintLabel(PrintMode, strLabelPath, strLabelExe, strLabelPath_x86, strLabelDataPath, strDataFileName, txtPrinterName.Text, strFormatFileName, dtPrint)
strReturn = objPDK.LabelPrint_ByNamedItem(dsLabel.Tables(tblLabel), strFormatFileName, txtPrinterName, True,, IIf(txtPrinterName = ChgTranslateName("PREVIEW", gLanguageMode), True, False))
End If
End Sub
方法二
Private Function funGetLabelValue(ByVal LabelNo As String, ByVal LotNo As String, ByVal ComponentNo As String, Optional ByVal InventoryNo As String = defString, Optional ByVal MaterialNo As String = defString, Optional ByVal MaterialLotNo As String = defString) As DataTable
Cursor.Current = Cursors.WaitCursor
If Not IsNothing(dsLabel.Tables(tblLabel)) Then
dsLabel.Tables.Remove(tblLabel)
End If
'組InXml的字串
strIdentity = CombineXMLIdentity(gComputerName, gUserNo, GetNow())
strParameter = CombineXMLParameter("labelno", "LabelNo", "String", LabelNo, "")
strParameter += CombineXMLParameter("lotno", "LotNo", "String", LotNo, "")
strParameter += CombineXMLParameter("componentno", "ComponentNo", "String", CInput(ComponentNo), "")
If InventoryNo <> defString AndAlso InventoryNo <> "" Then
strParameter += CombineXMLParameter("inventoryno", "InventoryNo", "String", InventoryNo, "")
End If
If MaterialNo <> defString AndAlso MaterialNo <> "" Then
strParameter += CombineXMLParameter("materialno", "MaterialNo", "String", MaterialNo, "")
End If
If MaterialLotNo <> defString Then
strParameter += CombineXMLParameter("materiallotno", "MaterialLotNo", "String", MaterialLotNo, "")
End If
InXml = CombineXMLRequest(strIdentity, strParameter)
Try
' 2016 YF, OutXml = wsPRD.GetLabelValue(InXml)
OutXml = InvokeSrv("wsPRD.GetLabelValue", InXml)
Dim XmlDoc As New XmlDocument
XmlDoc.LoadXml(OutXml)
If ChkExecutionSuccess(XmlDoc) Then
tblLabel = XmlDoc.GetElementsByTagName("returnvalue").Item(0).SelectNodes("getlabelvalue").Item(0).SelectNodes("name").Item(0).InnerXml
'取出Schema,dataset讀取Schema可防止Null Field及DateTime的問題
XmlSchema = XmlDoc.DocumentElement.GetElementsByTagName("getlabelvalue").Item(0).SelectNodes("schema").Item(0).InnerXml
If XmlSchema <> "" Then
'將XML讀入String Reader object中,因為Dataset讀入XML時必須透過String Reader物件
tmpStringReader = New System.IO.StringReader(XmlSchema)
dsLabel.ReadXmlSchema(tmpStringReader)
tmpStringReader.Close()
End If
'取出Data
XmlData = XmlDoc.DocumentElement.GetElementsByTagName("getlabelvalue").Item(0).SelectNodes("value").Item(0).InnerXml
If XmlData <> "" Then
tmpStringReader = New System.IO.StringReader(XmlData)
dsLabel.ReadXml(tmpStringReader)
tmpStringReader.Close()
End If
'Sort by Position
dsLabel.Tables(tblLabel).DefaultView.Sort = "Position"
Else
ExceptionManager.iMESShowDialog(GetExceptionCode(XmlDoc), GetExceptionSysMsg(XmlDoc), GetExceptionStack(XmlDoc))
Exit Function
End If
XmlDoc = Nothing
Catch ex As Exception
'MsgBox("Unexpected Error. Get Label Value failed," & e1.Message, MsgBoxStyle.Exclamation)
ExceptionManager.iMESShowDialog(defWinErrCode, ex.Message, ex.StackTrace)
Exit Function
End Try
Cursor.Current = Cursors.Default
End Function
7.双击lot Record文本框,放大输入
'20241021 add by chendi for 生产注记调整 ↓
Private Sub txtLotRecord_DoubleClick(sender As Object, e As EventArgs) Handles txtLotRecord.DoubleClick
Cursor.Current = Cursors.WaitCursor
Dim txtLotRecordTextDT As DataTable
txtLotRecordTextDT = New DataTable("txtLotRecordTextDT")
Dim colCheckFlag As New DataColumn
colCheckFlag.ColumnName = "txtLotRecordText"
colCheckFlag.DataType = System.Type.GetType("System.String")
colCheckFlag.DefaultValue = ""
txtLotRecordTextDT.Columns.Add(colCheckFlag)
Dim dr As DataRow = txtLotRecordTextDT.NewRow()
dr("txtLotRecordText") = txtLotRecord.Text.ToString
txtLotRecordTextDT.Rows.Add(dr)
Dim parameters As New Dictionary(Of String, Object)
parameters.Add("txtLotRecordTextDT", txtLotRecordTextDT)
Me.ObjectFileHandler.Execute("BR_LotRecordMax", parameters)
txtLotRecordTextDT = parameters("txtLotRecordTextDT")
txtLotRecord.Text = txtLotRecordTextDT.Rows(0)("txtLotRecordText")
txtLotRecord.Select(txtLotRecord.TextLength, 0)
txtLotRecord.ScrollToCaret()
Cursor.Current = Cursors.Default
End Sub