个人博客 用于记载日常收集的一些技术文章 ...
K3 BOS : K3 序时簿 更改数据、行颜色 K3 BOS : K3 序时簿 更改数据、行颜色 Dim aComm1 As New aComm
Dim aNoAmount As Boolean


Private WithEvents m_ListInterface As ListEvents '定义 ListEvents 接口. 必须具有的声明, 以此来获得事件



Public Sub Show(ByVal oListInterface As Object) 'ListEvents 接口实现 '注意: 此方法必须存在, 请勿修改

Set m_ListInterface = oListInterface

aFUserId = m_ListInterface.K3Lib.User.UserID
aFClassTypeID = m_ListInterface.DataSrv.ClassTypeID
aTableName = m_ListInterface.DataSrv.ClassType("FTableName")

aNoAmount = aComm1.aCheckFunc1(m_ListInterface, aFUserId, aFClassTypeID, 18, "NoAmount") '序时簿 不显示金额

If aNoAmount = True Then
m_ListInterface.EnableListFillRowEvents = True ' 允许激发 ListFillRow 事件
End If


End Sub


Private Sub m_ListInterface_ListFillRow(ByVal lRow As Long, ByVal RowData As Object, ByVal HeadDict As KFO.IDictionary, CellData As String, BackColor As Long, ContinueRaise As Boolean)
'更改 明细数据

If aNoAmount = True Then

aFColName = HeadDict("FColName"): aFKey = HeadDict("FKey")

Select Case aFColName

Case "FPrice":
CellData = "": ' BackColor = vbRed 'FPrice 销售单价 FPriceSale = ""

Case "FAmount":
CellData = "": ' BackColor = vbGreen 'FAmount 销售金额 FAmountSale = ""
End Select

ContinueRaise = True


End If

End Sub


Private Sub m_ListInterface_ListSumRowFill(ByVal lRow As Long, ByVal HeadDict As KFO.IDictionary, CellData As String, BackColor As Long, ContinueRaise As Boolean)
'更改 合计

If aNoAmount = True Then

aFColName = HeadDict("FColName"): aFKey = HeadDict("FKey")

Select Case aFColName

Case "FAmount":
CellData = "" 'FAmount 销售金额 FAmountSale = ""
End Select

ContinueRaise = True

End If

End Sub
郭少锋 编辑 2023-09-04 15:23:06 创建 2023-09-04 15:22:11 K3 BOS
K3 BOS : K3 序时簿 隐藏列 K3 BOS : K3 序时簿 隐藏列 Dim aComm1 As New aComm
Dim aNoAmount As Boolean


Private WithEvents m_ListInterface As ListEvents '定义 ListEvents 接口. 必须具有的声明, 以此来获得事件



Public Sub Show(ByVal oListInterface As Object) 'ListEvents 接口实现 '注意: 此方法必须存在, 请勿修改
' 一次性效果,点击【过滤】后 失效

Set m_ListInterface = oListInterface

aFUserId = m_ListInterface.K3Lib.User.UserID
aFClassTypeID = m_ListInterface.DataSrv.ClassTypeID
aTableName = m_ListInterface.DataSrv.ClassType("FTableName")

aNoAmount = aComm1.aCheckFunc1(m_ListInterface, aFUserId, aFClassTypeID, 18, "NoAmount") '序时簿 不显示金额

If aNoAmount = True Then

Set aHeader = m_ListInterface.DataSrv.Header

For i = 1 To aHeader.UBound

aFColName = aHeader(i)("FColName")

If aFColName = "FPrice" Or aFColName = "FAmount" Then

aHeader(i)("FVisible") = 0 '隐藏列
End If
Next

m_ListInterface.DataSrv.Header = aHeader
m_ListInterface.RefreshList
End If

