金蝶K3老单 工艺路线维护特殊字符(使用模块返回值的方法)

参考K3 WISE 开发插件《工业单据老单与自己添加的窗体 - 互相传值传参》 的方法,对前几天做的工艺路线维护特殊字符进行改进,改进后运行速度快了一点

除了类模块和窗体名称修改一下,增加了一个Module_SC模块,对话框界面不变

1、类模块InputSCHAR的代码

vbnet 复制代码
 ''使用"工业单据老单与自己添加的窗体 - 互相传值传参"的方法,进行特殊字符的维护
 
 
 
'定义插件对象接口. 必须具有的声明, 以此来获得事件
Private WithEvents m_BillTransfer   As k3BillTransfer.Bill


Public FnoteIN As String '传回工艺说明
Public FnoteOUT As String '传出工艺说明
Public GYcol As Long '工艺所在列号
Public CurrentCol As Long '光标所在的列号
Public CurrentRow As Long '光标所在的行号
Private m_SourceData As String  ' 要传给窗体的原始数据
Private m_ResultData As String  ' 窗体处理后传回的结果
Private vHeads As Variant '表头控件
Private vEntryCtl As Variant '单据体控件,取列号用
 
Public Sub Show(ByVal oBillTransfer As Object)
 
    '接口实现
    '注意: 此方法必须存在, 请勿修改
    Set m_BillTransfer = oBillTransfer
    
vHeads = m_BillTransfer.m_HeadCtl
vEntryCtl = m_BillTransfer.m_EntryCtl
''获取工艺说明的列号
   
   For i = 1 To UBound(vEntryCtl)
    If m_BillTransfer.m_EntryCtl(i).FieldName = "Fnote" Then
     GYcol = i
    End If
   Next
    
 
End Sub

Private Sub Class_Terminate()
 
    '释放接口对象
    '注意: 此方法必须存在, 请勿修改
    Set m_BillTransfer = Nothing

End Sub
Private Sub m_BillTransfer_HeadChange(ByVal CtlIndex As Long, ByVal Value As Variant, ByVal bNewBill As Boolean, Cancel As Boolean)
'MsgBox "headcharge"
'将物料名称赋值给工艺名称
Dim sName As String
sName = ""
For i = 1 To UBound(vHeads)
  If m_BillTransfer.m_HeadCtl(i).FieldName = "FItemName" Then '物料名称
   sName = m_BillTransfer.m_HeadCtl(i).Vale
  End If
  m_BillTransfer.SetHead 1, sName '赋值给工艺名称FRountingName
Next

End Sub





Private Sub m_BillTransfer_BillInitialize()
 
    'TODO: 请在此处添加代码响应事件 BillInitialize
 
 
'*************** 开始设置菜单 ***************
 
    m_BillTransfer.AddUserMenuItem "弹窗交互", "特殊字符"
 
'*************** 结束设置菜单 ***************
 

End Sub

Private Sub m_BillTransfer_BillTerminate()
 
    'TODO: 请在此处添加代码响应事件 BillTerminate
 

End Sub

Private Sub m_BillTransfer_UserMenuClick(ByVal Index As Long, ByVal Caption As String)
 
    'TODO: 请在此处添加代码响应事件 UserMenuClick
 

 
    Select Case Caption
    Case "弹窗交互"

        '调用窗体模块
        Call CallForm
    Case Else
    End Select

End Sub


Public Sub m_BillTransfer_GridChange(ByVal col As Long, ByVal row As Long, ByVal Value As Variant, ByVal bNewBill As Boolean, Cancel As Boolean)
'MsgBox "测试GridChange"
CurrentCol = col ' 获取当前操作的列号,用以后面判断
CurrentRow = row '获取当前操作的行号,用以后面对当前行的工艺列进行赋值

End Sub

