个人博客 用于记载日常收集的一些技术文章 ...
K3 BOS : K3 插件中动态对单据头下拉列表赋值 K3 BOS : K3 插件中动态对单据头下拉列表赋值 插件中动态对单据头下拉列表赋值

Dim oBill As Object

Dim dctTableInfo As KFO.Dictionary

Dim sKey As String

Dim lCtlIndex As Long



'先获取下拉列表控件的Index

Set dctTableInfo = m_BillInterface.TableInfo

sKey = dctTableInfo("Map")("FComboBox") 'FComboBox为下拉列表的关键字

lCtlIndex = dctTableInfo(sKey)("CtlIndex")



'再对控件的下拉列表进行赋值

Set oBill = m_BillInterface.BillCtl

Call oBill.SetComboxList(lCtlIndex, "VALUELIST{1=a,2=b,3=c}") '1表示保存值,a表示显示值

m_BillInterface.SetFieldValue "FComboBox", "a", -1 '调用赋值函数赋值


注:由于是动态赋值,在下拉表字段的模板中并不存在保存值与显示值的对应关系,在下次显示单据的时候,需要跟据保存值去动态的显示下拉表值(建议保存值和显示值保持一致)


原文链接:https://vip.kingdee.com/article/46693648759848960?productLineId=7&isKnowledge=2&lang=zh-CN
郭少锋 创建 2024-03-13 19:56:48 K3 BOS
K3 BOS : K3 BOS 插件中实现根据对应代码携带出产品编码的示例 K3 BOS : K3 BOS 插件中实现根据对应代码携带出产品编码的示例 'Chang事件是在每个字段录入值发生变化回车之后触发

'参数@dct发生变化的字段模板,@dctFld发生变化的字段值对象

Private Sub m_BillInterface_Change(ByVal dct As KFO.IDictionary, ByVal dctFld As KFO.IDictionary, ByVal Col As Long, ByVal Row As Long, Cancel As Boolean)

Dim rs As ADODB.Recordset

'FMapID为对应代码关键字

'对对应代码字段录入发生变化做处理

If dct("FKey") = "FMapID" Then

'根据对应代码的值查询出相应的产品编号FNumber


'注意:实际情况可能获取单据上输入的客户或者供应商ID来组合查询过滤

Set rs = m_BillInterface.K3Lib.GetData("SELECT t2.FNumber FROM ICItemMapping t1 INNER JOIN t_ICItem t2 ON t1.FItemID=t2.FItemID WHERE FMapNumber='" & dctFld("FFND") & "'")

If Not rs.EOF Then

'将查出的产品编码赋值到界面上去(FItemID为产品编号字段关键字)

m_BillInterface.SetFieldValue "FItemID", rs("FNumber"), Row

End If

Set rs = Nothing

End If

End Sub


