个人博客 用于记载日常收集的一些技术文章 ...
SQL : SQL:数据表 变量 SQL : SQL:数据表 变量 DECLARE @TableItem TABLE
(
FItemID INT,
FIsConfig TINYINT NOT NULL DEFAULT(0),
FBomInterID INT NOT NULL DEFAULT(0),
FBOMNumber NVARCHAR(200) NOT NULL DEFAULT(''),
FERPClsID INT NOT NULL DEFAULT(0)
)

INSERT INTO @TableItem ( FItemID )

SELECT 0
UNION SELECT 1296

UPDATE t1 SET t1.FErpClsID=t2.FErpClsID
FROM @TableItem t1 INNER JOIN t_ICItemBase t2 ON t1.FItemID = t2.FItemID

UPDATE t1 SET t1.FIsConfig = 1,t1.FBOMInterID = t3.FInterID,t1.FBomNumber = t3.FBOMNumber
FROM @TableItem t1 INNER JOIN ICPlan_CharConfig t2 ON t1.FItemID = t2.FItemID INNER JOIN ICBOM t3 ON t2.FSourceItemID=t3.FItemID and t3.FInterID=t2.FBOMInterID
WHERE t1.FBomInterID = 0 AND t1.FErpClsID IN (2,3)

UPDATE t1 SET t1.FBOMInterID = t2.FInterID,t1.FBomNumber = t2.FBOMNumber
FROM @TableItem t1 INNER JOIN ICBOM t2 ON t1.FItemID = t2.FItemID
WHERE t1.FBomInterID = 0 AND t2.FUseStatus = 1072 AND t1.FErpClsID IN (2,3)

SELECT * FROM @TableItem WHERE FItemID > 0
郭少锋 创建 2024-06-15 15:40:07 SQL
云星空 : 物料启用辅助属性,单据添加必录校验 云星空 : 物料启用辅助属性,单据添加必录校验 通过如下公式,检验等级(FF100005)必录但未录(其他各维度,参照此公式单独配置):

FMaterialID !=null and len(filter(lambda x: (x.AuxPropertyId_Id == 100009 and x.IsEnable1==true), FMaterialID.MaterialAuxPty))>0 and (FAuxPropId.ActiveObject = @null or FAuxPropId.ActiveObject['F100009'] = 0)

公式说明:1. FMaterialID !=null 物料已经录入

2. len(filter(lambda x: (x.AuxPropertyId_Id == 100009 and x.IsEnable1==true), FMaterialID.MaterialAuxPty))>0 对物料的MaterialAuxPty单据体进行循环,找到内码为100009的辅助属性,判断其是否启用,如果启用,则满足条件

3. (FAuxPropId.ActiveObject = @null or FAuxPropId.ActiveObject['F100009'] = 0)辅助属性未录入,或者是辅助属性维度F100009未录入

特别说明:上述公式,并不是通用的公式,因为其中使用辅助属性维度F100009,在其他数据中心,可能根本不存在,或者代表的含义不同。请勿照搬,必须在理解了公式之后,在本地数据中心进行适当调整,以适用于本数据中心。

应用案例:物料启用EPE宽度的辅助属性,在销售订单EPE宽度字段必录

---1.查找物料辅助属性对应标示

select p.* from T_BD_MATERIAL m

left join t_BD_MaterialAuxPty p on p.FMATERIALID=m.FMATERIALID

where m.FNUMBER=' 16254100A01701' and m.FUSEORGID=276234

--100005 EPE长度(mm)

--100006 EPE厚度(mm)

--100007 EPE宽度(mm)

--100002 纸度(英寸)

--100003 纸度

--100004 纸长(英寸)

2.在销售订单保存操作添加校验

FMaterialID !=null and len(filter(lambda x: (x.AuxPropertyId_Id == 100005 and x.IsEnable1==true), FMaterialID.MaterialAuxPty))>0 and (FAuxPropId.ActiveObject = @null or FAuxPropId.ActiveObject['F100005'] = 0)



3:利用辅助属性进行计算

FSecCountQty = FCountQty * (float(str( FAuxPropId.ActiveObject['F100002']))) * (float(str( FAuxPropId.ActiveObject['F100004']))) * 25.4*25.4 / 1000000
郭少锋 创建 2024-06-07 00:21:35 云星空
云星空 : JSONObject 用法 云星空 : JSONObject 用法 原文链接:https://vip.kingdee.com/article/467732362118540288?productLineId=1&isKnowledge=2&lang=zh-CN

