खोज…


परिचय

Acumatica ईआरपी आपको किसी भी अतिरिक्त लागत को बेहतर ढंग से नियंत्रित करने और बिक्री लेनदेन पर राजस्व का प्रबंधन करने में सक्षम बनाता है। आपके ग्राहकों से आपके द्वारा ली जाने वाली भाड़ा राशि में न केवल आपकी कंपनी द्वारा वाहकों से वसूला जाने वाला भाड़ा शामिल हो सकता है, बल्कि आपके शिपिंग शर्तों और प्रीमियम भाड़ा द्वारा परिभाषित बीमा, हैंडलिंग और पैकेजिंग शुल्क भी शामिल हो सकते हैं।

शिपमेंट और इनवॉइस में फ्रेट राशि को ओवरराइड करना

बॉक्स से बाहर Acumatica सिस्टम में शिपिंग शब्दों की सूची बनाने और बनाए रखने की अनुमति देता है। शिपिंग शब्दों का इस्तेमाल शिपिंग राशि के आधार पर शिपिंग, पैकेजिंग और हैंडलिंग लागत को परिभाषित करने के लिए किया जाता है।

इस उदाहरण में मैं दिखाऊंगा कि बिक्री आदेश राशि के आधार पर एक शिपमेंट के लिए माल राशि की गणना कैसे की जाती है, जो उपयोगकर्ताओं को एक ही शिपिंग शर्तों के साथ प्रति शिपमेंट आदेश में स्वचालित रूप से सभी शिपमेंट पर लागू कई शिपमेंट बनाने की अनुमति देगा।

FreightCalculator

FreightCalculator वर्ग माल ढुलाई लागत और माल ढुलाई शर्तों की गणना के लिए जिम्मेदार है। इस उदाहरण के उद्देश्य के लिए, हमारी रुचि केवल GetFreightTerms विधि के आसपास होगी:

public class FreightCalculator
{
    ...

    protected virtual ShipTermsDetail GetFreightTerms(string shipTermsID, decimal? lineTotal)
    {
        return PXSelect<ShipTermsDetail,
            Where<ShipTermsDetail.shipTermsID, Equal<Required<SOOrder.shipTermsID>>,
            And<ShipTermsDetail.breakAmount, LessEqual<Required<SOOrder.lineTotal>>>>,
            OrderBy<Desc<ShipTermsDetail.breakAmount>>>.Select(graph, shipTermsID, lineTotal);
    }

    ...
}

बिक्री आदेश और शिपमेंट स्क्रीन दोनों FreightCalculator वर्ग का उपयोग बिक्री आदेश और शिपमेंट राशि के आधार पर माल ढुलाई राशि की गणना करने के लिए करते हैं:

विक्रय आदेश

public class SOOrderEntry : PXGraph<SOOrderEntry, SOOrder>, PXImportAttribute.IPXPrepareItems
{
    ...

    public virtual FreightCalculator CreateFreightCalculator()
    {
        return new FreightCalculator(this);
    }

    ...

    protected virtual void SOOrder_RowUpdated(PXCache sender, PXRowUpdatedEventArgs e)
    {
        ...

        PXResultset<SOLine> res = Transactions.Select();
        FreightCalculator fc = CreateFreightCalculator();
        fc.CalcFreight<SOOrder, SOOrder.curyFreightCost, SOOrder.curyFreightAmt>(sender, (SOOrder)e.Row, res.Count);

        ...
    }

    ...
}

लदान

public class SOShipmentEntry : PXGraph<SOShipmentEntry, SOShipment>
{
    ...

    protected virtual FreightCalculator CreateFreightCalculator()
    {
        return new FreightCalculator(this);
    }

    ...

    protected virtual void SOShipment_RowUpdated(PXCache sender, PXRowUpdatedEventArgs e)
    {
        ...

        PXResultset<SOShipLine> res = Transactions.Select();
        ...
        FreightCalculator fc = CreateFreightCalculator();
        fc.CalcFreight<SOShipment, SOShipment.curyFreightCost, SOShipment.curyFreightAmt>(sender, (SOShipment)e.Row, res.Count);

        ...
    }

