• AX2009 销售订单的不同情况生成不同的订单号


    View Code
    class FormRun extends ObjectRun
    {
    RGD_SalesorderSourse            SalesorderSourse ;
    }

      有很多客户习惯了EXCEL,在他们使用AX的时候,习惯的先在EXCEL将销售,采购订单创建好,然后直接导入到AX系统中,客户有时想区分系统中地销售,采购订单是在标准系统创建的还是通过导入生成的,这样也有利于当某些订单发生某些错误的时候,可以区分是否是导入的订单的时候出现问题。

      这里我以销售订单为例,记录当时我们处理的方式和逻辑。
      1,订单的编码规则是根据根据订单的来源分配,如果是导入生成,则编码规则是“SOR-SH+当前时间的年月+5位流水号,如果是在系统中创建,则编码规则是”STN-SH+当前时间的年月+5位流水号。

      2,在创建销售订单时,给一个订单来源让用户选择,根据用户选择的来源生成不同的编码,如图:

      3,日期的控制,这里我们采取的是用在NumberSequenceTable窗体中设置一个开关,让用户选择是否在生成的编码当中包含当前时间的年月,如图

      4,实现步骤3的逻辑代码

      在类NumberSeq的getNumInternal方法中判断步骤3的是否包含日期,

    View Code
    protected Num getNumInternal(NumberSequenceCode _numberSequenceCode)
    {
        Num                     _num = '';
        NumberSequenceTable     numberSequenceTable;
        UserConnection          userConnection;
        boolean                 ok;
        ;
        this.setGlobalTransId();
    
        userConnection = new UserConnection();
    
        userConnection.ttsbegin();
    
        sequenceUpdated = false;
    
        numberSequenceTable.setConnection(userConnection);
    
        select forupdate firstonly numberSequenceTable
            index hint SeriesIdx
            where numberSequenceTable.NumberSequence == _numberSequenceCode;
    
        this.setCleanupSequence(numberSequenceTable);
    
        ok = this.checkSetUpNum(numberSequenceTable);
        if (ok)
        {
            _num = this.getNumFromList(userConnection,numberSequenceTable);
    
            if (_num == '')
            {
                if (numberSequenceTable.NextRec == 0 || numberSequenceTable.NextRec > numberSequenceTable.Highest)
                    ok = checkFailed(strfmt("@SYS17478",numberSequenceTable.NumberSequence));
                else
                    _num = this.getNumFromTable(userConnection,numberSequenceTable);
            }
        }
        if (!ok)
        {
            userConnection.ttsabort();
            throw error("@SYS25038");
        }
    
        userConnection.ttscommit();
    
        if (sequenceUpdated)
            this.createTTSLink();
    
    
        //ADD BY Kim
        if (numberSequenceTable.RGD_IfIncludeDate)
        {
            _num = this.RGD_FormatDate(_num);
        }
        //END By Kim
        return _num;
    }

      处理包含日期后的逻辑

    View Code
    //this method is used add date to num
    Num RGD_FormatDate(Num  _Num)
    {
        Num tmpNum = '';
        int position;
        str strDate;
        str strLongYear;
        str strShortYear;
        str strMonth;
        str strDay;
        ;
    
        tmpNum  = _Num;
        strDate = Date2Str(getServerDate(),321,2,2,2,2,4);
    
        strLongYear = subStr(strDate,1,4);
        strShortYear= subStr(strLongYear,3,2);
        strMonth    = subStr(strDate,6,2);
        strDay      = subStr(strDate,9,2);
    
        //Format day
        position    = StrScan(tmpNum,"DD",1,strLen(tmpNum));
        tmpNum      = strPoke(tmpNum,strDay,position);
    
        //Format month
        position    = StrScan(tmpNum,"MM",1,strLen(tmpNum));
        tmpNum      = strPoke(tmpNum,strMonth,position);
    
        //Format year
        position    = StrScan(tmpNum,"YYYY",1,strLen(tmpNum));
        if (position)
        {
            tmpNum      = strPoke(tmpNum,strLongYear,position);
        }
        else
        {
            position    = StrScan(tmpNum,"YY",1,strLen(tmpNum));
            tmpNum      = strPoke(tmpNum,strShortYear,position);
        }
    
        return tmpNum;
    }

      5,在AX系统销售订单窗体上创建时的逻辑,在SalesCreateOrder窗体中定义一个数组

    View Code
    class FormRun extends ObjectRun
    {
          ....
          RGD_SalesorderSourse            SalesorderSourse ;
          Array                           A ;
          ....
    }
    //init  
    void init()
    {
        ....
        A = new Array(Types::String);
        A.value(1,'empty');
        A.value(2,'empty');
        SalesorderSourse = RGD_SalesorderSourse::Blank  ;
        ....
    }

    note:我只粘贴了针对处理该逻辑的代码,在SalesCreateOrder的数据源的RGD_SalesorderSourse字段的validate方法中获取得到的生成编号

    View Code
    public boolean validate()
    {
        boolean ret;
    
    
        ;
        ret = super();
    
    // CUS-Modifed by sherr on 2011-08-22 Begin
    
        if(ret &&  #RGD_HDC)
        {
            if( SalesTable.RGD_SalesorderSourse != SalesorderSourse )
            {
                if( SalesTable.RGD_SalesorderSourse == RGD_SalesorderSourse::NRR)
                {
                    if(A.value(1) == 'empty')
                    {
                        SalesTable.SalesId  = NumberSeq::newGetNum(SalesParameters::numRefSalesIdNRR(),true).num();
                        A.value(1,SalesTable.SalesId);
                    }
                    else
                    {
                        SalesTable.SalesId   = A.value(1) ;
                    }
                }
                else if( SalesTable.RGD_SalesorderSourse == RGD_SalesorderSourse::KRR)
                {
                    if(A.value(2) == 'empty')
                    {
                        salesTableType.formMethodDataSourceCreate(element, salesTable_ds);
                        A.value(2,SalesTable.SalesId);
                    }
                    else
                    {
                        SalesTable.SalesId   = A.value(2) ;
                    }
                }
    // CUS-Modifed by sherr on 2011-08-22 End
    
        }
    
            /*
            if( SalesTable.orig().RGD_OrderSource != SalesTable.RGD_OrderSource )
            {
                if( SalesTable.RGD_OrderSource == "@RGD149")
                    SalesTable.SalesId  = NumberSeq::newGetNum(SalesParameters::numRefSalesIdNRR()).num();
                else if( SalesTable.RGD_OrderSource == "@RGD150")
                    salesTableType.formMethodDataSourceCreate(element, salesTable_ds);
            }
            */
    
    
        }
        SalesorderSourse = SalesTable.RGD_SalesorderSourse ;
    
        return ret;
    }

     

  • 相关阅读:
    PAT Advanced 1067 Sort with Swap(0, i) (25分)
    PAT Advanced 1048 Find Coins (25分)
    PAT Advanced 1060 Are They Equal (25分)
    PAT Advanced 1088 Rational Arithmetic (20分)
    PAT Advanced 1032 Sharing (25分)
    Linux的at命令
    Sublime Text3使用指南
    IntelliJ IDEA创建第一个Groovy工程
    Sublime Text3 安装ftp插件
    Sublime Text3配置Groovy运行环境
  • 原文地址:https://www.cnblogs.com/dingkui/p/2657464.html
Copyright © 2020-2023  润新知