QR-codes genereren en deze op ontvangsten voor Saoedi-Arabië afdrukken
Notitie
De functionaliteit die in dit artikel wordt beschreven, is bedoeld ter ondersteuning van de vereisten voor fase 1 van de e-facturerings implementatie in het Koninkrijk Saudi-Arabië. Zie Voor informatie over de functies die zijn bedoeld om de vereisten van fase 2 van de e-factureringsimplementatie in het Koninkrijk van Saudi-Arabië te ondersteunen, genereer en verzend u vereenvoudigde elektronische facturen voor Saudi-Arabië.
Dit artikel biedt een overzicht van de functionaliteit voor het afdrukken van VS-codes die beschikbaar zijn voor Saudi-Arabië in Microsoft Dynamics 365 Commerce.
In een winkel die is gekoppeld aan een rechtspersoon met het primaire adres in Saudi-Arabië, kunnen gebruikers een btw-code afdrukken op het ontvangstbewijs van een verkooptransactie voor een cash-and-carry- of klantorder. De ERS-code bevat de volgende informatie.
Volgorde | Veld | Gegevensbron |
---|---|---|
1 | Bedrijfsnaam | De naam van de rechtspersoon |
2 | Btw-registratienummer bedrijf | Het belastingregistratienummer van de rechtspersoon |
3 | Transactiedatum en -tijd | De datum en tijd van de detailhandel winkeltransactie |
4 | Totaal ontvangstbedrag (inclusief belasting toegevoegde waarde [btw]) | Het totaalbedrag van de detailhandel winkeltransactie |
5 | Het totale btw-bedrag dat in ontvangst is opgenomen | Het totale btw-bedrag van de detailhandel winkeltransactie |
Notitie
Wanneer klantordertransacties worden gemaakt, wordt het totale ontvangstbedrag berekend door de totaalbedragen op tetellen van alle transactieregels die de uit te voeren leveringsmodus gebruiken.
De ERP-code wordt gegenereerd door de basis64-transformatie toe te passen op de transactiegegevens die zijn gecodeerd in de TLV-indeling (Label-Length-Value). Zakat, Tax and Customs Authority (UWCA) levert hulpmiddelen die kunnen worden gebruikt om de ERP-code te valideren. Zie de E-factureringsportal per ERCA voor meer informatie over de vereisten elektronische facturering en VALIDatiemogelijkheden voor ISS-codes.
STREEPJES-codes instellen
U moet de volgende taken uitvoeren om VS-codes te genereren en af te drukken op ontvangsten voor Saudi-Arabië.
- Aangepaste velden configureren zodat ze kunnen worden gebruikt in ontvangstbewijzen voor verkoopontvangstbonnen.
- Ontvangstbewijsindelingen configureren.
- HIERMEE geeft u GEEN-codedimensheden op in commerceparameters.
- Uitbreidingen voor Commerce Runtime (CRT) inschakelen.
Aangepaste velden configureren zodat ze kunnen worden gebruikt in ontvangstbewijsindelingen
U kunt de taaltekst en aangepaste velden configureren die worden gebruikt in aanwijzen pos-indelingen (Pos)-ontvangstbewijzen. Voeg op de pagina Taaltekst de volgende records toe voor de labels van de aangepaste velden voor ontvangstbewijsindelingen. De waarden Taal-id, Tekst-ID en Tekst die in de tabel worden weergegeven, zijn slechts voorbeelden. U kunt ze eenvoudig wijzigen zodat ze aan uw behoeften voldoen. De tekst-ID-waarden die u gebruikt, moeten echter uniek zijn en moeten gelijk zijn aan of hoger zijn dan 900001.
Taal-ID | Tekst-id | Text |
---|---|---|
nl | 900001 | STREEPJESCODE (STREEPJESCODE) |
Notitie
Het standaardbedrijf van de gebruiker die de ontvangstbewijsinstellingen maakt, moet dezelfde rechtspersoon zijn waar de taaltekstinstelling is gemaakt. Als alternatief moeten dezelfde taalteksten worden gemaakt in het standaardbedrijf van de gebruiker en in de rechtspersoon van de winkel waarvoor de instelling is gemaakt.
Voeg op de pagina Aangepaste velden de volgende records toe voor de aangepaste velden voor ontvangstbewijsindelingen. Opmerking: waarden voor Bijschrifttekst-id moeten overeenkomen met de waarden voor tekst-id's die u hebt opgegeven op de pagina Taaltekst.
Name | Type | Tekst-id bijschrift |
---|---|---|
INVOICEQRCODE_SA | Ontvangst | 900001 |
Indelingen voor ontvangstbewijzen configureren
Wijzig voor elke vereiste indeling voor ontvangstbewijzen de waarde van het veld Afdrukgedrag in Altijd afdrukken.
Voeg in de ontwerper van de ontvangstbewijsnotatie het volgende aangepaste veld toe aan de sectie Voettekst van het ontvangstbewijs. Opmerking: veldnamen komen overeen met de taalteksten die u in het vorige gedeelte hebt gedefinieerd.
- ERP-code (ERP) – Met dit veld wordt de ERP-code op de ontvangst afgedrukt.
Zie 'Ontvangstbewijsindelingen instellen en ontwerpen' voor meer informatie over het werken met ontvangstbewijsindelingen.
GEEN-codedimensheden opgeven in commerceparameters
Voeg de volgende configuratieparameters toe op het tabblad Configuratieparameters van de pagina Commerce Parameters:
- StreepjescodeWidth : de breedte van de AFBEELDING MET DE ISS-code, in pixels. Geef de juiste waarde voor de parameter op.
- StreepjescodeHesleutel : de hoogte van de afbeelding van DE ERP-code, in pixels. Geef de juiste waarde voor de parameter op.
Notitie
U moet de waarden van deze configuratieparameters opgeven om ERP-codes af te drukken in ontvangsten. Ondersteuning voor standaardwaarden van de parameters kan in toekomstige updates worden toegevoegd.
CRT-extensies inschakelen
Waarschuwing
Deze localisatiefunctionaliteit kan niet worden gebruikt met de nieuwe onafhankelijke verpakking en uitbreidingsmodel - en Commerce software development kit (SDK).. U moet de vorige versie van de Retail SDK gebruiken op een virtuele machine voor developers (VM) in Microsoft Dynamics Lifecycle Services (LCS). Zie Voor informatie over de localisatiefuncties voor Saudi-Arabië die beschikbaar zijn in Commerce SDK, kunt u vereenvoudigde elektronische facturen genereren en verzenden voor Saudi-Arabië.
Ontwikkelomgeving
Volgen deze stappen om een ontwikkelingsfunctie in omgeving te stellen, zodat u de functionaliteit voor localisatie kunt testen en uitbreiden.
Zoek het extensieconfiguratiebestand voor CRT:
- Retail Server: het bestand heeft de naam commerceruntime.ext.config en vindt u in de map bin\ext onder de locatie van de retailserver (internet Information Services) van de Retail Server.
- Lokaal CRT op het Modern POS: het bestand heeft de naam CommerceRuntime.MPOSOffline.Ext.config en kan worden gevonden onder CRT de brokerlocatie van de lokale client.
Registreer de CRT wijziging in het uitbreidingsconfiguratiebestand, zoals in het volgende voorbeeld wordt weergegeven.
<add source="assembly" value="Microsoft.Dynamics.Commerce.Runtime.ReceiptsSaudiArabia" /> <add source="assembly" value="Microsoft.Dynamics.Commerce.Runtime.ElectronicReporting" />
Productieomgeving
Volg deze stappen om implementeerbare pakketten te maken die Commerce-onderdelen bevatten en om deze pakketten toe te passen in een productieomgeving.
Voeg in de configuratiebestanden commerceruntime.ext.config en CommerceRuntime.MPOSOffline.Ext.config onder de map RetailSdk\Assets de volgende regels toe aan de sectie Samenstelling.
<add source="assembly" value="Microsoft.Dynamics.Commerce.Runtime.ReceiptsSaudiArabia" /> <add source="assembly" value="Microsoft.Dynamics.Commerce.Runtime.ElectronicReporting" />
Open de opdrachtprompt MSBuild voor het Visual Studio programma en voer msbuild uit onder de map Retail SDK om implementeerbare pakketten te maken.
Pas de pakketten toe via LCS of handmatig. Zie Implementeerbare pakketten maken voor meer informatie.
Afbeeldingen van OPOS-codes afdrukken op OPOS-printers
Wanneer u een OPOS-printer (Object Linking and Embeloft for Retail POS) gebruikt, moet u mogelijk extra aanpassingen implementeren ter ondersteuning van printerspecifieke vereisten voor de OPOS-codeafbeelding. Het kan bijvoorbeeld nodig zijn dat u de VS-codeafbeelding van de PNG-indeling moet converteren naar de notatie BMP maken. In deze sectie ziet u een voorbeeld van dit type aanpassing.
Notitie
Dit voorbeeld van aanpassing is getest met de OPOS-printer VAN HET ERP-T88V. Deze moet mogelijk worden aangepast om verschillende printermodellen te ondersteunen.
Volgen deze stappen om een nieuwe extensie te maken en deze toe te voegen aan omgeving.
Installeer de Retail SDK. Zie Retail software development kit (SDK) voor meer informatie.
Gebruik in de Retail SDK de volgende code, gebaseerd op uw commerceversie, om een C# project te maken onder de CommerceRuntimeSamples.sln-oplossing in RetailSdk\SampleExtensions\CommerceRuntime.
<Project Sdk="Microsoft.NET.Sdk"> <Import Project="..\..\..\BuildTools\Microsoft.Dynamics.RetailSdk.Build.props" /> <Import Project="..\..\..\BuildTools\Common.props" /> <Import Project="..\..\..\BuildTools\Microsoft.Dynamics.RetailSdk.Build.settings" /> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> <AssemblyName>$(AssemblyNamePrefix).Commerce.Runtime.QrCodeExtension</AssemblyName> <RootNamespace>Contoso.Commerce.Runtime.QrCodeExtension</RootNamespace> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> </PropertyGroup> <Import Project="..\..\..\BuildTools\Microsoft.Dynamics.RetailSdk.Build.targets" /> <ItemGroup> <PackageReference Include="Microsoft.Dynamics.Commerce.Runtime.Framework" Version="$(FrameworkRepoPackagesVersion)" /> <PackageReference Include="Microsoft.Dynamics.Commerce.Runtime.Services.Messages" Version="$(ChannelRepoPackagesVersion)" /> <PackageReference Include="System.Drawing.Common" Version="4.7.0" /> </ItemGroup> <ItemGroup> <Reference Include="Microsoft.Dynamics.Commerce.Runtime.ElectronicReporting"> <HintPath>..\..\..\..\..\nuget packages\microsoft.dynamics.commerce.runtime.electronicreporting.9.35.21321.4\lib\netstandard2.0\Microsoft.Dynamics.Commerce.Runtime.ElectronicReporting.dll</HintPath> </Reference> </ItemGroup> <ItemGroup> <Folder Include="Properties\" /> </ItemGroup> </Project>
U moet ook de waarde van het HintPath-element wijzigen om naar Microsoft.Dynamics.Commerce.Runtime.ElectronicReporting.DLL bibliotheek onder de locatie van de IIS Retail Server-site.
Gebruik de volgende code, gebaseerd op uw commerce versie, om een uitbreidingsklasse te maken.
/** * SAMPLE CODE NOTICE * * THIS SAMPLE CODE IS MADE AVAILABLE AS IS. MICROSOFT MAKES NO WARRANTIES, WHETHER EXPRESS OR IMPLIED, * OF FITNESS FOR A PARTICULAR PURPOSE, OF ACCURACY OR COMPLETENESS OF RESPONSES, OF RESULTS, OR CONDITIONS OF MERCHANTABILITY. * THE ENTIRE RISK OF THE USE OR THE RESULTS FROM THE USE OF THIS SAMPLE CODE REMAINS WITH THE USER. * NO TECHNICAL SUPPORT IS PROVIDED. YOU MAY NOT DISTRIBUTE THIS CODE UNLESS YOU HAVE A LICENSE AGREEMENT WITH MICROSOFT THAT ALLOWS YOU TO DO SO. */ using System.Drawing; using System.Drawing.Imaging; using System.IO; namespace Contoso { namespace Commerce.Runtime.QrCodeExtension { using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Dynamics.Commerce.Runtime; using Microsoft.Dynamics.Commerce.Runtime.Messages; using Microsoft.Dynamics.Commerce.Runtime.Services.Messages; /// <summary> /// The extension for QR code printing. /// </summary> internal class QrCodeServiceExtension : IRequestHandlerAsync { /// <summary> /// Printer horizontal resolution for image. /// </summary> private const float PrinterXDpi = 60f; /// <summary> /// Printer vertical resolution for image. /// </summary> private const float PrinterYDpi = 90f; /// <summary> /// Printer pixel format for image. /// </summary> private const PixelFormat PrinterPixelFormat = PixelFormat.Format8bppIndexed; /// <summary> /// Gets the collection of supported request types by this service. /// </summary> public IEnumerable<Type> SupportedRequestTypes { get => new[] {typeof(EncodeQrCodeServiceRequest)}; } /// <summary> /// Processes the request. /// </summary> /// <param name="request">The request.</param> /// <returns>The response.</returns> public async Task<Response> Execute(Request request) { ThrowIf.Null(request, nameof(request)); switch (request) { case EncodeQrCodeServiceRequest encodeQrCodeServiceRequest: { EncodeQrCodeServiceResponse nextResponse = await this.ExecuteNextAsync<EncodeQrCodeServiceResponse>(encodeQrCodeServiceRequest).ConfigureAwait(false); if (nextResponse != null) { var qrCodeBmp = string.IsNullOrWhiteSpace(nextResponse.QRcode) ? nextResponse.QRcode : ConvertToGenericCompatibilityImage(nextResponse.QRcode); return new EncodeQrCodeServiceResponse(qrCodeBmp); } return nextResponse; } } return new NotHandledResponse(); } /// <summary> /// Converts QR code image from any format to compatible with printer. /// </summary> /// <param name="base64data">Base64 image.</param> /// <returns>Image that Compatible with printer.</returns> private static string ConvertToGenericCompatibilityImage(string base64data) { string convertedQrCode = base64data; byte[] imageBytes = Convert.FromBase64String(convertedQrCode); using (MemoryStream msOriginal = new MemoryStream(imageBytes)) using (MemoryStream msConverted = new MemoryStream()) { var bitmapOriginal = new Bitmap(msOriginal); if (!IsFormatCompatible(bitmapOriginal) || !AreResolutionAndPixelFormatCompatible(bitmapOriginal)) { var bitmapConverted = bitmapOriginal; if (!AreResolutionAndPixelFormatCompatible(bitmapOriginal)) { var rectangle = new Rectangle(0, 0, bitmapOriginal.Width, bitmapOriginal.Height); bitmapConverted = bitmapOriginal.Clone(rectangle, PrinterPixelFormat); bitmapConverted.SetResolution(PrinterXDpi, PrinterYDpi); } bitmapConverted.Save(msConverted, ImageFormat.Bmp); } convertedQrCode = Convert.ToBase64String(msConverted.ToArray()); } return convertedQrCode; } /// <summary> /// Verifies if the resolution and pixel format of bitmap are compatible with printer requirements. /// </summary> /// <param name="source">Bitmap.</param> /// <returns>True if compatible; otherwise false.</returns> private static bool AreResolutionAndPixelFormatCompatible(Bitmap source) { return source.VerticalResolution == PrinterYDpi && source.HorizontalResolution == PrinterXDpi && source.PixelFormat == PrinterPixelFormat; } /// <summary> /// Verifies if the format of bitmap is compatible with printer requirements. /// </summary> /// <param name="source">Bitmap.</param> /// <returns>True if compatible; otherwise false.</returns> private static bool IsFormatCompatible(Bitmap source) { return source.RawFormat.Equals(ImageFormat.Bmp); } } } }
Voeg in de configuratiebestanden commerceruntime.ext.config en CommerceRuntime.MPOSOffline.Ext.config onder de map RetailSdk\Assets de volgende regels toe aan de sectie Samenstelling.
<add source="assembly" value="Contoso.Commerce.Runtime.QrCodeExtension" /> <add source="assembly" value="Microsoft.Dynamics.Commerce.Runtime.ReceiptsSaudiArabia" /> <add source="assembly" value="Microsoft.Dynamics.Commerce.Runtime.ElectronicReporting" />
Voeg de volgende regels toe in het configuratiebestand voor aanpassing van pakketinstellingen onder de map BuildTools om CRT de uitbreidingen op te nemen in de implementeerbare pakketten.
<ISV_CommerceRuntime_CustomizableFile Include="$(SdkReferencesPath)\Contoso.Commerce.Runtime.QrCodeExtension.dll" />
Start de MSBuild-opdrachtprompt voor het hulpprogramma Visual Studio en voer msbuild uit onder de map Retail SDK om implementeerbare pakketten te maken.
Pas de pakketten toe via LCS of handmatig. Zie Implementeerbare pakketten maken voor meer informatie.