当前位置: 首页 > news >正文

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

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

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

1、类模块InputSCHAR的代码

 ''使用“工业单据老单与自己添加的窗体 - 互相传值传参”的方法,进行特殊字符的维护'定义插件对象接口. 必须具有的声明, 以此来获得事件
Private WithEvents m_BillTransfer   As k3BillTransfer.BillPublic 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 = oBillTransfervHeads = m_BillTransfer.m_HeadCtl
vEntryCtl = m_BillTransfer.m_EntryCtl
''获取工艺说明的列号For i = 1 To UBound(vEntryCtl)If m_BillTransfer.m_EntryCtl(i).FieldName = "Fnote" ThenGYcol = iEnd IfNextEnd SubPrivate Sub Class_Terminate()'释放接口对象'注意: 此方法必须存在, 请勿修改Set m_BillTransfer = NothingEnd 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).ValeEnd Ifm_BillTransfer.SetHead 1, sName '赋值给工艺名称FRountingName
NextEnd SubPrivate Sub m_BillTransfer_BillInitialize()'TODO: 请在此处添加代码响应事件 BillInitialize'*************** 开始设置菜单 ***************m_BillTransfer.AddUserMenuItem "弹窗交互", "特殊字符"'*************** 结束设置菜单 ***************End SubPrivate Sub m_BillTransfer_BillTerminate()'TODO: 请在此处添加代码响应事件 BillTerminateEnd SubPrivate Sub m_BillTransfer_UserMenuClick(ByVal Index As Long, ByVal Caption As String)'TODO: 请在此处添加代码响应事件 UserMenuClickSelect Case CaptionCase "弹窗交互"'调用窗体模块Call CallFormCase ElseEnd SelectEnd SubPublic 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 SubPrivate 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 IfEnd Sub''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub m_BillTransfer_LoadBillEnd(ByVal ShowType As Long)
' MsgBox "点击成功"On Error Resume NextWith m_BillTransfer.BillForm.tlbTool.Buttons'如果还要加按钮,就增加一行.Add.Count,Count - 1指最后一个图标的前一个位置;最后的数字是图标的编号,可任意。.Add .Count - 1, "BtnSC2", "特殊字符2", , 10End WithEnd Sub
Private Sub m_BillTransfer_RetEvents(ByVal Para As KFO.IDictionary)'TODO: 请在此处添加代码响应事件 RetEventsDim objA As New InputSpetialCHARIf Not Para Is Nothing ThenIf Para.GetValue("EventID", 0) = "Bill_ButtonClick" ThenIf Para.GetValue("EventIDprop", 0) = "0" ThenIf Para("Para")("Button").Key = "BtnSC2" Then  ''特殊字符2Call CallFormEnd IfEnd IfEnd If
End IfEnd SubPrivate Sub CallForm()Dim Form As New Form1Set Form.frm_BillTransfer = m_BillTransferIf CurrentCol = GYcol Then  '判断当前列是否是工艺列FnoteOUT = m_BillTransfer.GetGridText(CurrentRow, CurrentCol)  '获取工艺说明在录数据'交互:这里传值到自定义窗口Form.selSourceName = FnoteOUT ''要传的参数,工艺说明Form.SourceROW = CurrentRow ''传当前行号Form.SourceCOL = CurrentCol ''传当前列号Form.Show 1Set Form = NothingElse: MsgBox "当前行号" & CurrentRow & "列号" & CurrentCol & ",不是工艺说明列!!", vbOKOnly, "提示"Exit SubEnd If
End Sub

2、窗体Form1,界面没改变
在这里插入图片描述
代码如下:

Option Explicit
Public WithEvents frm_BillTransfer   As k3BillTransfer.BillPublic 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 "来源单据:" & selSourceNameDim sSC As String '特殊字符
Dim sTEXT As String '原始文本
Dim curPos As Long '光标位置sTEXT = Text1.TextIf 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 IfEnd SubPrivate Sub Form_Load()' 参数说明:窗口句柄、置顶标志、位置和大小(忽略)、操作标志(不移动不改变大小)SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZEText1.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 SubPrivate Sub Combox1_KeyDown(KeyCode As Integer, Shift As Integer)If KeyCode = vbKeyReturn Then' 直接调用按钮的Click事件处理程序Command1_ClickKeyCode = 0 ' 阻止事件冒泡,避免触发其他默认行为End If
End SubPrivate Sub Command2_Click()'修改后的文本传回SetInfo frm_BillTransfer, Text1.Text, SourceCOL, SourceROW'关闭弹窗Unload Me
End Sub

3、模块 Module_SC的代码

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

http://www.dtcms.com/a/528512.html

相关文章:

  • 信贷控制范围
  • 乐陵网站优化最简单的网站设计
  • 项目信息和生产安全管理指南(试行)
  • 【Tesla】ICCV 2025技术分享
  • 企业做网站营销企业网站 响应式
  • 深度学习C++中的数据结构:栈和队列
  • 2025-tomcat web实践
  • 免费建立微信网站如何设计的英文网站
  • liferay 做网站哪里有网站开发公司
  • Leetcode 38
  • Django 学习路线图
  • 把网站放到服务器公司做网站需要准备什么资料
  • 如何批量获取蛋白质序列的所有结构域(domain)数据-2
  • MySQL基础知识大全
  • 站群服务器都有什么作用
  • C# 初级编程
  • linux fair调度器
  • 建设工程项目在哪个网站查询零食网站页面模板
  • Python 基础详解:enumerate() 函数
  • 基于鸿蒙UniProton的车载信息娱乐系统开发指南
  • 自然语言处理前沿创新方向与技术路径
  • 微软做网页的软件烟台优化网站公司
  • 使用Jmeter进行http接口测试
  • Jenkins从节点配置全攻略:从搭建到任务调度,参数详解与实战指南
  • 【Agentic AI】提示链模式学习笔记
  • 广东省省考备考(第一百三十三天10.25)——科学推理(强化训练)
  • 四季变化,室外太阳光的剧烈变化, 从“被动适应”到“主动免疫”,机器视觉检测如何实现?
  • 观察者模式学习
  • 常用标准电阻表 | E24标准电阻表
  • 三、检索增强生成(RAG)技术体系