经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
产生财务计帐周期
来源:cnblogs  作者:Insus.NET  时间:2019/7/3 8:51:51  对本文有异议

 

先看看实现的结果,可以By月份和季度,可以调整会计开始日期。

 

前端略去,只分享MS SQL存储过程:

 

  1. SET ANSI_NULLS ON
  2. GO
  3. SET QUOTED_IDENTIFIER ON
  4. GO
  5. -- =============================================
  6. -- Author: Insus.NET
  7. -- Blog: https://insus.cnblogs.com
  8. -- Create date: 2019-07-02
  9. -- Update date: 2019-07-02
  10. -- Description: 动态产生会计周期
  11. -- =============================================
  12. CREATE PROCEDURE [dbo].[usp_AccountingPeriod_Select_GeneratePeriodDate]
  13. (
  14. @Fiscal_Year SMALLINT,
  15. @PeriodDateType NVARCHAR(1),
  16. @Start1 DATETIME
  17. )
  18. AS
  19. BEGIN
  20. IF OBJECT_ID('#Period_Date') IS NOT NULL
  21. DROP TABLE #Period_Date
  22. CREATE TABLE #Period_Date(
  23. [Fiscal_Year] [smallint] NOT NULL,
  24. [Start1] [datetime] NULL,
  25. [Start2] [datetime] NULL,
  26. [Start3] [datetime] NULL,
  27. [Start4] [datetime] NULL,
  28. [Start5] [datetime] NULL,
  29. [Start6] [datetime] NULL,
  30. [Start7] [datetime] NULL,
  31. [Start8] [datetime] NULL,
  32. [Start9] [datetime] NULL,
  33. [Start10] [datetime] NULL,
  34. [Start11] [datetime] NULL,
  35. [Start12] [datetime] NULL,
  36. [Start13] [datetime] NULL,
  37. [End1] [datetime] NULL,
  38. [End2] [datetime] NULL,
  39. [End3] [datetime] NULL,
  40. [End4] [datetime] NULL,
  41. [End5] [datetime] NULL,
  42. [End6] [datetime] NULL,
  43. [End7] [datetime] NULL,
  44. [End8] [datetime] NULL,
  45. [End9] [datetime] NULL,
  46. [End10] [datetime] NULL,
  47. [End11] [datetime] NULL,
  48. [End12] [datetime] NULL,
  49. [End13] [datetime] NULL
  50. )
  51. IF @Fiscal_Year >= YEAR([dbo].[svf_LowDate]()) AND @Fiscal_Year < YEAR([dbo].[svf_HighDate]())
  52. BEGIN
  53. IF @Start1 IS NULL
  54. SET @Start1 = CONVERT(DATETIME, CONVERT(NVARCHAR(4),@Fiscal_Year) + '-01-01', 121)
  55. INSERT INTO #Period_Date ([Fiscal_Year]) VALUES (@Fiscal_Year)
  56. IF @PeriodDateType = N'M'
  57. BEGIN
  58. DECLARE @m TINYINT = 1,@ms TINYINT = 12
  59. WHILE @m <= @ms
  60. BEGIN
  61. DECLARE @m_start_field NVARCHAR(128) = N'[Start'+ CONVERT(NVARCHAR(2), @m) +']'
  62. DECLARE @m_start_value DATETIME = DATEADD(M,@m -1,@Start1)
  63. DECLARE @m_end_field NVARCHAR(128) = N'[End'+ CONVERT(NVARCHAR(2), @m) +']'
  64. DECLARE @m_end_value DATETIME = DATEADD(DAY,-1, DATEADD(M,@m,@Start1))
  65. DECLARE @s_sql NVARCHAR(4000) = N'
  66. UPDATE #Period_Date SET '+ @m_start_field +' = '''+ CONVERT(NVARCHAR(40), @m_start_value ) +''',
  67. '+ @m_end_field +' = '''+ CONVERT(NVARCHAR(40), @m_end_value ) +'''
  68. WHERE [Fiscal_Year] = '''+ CONVERT(NVARCHAR(4),@Fiscal_Year) +''''
  69. EXECUTE sp_executesql @s_sql
  70. SET @m = @m + 1
  71. END
  72. END
  73.  
  74. IF @PeriodDateType = N'Q'
  75. BEGIN
  76. DECLARE @q TINYINT = 1,@qs TINYINT = 4
  77. WHILE @q <= @qs
  78. BEGIN
  79. DECLARE @q_start_field NVARCHAR(128) = N'[Start'+ CONVERT(NVARCHAR(2), @q) +']'
  80. DECLARE @q_start_value DATETIME = DATEADD(QUARTER,@q -1,@Start1)
  81. DECLARE @q_end_field NVARCHAR(128) = N'[End'+ CONVERT(NVARCHAR(2), @q) +']'
  82. DECLARE @q_end_value DATETIME = DATEADD(DAY,-1, DATEADD(QUARTER,@q,@Start1))
  83. DECLARE @q_s_sql NVARCHAR(4000) = N'
  84. UPDATE #Period_Date SET '+ @q_start_field +' = '''+ CONVERT(NVARCHAR(40), @q_start_value ) +''',
  85. '+ @q_end_field +' = '''+ CONVERT(NVARCHAR(40), @q_end_value ) +'''
  86. WHERE [Fiscal_Year] = '''+ CONVERT(NVARCHAR(4),@Fiscal_Year) +''''
  87. EXECUTE sp_executesql @q_s_sql
  88. SET @q = @q + 1
  89. END
  90. END
  91. END
  92.  
  93. SELECT [Fiscal_Year],
  94. [Start1],[Start2],[Start3],[Start4],
  95. [Start5],[Start6],[Start7],[Start8],
  96. [Start9],[Start10],[Start11],[Start12],
  97. [Start13],
  98. [End1],[End2],[End3],[End4],
  99. [End5],[End6],[End7],[End8],
  100. [End9],[End10],[End11],[End12],
  101. [End13]
  102. FROM #Period_Date
  103. END
Source Code

 

原文链接:http://www.cnblogs.com/insus/p/11121393.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号