    ...
}

माल भाड़ा राशि से अधिक

अनुकूलित करने के लिए कैसे लदान पर Acumatica गणना भाड़ा राशि स्क्रीन मैं घोषणा करेंगे FreightCalculatorCst वर्ग से विरासत में मिली FreightCalculator और ओवरराइड GetFreightTerms विधि:

public class FreightCalculatorCst : FreightCalculator
{
    public FreightCalculatorCst(PXGraph graph)
        : base(graph)
    {
    }

    protected override ShipTermsDetail GetFreightTerms(string shipTermsID, decimal? lineTotal)
    {
        if (graph is SOShipmentEntry)
        {
            var shipmentEntry = graph as SOShipmentEntry;
            int orderCount = 0;
            decimal? lineTotalTemp = null;

            foreach (PXResult<SOOrderShipment, SOOrder, CurrencyInfo, SOAddress, SOContact, SOOrderType> orderRec in 
                shipmentEntry.OrderList.SelectWindowed(0, 2))
            {
                orderCount++;
                SOOrder order = (SOOrder)orderRec;
                if (orderCount == 1)
                    lineTotalTemp = order.LineTotal;
                else
                    break;
            }

            if (orderCount == 1)
            {
                lineTotal = lineTotalTemp;
            }
        }

        return base.GetFreightTerms(shipTermsID, lineTotal);
    }
}

उसके बाद मैं के लिए एक एक्सटेंशन को लागू करेगा SOShipmentEntry बीएलसी और ओवरराइड CreateFreightCalculator को बदलने के लिए विधि FreightCalculator अपने कस्टम के साथ FreightCalculatorCst लदान स्क्रीन पर वर्ग:

public class SOShipmentEntryExt : PXGraphExtension<SOShipmentEntry>
{
    [PXOverride]
    public FreightCalculator CreateFreightCalculator()
    {
        return new FreightCalculatorCst(Base);
    }
}

ऊपर के नमूने में फ्रेटकैल्कुलरकैस्ट क्लास के कार्यान्वयन को समझना

ओवरराइड में GetFreightTerms विधि मैं आह्वान आधार के लिए शिपमेंट राशि के बजाय आदेश की बिक्री से राशि का उपयोग करेगा GetFreightTerms विधि और शिपिंग शर्तों प्राप्त करते हैं:

foreach (PXResult<SOOrderShipment, SOOrder, CurrencyInfo, SOAddress, SOContact, SOOrderType> orderRec in 
    shipmentEntry.OrderList.SelectWindowed(0, 2))
{
    orderCount++;
    SOOrder order = (SOOrder)orderRec;
    if (orderCount == 1)
        lineTotalTemp = order.LineTotal;
    else
        break;
}

if (orderCount == 1)
{
    lineTotal = lineTotalTemp;
}

जाहिर है, शिपमेंट के लिए माल राशि की गणना करने के लिए केवल बिक्री आदेश राशि का उपयोग करना संभव है, जो केवल 1 ऑर्डर को पूरा करता है। यदि एक शिपमेंट कई आदेशों को पूरा करता है, तो हमें आधार उत्पाद व्यवहार का पालन करना होगा और शिपमेंट राशि के आधार पर माल राशि की गणना करना होगा। आदेश लदान पूरा का नंबर की जांच करने के लिए, मैं प्रयोग किया जाता SelectWindowed पर विधि OrderList डेटा देख सकते हैं और पहले से अनुरोध किया 2 आदेश वर्तमान शिपमेंट द्वारा पूरा। मैं शिपमेंट द्वारा पूरा किए गए सभी आदेशों का अनुरोध कर सकता था, लेकिन यह सत्यापित करने के लिए कई रिकॉर्ड्स को निष्पादित करने और लौटने के लिए काफी अधिक समय लगेगा, अगर माल की गणना करने के लिए शिपमेंट राशि के बजाय बिक्री आदेश राशि का उपयोग किया जा सकता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow