One moment please...
 
 
Exact AEC Modular   
 

Exact AEC - Middelen - Artikelen importeren - Import layouts - uitleg VB script

De standaard functionaliteit van het script is als volgt:

  • Door de te importeren regels van de importbuffer heenlopen.
  • Voor elk record:
  • Het logische record wissen om voorgaande waarden te verwijderen
    • Veldwaarden uit de buffer lezen en plaatsen in de velden van het logische record
    • Na het vullen van de betreffende velden van het logische record de waarden vastleggen, waarna de Importwizard het logische record verwerkt.
  • Voor elk veld:
    • De waarde uitlezen uit de buffer
    • De ingelezen waarde plaatsen in een veld van het logische record.
  • Na het  verwerken van het logische record doorgaan naar het volgende record totdat het einde van de importbuffer is bereikt.

Een beschrijving van de gebruikte statements in het script:

Dim Waarde

Hiermee wordt een variabele gedeclareerd met de naam "Waarde". Deze variabele wordt gebruikt om waarden in te lezen en weg te schrijven.

Bron.First

Hiermee wordt de record cursor van de importbuffer op het eerste record gezet. Het object "Bron" is de referentie naar de importbuffer.

While not(Bron.EOF)

-

-

WEnd

Met deze twee statements worden alle statements die hier tussenin liggen net zo lang uitgevoerd totdat de betreffende conditie behaald is. In dit geval is de conditie dat het einde van de importbuffer nog niet is bereikt. Men zou dit kunnen lezen als "Zolang het einde van de importbuffer niet is berekt, doe dan ..... "

Bron.Next

Dit statement zorgt er voor dat de recordcursor van de importbuffer naar het volgende record gaat. Zoals in het script is te zien, is dit de laatste regel binnen de lus. Indien hierdoor het einde van de importbuffer is bereikt, zal de conditie van het vorige statement niet meer voldoen en is het uitvoeren van het script voltooid. Er volgen immers geen statements meer na het WEnd statement.

Doel.Edit

Dit statement wist het logische record van waarden. De velden worden met "NULL" gevuld. Het object "Doel" is de referentie naar het logische record.

Waarde = Bron.GetValue("Soort")

Hier wordt een waarde opgehaald uit de importbuffer en in de variabele "Waarde" geplaatst. De veldnaam welke tussen aanhalingstekens staat, is de veldnaam welke aan het te importeren veld was toegekend. Op deze manier kunnen de waardes van elk veld in de importbuffer worden ingelezen.

Doel.PutValue "CND.FSSLEUTELCODE", Waarde

Met dit statement wordt de inhoud van de variabele "Waarde" geplaats in een veld van het logisch record.  Tevens is een komplete lijst van veldnamen en hun geaccepteerde waarden terug te vinden achteraan dit document.

Doel.Post

Met dit statement wordt te kennen gegeven dat het logische record is gevuld met waarden, zodat de Importwizard de waarden kan verwerken en plaatsen in de AEC tabel(len).

 

Wanneer een layout voor de eerste keer wordt aangemaakt, zal er een standaard script worden aangemaakt gebaseerd op de gemaakte veldkoppelingen. Het script wat getoond wordt in figuur 22 is zo’n standaard script. De volgende afbeelding toont de relatie tussen de veldkoppelingen en scriptregels:

Figuur 23: De relatie tussen veldkoppelingen en scriptregels

Zoals te zien is vindt er geen enkele bewerking dan wel conversie plaats op de ingelezen en weggeschreven waarde. Echter, voor een aantal velden uit het conditiebestand van de Technische Dienst, zullen conversies uitgevoerd moeten worden.

Uitgaande van de waarden van het logische record accepteert en rekening houdend met dat het te importeren bestand een aantal "complexe" velden heeft, wordt duidelijk welke conversies er nodig zijn om dit conditiebestand goed in te kunnen lezen. Deze zijn als volgt:

• De nettoprijs is opgegeven als een getal in centen. Dus, de waarde uit het bedrag veld zal moeten worden gedeeld door 100 om de daadwerkelijke prijs in de valuta eenheid te krijgen.

• Het "Soort" veld, wat aangeeft of het om een artikelkorting of groepkorting gaat, moet ook vertaald worden. De waarde "H" uit het importbestand moet omgezet worden naar de waarde "C". Dit is bepaald door de werking van het logisch record. Verder kan in het importbestand nog de waarde "A" voorkomen. Aangezien de soort codering voor een artikelkorting de zelfde is voor AEC, hoeft er dus geen conversie plaats te vinden. Immers, het logische record accepteert alleen de waarde "A" of "C".

