MercatorPenguin in schrijfmodus : Transfers tussen depots

0000002986     -      19-06-2022

MercatorPenguin 2.9 maakt het mogelijk om Transfers tussen depots aan te maken en te wijzigen, voor alle soorten (standaard, voorbereiding, verzending, ontvangst). Dit vereist een specifieke licentie per mobiel apparaat die deze functie gebruikt (PENGUINBILLING = ...) evenals een versie 10.8 of hoger van Mercator.

Het licentiebeheer bevat een systeem voor het activeren en deactiveren van mobiele apparaten die van deze functionaliteit gebruik kunnen maken. Deze deactivering kan gebeuren via de onderhoudspagina van MercatorPenguinServer of via de onderhoudsbundel. In alle gevallen moet MercatorPenguinServer verbinding kunnen maken met een webservice die wordt gehost door Mercator (host = restapi.mercator.eu) op de https-poort (TCP 443). De functionaliteit die op deze pagina wordt beschreven, is niet beschikbaar als MercatorPenguinServer niet met deze server kan communiceren.

Opmerking met betrekking tot de GDPR in dit verband : als onderdeel van dit licentiebeheer via een mobiel apparaat wordt alleen deze informatie verzonden :

  • de unieke identificatie van het apparaat, willekeurig gegenereerd: bijvoorbeeld 3f2504e0-4f89-11d3-9a0c-0305e82c3301
  • de naam van de host die MercatorPenguinServer host: bijvoorbeeld penguin.mercator.eu
  • de naam van de configuratie (naam van het ini-bestand van MercatorPenguinServer).

Er worden geen persoonlijke gebruikersgegevens, noch enige gegevens in Mercator of MercatorPenguin meegedeeld.


Toegang tot een Transfers tussen depots wordt altijd gemaakt vanuit een bundel van het type "Lijst", via een TransferEditButton-knop, waarvan de volgende eigenschappen moeten worden gespecificeerd :

  • TransferId = document-id: ID_DOC van PIEDS_D
  • TransferPiece = het nummer van de Transfers tussen depots
  • TransferType = de waarde van TYPE in PIEDS_D.

 

<m:TransferEditButton Text="Modifier" Font="Small" 
TransferId="@ID_DOC" TransferPiece="@PIECE" TransferType="@TYPE" />

 

Voorbeeld van een bundellijst : Transfers tussen depots_Std.pngb

De lay-out van een wijzigingsvenster in MercatorPenguin moet worden gemaakt in XAML, uitgaande van de vorm van de overeenkomstige sequentie "Tools> Sequenties> Diverse Bewegingen" van Mercator en met behulp van dit element van deze vervolgkeuzeknop :

param_penguin_invent_nl

 

Een scherm van een Transfer tussen depots vereist twee XAML-instellingen :

  1. het item zelf: de informatie van de voettekst en de regel die wordt bewerkt
  2. het formaat van elke cel in de ListView waarin de lijnen van het huidige document worden weergegeven.

Voorbeeld van XAML Tab 1 instellingen

<StackLayout Margin="10, 10, 10, 10">
<m:EditDatePicker Source="date" HorizontalOptions="FillAndExpand" />
<StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand">
<Label Text="Van" FontSize="12" VerticalOptions="Center" WidthRequest="100" />
<m:EditPicker Source="id_depot1" HorizontalOptions="FillAndExpand" />
</StackLayout>
<StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand">
<Label Text="Naar" FontSize="12" VerticalOptions="Center" WidthRequest="100" />
<m:EditPicker Source="id_depot2" HorizontalOptions="FillAndExpand" />
</StackLayout>
<m:EditEntry Placeholder="Reference" Source="reference" HorizontalOptions="FillAndExpand" />

<BoxView HorizontalOptions="FillAndExpand" HeightRequest="2" Margin="0,25,0,25" Color="%ThemeColor%"/>

<Grid RowSpacing="10" ColumnSpacing="2">
<Grid.ColumnDefinitions>
        <ColumnDefinition Width="120" />
<ColumnDefinition Width="25" />
<ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="50" />
    </Grid.RowDefinitions>