Private Sub m_BillTransfer_LeveCell(ByVal col As Long, ByVal row As Long, ByVal NewCol As Long, ByVal NewRow As Long, Cancel As Boolean)
'MsgBox "测试LeveCell"
'''这个事件是"离开一个单元格时激发",按理解是在工艺说明单元格的上一个单元格回车后,NewCol和NewRow才是所要的列号和行号

If NewCol = 6 Then
CurrentCol = NewCol '
CurrentRow = NewRow '
End If


End Sub



''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub m_BillTransfer_LoadBillEnd(ByVal ShowType As Long)
' MsgBox "点击成功"
 On Error Resume Next
    With m_BillTransfer.BillForm.tlbTool.Buttons
    '如果还要加按钮,就增加一行.Add.Count,Count - 1指最后一个图标的前一个位置;最后的数字是图标的编号,可任意。
        .Add .Count - 1, "BtnSC2", "特殊字符2", , 10
    End With
   
End Sub
Private Sub m_BillTransfer_RetEvents(ByVal Para As KFO.IDictionary)
 
    'TODO: 请在此处添加代码响应事件 RetEvents

Dim objA As New InputSpetialCHAR

 
If Not Para Is Nothing Then
   If Para.GetValue("EventID", 0) = "Bill_ButtonClick" Then
    If Para.GetValue("EventIDprop", 0) = "0" Then
    
      If Para("Para")("Button").Key = "BtnSC2" Then  ''特殊字符2
      
         
       Call CallForm
      
      End If
    End If
  End If
End If

End Sub

Private Sub CallForm()
        Dim Form As New Form1
        Set Form.frm_BillTransfer = m_BillTransfer
        
        If CurrentCol = GYcol Then  '判断当前列是否是工艺列
          FnoteOUT = m_BillTransfer.GetGridText(CurrentRow, CurrentCol)  '获取工艺说明在录数据
        
        '交互:这里传值到自定义窗口
        Form.selSourceName = FnoteOUT ''要传的参数,工艺说明
        Form.SourceROW = CurrentRow ''传当前行号
        Form.SourceCOL = CurrentCol ''传当前列号
        Form.Show 1
        Set Form = Nothing
        
        Else: MsgBox "当前行号" & CurrentRow & "列号" & CurrentCol & ",不是工艺说明列!!", vbOKOnly, "提示"
        Exit Sub
        End If
End Sub

2、窗体Form1,界面没改变

代码如下:

vbnet 复制代码
Option Explicit
Public WithEvents frm_BillTransfer   As k3BillTransfer.Bill

Public selSourceName As String '传来的值
Public SourceCOL As Long '传来的列号
Public SourceROW As Long '传来的行号

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const HWND_TOPMOST = -1  ' 置顶(始终在其他窗口上方)
Private Const HWND_NOTOPMOST = -2  ' 取消置顶
Private Const SWP_NOMOVE = &H2  ' 忽略 x、y 参数(不改变位置)
Private Const SWP_NOSIZE = &H1  ' 忽略 cx、cy 参数(不改变大小)

Private Sub Command1_Click()
''MsgBox "来源单据:" & selSourceName

Dim sSC As String '特殊字符
Dim sTEXT As String '原始文本
Dim curPos As Long '光标位置

sTEXT = Text1.Text

If Combox1.ListIndex > -1 Then '判断是否选择了特殊字符
    sSC = Combox1.Text
End If


'拼接
'''''''''''''''''''''''''''''''''''''''''''
' 检查是否有文本被选中
If Text1.SelStart <> 0 Or Text1.SelLength > 0 Then
' 如果有,则替换选中的文本
    Text1.Text = Left(sTEXT, Text1.SelStart) & sSC & Mid(sTEXT, Text1.SelStart + 1)
    ' 并将光标位置设置为替换后文本的末尾
    curPos = Text1.SelStart + Len(sSC)
    Text1.SelStart = curPos
Else
' 如果没有选中的文本,则将光标移动到文本末尾
    curPos = Len(sTEXT)
    ' 在末尾插入变量值
    Text1.Text = sTEXT & sSC
''    ' 将光标移动到插入位置的末尾
''    Text1.SelStart = curPos + Len(sTEXT)
    '光标保持在插入点,而不是移动到末尾
'     Text1.SelStart = Text1.SelStart - Len(sTEXT)
      Text1.SelStart = Len(sTEXT) + 1
End If




End Sub



Private Sub Form_Load()
   ' 参数说明:窗口句柄、置顶标志、位置和大小(忽略)、操作标志(不移动不改变大小)
    SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE

    Text1.Text = selSourceName  ' 显示传来的值


''通过Add方法逐个添加项
    Combox1.Clear '清空
    Combox1.ListIndex = -1 '默认为空。  或是 ComboBox1.Text = "" 或是
    Combox1.AddItem ""
    Combox1.AddItem "Φ"
    Combox1.AddItem "×"
    Combox1.AddItem "∥"
    Combox1.AddItem "⊥"
    Combox1.AddItem "∠"
    Combox1.AddItem "°"
    Combox1.AddItem "◎"
    Combox1.AddItem "〇"
    Combox1.AddItem "□"
    Combox1.AddItem "⊕"
    Combox1.AddItem "≡"
    Combox1.AddItem "±"
    Combox1.AddItem "↗"
    Combox1.AddItem "↗↗"
    Combox1.AddItem "⌒"


End Sub

Private Sub Combox1_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyReturn Then
        ' 直接调用按钮的Click事件处理程序
        Command1_Click
        KeyCode = 0 ' 阻止事件冒泡,避免触发其他默认行为
    End If
End Sub


Private Sub Command2_Click()
    '修改后的文本传回
    SetInfo frm_BillTransfer, Text1.Text, SourceCOL, SourceROW
    '关闭弹窗
    Unload Me
End Sub

3、模块 Module_SC的代码

vbnet 复制代码
Public Sub SetInfo(m_BillTransfer As k3BillTransfer.Bill, Value As String, col As Long, row As Long)
With m_BillTransfer
.SetGridText row, col, Value
End With
End Sub

原来参考的代码中行号是1,列号做了一个函数来查找,我这里就直接从类模块中传过来了,不用函数了。

相关推荐
Wnq1007219 小时前
巡检机器人户外视觉识别困境剖析与自动优化模式构建
图像处理·目标检测·低代码·计算机视觉·目标跟踪·机器人·需求分析
青云交1 天前
Java 大视界 -- Java 大数据在智慧养老服务需求分析与个性化服务匹配中的应用
java·需求分析·智慧养老·健康管理·java 大数据·个性化服务·生活照料
workflower3 天前
基本作业-管理⾃⼰的源代码
开发语言·单元测试·软件工程·需求分析·个人开发
一个处女座的程序猿O(∩_∩)O4 天前
一个完整的AI项目从需求分析到部署的全流程详解
人工智能·需求分析
okjohn5 天前
浅谈需求分析与管理
java·架构·系统架构·软件工程·产品经理·需求分析·规格说明书
workflower7 天前
软件工程与计算机科学的关系
开发语言·软件工程·团队开发·需求分析·个人开发·结对编程
黄焖鸡能干四碗10 天前
MES生产执行制造系统建设(Java+Mysql)
java·大数据·开发语言·信息可视化·需求分析
workflower10 天前
跨链协同制造中的服务博弈与激励机制
开发语言·软件工程·制造·需求分析·个人开发·结对编程
睿创咨询1 个月前
需求分析:对原始需求进行加工提炼
需求分析·管理·ipd·集成产品开发·睿创咨询