using Kingdee.BOS.Core.CommonFilter;
using Kingdee.BOS.Core.CommonFilter.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;

namespace DynamicFormPlugIn.Filter
{
[Kingdee.BOS.Util.HotUpdate]
public class FilterPlugIn_FBatchFilterGrid : AbstractCommonFilterPlugIn
{
/*
* 过滤表单插件设置高级过滤
*/

public override void TreeNodeClick(TreeNodeArgs e)
{
InitFBatchFilterGridInClient();
}

/// <summary>
/// 设置服务端的高级过滤逻辑(如果不显示过滤界面需要使用这个方案直接修改过滤方案)
/// </summary>
private void InitFBatchFilterGridInServer()
{
/*
* json 结构设置高级过滤
*/

Kingdee.BOS.JSON.JSONObject jsonObj = new Kingdee.BOS.JSON.JSONObject();
jsonObj["MakeUpType"] = "Column";

Kingdee.BOS.JSON.JSONArray jsonRows = new Kingdee.BOS.JSON.JSONArray();
Kingdee.BOS.JSON.JSONObject jsonSource = new Kingdee.BOS.JSON.JSONObject();

jsonSource["FieldName"] = "FSrcBillNo";

Kingdee.BOS.JSON.JSONArray jsonVal = new Kingdee.BOS.JSON.JSONArray();
jsonVal.Add("a");
jsonVal.Add("b");
jsonVal.Add("d");
jsonVal.Add("c");

jsonSource["Value"] = jsonVal.ToJSONString();
jsonSource["Logic"] = "OR";

jsonRows.Add(jsonSource);

jsonObj["Source"] = jsonRows;

var setting = jsonObj.ToJSONString();

var modelService = this.CommonFilterModel as ICommonFilterModelService;
if (modelService == null)
return;
modelService.SchemeEntity.BatchFilterSetting = setting;
this.CommonFilterModel.BatchFilterObject.Setting = modelService.SchemeEntity.BatchFilterSetting;
}

/// <summary>
/// 设置客户端的高级过滤逻辑
/// </summary>
private void InitFBatchFilterGridInClient()
{
Kingdee.BOS.JSON.JSONObject jsonObj = new Kingdee.BOS.JSON.JSONObject();
jsonObj["MakeUpType"] = "Column";

Kingdee.BOS.JSON.JSONArray jsonRows = new Kingdee.BOS.JSON.JSONArray();
Kingdee.BOS.JSON.JSONObject jsonSource = new Kingdee.BOS.JSON.JSONObject();
jsonSource["FieldName"] = "FSrcBillNo";
Kingdee.BOS.JSON.JSONArray jsonVal = new Kingdee.BOS.JSON.JSONArray();
jsonVal.Add("a");
jsonVal.Add("b");
jsonVal.Add("d");
jsonVal.Add("c");
jsonSource["Value"] = jsonVal.ToJSONString();
jsonSource["Logic"] = "OR";
jsonRows.Add(jsonSource);
jsonObj["Source"] = jsonRows;

jsonRows.Add(jsonSource);

var batchFilter = this.View.GetControl<BatchFilterGrid>("FBatchFilterGrid");
batchFilter.SetFilterRowsWithMakeUpType(jsonObj);
}
}
}
郭少锋 创建 2024-06-05 09:21:46 云星空
云星空 : 创建:函数 aGsf_Convert 转换 全角半角 云星空 : 创建:函数 aGsf_Convert 转换 全角半角 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- 删除:函数

if exists ( select * from sys.objects where object_id = object_id(N'dbo.aGsf_Convert') and type in (N'FN',N'IF',N'TF') )
drop function dbo.aGsf_Convert
go


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- 创建:函数 aGsf_Convert 转换 全角半角


create function dbo.aGsf_Convert(

@str nvarchar(4000) -- 要转换的字符串
,@flag bit -- 转换成: 0 半角 1 全角
)
returns nvarchar(4000)
as
begin
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
declare @pat nvarchar(8),@step int,@i int,@spc int

if @flag = 0

select @pat = N'%[!-~]%' ,@step = -65248 ,@str = replace( @str ,N' ' ,N' ' )
else
select @pat = N'%[!-~]%' ,@step = 65248 ,@str = replace( @str ,N' ' ,N' ' )