End Sub
郭少锋 创建 2023-09-04 15:13:40 K3 BOS
K3 BOS : K3 序时簿 加载数据 K3 BOS : K3 序时簿 加载数据 Private Sub Object_ListFillRow (ByVal lRow As Long, ByVal RowData As Object, ByVal HeadDict As KFO.Dictionary, CellData As String, BackColor As Long, ContinueRaise As Boolean)

部分 描述 Object ListEvents对象的一个实例。 lRow Long类型。发生事件的行的行号。 RowData Object对象。实际上是本行所有数据的 ADODB.Recordset 对象。 HeadDict KFO.Dictionary 对象。当前单元格(字段)的信息。 CellData String类型。当前单元格数据。 BackColor Long类型。当前行的背景色。 ContinueRaise Boolean类型。在下一行该单元格填充的时候是否发生 ListFillRow 事件。

注释

每个行的每个可见的单元格(字段)的数据填充都会发生此事件。

此事件是否发生,取决于 EnableListFillRowEvents 属性的设置。详细请参考 EnableListFillRowEvents属性的相关说明。

更改 CellData 参数的值,可以改变单元格的实际填充数据。

更改 BackColor 参数的值,可以改变行的背景色。可以使用 RGB 函数得到色值。

ContinueRaise参数值默认为 True。 更改此值为 False,则下一行这个单元格填充的时候不会再发生 ListFillRow 事件。

注意:如果要使用RowData 参数,插件工程还必须引用 Microsoft ActiveX Data Objects Library。

示例

根据填充的字段的值,实现:a、将1、2、3…对应成星期一、星期二、星期三…;b、将6、7对应的行背景设为绿色,其余为白色:

Public Sub Show(ByVal oListInterface As Object)



'ListEvents 接口实现

'注意: 此方法必须存在, 请勿修改

Set m_ListInterface = oListInterface



'设置 EnableListFillRowEvents 属性,允许激发 ListFillRow 事件

m_ListInterface.EnableListFillRowEvents = True



End Sub



Private Sub m_ListInterface_ListFillRow(ByVal lRow As Long, ByVal RowData As Object, ByVal HeadDict As KFO.IDictionary, CellData As String, BackColor As Long, ContinueRaise As Boolean)



If HeadDict("FKey") = "FText" Then

Select Case CellData

Case “1”:

CellData = "星期一"

BackColor = vbWhite

Case “2”:

CellData = "星期二"

BackColor = vbWhite

Case “3”:

CellData = "星期三"

BackColor = vbWhite

Case “4”:

CellData = "星期四"

BackColor = vbWhite

Case “5”:

CellData = "星期五"

BackColor = vbWhite

Case “6”:

CellData = "星期六"

BackColor = vbGreen

Case “7”:

CellData = "星期日"

BackColor = vbGreen

Case Else

BackColor = vbWhite

End Select

End If

ContinueRaise = True



End Sub

Private Sub m_ListInterface_ListFillRow(ByVal lRow As Long, ByVal RowData As Object, ByVal HeadDict As KFO.IDictionary, CellData As String, BackColor As Long, ContinueRaise As Boolean)


If aNoAmount = True Then

Select Case HeadDict("FKey")

Case "FPrice": CellData = "": BackColor = vbRed
Case "FAmount": CellData = "": BackColor = vbGreen
End Select

ContinueRaise = True
End If

End Sub

郭少锋 创建 2023-09-04 11:42:51 K3 BOS
SQL : sql 参数数据类型ntext对于replace函数的参数1无效 SQL : sql 参数数据类型ntext对于replace函数的参数1无效 语句如下:update PE_U_Article set Content =replace(Content,'多余字符','')

问题描述:content字段里有一段代码多余,使用replace函数去掉,提示:参数数据类型ntext 对于replace 函数的参数1 无效

