`

c# 划份时间段之二 (按会计月)

 
阅读更多
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Collections;
using AmbitsBusiness_CLR;

public partial class WYTableFunction
{
    /// <summary>
    /// 按会计月计算应收日期
    /// CybleBeginDate:周期实际的起始日,由于是按会计月计,所以永远与计算的起始日相同。
    /// CybleEndDate:周期实际的结束日。 
    /// </summary>
    /// <param name="UnitType"></param>
    /// <param name="Cycle"></param>
    /// <param name="sBeginDate"></param>
    /// <param name="sEndDate"></param>
    /// <param name="ExesType"></param>
    /// <param name="ExesMonth"></param>
    /// <param name="AccDate"></param>
    /// <returns></returns>
    [SqlFunction(TableDefinition = @" BeginDate DateTime,EndDate DateTime,GatheringDate DateTime,CybleBeginDate DateTime,CycleEndDate DateTime", FillRowMethodName = "FillRow2")]
    public static IEnumerable CW_F_CalDateTable_Accountant(int UnitType, int Cycle, string sBeginDate,
        string sEndDate, int ExesType, int ExesMonth, int AccDate, int iEnumPeroiod, bool ReturnDataRow)
    {
        enumPeroiod Peroid = (enumPeroiod)iEnumPeroiod;

        DateTime BeginDate = Convert.ToDateTime(sBeginDate);
        DateTime EndDate = Convert.ToDateTime(sEndDate);
        DateTime AccountDate = DateTime.MinValue;
        List<DateTime[]> rowList = new List<DateTime[]>();

        DateTime dtBegin = BeginDate, dtEnd;
        DateTime dtCycleEndDate = EndDate;
        DateTime dtCybleBeginDate = dtBegin;//按会计月,则周期的起始日与原起始日相同。

        //Globe.SendString(string.Format("生成周期,从{0:yyyy-MM-dd}至{1:yyyy-MM-dd}", BeginDate, EndDate));

        switch (UnitType)
        {
            #region 
            case 1://年

                while (dtBegin <= EndDate)
                {
                    if (Peroid == enumPeroiod.NotSplit)
                    {
                        dtEnd = EndDate;
                    }
                    else
                        dtEnd = dtBegin.AddYears(Cycle);

                    dtCycleEndDate = dtEnd.AddDays(-1);
                    dtCybleBeginDate = dtEnd.AddYears(-Cycle);

                    if (dtEnd > EndDate)
                        dtEnd = EndDate;
                    else
                        dtEnd = dtEnd.AddDays(-1);

                    AccountDate=CalAccountDate(dtBegin, dtEnd, ExesType, ExesMonth, AccDate);

                    rowList.Add(new DateTime[] { dtBegin, dtEnd, AccountDate, dtCybleBeginDate, dtCycleEndDate });

                    if (Peroid != enumPeroiod.AllPeroid) break;
                    dtBegin = dtEnd.AddDays(1);
                }

                break;
            #endregion

            #region 季交
            case 2://季
                while (dtBegin <= EndDate)
                {
                    if (Peroid == enumPeroiod.NotSplit)
                    {
                        dtEnd = EndDate;
                    }
                    else
                        dtEnd = dtBegin.AddMonths(Cycle * 3);

                    dtCycleEndDate = dtEnd.AddDays(-1);
                    dtCybleBeginDate = dtEnd.AddMonths(-Cycle*3);

                    if (dtEnd > EndDate)
                        dtEnd = EndDate;
                    else
                        dtEnd = dtEnd.AddDays(-1);
                    //dtEnd = new DateTime(dtEnd.Year, dtEnd.Month, 1).AddDays(-1);

                    AccountDate=CalAccountDate(dtBegin, dtEnd, ExesType, ExesMonth, AccDate);


                    rowList.Add(new DateTime[] { dtBegin, dtEnd, AccountDate, dtCybleBeginDate, dtCycleEndDate });
                    if (Peroid != enumPeroiod.AllPeroid) break;
                    dtBegin = dtEnd.AddDays(1);
                }
                break;
            #endregion

            #region 月交
            case 3://月
                while (dtBegin <= EndDate)
                {
                    if (Peroid == enumPeroiod.NotSplit)
                    {
                        dtEnd = EndDate;
                    }
                    else
                        dtEnd = dtBegin.AddMonths(Cycle);

                    dtCycleEndDate =dtEnd.AddDays(-1);
                    dtCybleBeginDate = dtEnd.AddMonths(-Cycle);

                    if (dtEnd > EndDate)
                        dtEnd = EndDate;
                    else
                        dtEnd = dtEnd.AddDays(-1);

                   

                    AccountDate=CalAccountDate(dtBegin, dtEnd, ExesType, ExesMonth, AccDate);
                    rowList.Add(new DateTime[] { dtBegin, dtEnd, AccountDate, dtCybleBeginDate, dtCycleEndDate });

                    if (Peroid != enumPeroiod.AllPeroid) break;

                    dtBegin = dtEnd.AddDays(1);

                }

                break;
            #endregion

            #region 周交
            case 4://周

                while (dtBegin <= EndDate)
                {
                    if (Peroid == enumPeroiod.NotSplit)
                    {
                        dtEnd = EndDate;
                    }
                    else
                        dtEnd = dtBegin.AddDays(Cycle * 7);

                    dtCycleEndDate = dtEnd.AddDays(-1);
                    dtCybleBeginDate = dtEnd.AddDays(-Cycle*7);

                    if (dtEnd > EndDate)
                        dtEnd = EndDate;
                    else
                        dtEnd = dtEnd.AddDays(-1);

                    AccountDate=CalAccountDate(dtBegin, dtEnd, ExesType, ExesMonth, AccDate);


                    rowList.Add(new DateTime[] { dtBegin, dtEnd, AccountDate, dtCybleBeginDate, dtCycleEndDate });

                    if (Peroid != enumPeroiod.AllPeroid) break;

                    dtBegin = dtEnd.AddDays(1);
                }

                break;
            #endregion

            #region 日交
            case 5://日
                while (dtBegin <= EndDate)
                {
                    dtEnd = dtBegin.AddDays(Cycle);
                    if (dtEnd > EndDate)
                        dtEnd = EndDate;
                    else
                        dtEnd = dtEnd.AddDays(-1);

                    dtCycleEndDate = dtBegin;
                    dtCybleBeginDate = dtBegin;

                    AccountDate=CalAccountDate(dtBegin, dtEnd, ExesType, ExesMonth, AccDate);
                    rowList.Add(new DateTime[] { dtBegin, dtEnd, AccountDate, dtCybleBeginDate, dtCycleEndDate });

                    if (Peroid != enumPeroiod.AllPeroid) break;
                    dtBegin = dtEnd.AddDays(1);
                }

                break;
            #endregion

            #region 其他
            case 6:
                {
                    dtEnd = EndDate;
                    dtCycleEndDate = dtEnd;
                    dtCybleBeginDate = BeginDate;
                    AccountDate=CalAccountDate(dtBegin, dtEnd, ExesType, ExesMonth, AccDate);

                    rowList.Add(new DateTime[] { BeginDate, EndDate, AccountDate, dtCybleBeginDate, dtCycleEndDate });

                    if (Peroid != enumPeroiod.AllPeroid) break;
                }

                break;
            #endregion
        }
        DataTable dt = new DataTable();
        dt.Columns.Add("BeginDate", typeof(DateTime));
        dt.Columns.Add("EndDate", typeof(DateTime));
        dt.Columns.Add("GatheringDate", typeof(DateTime));
        dt.Columns.Add("CycleBeginDate", typeof(DateTime));
        dt.Columns.Add("CycleEndDate", typeof(DateTime));

        for (int i = 0; i < rowList.Count; i++)
        {
            DataRow row = dt.NewRow();
            row["BeginDate"] = rowList[i][0];
            row["EndDate"] = rowList[i][1];
            row["GatheringDate"] = rowList[i][2];
            row["CycleBeginDate"] = rowList[i][3];
            row["CycleEndDate"] = rowList[i][4];
            dt.Rows.Add(row);
        }
        if (ReturnDataRow == true)
            return dt.Rows as IEnumerable;
        else
            return rowList as IEnumerable;
        //return rowList as IEnumerable;
    }
    
}


测试代码
select * from CW_F_CalDateTable_Accountant(3,1,'2013-01-15','2014-01-14',3,1,15,2,0)

运行结果


  • 大小: 112.7 KB
分享到:
评论

相关推荐

    财务管理系统(c#源代码)

    系统应能自动生成各种财务报表,如资产负债表、利润表等,且支持自定义时间段和条件筛选。这需要利用C#的报表服务或者第三方报表控件,结合数据可视化技术实现。 4. **预算控制**:预算是财务管理的重要组成部分,...

    C#.NET经典案例解析转载

    在C#中实现这类系统需要熟悉多线程、时间管理和并发控制,因为多个用户可能同时进行操作。数据库操作同样重要,例如存储客户信息、房间状态和预订记录。此外,使用报表工具(如Crystal Reports)生成入住和收入报告...

    c#编写的超级存款计算器

    4. 利率变动:考虑到利率可能随时间变化,计算器可以允许用户输入多个时间段的不同利率。 【C#实现】 1. 类设计:在C#中,可以创建一个名为`DepositCalculator`的类,包含必要的属性如本金(Principal)、年利率...

    c#编写的中小型财务管理系统

    - **报表生成**:生成资产负债表、利润表、现金流量表等各类财务报表,支持自定义时间段和条件筛选。 - **权限控制**:设置不同级别的用户权限,确保敏感数据的安全。 - **数据备份与恢复**:定期自动备份数据,...

    C#宾馆酒店管理系统

    同时,后台需要处理预订冲突,确保同一时间段内房间不被重复预订。 2. **客房管理**:这部分包括房间状态跟踪(如空闲、已预订、清洁中等)、房型设置(如单人间、双人间、套房等)以及房间设施配置。系统需实时...

    c#财务凭证管理系统

    账目查询功能允许用户实时查看账户余额、往来款项等信息,支持按时间段、科目等进行筛选,满足日常财务管理中的查询需求。此外,系统还支持自定义查询条件,以适应不同的查询场景。 报表模块则是对企业财务状况进行...

    解析c#显示友好时间的实现代码

    在C#编程中,"显示友好时间"是指将时间戳转换为易于理解的相对时间表述,例如"1分钟前"、"2个月前"等。这样的功能有助于提高用户体验,因为用户可以快速理解某个事件距离现在有多远。在给定的代码段中,实现了这样一...

    财务凭证管理系统源码超详细

    - 明细账查询:根据科目或时间段查找具体交易记录,便于审计和分析。 - 总账查询:提供整体财务状况的概览,包括资产、负债和所有者权益等。 5. **报表**: - 资产负债表:展示企业在特定日期的资产、负债及所有...

    科目汇总1

    查询功能则包括开始时间和结束时间的选择,用户可以自定义时间范围来获取特定时间段内的科目数据。时间格式要求为"YYYY-MM-DD",例如"2017-01-01",这两个字段不是必填项,但能够提供更精确的查询结果。 隐藏字段_1...

    Kaba会计和库存:超市的会计软件

    同时,它支持灵活的定价策略,可以设定不同时间段、不同会员级别的价格差异,以吸引不同类型的消费者。 5. 销售分析与报告 通过对销售数据的深度分析,Kaba软件能够提供多维度的销售报告,如畅销商品、滞销商品、...

    daojishi.rar_教育系统应用_C#_

    【标题】"daojishi.rar" 是一个使用C#编程语言开发的教育系统应用,主要功能是为注册会计师考试提供倒计时服务。这个程序旨在帮助考生更好地规划备考时间,通过实时显示距离考试剩余的天数来提升学习紧迫感。 ...

    健康档案管理系统.RAR

    (5) 设计一个实用的工资管理程序,模拟会计的活动,实施工资帐目的存储、查询和更改,系统要求有高度的可靠性和安全性,并能按规定的格式打印工资报表。 (6) 设计一个实用的小型商店销售管理系统,其功能包括: ① ...

    用户记账软件源码201219

    用户记账软件源码功能介绍:实现了用户登陆,可以记录支出和收入,可以按时间段查询支出和收入明细,还可以添加支出和收入类别,可以调用计算器和笔记本程序。开发环境为VisualStudio2010,后台数据库为SQLServer...

    建立自由的会计日期的报表--1.2.创建让用户选择日期窗体

    在构建会计信息系统的过程中,生成报表是一项关键任务,它要求能够灵活地处理不同的时间段数据,以满足用户对财务信息的分析需求。"建立自由的会计日期的报表--1.2.创建让用户选择日期窗体"这一主题,正是针对这一...

    C_兼职测试题

    根据给定的文件信息,我们可以提炼出一系列与C#编程及软件测试相关的知识点,下面将对这些知识点进行详细的解析。 ### C#编程基础 #### 数学运算与表达式解析 在题目描述中提到的数学表达式`a+b*c/d`,涉及到C#中...

    财务管理系统

    用户可以根据需要选择不同的时间段、过滤条件来定制报表,且通常支持导出为Excel、PDF等格式,方便进一步分析和打印。对于江都经济开发区的财务管理系统,打印报表功能尤为重要,它可以让管理者在实体会议上展示财务...

    财务凭证管理系统(带系统说明书)

    5. **会计期间管理**:支持设置会计年度和期间,便于按时间段进行财务核算和报告。 6. **权限控制**:系统具有完善的权限管理体系,不同角色的用户可分配不同的操作权限,确保数据安全。 7. **数据库备份与恢复**...

    大型企业管理Erp系统商业源码,含完整源码、数据库和开发文档

    3.管理期间 设定时间段,为查询统计模块提供时间段设置。 4.审批流程 审批流程方式灵活多样,该功能可同级,也可多级定义,方便公司内部审批管理,在所有提交模块中都可调用此流程,也可修改该流程。 5.资金帐户 ...

    用友U9系统客开常用代码.pdf

    查看用户操作记录的部分,利用SQL查询语句从UBF_Portal_OperationRecord表中提取特定时间段内的用户操作数据。这对于审计和监控系统的操作日志非常关键,可以帮助企业了解用户在系统中的操作历史,及时发现异常行为...

    CRM客户关系管理系统源码

    7. **集成能力**:现代CRM系统往往具备与其他企业应用(如ERP、会计系统、呼叫中心等)集成的能力,实现数据共享和流程自动化。 在本压缩包“myCRM”中,可能包含了这些功能模块的源代码,开发人员可以进一步研究、...

Global site tag (gtag.js) - Google Analytics