<Label Text="Depot (van)" FontSize="12" VerticalOptions="Center" HorizontalOptions="End" Margin="0,0,5,0" Grid.Column="0" Grid.Row="0" />
<m:EditPicker Source="LINE|ID_DEPOT1" HorizontalOptions="FillAndExpand" Grid.Column="2" Grid.Row="0" />

<m:EditEntry Placeholder="Loc. (van)" Source="LINE|ID_MPLACE1" HorizontalOptions="FillAndExpand" Grid.Column="0" Grid.Row="1" />
<m:EditScanButton TargetSource="LINE|ID_MPLACE1" Grid.Column="1" Grid.Row="1" />
<m:TargetSigLabel Origin="LINE|ID_MPLACE1" Font="Medium" VerticalOptions="Center" HorizontalOptions="FillAndExpand" Margin="10,0,0,0" Grid.Column="2" Grid.Row="1" />

<Label Text="Depot(naar)" FontSize="12" VerticalOptions="Center" HorizontalOptions="End" Margin="0,0,5,0" Grid.Column="0" Grid.Row="2" />
<m:EditPicker Source="LINE|ID_DEPOT2" HorizontalOptions="FillAndExpand" Grid.Column="2" Grid.Row="2" />

<m:EditEntry Placeholder="Loc. (naar)" Source="LINE|ID_MPLACE2" HorizontalOptions="FillAndExpand" Grid.Column="0" Grid.Row="3" />
<m:EditScanButton TargetSource="LINE|ID_MPLACE2" Grid.Column="1" Grid.Row="3" />
<m:TargetSigLabel Origin="LINE|ID_MPLACE2" Font="Medium" VerticalOptions="Center" HorizontalOptions="FillAndExpand" Margin="10,0,0,0" Grid.Column="2" Grid.Row="3" />

<m:EditEntry Placeholder="Artikel" Source="LINE|ID_ART" HorizontalOptions="FillAndExpand" Grid.Column="0" Grid.Row="4" />
<m:EditScanButton TargetSource="LINE|ID_ART" Grid.Column="1" Grid.Row="4" />
<m:TargetSigLabel Origin="LINE|ID_ART" Font="Medium" VerticalOptions="Center" HorizontalOptions="FillAndExpand" Margin="10,0,0,0" Grid.Column="2" Grid.Row="4" />

<Label Text="H" FontSize="12" VerticalOptions="Center" HorizontalOptions="End" Margin="0,0,5,0" Grid.Column="0" Grid.Row="5" />
<m:EditEntry Source="LINE|Q" DefaultLineValue="1" WidthRequest="120" Decimals="2" Grid.Column="2" Grid.Row="5" />

<Label Text="EP" FontSize="12" VerticalOptions="Center" HorizontalOptions="End" Margin="0,0,5,0" Grid.Column="0" Grid.Row="6" />
<m:EditEntry Source="LINE|PU" WidthRequest="120" Decimals="2" Grid.Column="2" Grid.Row="6" />

  </Grid>

<m:EditAddLineButton Margin="25,25,25,25" HorizontalOptions="FillAndExpand" />

</StackLayout>

Voorbeeld van XAML ListViewCell instellingen

<StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand">  
<Label Text="H=" FontSize="12" Margin="0,0,10,0" />
<Label Text="@Q:### ##0.00" FontSize="12" Margin="0,0,25,0" HorizontalOptions="FillAndExpand" />
</StackLayout>
<StackLayout Orientation="Horizontal">   
<Label Text="@ID_ART" FontSize="12" Margin="0,0,10,0" />
<Label Text="@DESIGNATIO" FontSize="12" />
</StackLayout>
<StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand">  
<Label Text="EP=" FontSize="12" Margin="0,0,10,0" />
<Label Text="@PU:### ##0.00" FontSize="12" Margin="0,0,25,0" HorizontalOptions="FillAndExpand" />
</StackLayout>
<StackLayout Orientation="Horizontal">   
<Label Text="Van" FontSize="12" Margin="0,0,10,0" />
<Label Text="@LIB_DEPOT1" FontSize="12" Margin="0,0,10,0" />
<Label Text="@ID_MPLACE1" FontSize="12" />
</StackLayout>
<StackLayout Orientation="Horizontal">   
<Label Text="Naar" FontSize="12" Margin="0,0,10,0" />
<Label Text="@LIB_DEPOT2" FontSize="12" Margin="0,0,10,0" />
<Label Text="@ID_MPLACE2" FontSize="12" />
</StackLayout>

