MIAS VIES tjekker momsnummer i Navision / BC365

Estimeret læsetid: 12 minutter

Hvorfor skal jeg tjekke et momsnummer (VAT-ID)?

Nå... fordi når du læser denne tekst her, sidder du i Tyskland eller Østrig... og der bliver EU-reglerne (delvist også allerede tyske eller østrigske forordninger) taget alvorligt. Heldigvis gør Business Central 365 (BC365 eller også Navision Financials) det - i princippet - ret nemt for dig.

Leverandører af elektroniske tjenester, såsom opdateringer til antivirusprogrammer, er forpligtet til at opkræve moms for denne service. Hvis køberen af disse tjenester er momsregistreret, er det kunden og ikke tjenesteudbyderen, der skylder momsen. Derfor kan udbyderen bede om kundens momsregistreringsnummer for at afklare, om de skal opkræve moms, eller om kunden skal indberette momsen. Hvis kunden ikke har et gyldigt momsregistreringsnummer, opkræver tjenesteudbyderen momsen.

Og hos dine leverandører (men fra 2025 nok også for kunder, jeg kunne ikke finde den artikel igen) er du simpelthen forpligtet til at kontrollere din forretningspartners momsregistreringsnummer og også dokumentere denne kontrol! Bureaukratireduktion... Ved et ugyldigt momsregistreringsnummer kan (og vil) fradrag for købsmoms på indkøbsfakturaen nægtes dig – dette gælder både for indenlandske og udenlandske leverandører!

Endnu værre: Hvis du fakturerer (varer eller tjenester) til en erhvervskunde med et forkert momsregistreringsnummer, vil skattemyndighederne opkræve momsen hos dig.

Hvis de ikke overholder deres pligt til at kontrollere momsregistreringsnummerets korrekthed, og det viser sig, at det momsregistreringsnummer, som deres kunde har angivet, var forkert, skal du forvente efterbetaling af skat. For at undgå denne risiko, anbefales det kraftigt at kontrollere modtagerens momsregistreringsnummer.

Årsagen er simpel: Stadig mere svindel med moms, f.eks. den stadig mulige og derfor stadig populære momskarussel.

Hvad er VIES?

VIES (System til udveksling af momsoplysninger) er en søgmaskine (ikke en database!) fra Europa-Kommissionen. Når der foretages en søgning via VIES, hentes data fra de nationale databaser for moms. Når du derfor kontrollerer et momsregistreringsnummer i BC365 eller Navision, sendes denne anmodning først fra Navision til VIES, VIES spørger derefter, afhængigt af destinationslandet, det lokale informationssystem og returnerer derefter svaret til dig via REST eller SOAP (som anmodningen). Resultatet er derefter en såkaldt kvalificeret kontrol af momsregistreringsnummeret, da du både har tjekket eksistensen af momsnummeret i Business Central eller Navision og også kan bevise det gennem protokollen , fordi denne metode også registrerer navnet og adressen på ejeren af det verificerede momsregistreringsnummer i Business Central (eller Navision) og dermed kan sammenlignes med dine indtastede data. Dette er især vigtigt, hvis en revisor eller endda en skatterådgiver tvivler på en af dine debitorer eller kreditorer. På grund af GDPdU anmelder Idea automatisk denne tvivl til revisoren.

Hvad er det online system til informationsudveksling af moms (MIAS)?

MIAS er et system til elektronisk validering af momsnummeret på erhvervsdrivende, der er registreret i Den Europæiske Union for grænseoverskridende transaktioner af varer eller tjenester.
Når du vil verificere din kundes momsnummer i en anden medlemsstat / Nordirland via MIAS-webapplikationen, sendes denne anmodning fra Business Central 365 (eller Navision) via en sikker forbindelse til den relevante nationale database for at kontrollere, om nummeret er registreret der. Hvis ja, vises status „gyldig“. Hvis nej, vises status „ugyldig“.

Afhængigt af de gældende databeskyttelsesregler oplyser nogle medlemsstater også navn og adresse på indehaverne af momsnumrene, der er registreret i de nationale databaser.

Momsnummeret er nødvendigt, hvis man f.eks. som virksomhed foretager EU-dækkende indkøb/salg. For at kontrollere, om køberen er „momsregistreret“, kan nummeret kontrolleres direkte med EU via en API.

Søgeresultatet i VIES viser kun, om momsoplysningerne er tilgængelige!
Mulige årsager til negativ feedback:
Momsregistreringsnummeret eksisterer ikke.
Momsregistreringsnummeret er endnu ikke aktiveret.
Registreringen er endnu ikke afsluttet

Hvad sker der, hvis et momsregistreringsnummer ikke bekræftes?
Hvis kunden angiver at være momsregistreret, men verifikationen via VIES-systemet ikke bekræfter dette, kan kunden anmode om en verificering hos sit lands skatteforvaltning. Derudover kan det være påkrævet at blive registreret for grænseoverskridende transaktioner inden for EU. Proceduren varierer fra land til land og ligger uden for rammerne af denne vejledning.

Disse ændringer vil ikke blive opdateret med det samme i de nationale databaser og dermed heller ikke i VIES. Nummeret kan muligvis verificeres „i morgen“.

Opsætning af momsnummerkontrol (Momsnr. kontrol) i Navision / BC365

Navision Financials 2019R2, 2.01,3.70 osv. Navision 2013R2 osv.

I disse versioner er der endnu ikke en automatiseret momskontrol. Men denne kontrol kan naturligvis også efterinstalleres her. Til RTC-versionerne finder du de nødvendige kodegrupper i slutningen af denne artikel. Til Classic Client-versionerne er SOAP ikke det første valg, især fordi SOAP allerede er officielt afviklet (men stadig fungerer i starten af 2026!). Se her.
Kontakt mig, hvis du har brug for hjælp her.
Den automatiske validering af momsnummer kan efterinstalleres i enhver Navision-version, men så er det lettere via REST API. Hvis du ikke længere har en vedligeholdelseskontrakt (der kræves 2 nye tabeller og 3 codeunits til de originale Navision/BC365-objekter), så kan vi også klare det for dig direkte i Navision-standarden!

