金蝶 凭证相关代码转化 VB 转化为C# ole 编程

时间:2020-12-17 06:43:55
//创建凭证 已实现
            System.Type oType = System.Type.GetTypeFromProgID("Mvedit.MVoucherEdit");
            object o = System.Activator.CreateInstance(oType);
            //调用凭证新增界面
            oType.InvokeMember("LoadVoucher", System.Reflection.BindingFlags.InvokeMethod, null, o, new object[] { 0, null, null, null, null });

//创建凭证 并添加凭证数据 请问 创建凭证 代码转化处理 VB 代码如下:
'建立界面显示凭证数据
Private Function CreateVoucher() As Object
    Dim Voucher As Object '凭证对象
    Dim VoucherEntrys As Object '凭证分录对象
    Set Voucher = CreateObject("EBCGL.Voucher")
    Voucher.Construct Nothing, Nothing '建立凭证数据对象
    Set VoucherEntrys = Voucher.Entries '设置凭证分录对象
    Voucher.InternalInd = "Super" '机制凭证信息(可选)
    '设置凭证默认日期(可选)
'    Voucher.TransDate = Format(Now, "yyyy-mm-dd") '业务日期
 '   Voucher.VoucherDate = Format(Now, "yyyy-mm-dd") '凭证日期
     Voucher.GroupID = CboGroup.ItemData(CboGroup.ListIndex) '凭证字
     Voucher.Number = Val(TxtNumber.Text) '凭证号
    
    '下面输入凭证分录数据
    '借方分录数据
    Dim Acct1 As Long, Acct2 As Long
    GetRndAccountID Acct1, Acct2
    If Acct1 * Acct2 = 0 Then Exit Function
    VoucherEntrys.Add
    With Voucher.Entries(Voucher.Entries.Count)
        .Explanation = "凭证录入检测-分录1"
        .AccountID = Acct1
        .Amount = 100
        .AmountFor = 100
        .ExchangeRate = 1
        .CurrencyID = 1
        .DC = 1 '借方
    End With
    '贷方分录数据
    VoucherEntrys.Add
    With Voucher.Entries(Voucher.Entries.Count)
        .Explanation = "凭证录入检测-分录1"
        .AccountID = Acct2
        .Amount = 100 '本位币
        .AmountFor = 100 '原币
        .ExchangeRate = 1 '汇率
        .CurrencyID = 1 '币别
        .DC = 0 '贷方
    End With
    Set CreateVoucher = Voucher
End Function

//另外请问  如果科目又核算项目 怎么添加核算项目 ^_^  分不多,还请大侠 不吝赐教

6 个解决方案

#1


主要是 凭证分录 和  科目核算项目的处理 谢谢!

#2


以上问题已经解决 但是在建立凭着挂你输入对象时   通不过:

object objVoucher = CreateVoucher();

            System.Type oTypeRel = System.Type.GetTypeFromProgID("KDVBF.Relevancy");
            object objRel = System.Activator.CreateInstance(oTypeRel);
            oTypeRel.InvokeMember("MultiEdit", System.Reflection.BindingFlags.SetProperty, null, objRel, new object[] { false });
//下面一行代码无法通过  请高手指点  虽然 曾经试过 直接引用 KDVBF 
/*
            KDVBF.RelevancyClass objRel = new KDVBF.RelevancyClass();
            objRel.EditObject = objVoucher;//设置凭证数据对象到Rel参数
            objRel.MultiEdit = false;//是否允许多张凭证编辑
*/ 但有时 会提示错误 lock 类的错误
            oTypeRel.InvokeMember("EditObject", System.Reflection.BindingFlags.SetProperty, null, objRel, new object[] { objVoucher });

#3



运行时错误 91  未设置对象变量 或者with block 变量

#4


你EditObject是什么?怎么有未设置对象变量?

#5


楼上兄弟 我加你为好友 本贴 只有你一个人支持我 ^_^ 谢谢 ! 

#6


因为这年头,懂vb的甚是少见。

#1


主要是 凭证分录 和  科目核算项目的处理 谢谢!

#2


以上问题已经解决 但是在建立凭着挂你输入对象时   通不过:

object objVoucher = CreateVoucher();

            System.Type oTypeRel = System.Type.GetTypeFromProgID("KDVBF.Relevancy");
            object objRel = System.Activator.CreateInstance(oTypeRel);
            oTypeRel.InvokeMember("MultiEdit", System.Reflection.BindingFlags.SetProperty, null, objRel, new object[] { false });
//下面一行代码无法通过  请高手指点  虽然 曾经试过 直接引用 KDVBF 
/*
            KDVBF.RelevancyClass objRel = new KDVBF.RelevancyClass();
            objRel.EditObject = objVoucher;//设置凭证数据对象到Rel参数
            objRel.MultiEdit = false;//是否允许多张凭证编辑
*/ 但有时 会提示错误 lock 类的错误
            oTypeRel.InvokeMember("EditObject", System.Reflection.BindingFlags.SetProperty, null, objRel, new object[] { objVoucher });

#3



运行时错误 91  未设置对象变量 或者with block 变量

#4


你EditObject是什么?怎么有未设置对象变量?

#5


楼上兄弟 我加你为好友 本贴 只有你一个人支持我 ^_^ 谢谢 ! 

#6


因为这年头,懂vb的甚是少见。