Deze XAML-code produceert deze schermen :

penguin_transfers_nl     penguin_transfers_lines_nl

     billinglignes4

Principes voor het instellen van parameters

In de eerste XAML-code, moet u besturingselementen van het type Bewerken gebruiken waarmee u de velden van de voettekst (boven de eerste oranje lijn) kunt wijzigen, evenals de lijn die wordt bewerkt (onder de oranje lijn). Deze lijnvelden hebben een bron die bestaat uit LINE| gevolgd door de naam van de kolom in de tabel LIGNES_D.

De invoer van het online artikel gebeurt altijd in een EditEntry, waarvan de bron LINE|ID_ART is. Deze bron wordt herkend als een link naar de signaletiek Artikels, wat het mogelijk maakt om de omschrijving in een TargetSigLabel weer te geven. (Zie de SQL LIBTARGETSIG_STOCK-functie die kan worden gewijzigd).

De XAML-code moet een EditAddLineButton bevatten waarmee de huidige lijn kan worden toegevoegd aan de lijst met reeds ingegeven lijnen.

In de tweede XAML-code (ListViewCell), moeten de weer te geven variabelen worden voorafgegaan door een @ en in hoofdletters. Het is mogelijk om een weergavemask in te stellen in de vorm @COLUMN: mask. Dit masker werkt identiek aan dat van string.Format() van het .net-framework.

Naast de variabelen van de LIGNES_D-tabel, kan men LIB_DEPOT1 en LIB_DEPOT2 gebruiken om de namen van stortingen op de lijn te verkrijgen.

 

Gebruik

Als het dossier ook beheer van stocklocaties bevat, kan de gebruiker de stocklocatie invoeren. Anders kunnen de rows 1 en 3 van het raster worden verwijderd en kunnen alle Grid.Rows dienovereenkomstig worden aangepast. Merk op dat de waarde van de ingevoerde locatie nooit wordt gereset, waardoor de locatie slechts één keer kan worden ingevoerd en vervolgens meerdere artikels kunnen worden ingegeven die tussen deze locaties moeten worden overgedragen.

De gebruiker voert vervolgens een artikelcode in. Waar nodig presenteert MercatorPenguin een lijst met artikels die kunnen worden geselecteerd. Hij kan dan andere informatie invoeren zoals aantal, prijs, korting, ...

Ten slotte moet de gebruiker de lijn die wordt ingevoerd daadwerkelijk toevoegen aan de lijst van het tweede tabblad met behulp van de knop "Toevoegen". Hiermee worden de artikelgegevens en de focus in het gebied "Artikel" gewist, zodat het volgende artikel kan worden ingevoerd.

Het artikel en de locatie kunnen worden ingevoerd via de EditScanButton om een barcode te scannen.

Op het tweede tabblad kunt u de lijst met ingegeven lijnen bekijken. U kunt er ook een eerder ingegeven lijn mee verwijderen :

  • onder iOS : door de lijn naar links te slepen en vervolgens de knop "Verwijderen" te gebruiken
  • op Android: door de lijn ingedrukt te houden en vervolgens op de knop "Verwijderen" te drukken.

Het is niet mogelijk om een lijn in de lijst opnieuw te bewerken om deze te wijzigen. Indien nodig moet het daarom worden verwijderd en opnieuw worden aangemaakt.

Het finaliseren van een document wordt gedaan met deze knoppen bovenaan het scherm, die respectievelijk deze functies bieden:

  • Annuleer in behandeling zijnde wijzigingen en sluit het scherm van de Transfer tussen depots
  • Sla lopende wijzigingen op en sluit het scherm van de Transfer tussen depots
  • Sla de lopende wijzigingen op terwijl u het huidige scherm van de Transfer tussen depots open houdt

 

