装箱单过发票

本文详细介绍了三种批量开票的处理方法:基于单一销售订单的发票生成、根据筛选条件对装箱单进行合并开票以及针对多个装箱单按当前交货量批量开票的过程。通过具体的代码实现,展示了如何在不同场景下高效完成销售订单到发票的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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;
                }
            }           
        }      
    }
}

 

转载于:https://www.cnblogs.com/sunny-technology/p/11585465.html

内容概要:本文介绍了基于SMA-BP黏菌优化算法优化反向传播神经网络(BP)进行多变量回归预测的项目实例。项目旨在通过SMA优化BP神经网络的权重和阈值,解决BP神经网络易陷入局部最优、收敛速度慢及参数调优困难等问题。SMA算法模拟黏菌寻找食物的行为,具备优秀的全局搜索能力,能有效提高模型的预测准确性和训练效率。项目涵盖了数据预处理、模型设计、算法实现、性能验证等环节,适用于多变量非线性数据的建模和预测。; 适合人群:具备一定机器学习基础,特别是对神经网络和优化算法有一定了解的研发人员、数据科学家和研究人员。; 使用场景及目标:① 提升多变量回归模型的预测准确性,特别是在工业过程控制、金融风险管理等领域;② 加速神经网络训练过程,减少迭代次数和训练时间;③ 提高模型的稳定性和泛化能力,确保模型在不同数据集上均能保持良好表现;④ 推动智能优化算法与深度学习的融合创新,促进多领域复杂数据分析能力的提升。; 其他说明:项目采用Python实现,包含详细的代码示例和注释,便于理解和二次开发。模型架构由数据预处理模块、基于SMA优化的BP神经网络训练模块以及模型预测与评估模块组成,各模块接口清晰,便于扩展和维护。此外,项目还提供了多种评价指标和可视化分析方法,确保实验结果科学可信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值