金蝶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,列号做了一个函数来查找,我这里就直接从类模块中传过来了,不用函数了。

相关推荐
德昂信息dataondemand3 天前
BI需求分析的双层陷阱
数据分析·需求分析
roman_日积跬步-终至千里4 天前
【系统架构设计】用例技术:需求分析的实用工具
系统架构·需求分析
3DVisionary4 天前
DIC多相机协同方案在复杂结构360°全景形貌与变形场检测中的应用研究
数码相机·需求分析·dic多视场/多相机·360°全周测量·数模比对·非接触式检测·三维变形分析
workflower7 天前
软件工程-练习
数据库·需求分析·个人开发·极限编程·结对编程
workflower9 天前
FDD与其他方法的相似和区别
数据库·算法·需求分析·个人开发
workflower10 天前
测试套件缩减方法
数据库·单元测试·需求分析·个人开发·极限编程
workflower11 天前
FDD(Feature Driven Development)特征驱动开发
大数据·数据库·驱动开发·需求分析·个人开发
weixin_3077791311 天前
企业TB级数据加密迁移至AWS云:AWS Snowball Edge Storage Optimized成本效益方案解析
云计算·需求分析·迁移学习·aws
weixin_3077791311 天前
构建下一代法律智能助手:需求分析、资源整合与系统设计
人工智能·深度学习·机器学习·需求分析
一只鹿鹿鹿12 天前
系统安全设计方案书(Word)
开发语言·人工智能·web安全·需求分析·软件系统