原文链接:https://vip.kingdee.com/article/46697315911139328?productLineId=7&isKnowledge=2&lang=zh-CN
郭少锋 创建 2024-03-13 19:53:27 K3 BOS
SQL : 删除表 SQL : 删除表
IF EXISTS (SELECT 1 FROM (SELECT NAME AS TABLE_NAME, XTYPE AS TABLE_XTYPE FROM sysobjects WHERE XTYPE = 'U' OR XTYPE = 'V') AS KSQL_USERTABLES WHERE TABLE_NAME = 'TMP06FC6F34E07511EEACAB0050563')
BEGIN
TRUNCATE TABLE TMP06FC6F34E07511EEACAB0050563
DROP TABLE TMP06FC6F34E07511EEACAB0050563
END
郭少锋 创建 2024-03-12 22:04:55 SQL
K3 BOS : 原报表 添加字段 K3 BOS : 原报表 添加字段 #region| 数据计算 + 显示 |
public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName)
{
#region| 保存原数据 至 新表名 |

var aIDBService = ServiceHelper.GetService<IDBService>(); aTableName1 = aIDBService.CreateTemporaryTableName(this.Context); // 生成 临时表名1(只能是这种名称的才能正常使用)

base.BuilderReportSqlAndTempTable(filter, aTableName1); // 原数据 保存到 临时表名1
#endregion

#region| 生成新数据 至 原表名 |

string aSql = string.Format(@"/*dialect*/
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
select a11.*
/*
,b12.F_OrgId -- 费用承担公司
,b12.F_PurposeId -- 收付款用途
,b12.F_CashFlow -- 现金流量
*/
,(case when a11.FDataType = 0 then isnull(o12.FName,'') else '' end) F_OrgId -- 使用组织_名称
,(case when a11.FDataType = 0 then isnull(r12.FName,'') else '' end) F_PurposeId -- 收付款用途_名称
,(case when a11.FDataType = 0 then isnull(p12.FName,'') else '' end) F_CashFlow -- 预置基础资料1_名称

into {0}
from {1} a11

left join t_GL_VoucherEntry b12 on b12.FEntryId = a11.FEntryId

left join T_ORG_Organizations_L o12 on o12.FOrgId = b12.F_OrgId and o12.FLocaleId = 2052 -- 费用承担公司
left join t_CN_RecPayPurPose_L r12 on r12.FID = b12.F_PurPoseId and r12.FLocaleId = 2052 -- 收付款用途
left join t_BAS_PrebdOne_L p12 on p12.FID = b12.F_CashFlow and p12.FLocaleId = 2052 -- 现金流量

order by a11.FIdentityId ;
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
", tableName, aTableName1); DBServiceHelper.Execute(this.Context, aSql);

#endregion
}
#endregion
郭少锋 编辑 2024-03-11 17:39:01 创建 2024-03-11 17:37:32 K3 BOS
K3 BOS : 关闭报表:删除临时表 K3 BOS : 关闭报表:删除临时表
#region| 关闭报表:删除临时表 |
public override void CloseReport()
{
base.CloseReport();

#region| 除临时表 |
if(!string.IsNullOrEmpty(aTableName1) )
{
var aIDBService = ServiceHelper.GetService<IDBService>(); aIDBService.DeleteTemporaryTableName(this.Context ,new string[1]{aTableName1} ); // 删除 临时表数据
}
#endregion
}
#endregion
郭少锋 创建 2024-03-11 17:36:37 K3 BOS
K3 BOS : 插件:简单账表 修改字段名称 K3 BOS : 插件:简单账表 修改字段名称 #region| 添加:要显示的 新字段 |
public override ReportHeader GetReportHeaders(IRptParams filter)
{
var aHeader = base.GetReportHeaders(filter);

ListHeader aField = aGetHeader("F_OrgId", aHeader);
if (aField != null){ aField.Caption = new LocaleValue("费用承担公司", this.Context.UserLocale.LCID); } // 修改字段名称
else{ aHeader.AddChild("F_OrgId", new LocaleValue("费用承担公司", this.Context.UserLocale.LCID) ); } // 添加字段

aField = aGetHeader("F_PurposeId", aHeader);
if (aField != null) { aField.Caption = new LocaleValue("收付款用途", this.Context.UserLocale.LCID); }
else { aHeader.AddChild("F_PurposeId", new LocaleValue("收付款用途", this.Context.UserLocale.LCID)); }

aField = aGetHeader("F_CashFlow", aHeader);
if (aField != null) { aField.Caption = new LocaleValue("现金流量", this.Context.UserLocale.LCID); }
else { aHeader.AddChild("F_CashFlow", new LocaleValue("现金流量", this.Context.UserLocale.LCID)); }

return aHeader;
}
#endregion


#region| 取得:字段信息 aGetHeader |
private ListHeader aGetHeader(string aKey, ReportHeader aHeader)
{
foreach (var aRow1 in aHeader.GetChilds())
{
if (aRow1.GetChildCount() == 0)
{
if (aRow1.FieldName == aKey) { return aRow1; }
}
else
{
foreach (var aRow2 in aRow1.GetChilds())
{
if (aRow2.FieldName == aKey) { return aRow1; }
}
}
}
return null;
}
#endregion
郭少锋 编辑 2024-03-11 17:35:14 创建 2024-03-11 17:34:59 K3 BOS
K3 BOS : 列表:根据发布时的单据类型 进行过滤 K3 BOS : 列表:根据发布时的单据类型 进行过滤 # 列表插件:只显示当前发布的单据类型,适用所有单据 FBillTypeID 或 FBillType

import clr
clr.AddReference('System')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS.ServiceHelper') 
from Kingdee.BOS.ServiceHelper import* 
from Kingdee.BOS import *
from Kingdee.BOS.Log import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
#from Kingdee.BOS.Core.Metadata.EntityElement import *
from System import *
def PrepareFilterParameter(e):
    if this.View.OpenParameter == None:
        return
    billTypeId = this.View.OpenParameter.GetCustomParameter("BillTypeID"); #单据类型
    #this.View.ShowMessage(str(billTypeId));
    if billTypeId == None or billTypeId == "":
        return
    if e.FilterString != None and e.FilterString.Length > 0:
        e.FilterString = e.FilterString + " and "
    e.FilterString = e.FilterString +("FBillTypeID = '" + billTypeId + "'") # 根据发布时的单据类型 进行过滤
郭少锋 创建 2024-03-07 14:42:09 K3 BOS
用友 : 微信多开 用友 : 微信多开 win11 同时打开多个微信

@echo off

start "" "C:\Program Files\Tencent\WeChat\WeChat.exe"
start "" "C:\Program Files\Tencent\WeChat\WeChat.exe"

exit

要打开几个,就复制几行
start "" "C:\Program Files\Tencent\WeChat\WeChat.exe"
郭少锋 编辑 2024-03-05 19:30:16 创建 2024-03-05 19:29:52 用友
K3 BOS : K3 记账凭证:部门 改成 新值 K3 BOS : K3 记账凭证:部门 改成 新值
-- K3
------------------------------------------------------------------------------------------------------------------------
-- 查询:会计分录序时簿

select

a1.FDate, a1.FYear, a1.FPeriod, a1.FGroupID, a1.FNumber
,a2.FVoucherID,a2.FEntryID + 1 FSeq ,a2.FDetailID
,a3.F2

from t_Voucher a1
join t_VoucherEntry a2 on a1.FVoucherID = a2.FVoucherID
join t_itemdetail a3 on a3.FDetailID = a2.FDetailID

where a1.FDate between '2008-01-02' -- 开始日期
and '2018-01-03' -- 截止日期

and a3.F2 = 238

order by a1.FYear, a1.FPeriod, a1.FGroupID, a1.FNumber ,a2.FEntryID

------------------------------------------------------------------------------------------------------------------------
-- 查询:部门

select FItemID,FNumber,FName,FItemClassID from t_item where FItemClassid=2 and FItemID in ( 238,239 )


------------------------------------------------------------------------------------------------------------------------
-- 更改:会计分录序时簿:部门 改成 新值

update a3 set F2 = 239 -- 部门:新值

from t_Voucher a1
join t_VoucherEntry a2 on a1.FVoucherID = a2.FVoucherID
join t_itemdetail a3 on a3.FDetailID = a2.FDetailID

where a1.FDate between '2008-01-02' -- 开始日期
and '2018-01-03' -- 截止日期

and a3.F2 = 238 -- 部门:旧值

------------------------------------------------------------------------------------------------------------------------
-- 更正:凭证录入.核算项目

update a2 set FItemID = a1.F2

from t_itemdetail a1
join t_itemdetailv a2 on a1.FDetailID = a2.FDetailID

where a2.FItemClassID = 2 -- 部门
and a1.F2 != 0
and a1.F2 != a2.FItemID

------------------------------------------------------------------------------------------------------------------------
-- 查看:凭证录入.核算项目

select a1.FDetailID ,a1.F2 ,a2.FItemClassID ,a2.FItemID

from t_itemdetail a1
join t_itemdetailv a2 on a1.FDetailID = a2.FDetailID

where a2.FItemClassID = 2 -- 部门
and a1.F2 != 0
and a1.F2 != a2.FItemID

------------------------------------------------------------------------------------------------------------------------
郭少锋 编辑 2024-03-03 21:32:28 创建 2024-03-03 20:53:11 K3 BOS
K3 BOS : 云星空 K3 BOS : 云星空 不需要使用 轻分析 / BBC电商 的话,可以关掉 K3CloudTomcat,这个挺占内存的,至于其他服务就不能关了

https://vip.kingdee.com/article/360910888322711296?productLineId=1&isKnowledge=2
K3CloudTomcat 内存占用大,优化
郭少锋 编辑 2024-03-01 22:27:59 创建 2024-03-01 22:26:39 K3 BOS