Navision 2015, 2016, 2017

Her aktiverer du kontrollen ved at indtaste adressen på VIES (https://ec.europa.eu/taxation_customs/vies/services/checkVatService) i feltet „Momsnummer. kontrol URL“ under Bogholderi > Rapportering > Opsætning.

Skærmbillede fra Navision versionerne 2015, 2016, 2017 til indtastning af URL'en for momsnummerkontrol med VIES

(Bemærk: I Navision 2015 er jeg ikke helt sikker, jeg har ikke en database klar til at tjekke lige nu. Hvis denne indstilling mangler i din Navision 2015, så gælder ovenstående afsnit. En kort tilbagemelding ville være værdsat, så kan jeg om nødvendigt rette dette afsnit.)

Navision 2016, 2017 (og eventuelt 2015?) gemmer kun „Momsnummer findes“ og „Registreret navn“ og „Registreret adresse“ i loggen. Hvis du ønsker de yderligere felter fra de efterfølgende versioner her (bekræftet gade, bekræftet postnummer, bekræftet by og om den bekræftede adresse stemmer overens med den adresse, du har gemt), så kontakt mig gerne. Svaret fra VIES er altid det samme, så det handler „kun“ om at gøre dette svar synligt hos jer.

Navision 2018, BC365 (Business Central 365)

Logikken er blevet markant ændret her, der er nu en baggrundstjeneste til kontrol. Bemærk! Skiftet skete delvist først med hotfix 35 i Navision 2018/BC14!

Denne tjeneste aktiveres under „Indstilling af momregistreringstjeneste“:

For at gøre det hele mere spændende hedder den faktiske opsætningsside sådan her

Skærmbillede af Navision 2018/BC14 eller generelt BC365 Business Central 365 til kontrol af momsnummer

„Normalt“ behøver du ikke at lave flere end disse opsætninger, afhængigt af din Navision- eller BC365-version.

Du kan derefter klikke på de tre prikker [...] ved siden af momsregistreringsnummeret hos debitor eller kreditor og få valideringsresultatet tilbage:

Screenshot fra Navision med en succesfuld momsregistreringsnummer-verifikation. Navision logger enhver verifikation i overensstemmelse med loven

Via batchbehandling af momsnumre kan du også få hundreder af momsnumre automatisk kontrolleret.

Så vidt, så godt… men hvad nu, hvis det går i stå?

Meget ofte oplever brugere af Navision 2015, 2016 og 2017 versionerne, men også Navision 2018 og BC14, denne fejlmeddelelse

Fjernserveren meldte en fejl: (400) Ugyldig anmodning.

Forbindelsen til fjernservicen kunne ikke oprettes. Fjernserveren returnerede en fejl: (400) Ugyldig anmodning. Service-URL: https://ec.europa.eu/taxation_customs/vies/services/checkVatService

Forbindelse til fjernservicen kunne ikke oprettes. Fjernserveren returnerede en fejl: (400) Bad Request. Service-URL: https://ec.europa.eu/taxation_customs/vies/services/checkVatService

Eller forespørgslen giver simpelthen slet intet resultat / intet svar. Hvis du bruger mine rettelser/tilpasninger, finder du i Navision-tjenestemappen under c:\temp de to filer VatIDrequest.txt med SOAP-forespørgslen og VatIDresult.txt med SOAP-svaret, som ofte hjælper videre.

Hvis du allerede bruger min logbog, så finder du forespørgslen og svarene i loggen.

Ved ovenstående fejbesked skal codeunits 248 (Timeout & ContentType) og 249 (Type af XML-analyse) som regel opdateres, og underfunktionen SetContentType skal tilføjes i 1290.
Da slutbrugeren typisk ikke har adgang til disse to codeunits, har jeg undladt en detaljeret beskrivelse her. Kildekoderne findes længere nede.

Tabel 226 findes ikke, eller „Metadataobjektet Tabel 226 blev ikke fundet“

Meget mærkværdigt! Der findes en Navision-version, hvor tabellerne 226 og 227 og de tilhørende sider simpelthen ikke eksisterer! Jeg tror, det kun vedrører version 14.0.45012.0, i hvert fald har jeg endnu ikke modtaget denne fejlmeddelelse i andre versioner. Tilsvarende enkel er løsningen: Fra Cu35 (Cumulative Update) af version 11.0.45373 installeres patches for KB375980 – det er tilstrækkeligt, hvis disse objekter indlæses/opdateres:
Codeunits 1751 248 249
Menu 1010
Sider 246 247 248 249
Tabeller 226, 227, 248, 249

Kumulativ opdatering 35 til Microsoft Dynamics NAV 2018 (build 45373) – Microsoft Support

Fejl under kald af System.Xml.XmlDocumentLoad med følgende besked: ‚>‘ er en uventet token

Her skal du bare indbygge
SOAPWebServiceRequestMgt.SetContentType(‚text/xml; charset=utf-8‘);
i CU248:

Skærmbillede til VIES/Momsnr. kontrol i Navision Financials/Business Central 365 med beskeden (uventet token)

Tip: Tag den længere timeout med med det samme, i ældre versioner er den stadig sat til 5000 (5 sekunder). Se de to følgende fejlmeddelelser.

TIMEOUT

Her bliver forespørgselsfunktionerne fra VIES simpelthen overbelastet. Prøv igen senere. Se også „Hvad er VIES“ helt øverst.

MS_MAX_CONCURRENT_REQ

Også her er EU's servere overbelastede. Du finder her og her meget udførlige forklaringer, ...på hvordan det rod i det hele taget fungerer... eller, ofte bedre: burde fungere 🙂

I standard Navision får du ingen yderligere information om disse to fejl, du skal bare prøve igen senere. Ofte virker det allerede et par minutter senere. Se ovenfor: Med min ændring finder du i c:\temp\ forespørgslen og svaret i XML-tekstform, det hjælper ofte med at besvare netop dette spørgsmål.

Om natten mellem 23:00 og 05:00 kan tjenesten være helt utilgængelig, som dokumenteret her:

Bekræftelse af udenlandske momsregistreringsnumre

Fejlløsning med kunstig intelligens

Fejl ved nulværdier: I ældre versioner (f.eks. NAV 2009/5.0) kan rapport 11007 (Moms-Vies erklæring skat-DE) ikke håndtere nulværdier korrekt. Der kræves en hotfix.

Mhmnjaja… „Tippet“ er rent teknisk korrekt… men desværre har det absolut intet at gøre med momsnummerverifikationen, den nævnte rapport 11007 kan ikke engang sende den oprettede XML-fil via SOAP eller RestAPi 🙂
Du finder hotfixet her:
Rapporten „VAT-Vies Declaration Tax-DE“ (11007) håndterer ikke nulværdien korrekt i den tyske version af Microsoft Dynamics NAV – Microsoft Support

Verifikation: Ved brug af API-nøgler (hvis nødvendigt) skal brugernavn og adgangskode være korrekt registreret i CA (Certificate Authority).

VIES kræver ingen verifikation.

Ellers er svarene fra f.eks. Copilot snarere ... tja. For ikke at bruge ordet „skrald“ skriver jeg lige „begrænset nyttige“ 🙂

Min mening om kunstig intelligens i Navision har jeg jo allerede ytret her . Men jeg bruger gerne Copilots billedfunktion! Selv dette indlægsbillede er lavet med Copilot. Ellers er jeg dog i øjeblikket (februar 2026) slet ikke bange for at miste mit job til nogen LLM/KI som ChatGPT eller en anden 🙂

Opdaterede codeunits fra version 2016

Hvis I har adgang til codeunits 248, 249 og 1290, lister jeg de korrigerede indhold her, så ved I jo allerede, hvad der skal gøres 🙂

OBJECT Codeunit 248 VAT Lookup Ext. data Hndl
{
 OBJEKT-EGENSKABER
 {
 Dato=09.02.26;
 Time=13:19:58;
 Modificeret=Ja;
 Versionsliste=NAVW19.00;
 }
 EGENSKABER
 {
 TableNo=249;
 Tilladelser=TableData 249=rimd;
 OnRun=BEGIN
 VATRegistrationLog := Rec;

 LookupVatRegistrationFromWebService(TRUE);

 Rec := VATRegistrationLog;
 SLUT;

 }
 CODE
 {
 VAR
 NamespaceTxt@1003 : TextConst '@@@={Locked};DEU=urn:ec.europa.eu:taxud:vies:services:checkVat:types;ENU=urn:ec.europa.eu:taxud:vies:services:checkVat:types';
 VATRegistrationLog@1000 : Registrering 249;
 VATRegistrationLogMgt@1002 : Kodeenhed 249;
 VatRegNrValidationWebServiceURLTxt@1001 : TextConst '@@@={Locked};DEU=http://ec.europa.eu/taxation_customs/vies/services/checkVatService;ENU=http://ec.europa.eu/taxation_customs/vies/services/checkVatService';
 MissingWebServiceURLErr@1004 : TextConst 'DEU=URL'en til validering af momsregistreringsnummer er ikke angivet i vinduet til opsætning af finansbogholderi;ENU=URL'en til validering af momsregistreringsnummer er ikke angivet i vinduet til opsætning af hovedbogholderi";

 LOCAL PROCEDURE LookupVatRegistrationFromWebService@7(ShowErrors@1000 : Boolean);
 VAR
 RequestBodyTempBlob@1002 : Record 99008535;
 BEGIN
 RequestBodyTempBlob.INIT;

 SendRequestToVatRegistrationService(RequestBodyTempBlob,ShowErrors);

 RequestBodyTempBlob.Blob.EXPORT("c:\temp\VatIDresult.txt');

 InsertLogEntry(RequestBodyTempBlob);

 COMMIT;
 SLUT;

 LOCAL PROCEDURE SendRequestToVatRegistrationService@1(VAR BodyTempBlob@1004 : Record 99008535;ShowErrors@1003 : Boolean);
 VAR
 GeneralLedgerSetup@1005 : Record 98;
 SOAPWebServiceRequestMgt@1001 : Kodeenhed 1290;
 ResponseInStream@1002 : InStream;
 InStream@1006 : InStream;
 ResponseOutStream@1008 : OutStream;
 BEGIN
 PrepareSOAPRequestBody(BodyTempBlob);

 BodyTempBlob.Blob.CREATEINSTREAM(InStream);

 GeneralLedgerSetup.GET;
 IF GeneralLedgerSetup.'VAT Reg. No. Validation URL' = "" THEN
 ERROR(MissingWebServiceURLErr);
 SOAPWebServiceRequestMgt.SetGlobals(InStream,GeneralLedgerSetup. 'VAT Reg. No. Validation URL',"",'');
 SOAPWebServiceRequestMgt.DisableHttpsCheck;
 SOAPWebServiceRequestMgt.SetTimeout(60000);
 SOAPWebServiceRequestMgt.SetContentType('text/xml; charset=utf-8');
 IF SOAPWebServiceRequestMgt.SendRequestToWebService THEN BEGIN
 SOAPWebServiceRequestMgt.GetResponseContent(ResponseInStream);

 BodyTempBlob.Blob.CREATEOUTSTREAM(ResponseOutStream);
 COPYSTREAM(ResponseOutStream,ResponseInStream);
 SLUT ELSE
 IF ShowErrors THEN
 SOAPWebServiceRequestMgt.ProcessFaultResponse('');
 SLUT;

 LOCAL PROCEDURE PrepareSOAPRequestBody@12(VAR BodyTempBlob@1000 : Record 99008535);
 VAR
 XMLDOMMgt@1006 : Codeunit 6224;
 BodyContentInputStream@1004 : InStream;
 BodyContentOutputStream@1005 : OutStream;
 BodyContentXmlDoc@1003 : DotNet ''System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlDocument';
 EnvelopeXmlNode@1012 : DotNet '"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlNode';
 CreatedXmlNode@1001 : DotNet '"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlNode';
 BEGIN
 BodyTempBlob.Blob.CREATEINSTREAM(BodyContentInputStream);
 BodyContentXmlDoc := BodyContentXmlDoc.XmlDocument;

 XMLDOMMgt.AddRootElementWithPrefix(BodyContentXmlDoc,'checkVatApprox",'',NamespaceTxt,EnvelopeXmlNode);
 XMLDOMMgt.AddElement(EnvelopeXmlNode,'countryCode',VATRegistrationLog.GetCountryCode,NamespaceTxt,CreatedXmlNode);
 XMLDOMMgt.AddElement(EnvelopeXmlNode,'vatNumber',VATRegistrationLog.GetVATRegNo,NamespaceTxt,CreatedXmlNode);
 XMLDOMMgt.AddElement(
 EnvelopeXmlNode,'requesterCountryCode',VATRegistrationLog.GetCountryCode,NamespaceTxt,CreatedXmlNode);
 XMLDOMMgt.AddElement(
 EnvelopeXmlNode,'requesterVatNumber',VATRegistrationLog.GetVATRegNo,NamespaceTxt,CreatedXmlNode);


 CLEAR(BodyTempBlob.Blob);
 BodyTempBlob.Blob.CREATEOUTSTREAM(BodyContentOutputStream);
 BodyContentXmlDoc.Save(BodyContentOutputStream);
 BodyTempBlob.Blob.EXPORT('c:\temp\VatIDrequest.txt');
 SLUT;

 LOCAL PROCEDURE InsertLogEntry@4(ResponseBodyTempBlob@1000 : Record 99008535);
 VAR
 XMLDocOut@1012 : DotNet ''System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlDocument';
 InStream@1009 : InStream;
 BEGIN
 ResponseBodyTempBlob.Blob.CREATEINSTREAM(InStream);
 XMLDocOut := XMLDocOut.XmlDocument;
 XMLDocOut.Load(InStream);

 VATRegistrationLogMgt.LogVerification(VATRegistrationLog,XMLDocOut,NamespaceTxt);
 SLUT;

 PROCEDURE GetVATRegNrValidationWebServiceURL@5() : Text[250];
 BEGIN
 EXIT(VatRegNrValidationWebServiceURLTxt);
 SLUT;

 BEGIN
 END.
 }
}

OBJECT Codeunit 249 VAT Registration Log Mgt.
{
 OBJEKT-EGENSKABER
 {
 Dato=09.02.26;
 Time=14:57:32;
 Modificeret=Ja;
 Versionsliste=NAVW19.00;
 }
 EGENSKABER
 {
 Tilladelser=TableData 249=rimd;
 OnRun=BEGIN
 SLUT;

 }
 CODE
 {

 PROCEDURE LogCustomer@1(Customer@1000 : Record 18);
 VAR
 VATRegistrationLog@1001 : Post 249;
 CountryCode@1002 : Kode[10];
 BEGIN
 CountryCode := GetCountryCode(Customer. 'Country/Region Code");
 IF NOT IsEUCountry(CountryCode) THEN
 EXIT;

 IndsætVATRegistrationLog(
 Customer. "Momsregistreringsnummer",CountryCode,VATRegistrationLog. "Kontotype"::Customer,Customer. "Nr.");
 SLUT;

 PROCEDURE LogVendor@2(Vendor@1002 : Record 23);
 VAR
 VATRegistrationLog@1001 : Record 249;
 CountryCode@1000 : Kode[10];
 BEGIN
 CountryCode := GetCountryCode(Vendor. "Country/Region Code");
 IF NOT IsEUCountry(CountryCode) THEN
 EXIT;

 IndsætVATRegistrationLog(
 Vendor. "Momsregistreringsnr.",CountryCode,VATRegistrationLog. "Kontotype"::Vendor,Vendor. "Nr.");
 SLUT;

 PROCEDURE LogContact@8(Contact@1000 : Record 5050);
 VAR
 VATRegistrationLog@1001 : Record 249;
 CountryCode@1002 : Kode[10];
 BEGIN
 CountryCode := GetCountryCode(Contact. "Country/Region Code");
 IF NOT IsEUCountry(CountryCode) THEN
 EXIT;

 IndsætVATRegistrationLog(
 Contact. "Momsregistreringsnr.",CountryCode,VATRegistrationLog. "Kontotype"::Contact,Contact. "Nr.");
 SLUT;

 PROCEDURE LogVerification@3(VAR VATRegistrationLog@1000 : Record 249;XMLDoc@1001 : DotNet ""System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlDocument';Namespace@1003 : Text);
 VAR
 XMLDOMMgt@1002 : Kodeenhed 6224;
 FoundXmlNode@1004 : DotNet '"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlNode';
 NamePathTxt@5326066 : TextConst '@@@={Locked};DEU=descendant::vat:traderName;ENU=descendant::vat:traderName";
 AddressPathTxt@5326065 : TextConst '@@@={Locked};DEU=descendant::vat:traderAddress;ENU=descendant::vat:traderAddress';
 PostcodePathTxt@5326064 : TextConst '@@@={Locked};DEU=descendant::vat:traderPostcode;ENU=descendant::vat:traderPostcode';
 StreetPathTxt@5326063 : TextConst '@@@={Locked};DEU=descendant::vat:traderStreet;ENU=descendant::vat:traderStreet';
 CityPathTxt@5326062 : TextConst '@@@={Locked};DEU=descendant::vat:traderCity;ENU=descendant::vat:traderCity';
 ValidPathTxt@5326070 : TextConst '@@@={Locked};DEU=descendant::vat:valid;ENU=descendant::vat:valid';
 RequestIdPathTxt@5326069 : TextConst 'DEU=descendant::vat:requestIdentifier';
 BEGIN
 IF NOT XMLDOMMgt.FindNodeWithNamespace(XMLDoc.DocumentElement,ValidPathTxt,'vat',Namespace,FoundXmlNode) THEN
 EXIT;

 CASE LOWERCASE(FoundXmlNode.InnerText) OF
 'true':
 BEGIN
 VATRegistrationLog.'Entry No.' := 0;
 VATRegistrationLog.Status := VATRegistrationLog.Status::Valid;
 VATRegistrationLog. "Verificeret dato" := CURRENTDATETIME;
 VATRegistrationLog."User ID" := USERID;

 VATRegistrationLog.dmssysDocumentNo := COPYSTR(ExtractValue(RequestIdPathTxt,XMLDoc,Namespace),1,
 MAXSTRLEN(VATRegistrationLog.dmssysDocumentNo));

 //XMLDOMMgt.FindNodeWithNamespace(XMLDoc.DocumentElement,NamePathTxt,"vat",Namespace,FoundXmlNode);
 VATRegistrationLog.'Verified Name' := ExtractValue(NamePathTxt,XMLDoc,Namespace);
 //COPYSTR(FoundXmlNode.InnerText,1,MAXSTRLEN(VATRegistrationLog. "Verified Name"));
 //XMLDOMMgt.FindNodeWithNamespace(XMLDoc.DocumentElement,AddressPathTxt,"vat",Namespace,FoundXmlNode);
 VATRegistrationLog.'Verified Address' := ExtractValue(AddressPathTxt,XMLDoc,Namespace);
 //COPYSTR(FoundXmlNode.InnerText,1,MAXSTRLEN(VATRegistrationLog. "Verified Address"));

 VATRegistrationLog.INSERT(TRUE);
 SLUT;
 "false":
 BEGIN
 VATRegistrationLog. 'Entry No.' := 0;
 VATRegistrationLog."Verificeret dato" := CURRENTDATETIME;
 VATRegistrationLog.Status := VATRegistrationLog.Status::Invalid;
 VATRegistrationLog. "User ID" := USERID;
 VATRegistrationLog. "Verificeret navn" := "";
 VATRegistrationLog. 'Verificeret adresse' := "";

 VATRegistrationLog.INSERT(TRUE);
 END;
 END;
 END;

 LOCAL PROCEDURE LogUnloggedVATRegistrationNumbers@10();
 VAR
 Kunde@1000 : Post 18;
 Vendor@1001 : Post 23;
 Contact@1002 : Post 5050;
 VATRegistrationLog@1003 : Post 249;
 BEGIN
 Customer.SETFILTER('Momsregistreringsnummer',"%1",'');
 IF Customer.FINDSET THEN
 REPEAT
 VATRegistrationLog.SETRANGE('Momsregistreringsnr.',Customer. "Momsregistreringsnr.");
 IF VATRegistrationLog.ISEMPTY THEN
 LogCustomer(Customer);
 UNTIL Customer.NEXT = 0;

 Vendor.SETFILTER("Momsregistreringsnummer","%1",'');
 IF Vendor.FINDSET THEN
 REPEAT
 VATRegistrationLog.SETRANGE('Momsregistreringsnr.',Vendor. "Momsregistreringsnr.");
 IF VATRegistrationLog.ISEMPTY THEN
 LogVendor(Vendor);
 UNTIL Vendor.NEXT = 0;

 Contact.SETFILTER("Momsregistreringsnummer","%1",'');
 IF Contact.FINDSET THEN
 REPEAT
 VATRegistrationLog.SETRANGE('Momsregistreringsnr.',Contact. "Momsregistreringsnr.");
 IF VATRegistrationLog.ISEMPTY THEN
 LogContact(Contact);
 UNTIL Contact.NEXT = 0;

 COMMIT;
 SLUT;

 LOCAL PROCEDURE InsertVATRegistrationLog@16(VATRegNo@1002 : Text[20];CountryCode@1000 : Code[10];AccountType@1001 : Option;AccountNo@1003 : Code[20]);
 VAR
 VATRegistrationLog@1004 : Post 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 INIT;
 "VAT Registration No." = VATRegNo;
 "Country/Region Code" := CountryCode;
 "Kontotype" := AccountType;
 "Account No." := AccountNo;
 "Bruger-id" := USERID;
 INSERT(TRUE);
 SLUT;
 SLUT;

 PROCEDURE DeleteCustomerLog@4(Customer@1000 : Record 18);
 VAR
 VATRegistrationLog@1001 : Post 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 SETRANGE("Kontotype", "Kontotype"::Kunde);
 SETRANGE("Kontonr.",Kunde. "Nr.");
 DELETEALL;
 END;
 SLUT;

 PROCEDURE DeleteVendorLog@5(Vendor@1000 : Record 23);
 VAR
 VATRegistrationLog@1001 : Post 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 SETRANGE("Account Type", "Account Type"::Vendor);
 SETRANGE("Account No.",Vendor. "No.");
 DELETEALL;
 END;
 END;

 PROCEDURE DeleteContactLog@9(Contact@1000 : Record 5050);
 VAR
 VATRegistrationLog@1001 : Post 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 SETRANGE("Kontotype", "Kontotype"::Kontakt);
 SETRANGE("Kontonr.",Kontakt. "Nr.");
 DELETEALL;
 END;
 SLUT;

 PROCEDURE AssistEditCustomerVATReg@7(Customer@1000 : Record 18);
 VAR
 VATRegistrationLog@1001 : Post 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 IF ISEMPTY THEN
 LogUnloggedVATRegistrationNumbers;
 SETRANGE("Kontotype", "Kontotype"::Kunde);
 SETRANGE("Kontonr.",Kunde."Nr.");
 PAGE.RUNMODAL(PAGE:: "Momsregistreringslog",VATRegistrationLog);
 END;
 SLUT;

 PROCEDURE AssistEditVendorVATReg@6(Vendor@1001 : Record 23);
 VAR
 VATRegistrationLog@1000 : Post 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 IF ISEMPTY THEN
 LogUnloggedVATRegistrationNumbers;
 SETRANGE("Kontotype", "Kontotype"::Leverandør);
 SETRANGE("Account No.",Vendor. "No.");
 PAGE.RUNMODAL(PAGE:: "Momsregistreringslog",VATRegistrationLog);
 END;
 SLUT;

 PROCEDURE AssistEditContactVATReg@11(Contact@1001 : Record 5050);
 VAR
 VATRegistrationLog@1000 : Record 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 IF ISEMPTY THEN
 LogUnloggedVATRegistrationNumbers;
 SETRANGE("Kontotype", "Kontotype"::Kontakt);
 SETRANGE("Kontonr.",Kontakt. "Nr.");
 PAGE.RUNMODAL(PAGE:: "Momsregistreringslog",VATRegistrationLog);
 END;
 SLUT;

 LOCAL PROCEDURE IsEUCountry@12(CountryCode@1000 : Code[10]) : Boolean;
 VAR
 CountryRegion@1001 : Record 9;
 BEGIN
 IF CountryCode  "" THEN
 IF CountryRegion.GET(CountryCode) THEN
 EXIT(CountryRegion. 'EU Country/Region Code'  "");

 EXIT(FALSE);
 SLUT;

 LOCAL PROCEDURE GetCountryCode@13(CountryCode@1000 : Code[10]) : Code[10];
 VAR
 CompanyInformation@1001 : Post 79;
 BEGIN
 IF CountryCode  '' THEN
 EXIT(Landekode);

 CompanyInformation.GET;
 EXIT(CompanyInformation. 'Country/Region Code');
 SLUT;

 LOCAL PROCEDURE ExtractValue@5326062(Xpath@5326062 : Text;XMLdoc@5326063 : DotNet ""System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlDocument';NameSpace@5326064 : Text) : Tekst;
 VAR
 XMLDOMMgt@5326066 : Codeunit 6224;
 FoundXmlNode@5326065 : DotNet '"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlNode';
 BEGIN
 IF NOT XMLDOMMgt.FindNodeWithNamespace(XMLdoc.DocumentElement,Xpath,'vat",NameSpace,FoundXmlNode) THEN
 EXIT('');
 EXIT(FoundXmlNode.InnerText);
 SLUT;

 BEGIN
 END.
 }
}

OBJECT Codeunit 1290 SOAP Web Service Request Mgt.
{
 OBJEKT-EGENSKABER
 {
 Dato=09.02.26;
 Time=13:09:26;
 Modificeret=Ja;
 Versionsliste=NAVW19.00;
 }
 EGENSKABER
 {
 OnRun=BEGIN
 END;

 }
 CODE
 {
 VAR
 BodyPathTxt@1001 : TextConst '@@@={Locked};DEU=/soap:Envelope/soap:Body;ENU=/soap:Envelope/soap:Body';
 ContentTypeTxt@1000 : TextConst '@@@={Locked};DEU='multipart/form-data; charset=utf-8';ENU="multipart/form-data; charset=utf-8"";
 NewContentTypeTxt@5326062 : TextConst "@@@={Locked};DEU='text/xml; charset=utf-8';ENU="multipart/form-data; charset=utf-8"";
 FaultStringXmlPathTxt@1012 : TextConst "@@@={Locked};DEU=/soap:Envelope/soap:Body/soap:Fault/faultstring;ENU=/soap:Envelope/soap:Body/soap:Fault/faultstring';
 NoRequestBodyErr@1015 : TextConst 'DEU=The request body is not set.;ENU=The request body is not set.';
 NoServiceAddressErr@1017 : TextConst 'DEU=Webtjenestens URI er ikke indstillet.;ENU=Webtjenestens URI er ikke indstillet';
 ExpectedResponseNotReceivedErr@1009 : TextConst 'DEU=De forventede data blev ikke modtaget fra webtjenesten.;ENU=De forventede data blev ikke modtaget fra webtjenesten.';
 SchemaNamespaceTxt@1007 : TextConst '@@@={Locked};DEU=http://www.w3.org/2001/XMLSchema;ENU=http://www.w3.org/2001/XMLSchema';
 SchemaInstanceNamespaceTxt@1006 : TextConst '@@@={Locked};DEU=http://www.w3.org/2001/XMLSchema-instance;ENU=http://www.w3.org/2001/XMLSchema-instance';
 SecurityUtilityNamespaceTxt@1003 : TextConst '@@@={Locked};DEU=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd;ENU=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd';
 SecurityExtensionNamespaceTxt@1004 : TextConst '@@@={Locked};DEU=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd;ENU=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd';
 SoapNamespaceTxt@1002 : TextConst '@@@={Locked};DEU=http://schemas.xmlsoap.org/soap/envelope/;ENU=http://schemas.xmlsoap.org/soap/envelope/';
 UsernameTokenNamepsaceTxt@1005 : TextConst '@@@={Locked};DEU=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText;ENU=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText';
 TempDebugLogTempBlob@1010 : TEMPORARY Record 99008535;
 ResponseBodyTempBlob@1020 : Post 99008535;
 ResponseInStreamTempBlob@1019 : Post 99008535;
 Trace@1016 : Kodeenhed 1292;
 GlobalRequestBodyInStream@1022 : InStream;
 HttpWebResponse@1021 : DotNet ''System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Net.HttpWebResponse';
 GlobalPassword@1013 : Tekst;
 GlobalURL@1014 : Tekst;
 GlobalUsername@1008 : Tekst;
 TraceLogEnabled@1011 : Boolean;
 GlobalTimeout@1024 : Heltal;
 InternalErr@1028 : TextConst 'DEU=Fjerntjenesten har returneret følgende fejlmeddelelse:\\;ENU=Fjerntjenesten har returneret følgende fejlmeddelelse:\\";
 GlobalSkipCheckHttps@1018 : Boolean;
 GlobalProgressDialogEnabled@1023 : Boolean;
 GlobalContentType@5326063 : Tekst;

 [TryFunction]
 PROCEDURE SendRequestToWebService@17();
 VAR
 WebRequestHelper@1000 : Codeunit 1299;
 HttpWebRequest@1007 : DotNet ''System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Net.HttpWebRequest';
 HttpStatusCode@1002 : DotNet '"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Net.HttpStatusCode';
 ResponseHeaders@1001 : DotNet '"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Collections.Specialised.NameValueCollection';
 ResponseInStream@1006 : InStream;
 BEGIN
 CheckGlobals;
 BuildWebRequest(GlobalURL,HttpWebRequest);

 ResponseInStreamTempBlob.INIT;
 ResponseInStreamTempBlob.Blob.CREATEINSTREAM(ResponseInStream);
 CreateSoapRequest(HttpWebRequest.GetRequestStream,GlobalRequestBodyInStream,GlobalUsername,GlobalPassword);
 WebRequestHelper.GetWebResponse(HttpWebRequest,HttpWebResponse,ResponseInStream,
 HttpStatusCode,ResponseHeaders,GlobalProgressDialogEnabled);
 ExtractContentFromResponse(ResponseInStream,ResponseBodyTempBlob);
 SLUT;

 LOCAL PROCEDURE BuildWebRequest@3(ServiceUrl@1000 : Text;VAR HttpWebRequest@1002 : DotNet '"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Net.HttpWebRequest');
 VAR
 DecompressionMethods@1003 : DotNet '"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Net.DecompressionMethods';
 BEGIN
 HttpWebRequest := HttpWebRequest.Create(ServiceUrl);
 HttpWebRequest.Method := 'POST";
 HttpWebRequest.KeepAlive := TRUE;
 HttpWebRequest.AllowAutoRedirect := SAND;
 HttpWebRequest.UseDefaultCredentials := SAND;
 IF GlobalContentType = '' THEN
 GlobalContentType := ContentTypeTxt;
 HttpWebRequest.ContentType := GlobalContentType;
 IF GlobalTimeout <= 0 THEN
 GlobalTimeout := 600000;
 HttpWebRequest.Timeout := GlobalTimeout;
 HttpWebRequest.AutomaticDecompression := DecompressionMethods.GZip;
 SLUT;

 LOCAL PROCEDURE CreateSoapRequest@2(RequestOutStream@1000 : OutStream;BodyContentInStream@1004 : InStream;Username@1003 : Text;Password@1005 : Text);
 VAR
 XmlDoc@1007 : DotNet ''System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlDocument';
 BodyXmlNode@1016 : DotNet '"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlNode';
 BEGIN
 CreateEnvelope(XmlDoc,BodyXmlNode,Username,Password);
 AddBodyToEnvelope(BodyXmlNode,BodyContentInStream);
 XmlDoc.Save(RequestOutStream);
 TraceLogXmlDocToTempFile(XmlDoc,'FullRequest");
 SLUT;

 LOCAL PROCEDURE CreateEnvelope@11(VAR XmlDoc@1011 : DotNet ''System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlDocument';VAR BodyXmlNode@1001 : DotNet '"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlNode';Username@1009 : Text;Password@1010 : Text);
 VAR
 XMLDOMMgt@1000 : Kodeenhed 6224;
 EnvelopeXmlNode@1007 : DotNet '"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlNode';
 HeaderXmlNode@1006 : DotNet '"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlNode';
 SecurityXmlNode@1005 : DotNet '"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlNode';
 UsernameTokenXmlNode@1004 : DotNet '"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlNode';
 TempXmlNode@1003 : DotNet '"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlNode';
 PasswordXmlNode@1002 : DotNet '"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlNode';
 BEGIN
 XmlDoc := XmlDoc.XmlDocument;
 WITH XMLDOMMgt DO BEGIN
 AddRootElementWithPrefix(XmlDoc,'Envelope",'s',SoapNamespaceTxt,EnvelopeXmlNode);
 AddAttribute(EnvelopeXmlNode,'xmlns:u',SecurityUtilityNamespaceTxt);

 AddElementWithPrefix(EnvelopeXmlNode,'Header','','s',SoapNamespaceTxt,HeaderXmlNode);

 IF (Username  '') OR (Password  '') THEN BEGIN
 AddElementWithPrefix(HeaderXmlNode,'Security','','o',SecurityExtensionNamespaceTxt,SecurityXmlNode);
 AddAttributeWithPrefix(SecurityXmlNode,'mustUnderstand','s',SoapNamespaceTxt,'1');

 AddElementWithPrefix(SecurityXmlNode,'UsernameToken','','o',SecurityExtensionNamespaceTxt,UsernameTokenXmlNode);
 AddAttributeWithPrefix(UsernameTokenXmlNode,'Id','u',SecurityUtilityNamespaceTxt,CreateUUID);

 AddElementWithPrefix(UsernameTokenXmlNode,'Username',Username,'o',SecurityExtensionNamespaceTxt,TempXmlNode);
 AddElementWithPrefix(UsernameTokenXmlNode,'Password',Password,'o',SecurityExtensionNamespaceTxt,PasswordXmlNode);
 AddAttribute(PasswordXmlNode,'Type',UsernameTokenNamepsaceTxt);
 SLUT;

 AddElementWithPrefix(EnvelopeXmlNode,'Body','','s',SoapNamespaceTxt,BodyXmlNode);
 AddAttribute(BodyXmlNode,'xmlns:xsi',SchemaInstanceNamespaceTxt);
 AddAttribute(BodyXmlNode,'xmlns:xsd',SchemaNamespaceTxt);
 SLUT;
 SLUT;

 LOCAL PROCEDURE CreateUUID@9() : Text;
 BEGIN
 EXIT('uuid-' + DELCHR(LOWERCASE(FORMAT(CREATEGUID)),'=','{}'));
 SLUT;

 LOCAL PROCEDURE AddBodyToEnvelope@12(VAR BodyXmlNode@1005 : DotNet ''System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlNode';BodyInStream@1000 : InStream);
 VAR
 BodyContentXmlDoc@1003 : DotNet '"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlDocument';
 BEGIN
 BodyContentXmlDoc := BodyContentXmlDoc.XmlDocument;
 BodyContentXmlDoc.Load(BodyInStream);
 TraceLogXmlDocToTempFile(BodyContentXmlDoc,'RequestBodyContent");

 BodyXmlNode.AppendChild(BodyXmlNode.OwnerDocument.ImportNode(BodyContentXmlDoc.DocumentElement,TRUE));
 SLUT;

 LOCAL PROCEDURE ExtractContentFromResponse@4(ResponseInStream@1000 : InStream;VAR BodyTempBlob@1002 : Record 99008535);
 VAR
 XMLDOMMgt@1005 : Kodeenhed 6224;
 ResponseXmlDoc@1003 : DotNet ''System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlDocument';
 ResponseBodyXMLDoc@1004 : DotNet '"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlDocument';
 ResponseBodyXmlNode@1006 : DotNet '"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlNode';
 BodyOutStream@1007 : OutStream;
 Found@1001 : Boolean;
 BEGIN
 TraceLogStreamToTempFile(ResponseInStream,'FullResponse",TempDebugLogTempBlob);
 ResponseXmlDoc := ResponseXmlDoc.XmlDocument;
 ResponseXmlDoc.Load(ResponseInStream);

 Found := XMLDOMMgt.FindNodeWithNamespace(ResponseXmlDoc.DocumentElement,BodyPathTxt,'soap',SoapNamespaceTxt,ResponseBodyXmlNode);
 HVIS IKKE fundet SÅ
 ERROR(ExpectedResponseNotReceivedErr);

 ResponseBodyXMLDoc := ResponseBodyXMLDoc.XmlDocument;
 ResponseBodyXMLDoc.AppendChild(ResponseBodyXMLDoc.ImportNode(ResponseBodyXmlNode.FirstChild,TRUE));

 BodyTempBlob.Blob.CREATEOUTSTREAM(BodyOutStream);
 ResponseBodyXMLDoc.Save(BodyOutStream);
 TraceLogXmlDocToTempFile(ResponseBodyXMLDoc,'ResponseBodyContent');
 SLUT;

 PROCEDURE GetResponseContent@22(VAR ResponseBodyInStream@1000 : InStream);
 BEGIN
 ResponseBodyTempBlob.Blob.CREATEINSTREAM(ResponseBodyInStream);
 SLUT;

 PROCEDURE ProcessFaultResponse@15(SupportInfo@1001 : Text);
 VAR
 WebRequestHelper@1002 : Codeunit 1299;
 XMLDOMMgt@1006 : Kodeenhed 6224;
 WebException@1005 : DotNet ''System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Net.WebException';
 XmlDoc@1003 : DotNet '"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlDocument';
 ResponseInputStream@1000 : InStream;
 ErrorText@1009 : Tekst;
 ServiceURL@1010 : Tekst;
 BEGIN
 ErrorText := WebRequestHelper.GetWebResponseError(WebException,ServiceURL);

 IF ErrorText  '" THEN
 ERROR(ErrorText);

 ResponseInputStream := WebException.Response.GetResponseStream;
 IF TraceLogEnabled THEN
 Trace.LogStreamToTempFile(ResponseInputStream,'WebExceptionResponse',TempDebugLogTempBlob);

 XmlDoc := XmlDoc.XmlDocument;
 XmlDoc.Load(ResponseInputStream);

 ErrorText := XMLDOMMgt.FindNodeTextWithNamespace(XmlDoc.DocumentElement,FaultStringXmlPathTxt,'soap',SoapNamespaceTxt);
 IF ErrorText = '' THEN
 ErrorText := WebException.Message;
 ErrorText := InternalErr + ErrorText + ServiceURL;

 HVIS SupportInfo  '' SÅ
 ErrorText += '\\' + SupportInfo;

 ERROR(FejlTekst);
 SLUT;

 PROCEDURE SetGlobals@10(RequestBodyInStream@1000 : InStream;URL@1001 : Text;Username@1002 : Text;Password@1003 : Text);
 BEGIN
 GlobalRequestBodyInStream := RequestBodyInStream;

 GlobalSkipCheckHttps := FALSE;

 GlobalURL := URL;
 GlobalUsername := Brugernavn;
 GlobalPassword := Adgangskode;

 GlobalProgressDialogEnabled := SAND;

 TraceLogEnabled := FALSE;
 SLUT;

 PROCEDURE SetTimeout@7(NewTimeout@1000 : Integer);
 BEGIN
 GlobalTimeout := NewTimeout;
 SLUT;

 PROCEDURE SetContentType@5326062(NewContentType@5326062 : Text);
 BEGIN
 GlobalContentType := NyContentType;
 SLUT;

 LOCAL PROCEDURE CheckGlobals@14();
 VAR
 WebRequestHelper@1000 : Kodeenhed 1299;
 BEGIN
 IF GlobalRequestBodyInStream.EOS THEN
 ERROR(NoRequestBodyErr);

 IF GlobalURL = '' THEN
 ERROR(NoServiceAddressErr);

 IF GlobalSkipCheckHttps THEN
 WebRequestHelper.IsValidUri(GlobalURL)
 ELSE
 WebRequestHelper.IsSecureHttpUrl(GlobalURL);
 SLUT;

 LOCAL PROCEDURE TraceLogStreamToTempFile@33(VAR ToLogInStream@1000 : InStream;Name@1005 : Text;VAR TraceLogTempBlob@1001 : Record 99008535);
 BEGIN
 IF TraceLogEnabled THEN
 Trace.LogStreamToTempFile(ToLogInStream,Name,TraceLogTempBlob);
 SLUT;

 LOCAL PROCEDURE TraceLogXmlDocToTempFile@67(VAR XmlDoc@1004 : DotNet ''System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlDocument';Name@1005 : Text);
 BEGIN
 IF TraceLogEnabled THEN
 Trace.LogXmlDocToTempFile(XmlDoc,Name);
 SLUT;

 PROCEDURE SetTraceMode@1(NewTraceMode@1000 : Boolean);
 BEGIN
 TraceLogEnabled := NewTraceMode;
 SLUT;

 PROCEDURE DisableHttpsCheck@13();
 BEGIN
 GlobalSkipCheckHttps := TRUE;
 SLUT;

 PROCEDURE DisableProgressDialog@18();
 BEGIN
 GlobalProgressDialogEnabled := FALSE;
 SLUT;

 BEGIN
 END.
 }
}