Beperkingen

Het is noodzakelijk om te begrijpen dat de back-ups uitsluitend worden uitgevoerd door MercatorPenguinServer en dat deze stateless is. Dit betekent dat, typisch gedurende de levensduur van de  Transfer tussen depots in MercatorPenguin, deze niet open wordt gehouden door MercatorPenguinServer. Daarom is het mogelijk dat een andere gebruiker deze parallel wijzigt. Deze praktijk moet worden vermeden. Bij het opslaan van wijzigingen gelden de volgende regels :

  • Lijnen verwijderd in MercatorPenguin worden verwijderd door MercatorPenguinServer als ze nog bestaan. Anders wordt er geen foutmelding weergegeven.
  • Lijnen toegevoegd in MercatorPenguin worden altijd toegevoegd door MercatorPenguinServer.

 

Informatiestroom

Deze pagina zien.

 

Programmeren

Customizers die events van de TransferEngine gebruiken, worden goed gebruikt door MercatorPenguinServer. Het is mogelijk om te weten of de Transfer tussen depots wordt beheerd door MercatorPenguin met behulp van deze eigenschap: MercatorUi.Globals.IsMercatorPenguinServer. 

Ter herinnering: het is niet mogelijk om aangepaste code uit te voeren op het mobiele apparaat. Er is dus geen customizer die als zodanig in de MercatorPenguin-applicatie "draait". Android- en iOS-platforms staan dit niet toe. Daarom zal dit punt nooit worden gewijzigd.

 

Tips

Bekijk hoe u de instellingen voor Transfer tussen depots kunt verfijnen.


Overwegingen bij het wijzigen van de status van Transfer tussen depots

Statuswijzigingen kunnen worden aangebracht met een knop van het type EditTransformButton. (Zie in het voorbeeld "XAML Tab 1 instellingen" hierboven). De code voor deze knop zou er als volgt uit moeten zien :

<m:EditTransformButton Margin="25,25,25,25" HorizontalOptions="FillAndExpand" Text="Changer Statut">
<m:EditTransformButton.TargetTransf>
    <x:Array Type="{x:Type x:Int32}">
<x:Int32>1</x:Int32>
<x:Int32>2</x:Int32>
    </x:Array>
</m:EditTransformButton.TargetTransf>
</m:EditTransformButton>

In de array van de property TargetTransf moet u de types vermelden waarnaar de gebruiker zijn Transfer tussen depots kan omzetten. Er is geen onderscheid te maken tussen een verhoging of verlaging van de status. Dit aspect wordt automatisch herkend door MercatorPenguinServer.

Wanneer u op deze knop klikt, wordt een dialoogvenster aan de gebruiker getoond waarin hij de volgorde van bestemming kan kiezen.

penguinchangeandroidtransf_nl    penguinchangeiostransf

De statuswijziging zal worden aangebracht door MercatorPenguinServer tijdens de volgende Bewaring. Merk op dat zodra de omzetting is aangevraagd maar nog niet is uitgevoerd (Bewaren niet uitgevoerd), het bijschrift van deze knop verandert in "Annuleer wijziging in ...". Dit maakt het mogelijk om het verzoek tot omzetting te annuleren. De controles met betrekking tot de geldigheid van de gevraagde omzetting worden uitsluitend uitgevoerd door MercatorPenguinServer, dus op het moment van opslaan. Evenzo worden alle customizers die aan dit evenement zijn gekoppeld, uitgevoerd.

Opmerkingen :

  • Zodra de omzetting is aangevraagd, is het niet meer mogelijk om het document op te slaan zonder het te sluiten.
  • Bij een standaardtransfer is deze knop altijd uitgeschakeld.

Overweging over serienummers

Deze functionaliteit is compatibel met het beheer van serienummers. Controles worden alleen uitgevoerd voor niveau 3 (in / uit beheer) en alleen tijdens het bewaren. MercatorPenguin presenteert op geen enkel moment een selectielijst voor serienummers, aangezien de mobiele omgeving het rechtstreeks scannen van een serienummer bevordert.

