zoukankan      html  css  js  c++  java
  • Container的使用

    在Axapta中有一个基础类型Container,在某些场合下确实比较好用,axapta现有系统中用的也比较多,比如Runbase的pack()和unpack()方法就是用Container结合宏来实现的.
    container可以看作是无类型的动态增长的数组,功能基本上等效于C#中的ArrayList.只不过container不能存放对象(Table对象还是可以存的),另外container可以作为数据库字段类型,在数据库中转化成img类型,可以看出container把数据序列化了.
    另外由于Container存放的元素可以是Container,所以可以实现类似于二维数组的功能.今天遇到一个需求,做一张客户(供应商)对帐单,由于国内的财务需要按月汇总,而用户输入的查询时间可能是跨月的,并且不一定是从一号开始到月底结束的,比如用户输入如下时间段做查询 
    2006-03-13~~~2006-05-27
    这样按照国内的财务需求,需要分解成如下的时间段:
    1.2006-03-13~~~2006-03-31
    2.2006-04-01~~~2006-04-40
    3.2006-05-01~~~2006-05-27
    分别统计上述三段时间的交易信息并分别汇总,这样就要求把任意一段时间,按月分解,当然这个有很多种做法,不过感觉用container实现这个小功能还是挺方便的,代码如下:
    static Container GetDatePeriod(TransDate fromDate,TransDate toDate)
    {
        Container cPeriod,cPeriodForOneMonth;
        
    int i;
        
    int day;
        TransDate transDate;
        
    int gYearPart,gMonthPart;

        
    //得到某一个月的天数
        int GetDay(int yearPart,int monthPart)
        
    {
             
    switch(monthPart)
            
    {
                
    case 1:
                
    case 3:
                
    case 5:
                
    case 7:
                
    case 8:
                
    case 10:
                
    case 12:
                
    {
                    day 
    = 31;
                    
    break;
                }

                
    case 4:
                
    case 6:
                
    case 9:
                
    case 11:
                
    {
                    day 
    = 30;
                    
    break;
                }

                
    case 2:
                
    {
                   
    if(!(yearPart mod 4))
                        day 
    = 29;
                    
    else
                        day 
    = 28;
                    
    break;
                }

                
    default:
                    
    throw error("Error input month!");
                    
    break;
            }

        }

            
    //得到一个完整月的开始和结束日期
        Container GetPeriodForOneMonth(int yearPart,int monthPart)
        
    {
            ;
            GetDay(yearPart,monthPart);
            
    return [str2Date(int2str(yearPart)+"-"+int2Str(monthPart)+"-01",321),
                    str2Date(int2str(yearPart)
    +"-"+int2Str(monthPart)+"-"+int2Str(day),321)];
        }
     ;



            
    //插入开始和结束日期中间完整的月
        for(i = mthofyr(fromDate)+1;i<mthofyr(toDate);i++)
        
    {
            cPeriod 
    = conins(cPeriod,conlen(cPeriod)+1,GetPeriodForOneMonth(year(toDate),i));
        }

        
    //插入开始月
        GetDay(year(fromDate),mthofYr(fromDate));
        gYearPart 
    = year(fromDate);
        gMonthPart 
    = mthofYr(fromDate);

        transDate 
    = str2Date(int2Str(gYearPart)+"-"+int2Str(gMonthPart)+"-"+int2Str(day),321);
        cPeriod 
    = conins(cPeriod,1,[fromDate,transDate]);

        
    //插入结束月
        if(mthofYr(fromDate)!=mthofYr(toDate))
        
    {
            gYearPart 
    = year(toDate);
            gMonthPart 
    = mthofYr(toDate);

            transDate 
    = str2Date(int2Str(gYearPart)+"-"+int2Str(gMonthPart)+"-01",321);
            cPeriod 
    = conins(cPeriod,conlen(cPeriod)+1,[transDate,toDate]);
        }

        
    return cPeriod;

    }

    调用的代码如下:
    static void Main(Args arg)
    {
        Container c,cPeriod;
        TransDate fromDate;
        TransDate toDate;
        
    int i;
        ;
        fromDate 
    =  str2Date("2006-02-06",321);
        toDate 
    = str2Date("2006-09-30",321);
        c 
    = Class2::GetDatePeriod(fromDate,toDate);
        
    for(i = 1 ;i<=conlen(c);i++)
        
    {
            cPeriod 
    = conpeek(c,i);
            fromDate 
    = conpeek(cPeriod,1);
            toDate 
    = conpeek(cPeriod,2);
            print date2StrXpp(fromDate)
    +"---"+Date2StrXpp(toDate);
        }

        pause;

    }
    当然由于对帐表要统计年结余额,所以用户输入的查询日期一般不允许跨年度,所以这个程序也就没有处理跨年度的情况了.
  • 相关阅读:
    实验10 使用PBR实现策略路由
    实验9 使用route-policy控制路由
    实验8 filter-policy过滤路由
    实验7 ISIS多区域配置
    实验6 IS-IS基本配置
    MySQL复制表
    mysql数据备份
    mysql 创建用户,授权
    数据库
    mysql 修改文件记录:
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/538489.html
Copyright © 2011-2022 走看看