set @i = patIndex( @pat collate Latin1_General_Bin ,@str )

while @i > 0
select @str = replace( @str ,subString( @str ,@i ,1) ,nchar( unicode( subString( @str ,@i ,1) ) + @step ) ) ,@i = patIndex( @pat collate Latin1_General_Bin ,@str )

return( @str )
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
end

/*
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- 使用示例

declare @s1 varchar(8000) = '中 2-3456a78STUVabn中 国opwxyz' ;

select dbo.aGsf_Convert( @s1 ,0 )
,dbo.aGsf_Convert( @s1 ,1 )


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
转换说明

全角字符 unicode 从 65281~65374 在顺序上是对应的
半角字符 unicode 从 33~126

空格比较特殊,全角 12288 ,半角 32

指定排序规则 collate Latin1_General_BIN


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
*/


go
郭少锋 编辑 2024-05-29 20:58:02 创建 2024-05-29 20:50:30 云星空
SQL : SQL 日期格式化 SQL : SQL 日期格式化 declare @time datetime; select @time = getDate(); -- 2081-03-24 21:39:45.590

select 单据日期 < convert(varchar(20),getDate(),23)
----------------------------------------------------------------------------------------------------------
--【常用】

declare @time datetime; set @time = '2081-03-24 21:39:45.589';

select convert(varchar(100), @time, 112) -- 20810324
,convert(varchar(100), @time, 12) -- 810324

select convert(varchar(100), @time, 21) -- 2081-03-24 21:39:45.590
,convert(varchar(100), @time, 20) -- 2081-03-24 21:39:45
,convert(varchar(100), @time, 23) -- 2081-03-24

select convert(varchar(100), @time, 14) -- 21:39:45:590
,convert(varchar(100), @time, 24) -- 21:39:45

select convert(varchar(100), @time, 111) -- 2081/03/24
,convert(varchar(100), @time, 11) -- 81/03/24

select convert(varchar(100), @time, 102) -- 2081.03.24
,convert(varchar(100), @time, 2) -- 81.03.24

----------------------------------------------------------------------------------------------------------
select convert(varchar(100), @time, 114) -- 21:39:45:590
,convert(varchar(100), @time, 14) -- 21:39:45:590

,convert(varchar(100), @time, 8) -- 21:39:45
,convert(varchar(100), @time, 24) -- 21:39:45
,convert(varchar(100), @time, 108) -- 21:39:45

----------------------------------------------------------------------------------------------------------
select convert(varchar(100), @time, 112) -- 20810324
,convert(varchar(100), @time, 12) -- 810324

----------------------------------------------------------------------------------------------------------
select convert(varchar(100), @time, 23) -- 2081-03-24

,convert(varchar(100), @time, 120) -- 2081-03-24 21:39:45
,convert(varchar(100), @time, 20) -- 2081-03-24 21:39:45

,convert(varchar(100), @time, 121) -- 2081-03-24 21:39:45.590
,convert(varchar(100), @time, 21) -- 2081-03-24 21:39:45.590
,convert(varchar(100), @time, 25) -- 2081-03-24 21:39:45.590

----------------------------------------------------------------------------------------------------------
select convert(varchar(100), @time, 105) -- 24-03-2081
,convert(varchar(100), @time, 5) -- 24-03-81

,convert(varchar(100), @time, 110) -- 03-24-2081
,convert(varchar(100), @time, 10) -- 03-24-81

----------------------------------------------------------------------------------------------------------
select convert(varchar(100), @time, 111) -- 2081/03/24
,convert(varchar(100), @time, 11) -- 81/03/24

,convert(varchar(100), @time, 101) -- 03/24/2081
,convert(varchar(100), @time, 1) -- 03/24/81

,convert(varchar(100), @time, 103) -- 24/03/2081
,convert(varchar(100), @time, 3) -- 24/03/81

,convert(varchar(100), @time, 22) -- 03/24/81 9:39:45 PM

----------------------------------------------------------------------------------------------------------
select convert(varchar(100), @time, 102) -- 2081.03.24
,convert(varchar(100), @time, 2) -- 81.03.24

,convert(varchar(100), @time, 104) -- 24.03.2081
,convert(varchar(100), @time, 4) -- 24.03.81

