"这篇文档是关于如何在金蝶K3 WISE系统中使用SQL SERVER来管理工厂日历的。主要涉及创建和更新工厂日历的SQL存储过程`prc_GenWorkCal`的代码示例。" 金蝶K3 WISE是一款企业级的信息化管理系统,广泛应用于财务管理、供应链管理、生产制造等多个领域。在生产计划和排程中,工厂日历扮演着关键角色,它定义了工作日、休息日以及假期等信息,对于企业的生产计划和资源配置具有重要意义。 在这个SQL脚本中,首先通过`IF EXISTS`检查是否存在名为`prc_GenWorkCal`的存储过程,如果存在则删除,确保每次运行都是基于最新定义的。接着使用`CREATE PROCEDURE`创建新的存储过程。该过程接受一个参数`@dateEnd`,表示要生成或更新日历的结束日期。 存储过程的核心部分是一个循环,用于处理从`@dateBegin`到`@dateEnd`之间的所有日期。`@dateBegin`被初始化为现有最大工作日的下一天。在循环内部,存储过程会递增`@FDayID`来表示新日期,并根据日期的特性(如周几、月份、年份)更新其他相关变量。 在循环的每次迭代中,存储过程可能会检查日期的有效性,如`@dateEnd`是否为空,或者是否小于当前日期,或者是否在`@dateBegin`之后。如果不符合条件,存储过程将打印错误信息并退出。 此外,脚本中还包含了一些未使用的变量(如`@date1`, `@FDayID1`, `@FWeekID1`, `@FMonthID1`, `@FYearID1`),这可能是为了后续扩展或调试预留的。未完成的`CASE WHEN`语句可能用于根据日期的星期几来设置特定的属性,比如判断是否为周末或节假日。 这个SQL脚本的执行将帮助用户批量更新或新增金蝶K3 WISE中的工厂日历数据,这对于有多个工厂或者频繁调整工作日程的企业来说非常有用,可以大大节省手动操作的时间和精力。 通过理解和运用这个存储过程,IT管理员可以更有效地维护和管理金蝶K3 WISE系统的工厂日历,从而优化企业的生产计划和资源调度。
--指定日期新增工厂日历
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[prc_GenWorkCal]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop PROCEDURE [dbo].[prc_GenWorkCal]
GO
CREATE PROCEDURE dbo.prc_GenWorkCal
(
@dateEnd as datetime
)
AS
--ver1: by argin_chen 2007-07-19
BEGIN
set nocount on
declare @dateBegin as datetime
--declare @dateEnd as datetime
declare @date as datetime --,@date1 as datetime
declare @FInterID0 as int,@FInterID1 as int
declare @FDayID as int --,@FDayID1 as int
declare @FWeekID as int --,@FWeekID1 as int
declare @FMonthID as int --,@FMonthID1 as int
declare @FYearID as int --,@FYearID1 as int
select @FInterID0=max(FInterID), @date=max(Fday),@dateBegin=Max(Fday)+1,@FDayID=max(FDayID),@FWeekID=max(FWeekID),@FMonthID=Max(FMonthID),@FYearID=Max(FYearID) from t_WorkCalendar
--declare @dateEnd as datetime
--select @dateEnd='2010-12-31'
--判断传入的日期
if @dateEnd is null or @dateEnd<GetDate() or @dateBegin >@dateEnd
begin
print '~$~新增工厂日历截至日期参数不能早于当前日期或者早于现有工厂日历最大日期'
end
while @date <@dateEnd
begin
select
@FDayID=@FDayID +1,
@FInterID0=case when datepart(weekday,@date+1) in (1,7) then @FInterID0 else @FInterID0+1 end,
@FWeekID=case when datepart(week,@date)=datepart(week,@date+1) then @FWeekID else @FWeekID+1 end,
@FMonthID=case when datepart(Month,@date)=datepart(Month,@date+1) then @FMonthID else @FMonthID+1 end,
@FYearID=case when datepart(Year,@date)=datepart(Year,@date+1) then @FYearID else @FYearID+1 end
SELECT @FInterID1=case when datepart(weekday,@date+1) in (1,7) then 0 else @FInterID0 end
INSERT INTO t_WorkCalendar(FInterID,FDay,FDayID,FWeekID,FMonthID,FYearID) VALUES(
@FInterID1,@date +1,@FDayID ,@FWeekID,@FMonthID,@FYearID)
select @date=@date +1
end
--更新工厂日历
Create Table #TMP (FInterID int,FDay smalldatetime, FPreID int, FNxtID int,FPreDay smalldatetime,FNxtDay smalldatetime)
Insert INTO #TMP Select FInterID,FDay,FPreID,FNxtID,FPreDay,FNxtDay FROM t_WorkCalendar ORDER BY FDay
DECLARE @InterID as int
DECLARE @FDay as smalldatetime
select @InterID=Min(FInterID), @FDay=Min(FDay) from t_WorkCalendar WHERE FInterID >0
UPDATE u SET
@InterID=case When FInterID >0 then FInterID else @InterID end
剩余6页未读,继续阅读
- 粉丝: 3
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展