Wijzig de berekening van back-orders die uitgevoerd zijn door Mercator

0000002405     -      27-08-2017

De BillingEngine van Mercator heeft een AfterBo evenement (na back-orders) die verhoogd is net na het berekenen van de balans. Dit maakt het mogelijk om de berekening te veranderen. Het evenement zal meerdere malen worden verhoogt indien het huidige document meerdere originele documenten bevat (transformatie naar het open document). De EventArgs van dat evenement bevat de volgende specifieke eigenschappen:

  • PiedOriginalDocument : een DataRow die de voet van het originele document bevat
  • LinesOriginalDocument :Een DataTable die de overeenkomstige lijnen bevat. Deze lijnen komen overeen met het berekende saldo in Mercator voor de originele documenten.

In dit programmering voorbeeld, wordt ons toegestaan om het saldo te annuleren voor bepaalde items en te bewaren voor anderen. Deze situatie doet zich voor, bijvoorbeeld, in een gedeeltelijke weergave van een levering, worden sommige artikels permanent vervangen door andere voorwerpen, terwijl andere artikels niet kunnen worden vervangen en behouden worden in de order. Om dit in te stellen voegt men het veld NO_BO van het bit type in de LIGNES_V tabel toe. In de levering sequentie voegt u een kolom toe met NO_BO als bron (selectievakje).

Na het veranderen van de bestelling en het aanpassen van de hoeveelheden, vinkt men “NO_BO” aan op de lijnen waar men de back-orders niet wenst te behouden. Bij het valideren vantwoorden men “ja” op de vraag “Saldo's beheren?".

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;

namespace Billing
{
    public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
    {

        public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine BillingEngine)
        {
            BillingEngine.AfterBo += BillingEngine_AfterBo;
        }

        public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine BillingEngine)
        {
            BillingEngine.AfterBo -= BillingEngine_AfterBo;
        }

        void BillingEngine_AfterBo(object sender, MercatorUi.Engine.Gescom.BillingEngine.AfterBoEventArgs e)
        {
            MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;
            foreach(MercatorDatabase.LIGNES_V l in billingEngine.LignesVRecords.Where(l => l.NO_BO))
            {
                DataRow[] foundRows;
                if (l.GENERIQ)
                    foundRows = e.LinesOriginalDocument.Select(string.Format("(id_article='{0}') and (designatio='{1}') and (serie=0)",
                        Api.UnquoteSql(l.ID_ARTICLE), Api.UnquoteSql(l.DESIGNATIO)));
                else
                    foundRows = e.LinesOriginalDocument.Select(string.Format("(id_article='{0}') and (serie=0)",
                        Api.UnquoteSql(l.ID_ARTICLE)));

                foreach (DataRow dr2 in foundRows)
                    e.LinesOriginalDocument.Rows.Remove(dr2);
            }
        }

    }
}

Opmerkingen: :

  • Aangezien de standaard berekening van het saldo gebeurt met behulp van een combinatie van artikels, is het onmogelijk om het saldo in bepaalde lijnen te behouden, en op hetzelfde moment, te verwijderen in anderen. Indien nodig kan de code verfijnd worden door dit selectie criterium uit te breiden: "(id_article='{0}') and (serie=0)"
  • Het hier gepresenteerde voorbeeld toont de aanpassingen op back-orders van generieke artikels
  • Artikels met serienummers worden altijd genegeerd door dit proces