阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 1820|回复: 8

[求助] BOS开发求助

[复制链接]
  • TA的每日心情
    开心
    2022-9-21 13:13
  • 签到天数: 795 天

    [LV.10]以坛为家III

    发表于 2017-3-5 22:33:30 | 显示全部楼层 |阅读模式
    100阳光币
    本人用K3 14.0 WISE,近日在学习BOS插件开发,看了好多资料还是没明白,现求助论坛高手给写个BOS插件开发的例子,如:BOS新单如何在表体上显示即时库存?或者写个BOS新单如何实现关闭和反关闭的例子。越详细越好,谢谢。

    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    无聊
    2017-8-7 13:28
  • 签到天数: 199 天

    [LV.7]常住居民III

    发表于 2017-3-8 08:35:00 | 显示全部楼层
    qq 410119287 我的号码  加我请备注一下
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    2017-8-2 11:30
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2017-7-15 09:34:38 | 显示全部楼层
    1、 如何在工具栏上添加多级审核的按钮?
    在m_BillInterface_MenuBarInitialize事件里添加如下代码即可。
    Set oTool = m_BillInterface.MenuBar.BOSTools("mnuEditMultiCheck")
    With oTool
        .Caption = "多级审核"
        .ToolTipText = "多级审核"
        .Description = "多级审核"
        .BeginGroup = False
        .ToolPicture = App.Path + "\Checker.bmp"
        .SetPicture 0, vbButtonFace
    End With
    Set oBand = oMenuBar.BOSBands("BandToolBar")
    oBand.BOSTools.InsertBefore "mnuFilePrint", oTool '将菜单对象插入指定工具栏
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    2017-8-2 11:30
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2017-7-15 09:36:08 | 显示全部楼层
    2、 如何在显示一张Bos单据的同时给它赋值?
    要想在显示Bos单据的同时给它赋值,关键是在显示前要购建m_Billinte**ce的data包,这样在显示这张同据的时候,程序会解析data包,并将里面的值赋到单据界面上来。
       Dim dctData As kfo.Dictionary
       Dim datasrv as object
       Dim oTableinfo as object
       Set DataSrv = m_BillInte**ce.K3Lib.CreateK3Object("K3ClassTpl.DataSrv")
       DataSrv.ClassTypeID = lClassTypeID  'lClassTypeID  需要弹出单据的ID
       Set oTableInfo = DataSrv.TableInfo
            
       Set dctData = DataSrv.GetEmptyBill  '然后将当前单据数据包中需要的数据填充到dctdata的对应字段
       ' 在以上语句执行后,dctdata(“page2”)里只有一行表结构(即表体只有一行)   
       '赋表头的值
      
       dctData("Page1")(oTableinfo("map")("FText"))("FFLD") = m_BillInte**ce.GetFieldValue("FText")
       
       dctData("Page1")(oTableinfo("map")("FDeptID"))("FFLD") = m_BillInte**ce.GetFieldValue("FDeptID", -1, Enu_ValueType_FFLD)
       dctData("Page1")(oTableinfo("map")("FDeptID"))("FFND") = m_BillInte**ce.GetFieldValue("FDeptID", -1, Enu_ValueType_FFND)
       dctData("Page1")(oTableinfo("map")("FDeptID"))("FDSP") = m_BillInte**ce.GetFieldValue("FDeptID", -1, Enu_ValueType_FDSP)
       
    '赋表体的值
       Dim oPage2 As Object

      For i = 1 To m_BillInte**ce.Data("Page2").UBound - 1
           Set oPage2 = dctData("Page2")(1).CloneAll
           dctData("Page2").Add oPage2                  '添加到 dcData
           dctData("Page2")(i + 1)(oTableinfo("map")("FIndex2"))("FFLD") = i + 1 '更改分录号
       Next
               
       For i = 1 To m_BillInte**ce.Data("Page2").UBound
                
          '物料   FItemID
          dctData("Page2")(i)(oTableinfo("map")(" FItemID "))("FFLD") = m_BillInte**ce.GetFieldValue("FItemID ", i, Enu_ValueType_FFLD)
          dctData("Page2")(i)(oTableinfo("map")(" FItemID "))("FDSP") = m_BillInte**ce.GetFieldValue("FItemID ", i, Enu_ValueType_FDSP)
          dctData("Page2")(i)(oTableinfo("map")(" FItemID "))("FFND") = m_BillInte**ce.GetFieldValue("FItemID ", i, Enu_ValueType_FFND)
          
          '物料名称  fbaseproperty
          dctData("page2")(i)(oTableinfo("map")("fbaseproperty"))("FFLD") = m_BillInte**ce.GetFieldValue("fbaseproperty", i, Enu_ValueType_FFLD)
          dctData("Page2")(i)(oTableinfo("map")("fbaseproperty"))("FDSP") = m_BillInte**ce.GetFieldValue("fbaseproperty", i, Enu_ValueType_FDSP)
          dctData("Page2")(i)(oTableinfo("map")("fbaseproperty"))("FFND") = m_BillInte**ce.GetFieldValue("fbaseproperty", i, Enu_ValueType_FFND)
          
          '计量单位  FUnitID
          dctData("Page2")(i)(oTableinfo("map")(" FUnitID "))("FFLD") = m_BillInte**ce.GetFieldValue("FUnitID ", i, Enu_ValueType_FFLD)
          dctData("Page2")(i)(oTableinfo("map")(" FUnitID "))("FDSP") = m_BillInte**ce.GetFieldValue("FUnitID ", i, Enu_ValueType_FDSP)
          dctData("Page2")(i)(oTableinfo("map")(" FUnitID "))("FFND") = m_BillInte**ce.GetFieldValue("FUnitID ", i, Enu_ValueType_FFND)
          
          '数量  FQty
          dctData("Page2")(i)(oTableinfo("map")("FQty"))("FFLD") = m_BillInte**ce.GetFieldValue("fqty", i, Enu_ValueType_FFLD)
          
       Next
            
       Set obj = CreateObject("K3SingleClassBill.ClassInfoManager")
       With obj
           .datasrv = datasrv

           .ISCheckRight = True
           .Show , , , dctData
       End With

    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    2017-8-2 11:30
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2017-7-15 09:36:55 | 显示全部楼层
    3、如何在插件中实现选单的功能?
    调用Bos单据
    m_BillInte**ce.BillCtl.DoSelBill lClassTypeID '(原单的ClassTypeID)
    调用工业单据
    m_BillInte**ce.BillCtl.DoSelOldBill lClassTypeID '(原单的ClassTypeID)
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    2017-8-2 11:30
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2017-7-15 09:37:28 | 显示全部楼层
    4、在插件中以新增、修改和查看方式打开另一单据
    '********************************************

    '功能:显示BOS单据,显示的方式为新增、修改和浏览
    '参数:lClassTypeID—显示BOS单据的ID
    '
    '********************************************

    Private Sub ShowBill(ByVal lClassTypeID As Long)
            
    Dim oDataSrv As Object
    Dim oBill As Object
       
    On Error GoTo err_ctr
       
    Set oDataSrv = m_BillInte**ce.K3Lib.CreateK/3Object("K3ClassTpl.DataSrv")
    oDataSrv.ClassTypeID = lClassTypeID
         
    Set oBill = CreateObject("K3SingleClassBill.ClassInfoManager")
    With oBill
       .DataSrv = oDataSrv
       .ISNetControl = True
       .ISCheckRight = True
       .Show
       '**********************
       'Show 参数类型
       '第一个参数 Optional ByVal lID As Long = 0 ;描述修改或查看的单据ID
       '第二个参数 Optional ByVal bShowGroup As Boolean = False ;如是基础资料时,是否显示分组
       '第三个参数 Optional ByVal BillStatus As Long = Enu_BillStatus_New ;显示方式 0—查看;1—新增;2—修改
       '第四个参数 Optional ByVal dctData As KFO.Dictionary '单据初始值
       '**********************
    End With

    Set oDataSrv = Nothing
    Set oBill = Nothing
       
    Exit Sub
    err_ctr:
    Set oDataSrv = Nothing
    Set oBill = Nothing
    End Sub
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    2017-8-2 11:30
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2017-7-15 09:38:44 | 显示全部楼层
    5、显示BOS序时簿并返回选中的值
    '********************************************

    '功能:显示BOS序时簿并返回选中的值
    '参数:lClassTypeID—显示BOS单据的ID
    '
    '********************************************

    Private Function ShowListByReturn(ByVal lClassTypeID As Long) As Object
                               
    Dim oDataSrv As Object
    Dim objLookup As Object

    On Error GoTo err_ctr

    Set oDataSrv = m_BillInte**ce.K3Lib.CreateK3Object("K3ClassTpl.DataSrv")
    oDataSrv.ClassTypeID = lClassTypeID
    If oDataSrv.showfilter Then
       Set objLookup = CreateObject("K3ClassLookUp.BillLookUp")
       objLookup.ClassTypeID = lClassTypeID     
       Set objLookup.DataSrv = oDataSrv
       
      objLookup.Lookup
       
       Set ShowListByReturn = objLookup.VectReturn
            
    End If

    Set oDataSrv = Nothing
    Set objLookup = Nothing

    Exit Function
    err_ctr:
    Set oDataSrv = Nothing
    Set objLookup = Nothing
    End Function
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    2017-8-2 11:30
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2017-7-15 09:39:34 | 显示全部楼层
    6、如何在序事簿中得到选中行的记录集值?
    Dim vectSelect as kfo.vector
    Dim rs as adodb.recordset

    Set vectSelect=m_Listinte**ce. GetSelectedBillInfo
    Set rs=m_Listinte**ce.datasrv. GetBillDetail(vectSelect(1)("FID"))
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    2017-8-2 11:30
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2017-7-15 09:40:43 | 显示全部楼层
    7、将当前单据转化为另一单据,并无界面保存数据
       '********************************************
    '功能:将当前单据转化为另一单据,并无界面保存数据
    '参数:lClassTypeID—显示BOS单据的ID
    '********************************************
       
    Private Sub NoUISaveBill(ByVal lClassTypeID As Long)
            
    Dim oDataSrv As Object
    Dim oTableInfo As Object
    Dim oBill As Object
    Dim oData As Object
    Dim oSrv As Object
    Dim oPage2 As Object
    Dim i As Long

    On Error GoTo err_ctr

    Set oDataSrv = m_BillInterface.K3Lib.CreateK3Object("K3ClassTpl.DataSrv")
    oDataSrv.ClassTypeID = lClassTypeID
    Set oTableInfo = oDataSrv.TableInfo
    Set oData = oDataSrv.GetEmptyBill

    For i = 1 To m_BillInterface.Data("Page2").UBound - 1
        Set oPage2 = oData("Page2")(1).CloneAll
       oData("Page2").Add oPage2                  '添加到 dcData
        oData("Page2")(i + 1)("_-0001_FIndex2")("FFLD") = i + 1 '更改分录号
    Next
    For i = 1 To m_BillInterface.Data("Page2").UBound
        oData("Page2")(i)(oTableInfo("map")("FItemID"))("FFLD") = m_BillInterface.GetFieldValue("FItemID", i, Enu_ValueType_FFLD)
        oData("Page2")(i)(oTableInfo("map")("FItemID"))("FFND") = m_BillInterface.GetFieldValue("FItemID", i, Enu_ValueType_FFND)
        oData("Page2")(i)(oTableInfo("map")("FItemID"))("FDSP") = m_BillInterface.GetFieldValue("FItemID", i, Enu_ValueType_FDSP)
       
    Next
        Set oSrv = CreateObject("K3MClass.BillUpdate")
       i = oSrv.Save(MMTS.PropsString, oDataSrv.ClassType, oDataSrv.ClassTypeEntry, oDataSrv.TableInfo, oData, oDataSrv.dctLink)
    Set oDataSrv = Nothing
    Set oBill = Nothing
       
    Exit Sub
    err_ctr:
        MsgBox Err.Description
    Set oDataSrv = Nothing
    Set oBill = Nothing
    End Sub
    【备注】
    1、K/3 BOS保存方法Save的参数描述:
    'Public Function Save(ByVal sDsn As String, _
    '                     ByVal dctClassType As KFO.Dictionary, _
    '                     ByVal vctClassTypeEntry As KFO.Vector, _
    '                     ByVal dctTableinfo As KFO.Dictionary, _
    '                     ByRef dctData As KFO.Dictionary, _
    '                     ByVal dctLinks As KFO.Dictionary) As Long
    '/********************************************************************/
    '/*描述:单据保存
    '/*参数:
    '/*@ dctClassType KFO.Dictionary  单据整体信息模板
    '/*@ dctData KFO.Dictionary 单据数据包
    '/*@ dctLink KFO.Dictionary 选单关系模板,无选单为Nothing
    '/*@ dctTableInfo KFO.Dictionary 单据字段模板信息
    '/*@ sDsn String  K/3标准数据库连接串
    '/*@ vctClassTypeEntry KFO.Vector 单据体模板信息
    '/*备注:
    '/********************************************************************/
    2、使用此方法时插件要添加MMTS。
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表