个人博客 用于记载日常收集的一些技术文章 ...
C# : 拆分替换文本 C# : 拆分替换文本 c# 把这段文字
FStockName,FMtrlNo,FMtrlName,FUnitStockName

转化成
a.FStockName,a.FMtrlNo,a.FMtrlName,a.FUnitStockName

( b.FStockName = a.FStockName ) and ( b.FMtrlNo = a.FMtrlNo ) and ( b.FMtrlName = a.FMtrlName ) and ( b.FUnitStockName = a.FUnitStockName )


string input = "FStockName,FMtrlNo,FMtrlName,FUnitStockName";

// 第一部分:添加 a. 前缀
string part1 = string.Join(",", input.Split(',').Select(field => $"a.{field}"));

// 第二部分:生成条件表达式
string part2 = string.Join(" and ", input.Split(',').Select(field => $"( b.{field} = a.{field} )"));

// 输出结果
Console.WriteLine("第一部分结果:");
Console.WriteLine(part1);
Console.WriteLine("\n第二部分结果:");
Console.WriteLine(part2);


第一部分结果:
a.FStockName,a.FMtrlNo,a.FMtrlName,a.FUnitStockName

第二部分结果:
( b.FStockName = a.FStockName ) and ( b.FMtrlNo = a.FMtrlNo ) and ( b.FMtrlName = a.FMtrlName ) and ( b.FUnitStockName = a.FUnitStockName )




public static class FieldNameConverter
{
public static string ConvertToAliasedFields(string input, string alias)
{
return string.Join(",", input.Split(',').Select(field => $"{alias}.{field}"));
}

public static string ConvertToJoinConditions(string input, string alias1, string alias2)
{
return string.Join(" and ", input.Split(',').Select(field => $"( {alias2}.{field} = {alias1}.{field} )"));
}
}

// 使用示例
var fields = "FStockName,FMtrlNo,FMtrlName,FUnitStockName";
var part1 = FieldNameConverter.ConvertToAliasedFields(fields, "a");
var part2 = FieldNameConverter.ConvertToJoinConditions(fields, "a", "b");

郭少锋 创建 2025-07-11 21:18:11 C#
SQL : 数字前面加 0 SQL : 数字前面加 0 DECLARE @num INT = 123;
DECLARE @length INT = 6;

SELECT REPLACE(STR(@num, @length), ' ', '0');
-- 结果: '000123'
郭少锋 创建 2025-07-11 00:23:49 SQL
云星空 : 简单账表 基础资料字段 显示值替换 云星空 : 简单账表 基础资料字段 显示值替换
#region| 设置:报表属性 Initialize() |
public override void Initialize()
{
base.Initialize();

base.ReportProperty.IdentityFieldName = "FIdentityId"; // 字段筛选需要用到,名称不可修改

base.ReportProperty.BillTypeFieldName = "FBillTypeId";
base.ReportProperty.FormIdFieldName = "FFormId";
base.ReportProperty.BillKeyFieldName = "FID";
base.ReportProperty.PrimaryKeyFieldName = "FBillNo";

base.ReportProperty.ReportType = ReportType.REPORTTYPE_NORMAL;

base.ReportProperty.IsUIDesignerColumns = true;
base.ReportProperty.IsGroupSummary = true;

base.IsCreateTempTableByPlugin = true;
base.ReportProperty.SimpleAllCols = true;
base.ReportProperty.IsDefaultOnlyDspSumAndDetailData = true;


//base.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FStockId", "FStockNo");
//base.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FMaterialId", "FMaterialNo");

base.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns = new Dictionary<string, string>() // 显示时,把基础资料 FStockId 的值显示成 数据表 FStockNo 的值
{
{ "FStockId", "FStockNo"},
{ "FMaterialId", "FMaterialNo"},
};

}
#endregion