----------------------------------------------------------------------------------------------------------
select convert(varchar(100), @time, 106) -- 24 03 2081
,convert(varchar(100), @time, 6) -- 24 03 81

,convert(varchar(100), @time, 113) -- 24 03 2081 21:39:45:590
,convert(varchar(100), @time, 13) -- 24 03 2081 21:39:45:590

select convert(varchar(100), @time, 100) -- 03 24 2081 9:39PM
,convert(varchar(100), @time, 0) -- 03 24 2081 9:39PM

,convert(varchar(100), @time, 109) -- 03 24 2081 9:39:45:590PM
,convert(varchar(100), @time, 9) -- 03 24 2081 9:39:45:590PM

----------------------------------------------------------------------------------------------------------
select convert(varchar(100), @time, 107) -- 03 24, 2081
,convert(varchar(100), @time, 7) -- 03 24, 81

----------------------------------------------------------------------------------------------------------
select convert(varchar(100), @time, 126) -- 2081-03-24T21:39:45.590

select convert(varchar(100), @time, 130) -- 14 ????? ??????? 1504 9:39:45:590PM
,convert(varchar(100), @time, 131) -- 14/06/1504 9:39:45:590PM
郭少锋 编辑 2024-05-29 20:54:18 创建 2023-02-21 14:46:01 SQL
SQL : SQL:拆分表数据 SQL : SQL:拆分表数据 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- 查看:拆分结果 【K3单据 引用插件】

exec a_Select_ICClassType_Dll ;



--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- 创建:临时表

drop table a_ICClassTypeDll
go

create table a_ICClassTypeDll (

FComponentExt nvarchar(100)
,FID int
,FName_CHS nvarchar(100)
,FTableName nvarchar(100)
);
go


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- 创建:存储过程

create procedure a_Select_ICClassType_Dll
as
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- 清空:表数据

delete from a_ICClassTypeDll ;

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- 拆分:表数据

declare @id int ;

declare cursor_1 cursor for (select FID from ICClassType where FID > 210000000)

open cursor_1

fetch next from cursor_1 into @id

while @@fetch_status = 0
begin

declare @Txt nvarchar(1000) ; select @Txt = FComponentExt from ICClassType where FID = @id ; -- print 'FID ' + convert(varchar(100),@id) ;

declare @Txt1 nvarchar(100) = '' ; select @Txt1 = 'aGsf_K3.' ;
declare @Txt2 nvarchar(100) = '' ; select @Txt2 = '|' ;

declare @Start int = 1 ;
declare @End int = 1 ;

while @Start > 0 begin

select @Start = charIndex( @Txt1 ,@Txt ,@Start ) ; -- print '@Start ' + convert(varchar(100),@Start) ;
select @End = charIndex( @Txt2 ,@Txt ,@Start ) ; -- print '@End ' + convert(varchar(100),@End ) ;

if @Start = 0 continue ;

declare @Txt3 nvarchar(100) = '' ; select @Txt3 = subString( @Txt ,@Start + len(@Txt1) ,@End - ( @Start + len(@Txt1) ) ) ; -- print '@Txt3 ' + convert(varchar(100),@Txt3 ) ;

insert into a_ICClassTypeDll(FID,FName_CHS,FTableName,FComponentExt) select FID,FName_CHS,FTableName,@Txt3 from ICClassType where FID = @id ;

select @Start = @End + len(@Txt2) ; -- print '@Start ' + convert(varchar(100),@Start) ;

end

fetch next from cursor_1 into @id
end

close cursor_1

deallocate cursor_1

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- 显示:拆分结果

select * from a_ICClassTypeDll order by FComponentExt,FID ;

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

go
郭少锋 编辑 2024-05-26 16:28:18 创建 2024-05-26 16:25:44 SQL
云星空 : C# 去除空格 云星空 : C# 去除空格 在C#中,我们可以使用以下几种方法来去除字符串中的空格:

方法一:使用正则表达式

string str = " Hello World ";
string result = Regex.Replace(str, @"\s+", ""); // 使用正则表达式替换所有空格
Console.WriteLine(result); // 输出:"HelloWorld"

方法二:使用String的Replace方法

string str = " Hello World ";
string result = str.Replace(" ", ""); // 使用Replace方法替换空格
Console.WriteLine(result); // 输出:"HelloWorld"


方法三:使用String的Split和Join方法

