zoukankan      html  css  js  c++  java
  • 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;
    }

     

  • 相关阅读:
    C# 编译机器码过程原理之再谈反射
    百度Echarts中国地图经纬度
    网页客服思路以及QQ截图粘贴到聊天框功能
    Linux查看CPU和内存使用情况
    Java 打包方式
    电商系统 常用代码 MyBatis-Plus
    Java cnpm install 没有反应
    Java 项目无法运行 解决
    电商系统 常用代码 VUE
    电商系统 常用代码段 Element-ui
  • 原文地址:https://www.cnblogs.com/dingkui/p/2657464.html
Copyright © 2011-2022 走看看