问题解决:update PE_U_Article set Content=replace( cast( Content as varchar(max) ) ,'多余字符′ ,'空' )
郭少锋 创建 2023-09-04 09:14:25 SQL
K3 BOS : K3 模块图片 K3 BOS : K3 模块图片 系统模块图片位置:C:\Program Files (x86)\Kingdee\K3ERP\SYSTEMICON

Sys_1.dat 将 .dat 改成 .bmp 就能显示成图片
郭少锋 创建 2023-09-03 12:21:16 K3 BOS
K3 BOS : 取得单据内码 + 1 K3 BOS : 取得单据内码 + 1 declare @FID int exec GetICMaxNum 'a_StockBill',@FID output -- 单据内码 【每次递增 1】
select @FID


select max(FID) from a_StockBill
select * from ICMaxNum
郭少锋 创建 2023-08-24 08:38:52 K3 BOS
K3 BOS : VB 批量填写 明细数据 K3 BOS : VB 批量填写 明细数据 Private Sub m_BillInterface_CommandClick(ByVal CommandName As String, bCancel As Boolean)
'------------------------------------------------------------------------------------------------------------
' 按钮名称

Select Case CommandName
'---------------------------------------------------------------------
Case Is = "FCreate": Call aFill '填写数据
'---------------------------------------------------------------------
Case Else
End Select

End Sub



Private Sub aFill() '填写数据

Dim aRow As Long, i As Long, aSql As String, aRecordset As ADODB.Recordset
'------------------------------------------------------------------------------------------------------------
aRow = m_BillInterface.Data("Page2").UBound

If aRow > 1 Then
aMsg = MsgBox("已存在数据,确定要 重新生成 吗 ?", vbYesNo + vbExclamation, " 一星提示")

If aMsg = vbNo Then
Exit Sub
End If
End If

'------------------------------------------------------------------------------------------------------------
aFDate = m_BillInterface.GetDataFldbyKey("FDate")("FFLD") '【字段值】 单据日期 FDate

If Val(aFDate) = 0 Then
MsgBox "【单据日期】 必须填写 !", vbOKOnly, " 一星提示": Exit Sub
End If

'------------------------------------------------------------------------------------------------------------
aFStockId2 = Val(m_BillInterface.GetDataFldbyKey("FStockId2")("FFLD")) '【字段值】 选择仓库 FStockId2

If aFStockId2 = 0 Then
MsgBox "请先 【选择仓库】 !", vbOKOnly, " 一星提示": Exit Sub
End If

aFStockNo = m_BillInterface.GetDataFldbyKey("FStockId2")("FFND")
'------------------------------------------------------------------------------------------------------------
'批量填写

' select FItemNo,FLtNo,FLpNo,FAuxPropNo,FItemName2,FStockNo,FUnitStockNo,sum(FQtyCal) FQtyCal from a_StockList where FCancellation != 1 and FDate <= '2023/8/31' and FStockNo = 'B.01'

' group by FItemNo,FLtNo,FLpNo,FAuxPropNo,FItemName2,FStockNo,FUnitStockNo
' having sum(FQtyCal) != 0

' order by FItemNo,FLtNo,FLpNo,FAuxPropNo,FItemName2,FStockNo,FUnitStockNo

aSql = ""
aSql = aSql + " select FItemNo,FLtNo,FLpNo,FAuxPropNo,FItemName2,FStockNo,FUnitStockNo,sum(FQtyCal) FQtyCal "
aSql = aSql + " from a_StockList "
aSql = aSql + " where FCancellation != 1 and FDate <= '" & aFDate & "' and FStockNo = '" & aFStockNo & "' "
aSql = aSql + " group by FItemNo,FLtNo,FLpNo,FAuxPropNo,FItemName2,FStockNo,FUnitStockNo "
aSql = aSql + " having sum(FQtyCal) != 0 "
aSql = aSql + " order by FItemNo,FLtNo,FLpNo,FAuxPropNo,FItemName2,FStockNo,FUnitStockNo "

Set aRecordset = m_BillInterface.K3Lib.GetData(aSql)

If aRecordset.RecordCount = 0 Then
MsgBox "没有库存 !", vbOKOnly, " 一星提示": Exit Sub
End If

'------------------------------------------------------------------------------------------------------------
m_BillInterface.DeleteEntryData 2

For i = 1 To aRecordset.RecordCount

aFStockNo = aRecordset("FStockNo")
aFItemNo = aRecordset("FItemNo")
aFLtNo = aRecordset("FLtNo")
aFLpNo = aRecordset("FLpNo")
aFAuxPropNo = aRecordset("FAuxPropNo")
aFItemName2 = aRecordset("FItemName2")
aFUnitStockNo = aRecordset("FUnitStockNo")
aFQtyCal = aRecordset("FQtyCal")

aFQtyCal2 = IIf(aFQtyCal < 0, 0, aFQtyCal) '计算生成 FTypeCreate

m_BillInterface.InsertNewRowAndFill 2, i, "FTypeCreate", 1, "FStockId", aFStockNo, "FItemId", aFItemNo, "FLtId", aFLtNo, "FLpId", aFLpNo, "FAuxPropId", aFAuxPropNo, "FItemName", aFItemName2, "FUnitStock", aFUnitStockNo, "FQtyMust", aFQtyCal, "FQtyStockRemain", aFQtyCal2

aRecordset.MoveNext
Next

Set aRecordset = Nothing
End Sub
郭少锋 创建 2023-08-23 20:44:18 K3 BOS
SQL : sql 取整 取余 SQL : sql 取整 取余 select

100.000 % 6 -- 取余 4.000
,100.000 / 6 -- 除 16.666666

, ROUND( 100.000 / 6 ,2 ) -- ROUND 四舍五入取整 16.670000
,CEILING( 100.000 / 6 ) -- CEILING 向上取整 17
, FLOOR( 100.000 / 6 ) -- FLOOR 向下取整 16
, CAST( 100.000 / 6 AS INT ) -- CAST 转换数据类型并进行取整 16
郭少锋 创建 2023-08-23 18:51:29 SQL
K3 BOS : 保存后 取得单据信息 K3 BOS : 保存后 取得单据信息 Private Sub m_BillInterface_AfterSave(bCancel As Boolean) '保存后 ★

aFClassTypeID = m_BillInterface.FID:
aFID = m_BillInterface.Data("FID") 'BILLNO FClassTypeID New

m_BillInterface.K3Lib.UpdateData ("exec a_AfterSave " & aFClassTypeID & " ,'" & aFID & "' ,'Save' -- 保存后 ")
End Sub
郭少锋 编辑 2023-08-22 17:36:55 创建 2023-08-22 17:34:53 K3 BOS
SQL : SQL Server 中 RAISERROR 的用法 SQL : SQL Server 中 RAISERROR 的用法 弹出提示

raiserror 的作用 : raiserror 是用于抛出一个错误。[ 以下资料来源于 sql server 2005的帮助 ]

其语法如下:

RAISERROR ( { msg_id | msg_str | @local_variable }
{ ,severity ,state }
[ ,argument [ ,...n ] ]
)
[ WITH option [ ,...n ] ]

简要说明一下:


第一个参数 :{ msg_id | msg_str | @local_variable }
msg_id:表示可以是一个sys.messages表中定义的消息代号;
使用 sp_addmessage 存储在 sys.messages 目录视图中的用户定义错误消息号。
用户定义错误消息的错误号应当大于 50000。

msg_str:表示也可以是一个用户定义消息,该错误消息最长可以有 2047 个字符;
(如果是常量,请使用N'xxxx',因为是nvarchar的)
当指定 msg_str 时,RAISERROR 将引发一个错误号为 5000 的错误消息。

@local_variable:表示也可以是按照 msg_str 方式的格式化字符串变量。

第二个参数:severity
用户定义的与该消息关联的严重级别。(这个很重要)
任何用户都可以指定 0 到 18 之间的严重级别。
[0,10]的闭区间内,不会跳到catch;
如果是[11,19],则跳到catch;
如果[20,无穷),则直接终止数据库连接;

第三个参数:state
如果在多个位置引发相同的用户定义错误,
则针对每个位置使用唯一的状态号有助于找到引发错误的代码段。

介于 1 至 127 之间的任意整数。(state 默认值为1)
当state 值为 0 或大于 127 时会生成错误!

第四个参数:argument
用于代替 msg_str 或对应于 msg_id 的消息中的定义的变量的参数。

第五个参数:option
错误的自定义选项,可以是下表中的任一值:
LOG :在错误日志和应用程序日志中记录错误;
NOWAIT:将消息立即发送给客户端;
SETERROR:将 @@ERROR 值和 ERROR_NUMBER 值设置为 msg_id 或 50000;


[SQL]代码示例

--示例1
DECLARE @raiseErrorCode nvarchar ( 50 )
SET @raiseErrorCode = CONVERT ( nvarchar ( 50 ), YOUR UNIQUEIDENTIFIER KEY )
RAISERROR ( ' %s INVALID ID. There is no record in table ' , 16 , 1 , @raiseErrorCode )


--示例2
RAISERROR (
N ' This is message %s %d. ' , -- Message text,
10 , -- Severity,
1 , -- State,
N ' number ' , -- First argument.
5 -- Second argument.
);
-- The message text returned is: This is message number 5.
GO


--示例3
RAISERROR (N ' <<%*.*s>> ' , -- Message text.
10 , -- Severity,
1 , -- State,
7 , -- First argument used for width.
3 , -- Second argument used for precision.
N ' abcde ' ); -- Third argument supplies the string.
-- The message text returned is: << abc>>.
GO


--示例4
RAISERROR (N ' <<%7.3s>> ' , -- Message text.
10 , -- Severity,
1 , -- State,
N ' abcde ' ); -- First argument supplies the string.
-- The message text returned is: << abc>>.
GO


--示例5
--A. 从 CATCH 块返回错误消息
以下代码示例显示如何在 TRY 块中使用 RAISERROR 使执行跳至关联的 CATCH 块中。
它还显示如何使用 RAISERROR 返回有关调用 CATCH 块的错误的信息。

BEGIN TRY
RAISERROR ( ' Error raised in TRY block. ' , -- Message text.
16 , -- Severity.
1 -- State.
);
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR ( 4000 );
DECLARE @ErrorSeverity INT ;
DECLARE @ErrorState INT ;

SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();

RAISERROR ( @ErrorMessage , -- Message text.
@ErrorSeverity , -- Severity.
@ErrorState -- State.
);
END CATCH;


--示例6
--B. 在 sys.messages 中创建即席消息
以下示例显示如何引发 sys.messages 目录视图中存储的消息。
该消息通过 sp_addmessage 系统存储过程,以消息号50005添加到 sys.messages 目录视图中。

sp_addmessage @msgnum = 50005 ,
@severity = 10 ,
@msgtext = N ' <<%7.3s>> ' ;
GO

RAISERROR ( 50005 , -- Message id.
10 , -- Severity,
1 , -- State,
N ' abcde ' ); -- First argument supplies the string.
-- The message text returned is: << abc>>.
GO

sp_dropmessage @msgnum = 50005 ;
GO


--示例7
--C. 使用局部变量提供消息文本
以下代码示例显示如何使用局部变量为 RAISERROR 语句提供消息文本。
sp_addmessage @msgnum = 50005 ,
@severity = 10 ,
@msgtext = N ' <<%7.3s>> ' ;
GO

RAISERROR ( 50005 , -- Message id.
10 , -- Severity,
1 , -- State,
N ' abcde ' ); -- First argument supplies the string.
-- The message text returned is: << abc>>.
GO

sp_dropmessage @msgnum = 50005 ;
GO




参考来源:
http://msdn.microsoft.com/zh-cn/library/ms178592.aspx
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/tsqlref9/html/483588bd-021b-4eae-b4ee-216268003e79.htm
郭少锋 创建 2023-08-21 18:16:43 SQL