Om een serienummer te bewerken, moet u een EditEntry toevoegen die aan deze bron is gekoppeld: LINE|NUM_SERIE.
Om een serienummer zichtbaar te maken op het tabblad lijnen, moet u een code toevoegen die lijkt op de volgende code voor de XAML-code van de ListViewCell :

<StackLayout Orientation="Horizontal">   
<Label Text="Serienummer" FontSize="12" Margin="0,0,10,0" />
<Label Text="@NUM_SERIE" FontSize="12" />
</StackLayout>

Wanneer een artikel met een serienummer wordt gescand en Mercator weet dat het een serienummer zal verwachten voor het type transfer dat bezig is, zal de achtergrondkleur van de hierboven vermelde EditEntry veranderen om aan te geven dat deze zone is verplicht. Bovendien is het onder deze omstandigheden niet mogelijk om een regel toe te voegen met een leeg serienummer.

In tegenstelling tot het gebruik van het "in / uit" -beheer van serienummers (niveau 3) in Mercator Desktop, heeft MercatorPenguin geen controle over het gelijktijdig gebruik van hetzelfde serienummer op twee verschillende apparaten, bij het invoeren van een regel. Deze controle wordt alleen uitgevoerd bij het opslaan van de huidige transfer.

Indien het "in / uit" beheer van serienummers geactiveerd is (niveau 3), dan houdt MercatorPenguin rekening met de optie "Serienummer ingeven / zoeken" (SEARCH_SER). Als deze optie JA is, zal MercatorPenguin ook een zoekopdracht uitvoeren in de beschikbare serienummers op basis van de informatie die eraan is doorgegeven en zal het serienummer automatisch worden ingevoerd. Als de gebruiker uitsluitend deze methode gebruikt, kunnen we de EditEntry verwijderen die is gekoppeld aan LINE|NUM_SERIE. Dit zorgt ervoor dat de gebruiker het serienummer dat hij zojuist heeft gescand niet zal wijzigen.


Overwegingen bij Lotbeheer

MercatorPenguin is compatibel met lotbeheer met bepaalde voorbehouden die met name worden opgelegd door de ergonomie die beschikbaar is op een mobiel apparaat.

De weergave van lotinformatie op het tweede tabblad kan worden gedaan via dit type XAML-code van de ListViewCell :

<StackLayout Orientation="Horizontal">   
<Label Text="Lot" FontSize="12" Margin="0,0,10,0" />
<Label Text="@LIB_LOT" FontSize="12" />
</StackLayout>

Standaard toont dit scherm het lotnummer gevolgd door de beschrijving, gescheiden door een dubbele punt. Dit kan worden gewijzigd door de inhoud van de scalaire SQL-functie dbo.LIBARTLOT aan te passen. Het wordt automatisch geïnstalleerd door MercatorPenguinServer maar wordt daarna nooit bijgewerkt. Bijgevolg is het toegestaan om zijn code te wijzigen.

De meest ergonomische en directe manier om een uitgaand lot te verplaatsen, is door de optie "Encoding / Search Lots" op JA (SEARCH_LOT) te zetten. Het scannen van een bestaande lotbeschrijving maakt dus automatische invoer mogelijk van zowel het artikel als het te gebruiken lot.

Het is ook mogelijk om een EditEntry toe te voegen die is gekoppeld aan LINE|ID_LOT en de identificatie van een bestaand lot en gekoppeld aan het eerder geselecteerde artikel in te voeren :

<m:EditEntry Source="LINE|ID_LOT" Placeholder="Lot" />

Als we het gebruik van loten willen veralgemenen, moeten we de mogelijkheden van Mercator gebruiken met betrekking tot het impliciete beheer van loten, evenals de mogelijkheid van MercatorPenguin om elke kolom van de tabel van de lijnen uit te wisselen met Mercator. Het beschreven voorbeeld voor aankopen (zie onderaan deze pagina : MercatorPenguin in schrijfmodus: Documenten van het Commercieel Beheer met lijnen) kan eenvoudig worden omgezet voor Transfers van depots.