• 装箱单过发票


    以下 总结了三种情况下的以装箱单过发票

    1.简单的对某个销售订单开票

    	public static str60 shipSalesOrder(str salesId)
    	{
    	    SalesFormLetter     clsSalesFormLetter;
    	    SalesTable              salesTable;
    	    str                         ret='';
    	    System.Exception    err;
    	    ;
    	    try
    	    {
    	        //Get SalesTable
    	        tSalesTable = SalesTable::find(salesId);
    	
    	        //Packing Slip update
    	        clsSalesFormLetter = SalesFormLetter::construct(DocumentStatus::PackingSlip);
    	        clsSalesFormLetter.update(salesTable,systemDateGet(),SalesUpdate::All,AccountOrder::None,NoYes::No,NoYes::No);
    	        clsSalesFormLetter.checkCloseDialog(clsSalesFormLetter);
    	
    	       //Invoice update
    	        clsSalesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice);
    	        clsSalesFormLetter.update(salesTable,systemDateGet(),SalesUpdate::PackingSlip,AccountOrder::None,NoYes::No,NoYes::No);
    	        clsSalesFormLetter= null;
    	        ret = 'OK';
    	        return ret;
    	    }
    	    catch (Exception::CLRError)
    	    {
    	        err = CLRInterop::getLastException();
    	        ret = err.ToString();
    	        return ret;
    	    }
    	}
    

    2.合并装箱单批量开票(系统原有功能),可以根据某些条件筛选对装箱单开票

    	static void RB_PostSalesInvoice(Args _args)
    	{
    	    SalesTable salesTable;
    	    SalesFormLetter salesFormLetter;
    	    Query query;
    	    QueryRun queryRun;
    	    QueryBuildDataSource qbds;
    	
    	    salesTable = SalesTable::find('CNMF_00001');
    	    query = new Query(QueryStr(SalesUpdatePackingSlip));
    	    qbds = query.dataSourceTable(tableNum(SalesLine));
    	
    	    // Build query range to find those lines which needs to be posted.
    	
    	    qbds.addRange(fieldNum(SalesLine, SalesId)).value('CNMF_00001');
    	    qbds.addRange(fieldNum(SalesLine, SalesStatus)).value(queryValue(SalesStatus::Backorder));
    	    qbds.addRange(fieldNum(SalesLine, itemId)).value('D0001');
    	    queryRun = new queryRun(query);
    	
    	    salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice);
    	    salesFormLetter.chooseLinesQuery(queryRun);
    	    salesFormLetter.update(salesTable);
    	}
    

    3. 多选装箱单以当前交货量的方法批量开票

    class PostInvoiceBySettle
    {             
        public   static void main(Args _args)
        {
            Test_SalesParmLine                salesParmLine, salesParmLineUpdate, salesParmLineTmp;
            Test_SalesSettleTable            salesSettleTable;
            FormDataSource                  formDataSource;
            SalesLine                       salesline, saleslineUpdate,salesLineTmp;
            SettlePostInvoiceTmp            settlePostInvoiceTmp;
            PostInvoiceBySettle                postInvoiceBySettle  = new PostInvoiceBySettle();
            SalesFormLetter                 salesFormLetter;
            SalesTable                      salesTable;
            SalesParmLine                   parmLine;
            Qty                             deliveryQty, settleQty,salesPrice, salesLineAmount;
            Query                            query;
            SysQueryRun                        queryRun;
            QueryBuildDataSource            qbds;
            container                       con, conParmLine;
            CustInvoiceJour                 custInvoiceJour;
            SalesParmUpdate                 salesParmUpdate;
            int                             i, conLenth;
            SalesId                         salesId;
            InventTransId                   inventTransId;        
            ;       
    
            if(!_args)
            {
                throw Error("@SYS22539");
            }
    
            if(_args.dataset() == tableNum(Test_SalesSettleTable))
            {
                salesSettleTable = _args.record();
    
                if(salesSettleTable)
                {                
                    ttsbegin;
                             
                    while  select sum(SettleQty), sum(SettleAmount) from salesParmLineTmp
                        group by   salesParmLineTmp.InventTransId
                        where salesParmLineTmp.SalesSettlementId   == salesSettleTable.SalesSettlementId
                         &&   salesParmLineTmp.SettledQty          != salesParmLineTmp.DeliverNow
                    {                   
                            
                        salesline   = SalesLine::findInventTransId(salesParmLineTmp.InventTransId, true);
                        
                        if(salesline)
                        {
                            salesline.SalesDeliverNow       = salesParmLineTmp.SettleQty;
                            salesline.modifiedField(fieldNum(SalesLine, SalesDeliverNow));
                            salesline.update();
                        }
                        
                        if(!salesId || salesId != salesParmLine.OrigSalesId)
                        {
                            con           += salesParmLine.OrigSalesId;
                        }
                        salesId         = salesParmLine.OrigSalesId;
                    }
    
                    query   = new  Query(queryStr(SalesUpdate));
                    qbds    = query.dataSourceTable(tableNum(SalesTable));
                    qbds.addRange(fieldNum(SalesTable, SalesId)).value(con2Str(con));
    
                    queryRun  = new  SysQueryRun(query);
            
                    salesFormLetter =  SalesFormLetter::construct(DocumentStatus::Invoice);
                    salesFormLetter.chooseLinesQuery(queryRun);
                    salesFormLetter.transDate (systemDateGet());
                    salesFormLetter.specQty (SalesUpdate::DeliverNow);
                    salesFormLetter.printFormLetter(false);
                    salesFormLetter.chooseLines(false, true);
                    salesFormLetter.reArrangeNow(true);
                    salesFormLetter.sumBy(AccountOrder::Account);
                    salesParmUpdate = salesFormLetter.salesParmUpdate();
                    salesFormLetter.run();
                                                                  
                    ttscommit;
    
                    select   firstonly custInvoiceJour
                        where custInvoiceJour.ParmId  ==  salesParmUpdate.ParmId;
    
                    if(custInvoiceJour)
                    {
                        ttsbegin;
                        
                        salesSettleTable.selectForUpdate(true);
                        salesSettleTable.InvoiceId  = salesSettleTable.InvoiceId ? (salesSettleTable.InvoiceId + ',' + custInvoiceJour.InvoiceId) : custInvoiceJour.InvoiceId;
                        salesSettleTable.doUpdate();
                       
                        while select settlePostInvoiceTmp
                            where settlePostInvoiceTmp.InventTransId      
                        {   
                            saleslineUpdate   = SalesLine::findInventTransId(settlePostInvoiceTmp.InventTransId, true);
    
                            if(saleslineUpdate)
                            {
                                saleslineUpdate.SalesDeliverNow     = settlePostInvoiceTmp.DeliveryQty;
                                salesline.modifiedField(fieldNum(SalesLine, SalesDeliverNow));
                                saleslineUpdate.update();
                            }             
                        }                                 
                        ttscommit;
                    }
                }           
            }      
        }
    }
  • 相关阅读:
    Linux 操作系统读写寄存器
    mysql_mysql基本使用
    logcat日志文件分析
    pytest_用例运行级别_class级
    pytest_用例运行级别_函数级
    pytest_用例运行级别_模块级
    python生成接口自动化测试报告模版
    python中nonlocal 的作用域
    python中global的作用域
    python装饰器参数那些事_接受参数的装饰器
  • 原文地址:https://www.cnblogs.com/sunny-technology/p/11585465.html
Copyright © 2020-2023  润新知