string str = " Hello World ";
string[] words = str.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // 使用Split方法以空格分割字符串,并移除空格
string result = string.Join("", words); // 使用Join方法将分割后的字符串连接起来
Console.WriteLine(result); // 输出:"HelloWorld"


方法四:使用StringBuilder的Append和Replace方法

string str = " Hello World ";
StringBuilder sb = new StringBuilder();
foreach (char c in str)
{
if (!char.IsWhiteSpace(c))
{
sb.Append(c); // 逐个字符添加到StringBuilder对象中
}
}
string result = sb.ToString().Replace(" ", ""); // 使用Replace方法替换空格
Console.WriteLine(result); // 输出:"HelloWorld"
郭少锋 创建 2024-05-23 19:42:22 云星空
云星空 : C# 文本比较 云星空 : C# 文本比较 if (e.Key.EqualsIgnoreCase("FReCheck")) 郭少锋 创建 2024-05-22 22:13:38 云星空 云星空 : 修改 Web.config,IIS启动速度提升60倍 云星空 : 修改 Web.config,IIS启动速度提升60倍 https://vip.kingdee.com/article/537953720802328576?productLineId=1&lang=zh-CN

bin中dll文件更新后,第一次重启IIS需要几分钟。
开发环境,需要不断改代码、编译dll、重启。每次都要等几分钟,严重影响开发效率。
可以修改web.config,改为按需加载dll,提高启动速度。

1、修改Web.config

打开Program Files (x86)\Kingdee\K3Cloud\WebSite\Web.config,找到节点system.web/compilation/assemblies

2、修改assemblies节点

<assemblies>
<remove assembly="*" />
<add assembly="System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="Kingdee.BOS" />
<add assembly="Kingdee.BOS.Web.Core" />
<add assembly="Kingdee.BOS.Web" />
<add assembly="Kingdee.BOS.Web.HTML" />
<add assembly="Kingdee.BOS.Web.HTML.Core" />
<add assembly="Kingdee.K3.SCM.SCP.Web" />
</assemblies>

3、测试
编译一个新dll文件放入bin中,重启IIS,测试星空页面打开速度。
原来需要2分半,现在只需2秒。


注意:
1、开发、测试环境建议修改,提高效率;
2、正式环境不会频繁更新dll文件,也就打完补丁后第一次重启慢点,不建议修改(可能会导致有些aspx页面打不开);
3、即将发布的V9版本,将默认增加此配置,提高启动速度;
郭少锋 创建 2024-05-16 23:12:10 云星空
K3 BOS : 金蝶K3:锁定单据头字段 K3 BOS : 金蝶K3:锁定单据头字段 【问题描述:】

我想在工业单据的插件中锁定单据头字段,但实现不了?

【解决方法:】

For i = 0 To m_BillTransfer.Head.count - 1
If m_BillTransfer.Head(i).Caption = "客户地点:" Then

'客户地点显示、不可编辑(Visible改为False为不显示)

m_BillTransfer.Head(i).Visible = True
m_BillTransfer.Head(i).Enabled = False

m_BillTransfer.Head(i).Caption= "XXXX"

Exit For
End If

Next i


【问题描述:】

我想在录产品入库单时做一插件,只要有一个地方改变就自动隐藏单据体中的“备注”列,试来试去不行,还请高人指点,先谢了!



【解决方法:】

你可以将其锁定,而不必隐藏:

Private Sub m_BillTransfer_HeadChange(ByVal CtlIndex As Long, ByVal Value As Variant, ByVal bNewBill As Boolean, Cancel As Boolean)
Dim vsEntrys As Object
Dim i As Long

Set vsEntrys = m_BillTransfer.Grid

For i = 1 To UBound(m_BillTransfer.EntryCtl)

If UCase(m_BillTransfer.EntryCtl(i).FieldName) = "FNOTE" Then
Exit For
End If
Next i


'锁定单据体备注字段

With vsEntrys
.col = i
.Col2 = i
.row = -1
.BlockMode = True
.Lock = True
.BlockMode = False
End With

End Sub
你也可以将此列锁定后列宽设置为0,变通实现隐藏:
With vsEntrys
.col = i
.Col2 = i
.row = -1
.BlockMode = True
.Lock = True
.BlockMode = False
.ColWidth(i) = 0
End With
郭少锋 创建 2024-05-14 21:37:39 K3 BOS