#region| 创建临时表 aCreateTempTable() |
private void aCreateTempTable(Context aContext)
{
aSql = string.Format(@"/*dialect*/
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- 创建:临时表 {0}

create table dbo.{0}(

FListId bigint identity(1,1) primary key -- 自动递增

,FIdentityId int null default(0) -- 序号:字段筛选需要用到
,FLevel int null default(0) -- 步骤:

,FFormId varchar(36) null default('') -- 单据名称

,FFormSeq int null default(0) -- 单据顺序

,FID int null default(0) -- 单据内码
,FEntryId int null default(0) -- 分录内码

,FBillTypeId varchar(36) null default('') -- 单据类型

,FDate datetime null -- 单据日期

,FBillNo nvarchar(30) null default('') -- 单据编号

,FSeq int null default(0) -- 行号

,FStockId bigint null default(0) -- 仓库名称
,FMaterialId bigint null default(0) -- 物料编码
,FColor bigint null default(0) -- 颜色

,FStockNo nvarchar(50) null default('') -- 仓库编码
,FMtrlNo nvarchar(50) null default('') -- 仓库编码
);
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
", aTableName); DBUtils.Execute(aContext, aSql);
}
#endregion
郭少锋 创建 2025-07-10 16:16:28 云星空
云星空 : 联查:关联信息 云星空 : 联查:关联信息
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- 联查:关联信息

select

it11.FMasterId ,it11.FInstanceId,it11.FFLowId,it11.FFirstFormId,it11.FFirstBillNo,it11.FFirstBillId,it11.FStartTime,it11.FStatus,it11.FSourceId ,'|' A

,it12.FInstanceId,it12.FRouteId,it12.FsTableName,it12.FsId,it12.FtTableName,it12.FtId,it12.FCreateTime,it12.FLineId,it12.FFirstNode,it12.FIsBreak

,it11.FFirstBillNo FBillNo_PpBom
,isnull(pb12.FSeq,'') FSeq_PpBom

,isnull(pm11.FBillNo ,'') FBillNo_PickMtrl
,isnull(pm12.FSeq ,'') FSeq_PickMtrl

from t_BF_Instance it11
left join t_BF_InstanceEntry it12 on it11.FInstanceId = it12.FInstanceId

left join t_Prd_PpBomEntry pb12 on (case when it12.FtTableName = 't_Prd_PpBomEntry' then it12.FtId else 0 end) = pb12.FEntryId
left join t_Prd_PickMtrlData pm12 on (case when it12.FtTableName = 't_Prd_PickMtrlData' then it12.FtId else 0 end) = pm12.FEntryId

left join t_Prd_PickMtrl pm11 on pm11.FID = pm12.FID

where it11.FFirstBillNo = 'PPBOM64260' and it11.FInstanceId = '1'

order by it11.FMasterId ,it11.FInstanceId ,it12.FRouteId


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

dbcc checkIdent('Z_Prd_PickMtrlData_LK', noReSeed) ; -- 种子表

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

t_BF_InstanceEntry

FFirstNode = 1 是否存在【关联关系】

FLineId = 5 具体的【关联关系】

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

delete from t_BF_Instance where FInstanceId = '1'
delete from t_BF_InstanceEntry where FInstanceId = '1'

insert into t_BF_Instance ( FMasterId ,FInstanceId ,FFirstFormId ,FFirstBillNo ,FFirstBillId ) -- 源单:表头信息
select '1' ,'1' ,'PRD_PPBOM' ,'PPBOM64260' ,'205129'

insert into t_BF_InstanceEntry ( FInstanceId ,FRouteId ,FsTableName ,FsId ,FtTableName ,FtId ,FLineId ,FFirstNode ) -- 源单:表体信息 + 对应关系
select '1' ,'2' ,' ' ,'0' ,'T_PRD_PPBOMENTRY' ,'1849488' ,'0' ,'1' union all
select '1' ,'3' ,'T_PRD_PPBOMENTRY' ,'1849488' ,'T_PRD_PICKMTRLDATA' ,'995718' ,'5' ,'0' union all
select '1' ,'4' ,'T_PRD_PPBOMENTRY' ,'1849488' ,'T_PRD_PICKMTRLDATA' ,'998663' ,'5' ,'0'

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

select * from t_BF_Instance where FInstanceId = '6859002b528307'
select * from t_BF_InstanceEntry where FtId = 1849488

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

郭少锋 创建 2025-07-10 15:41:39 云星空
云星空 : 开发商注册码 云星空 : 开发商注册码 select * from t_bos_isv -- 开发商注册码 在配置数据库 K3DBConfiger_231008

update t_bos_isv set FDEVCODE ='aGsf' WHERE FISVID = 'IBHC-LMFG-QIMZ-RMVF-BKTP'

郭少锋 创建 2025-06-28 18:12:47 云星空
K3 功能 : K3 WISE 15.1 Win10客户端 输入法问题 K3 功能 : K3 WISE 15.1 Win10客户端 输入法问题 登录的时候不管什么输入法都打入不了拼出来的汉字,比如拼出来三个字,敲回车且进去一个字而且不是拼写的字

逐个试一下

1. 运行 services.msc ,把【Windows Font Cache Service】设为手动,重启电脑

2. 桌面右下角点击【输入法切换器】,点击【语言首选项】,在弹出的窗口下滑找到【中文(简体,中国)】,点击【选项】,找到【美式键盘】-【删除】,不用重启,试着录入看是否正常。

3. 点击:开始---运行以下DLL文件。(一个一个依次注册)

regsvr32 Actxprxy.dll
regsvr32 Shdocvw.dll

重启系统,不行再添加以下的DLL文件。

regsvr32 Mshtml.dll
regsvr32 Urlmon.dll
regsvr32 Msjava.dll
regsvr32 Browseui.dll
regsvr32 Oleaut32.dll
regsvr32 Shell32.dll


郭少锋 创建 2025-06-24 10:20:52 K3 功能
Access : 生成序号:多字段 排序 Access : 生成序号:多字段 排序
Private Sub txtSeach_LostFocus()

aTxt = "":

If Len(txtSeach.Value) > 0 Then

aSplits = Split(txtSeach.Value, ","): '拆分条件

For Each aSplit In aSplits

If Len(aSplit) > 0 Then

aTxt = aTxt & IIf(aTxt = "", " where ", " and ") & "( ( nz(FPriceName) +' | '+ nz(FContent) +' | '+ nz(FUnit) +' | '+ Format(nz(FPrice),'0.######') +' | '+ nz(FCreaterName) +' | '+ nz(FCreateTime) ) like '*" & aSplit & "*' )"
End If
Next

End If


FSeq = "( select count(*) from (select * from v_PriceList " & aTxt & " ) as t2 where ( nz(t2.FPriceName) +' | '+ nz(t2.FContent) +' | '+ nz(t2.FUnit) +' | '+ Format(nz(t2.FPrice),'0.######') ) <= ( nz(t1.FPriceName) +' | '+ nz(t1.FContent) +' | '+ nz(t1.FUnit) +' | '+ Format(nz(t1.FPrice),'0.######') ) ) as FSeq " '计算序号

Sub1.Form.RecordSource = " select * ," & FSeq & " from (select * from v_PriceList " & aTxt & " ) t1 order by t1.FPriceName,t1.FContent,t1.FUnit,t1.FPrice ; " '排序


Sub1.Form.Requery

End Sub
郭少锋 创建 2025-06-13 11:47:17 Access
Access : 自动生成序号 Access : 自动生成序号 在 Access VBA 中,`RecordSource` 属性用于指定窗体或报表的数据源。你提供的 SQL 语句在 Access 中可能无法直接使用,因为 Access 的 SQL 语法与 SQL Server 或其他数据库的 SQL 语法有所不同。特别是 `row_number()` 函数在 Access 中并不支持。

如果你想要在 Access 中实现类似的功能,可以使用以下方法:

### 方法 1:使用子查询
你可以使用子查询来模拟 `row_number()` 的功能。以下是一个示例:

```vba
Sub1.Form.RecordSource = "SELECT TOP 500 * FROM (SELECT *, (SELECT COUNT(*) FROM v_ItemList AS T2 WHERE T2.FItemId >= T1.FItemId) AS FSeq FROM v_ItemList AS T1) ORDER BY FItemId DESC;"


FSeq = "( select count(*) from v_ItemList as t2 where t2.FItemNo <= t1.FItemNo " & aTxt & " ) as FSeq " '按 FItemNo 升序 计算序号

Sub1.Form.RecordSource = " select * ," & FSeq & " from v_ItemList t1 where 1=1 " & aTxt & " order by FItemNo ; " '按 FItemNo 升序 显示

```

### 方法 2:使用 DCount 函数
如果你需要在 Access 中生成行号,可以使用 `DCount` 函数来实现:

```vba
Sub1.Form.RecordSource = "SELECT TOP 500 *, DCount('FItemId', 'v_ItemList', 'FItemId >= ' & FItemId) AS FSeq FROM v_ItemList ORDER BY FItemId DESC;"

Sub1.Form.RecordSource = "select * ,DCount('FItemId', 'v_ItemList', 'FItemId >= ' & FItemId ) as FSeq from v_ItemList order by FItemId desc ; "
Sub1.Form.RecordSource = "select * ,DCount('FItemNo', 'v_ItemList', 'FItemNo >= ''' & FItemNo & '''') as FSeq from v_ItemList order by FItemNo desc; "
```

### 方法 3:使用 VBA 代码生成行号
如果你需要在 VBA 中生成行号,可以在加载数据后遍历记录集并添加行号:

```vba
Dim rs As DAO.Recordset
Dim i As Integer

Set rs = CurrentDb.OpenRecordset("SELECT TOP 500 * FROM v_ItemList ORDER BY FItemId DESC;")

i = 1
Do While Not rs.EOF
rs.Edit
rs!FSeq = i
rs.Update
i = i + 1
rs.MoveNext
Loop

Sub1.Form.RecordSource = "SELECT * FROM v_ItemList ORDER BY FItemId DESC;"
```

### 方法 4:使用临时表
你还可以创建一个临时表来存储带有行号的数据:

```vba
Dim sql As String

' 创建临时表
CurrentDb.Execute "CREATE TABLE TempItemList (FSeq AUTOINCREMENT, FItemId LONG, OtherFields...);"

' 插入数据并生成行号
CurrentDb.Execute "INSERT INTO TempItemList (FItemId, OtherFields...) SELECT FItemId, OtherFields... FROM v_ItemList ORDER BY FItemId DESC;"

' 设置 RecordSource
Sub1.Form.RecordSource = "SELECT * FROM TempItemList;"
```

### 总结
Access 的 SQL 语法与其他数据库有所不同,特别是在处理行号时。你可以根据具体需求选择上述方法之一来实现类似的功能。如果你需要频繁使用行号,建议使用方法 3 或方法 4,这样可以更灵活地处理数据。
郭少锋 编辑 2025-06-13 11:32:14 创建 2025-03-15 16:03:24 Access
云星空 : 升级后,新建账套 没有更新到当前版本 云星空 : 升级后,新建账套 没有更新到当前版本 云星空企业版 9.0.0.20250410

新建的账套版本 为什么会是 9.0.0.20240516,升级账套的时候提示错误:

Error: [2025-06-11 20:19:32] Fail to StartPkg,Error Can't Find Package in PackCollectionC7AAA2A3-D73B-4C83-9A38-FCD4B2CFF399:
C:\Program Files (x86)\Kingdee\K3Cloud\CommonFileServer\PackageCollection\C7AAA2A3-D73B-4C83-9A38-FCD4B2CFF399-Kingdee.BOS.DeployService- 在 Kingdee.BOS.DeployService.PackageRepository.GetManifest(String pkgId)
在 System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()
在 System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
在 System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
在 Kingdee.BOS.DeployService.PackageDeployer.ValidateToStartPkg(Context ctx, StartArg sarg, Boolean riaseExcetiopn)
在 Kingdee.BOS.DeployService.DeployerService.StartPkg(Context ctx, StartArg arg)



解决方案:新建管理中心 重新释放包,再修改回 原先的管理中心

(1)修改ManageSite\App_Data\Common.config,将当前正在使用的管理中心改为 false,重启 IIS;
(2)打开管理中心,新建账套;
(3)修改ManageSite\App_Data\Common.config,将新建的管理中心改为 false,之前使用的改为 true,重启IIS;
(4)打开管理中心,新建账套,就能正常使用了;

郭少锋 编辑 2025-06-11 21:22:06 创建 2025-06-11 21:21:49 云星空
云星空 : 单据体 金额合计 求和 云星空 : 单据体 金额合计 求和 sum(map(lambda x : (x.FOutAmount), FEntity)) > 0

FOutAmount 字段标识
FEntity 单据体标识
郭少锋 创建 2025-05-23 11:46:58 云星空