• Het "Korting/Prijs" veld wordt op meerdere manieren gebruikt. In het geval dat de "Soort" code een "A" is, moet hier in de netto prijs staan, welke nog moet worden gedeeld door 100. In dien de "Soort" code een "H" is, staan hier de kortingen in. Het logische record accepteert alleen waarden van het type "Getallen met decimalen". Tevens dient elke korting in het juiste korting veld geplaatst te worden. Dus, de kortingen moeten uitgefilterd worden, en vervolgens nog worden geconverteerd naar getallen met decimalen.

Al deze conversies en bewerkingen zijn uit te voeren binnen VB Scripting. Hier is uitgebreide documentatie van beschikbaar. (MS Platform SDK / Scripting Tools / VBScript / Reference)

Nu volgt het aangepaste en uitgebreide script voor het importeren van conditiesbestanden van de Technische Unie:

 

Dim Waarde, Soort

'

'Pos = 1-based. Voor het uitfilteren van korting 1, 2, 3.

'

function Korting(Waarde, Pos)

  Dim CurLocale

  CurLocale = GetLocale

  '

  'TU gebruikt "." als decimal separator dus

  ' locale op engels UK zetten.

  SetLocale("en-gb")

  '

  ' Kortingen uitsplitten in array

  '

  KortingArray = Split(Waarde,"-",-1,1)

  '

  ' Element ophalen / converteren

  '

  ' Pos 0-based maken

  Pos = Pos - 1

  if (Pos) <= UBound(KortingArray) then

    Korting = CDbl(KortingArray(Pos))

  else

    Korting = 0.0

  end if

end function

Bron.First

While not(Bron.EOF)

  Doel.Edit

  '

  'Codering omzetten van TU naar AEC

  'H --> C

  'A --> A

  Soort = Bron.GetValue("Soort")

  if Soort = "H" then Soort = "C"

  Doel.PutValue "CND.FSSLEUTELCODE", Soort

  '

  'De sleutel (Artikelgroep of Artikelcode) in het juiste

  'veld stoppen afhankelijk van soort regel

  '

  if Soort = "C" then

    Waarde = Bron.GetValue("Kortinggroep")

    Doel.PutValue "CND.FSHGSA", Waarde

  else

    Waarde = Bron.GetValue("Artikelcode")

    Doel.PutValue "CND.FSARTIKELCODE", Waarde

  end if

  '

  ' Omschrijving gewoon overzetten

  '      

  Waarde = Bron.GetValue("Omschrijving")

  Doel.PutValue "CND.FSOMSCHRIJVING", Waarde

 

  '

  ' Afhankelijk van soort, prijs of kortingen vullen

  '

  Waarde = Bron.GetValue("Korting/Prijs")

  if Soort = "C" then

    '

    ' Soort is conditiegroep. Veld uit elkaar pluizen, en in

    ' afzonderlijke kortingvelden stoppen

    '

    Doel.PutValue "CND.FDKORTING", Korting(Waarde,1)

    Doel.PutValue "CND.FDKORTING2", Korting(Waarde,2)

    Doel.PutValue "CND.FDKORTING3", Korting(Waarde,3)

  else

    '

    ' Soort is Artikel. Prijs delen door 100

    '

    Doel.PutValue "CND.FDPRIJSNETTO", Waarde / 100

  end if

  '

  ' Regel posten

  '

  Doel.Post

  Bron.Next

WEnd

Nu wordt ook duidelijk waarom bij de veldkoppelingen het "Korting/Prijs" veld aan alle vier de AEC velden (Korting 1 – 3, Netto prijs) gekoppeld moest worden. In het script worden deze velden namelijk gevuld met de uitgefilterde/geconverteerde kortingen. De VB functie "Korting", welke twee parameters verwacht, is de functie die een korting extraheert uit de geimporteerde waarde. De eerste parameter is de inhoud van het importveld. De twee parameter geeft aan welke korting uitgefilterd moet worden. Indien deze korting niet aanwezig is, zal de functie 0,00 teruggeven.

Zie de beschrijving van het logisch record voor conditiebestanden hoe de data aangeboden moet worden. Hetzelfde geldt voor artikelbestanden.

 

Terug naar hoofddocument 20.223.600 - Artikelen importeren

     
 Main Category: Support Product Know How  Document Type: Online help main
 Category: Know how  Security  level: All - 0
 Sub category: General  Document ID: 20.320.150
 Assortment:  Date: 26-06-2020
 Release:  Attachment:
 Disclaimer