MIAS VIES Comprobar CIF en Navision / BC365

Tiempo estimado de lectura: 12 minutos

¿Por qué debo comprobar los códigos de identificación fiscal (CIF)?

Pues... porque si está leyendo esto, está en Alemania o Austria... y allí es donde la normativa de la UE (algunas de las cuales ya son alemanas o austriacas) se toma en serio. Afortunadamente, Business Central 365 (BC365 o Navision Financials) te lo pone bastante fácil... en principio.

Los proveedores de servicios electrónicos, como las actualizaciones de programas antivirus, están obligados a cobrar el IVA por este servicio. Si el comprador de estos servicios es sujeto pasivo del IVA, puede que sea el cliente y no el proveedor del servicio quien deba pagar el IVA. Por lo tanto, el proveedor puede pedir el número de IVA del cliente para aclarar si tiene que cobrar el IVA o si el cliente tiene que pagarlo. Si el cliente no tiene un número de IVA válido, será el proveedor de servicios quien cargue el IVA.

Y para sus proveedores (pero desde 2025 probablemente también para los clientes, no he vuelto a encontrar el artículo), simplemente está obligado a comprobar el NIF de su socio comercial y a documentar esta comprobación. Reducir la burocracia... Si su NIF no es válido, se le puede denegar (y se le denegará) la deducción del IVA soportado en la factura de compra - ¡esto se aplica tanto a proveedores nacionales como extranjeros!

Peor aún: si factura servicios (bienes o servicios) a un cliente industrial con un NIF incorrecto, la Agencia Tributaria le reclamará el IVA.

Si no cumple su obligación de comprobar la exactitud del número de identificación a efectos del IVA y resulta que el número de identificación a efectos del IVA facilitado por su cliente no es correcto, tendrá que pagar el IVA. estaba equivocado, debe prever el pago de impuestos atrasados. Para evitar este riesgo, un Le recomendamos encarecidamente que compruebe el número de identificación a efectos del IVA del destinatario de la entrega.

La razón es sencilla: cada vez más fraude con el impuesto soportado/impuesto sobre las ventas, por ejemplo, el todavía posible y, por lo tanto, todavía popular Carrusel de impuestos sobre ventas.

¿Qué es VIES?

VIES (VAT Information Exchange System) es un motor de búsqueda (no una base de datos) de la Comisión Europea. Cuando se realiza una búsqueda a través de VIES, los datos se obtienen de las bases de datos nacionales sobre el IVA. Por lo tanto, si consulta un número de identificación a efectos del IVA en BC365 o Navision, esta solicitud de Navision primero va a VIES, VIES consulta el sistema de información allí, dependiendo del país de destino, y luego le devuelve la respuesta a través de REST o SOAP (así como la solicitud). El resultado es el llamado Verificación cualificada del número de identificación a efectos del IVA., porque ha comprobado la existencia del CIF en Business Central o Navision y éste también demostrar mediante el protocolo sino también porque el nombre y la dirección del titular del número de IVA verificado se registran en Business Central (o Navision) y, por tanto, pueden compararse con los datos que usted ha introducido. Esto es especialmente importante si un auditor o incluso un revisor fiscal tiene dudas sobre uno de sus deudores o acreedores. Gracias a GDPdU, Idea comunica estas dudas al auditor de forma totalmente automática.

¿Qué es el Sistema de Intercambio de Información sobre el IVA (VIES) en línea?

El VIES es un sistema de validación electrónica del número de IVA de los operadores registrados en la Unión Europea para las transacciones transfronterizas de bienes o servicios.
Si desea comprobar el número de IVA de su cliente en otro Estado miembro / Irlanda del Norte a través de la aplicación web VIES, esta solicitud se enviará desde Business Central 365 (o Navision) a través de una conexión segura a la base de datos nacional correspondiente para comprobar si el número figura allí. En caso afirmativo, se mostrará el estado „válido“. En caso contrario, se mostrará el estado „no válido“.

En función de las normas de protección de datos aplicables, algunos Estados miembros facilitan también los nombres y direcciones de los titulares de números de IVA que figuran en las bases de datos nacionales.

El NIF es necesario si, por ejemplo, realiza compras/ventas en toda la UE como empresa. Para comprobar si el comprador es „sujeto pasivo del IVA“, el número puede consultarse directamente con la UE a través de una API.

El resultado de la búsqueda en VIES sólo muestra si la información sobre el IVA está disponible.
Posibles motivos de una respuesta negativa:
El número de identificación a efectos del IVA no existe.
El número de identificación a efectos del IVA aún no se ha activado.
La inscripción aún no se ha completado

¿Qué ocurre si no se confirma un número de identificación a efectos del IVA?
Si el cliente declara que está registrado a efectos del IVA pero la comprobación a través del sistema VIES no lo confirma, puede solicitar una comprobación adicional a la autoridad fiscal de su país. Además, puede exigirse el registro para las transacciones transfronterizas en la UE. El procedimiento varía de un país a otro y queda fuera del alcance de esta guía.

Estos cambios no se actualizan inmediatamente en las bases de datos nacionales y, por tanto, tampoco en VIES. Tal vez sea posible verificar el número „mañana“.

Configuración de la comprobación del NIF en Navision / BC365

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

En estas versiones no existe una comprobación automática del NIF. No obstante, esta comprobación también puede realizarse a posteriori. Encontrará las unidades de código necesarias para las versiones RTC al final de este artículo. SOAP no es la primera opción para las versiones Classic Client, sobre todo porque SOAP ya se ha descatalogado oficialmente (¡pero seguirá funcionando a principios de 2026!). Véase aquí.
Háblame si necesitas apoyo aquí.
La comprobación automática del número de IVA se puede reequipar en cualquier versión de Navision, pero entonces simplemente a través de REST Api. Si ya no tiene contrato de mantenimiento (se necesitan 2 tablas nuevas y 3 unidades de código para los objetos Navision/BC365 originales), ¡también podemos hacerlo por usted directamente en Navision Standard!

Navision 2015, 2016, 2017

Aquí se activa la opción de comprobación introduciendo la dirección VIES (https://ec.europa.eu/taxation_customs/vies/services/checkVatService) en el campo „VAT ID no. check URL“ en Contabilidad financiera en Configuración de informes:

Captura de pantalla de las versiones de Navision 2015, 2016, 2017 para introducir la URL para la comprobación del NIF con VIES

(Nota: No estoy del todo seguro sobre Navision 2015, no tengo una base de datos lista para comprobarlo en este momento. Si esta facilidad falta en su Navision 2015, entonces se aplica el párrafo anterior. Me gustaría recibir una breve respuesta para poder corregir este párrafo si es necesario).

Navision 2016, 2017 (¿y posiblemente 2015?) sólo guarda „CIF existe“ y „Nombre registrado“ y „Dirección registrada“ en el registro. Si desea tener aquí los demás campos de las versiones sucesoras (Calle confirmada, Código postal confirmado, Ciudad confirmada y si la dirección confirmada coincide con la dirección que tiene guardada), entonces póngase en contacto conmigo.. La respuesta de VIES es siempre la misma, por lo que „sólo“ se trata de hacerla visible para usted.

Navision 2018, BC365 (Business Central 365)

La lógica aquí ha sido ampliamente modificada y ahora hay un servicio de fondo para la comprobación. Atención. ¡El cambio sólo se ha implementado parcialmente con Hotfix 35 en Navision 2018/BC14!

Este servicio se activa en „Configuración del servicio de registro del IVA“:

Para hacerlo todo más emocionante, la página de configuración real se llama entonces

Captura de pantalla de Navision 2018/BC14 o, en general, BC365 Business Central 365 para comprobar los CIF

„Normalmente“ no tiene que hacer más que realizar estos ajustes, dependiendo de la versión de Navision o BC365.

A continuación, puede hacer clic en los tres puntos [...] situados junto al NIF del cliente o proveedor y se le devolverá el resultado de la validación:

Captura de pantalla de Navision con una comprobación correcta del NIF. Navision registra cada comprobación conforme a la ley.

También puede hacer que se comprueben automáticamente cientos de números de identificación a efectos del IVA utilizando el tratamiento por lotes de números de identificación a efectos del IVA.

Hasta aquí todo bien... ¿Pero qué pasa cuando las cosas van mal?

Es muy probable que los usuarios de las versiones Navision 2015, 2016 y 2017, pero también Navision 2018 y BC14, experimenten este mensaje de error

El servidor remoto ha devuelto un error: (400) Solicitud no válida.

No se ha podido establecer la conexión con el servicio remoto. El servidor remoto ha devuelto un error: (400) Solicitud no válida. URL del servicio: https://ec.europa.eu/taxation_customs/vies/services/checkVatService

No se ha podido establecer la conexión con el servicio remoto. El servidor remoto ha devuelto un error: (400) Bad Request. URL del servicio: https://ec.europa.eu/taxation_customs/vies/services/checkVatService

O la consulta simplemente no devuelve ningún resultado / ninguna respuesta. Si utiliza mis correcciones / personalización, encontrará los dos archivos VatIDrequest.txt con la solicitud SOAP y VatIDresult.txt con la respuesta SOAP en el servidor de servicios Navision bajo c:\temp, que a menudo ayudan.

Si ya tiene utilizar mi LOG, encontrará la consulta y las respuestas en el registro.

En el caso del mensaje de error anterior, normalmente deben actualizarse las unidades de código 248 (Timeout & ContentType) y 249 (Type of XML analysis), y debe añadirse la subfunción SetContentType a 1290.
Como los usuarios finales no suelen tener acceso a estas dos unidades de código, no he proporcionado aquí una descripción detallada. Puede encontrar los códigos fuente a continuación.

La tabla 226 no existe o „No se ha encontrado el objeto de metadatos Tabla 226“

¡Completamente curioso! Hay una versión de Navision en la que las tablas 226 y 227 y las páginas asociadas simplemente no existen. Creo que sólo afecta a la versión 14.0.45012.0, al menos nunca he recibido este mensaje de error en ninguna otra versión. En consecuencia, la solución es sencilla: Instale los parches para KB375980 de la Cu35 (Cumulative Update) de la versión 11.0.45373 - basta con que estos objetos estén instalados/actualizados:
Unidades de código 1751 248 249
Menú 1010
Páginas 246 247 248 249
Cuadro 226, 227, 248, 249

Actualización acumulativa 35 para Microsoft Dynamics NAV 2018 (Build 45373) - Soporte técnico de Microsoft

Error al llamar a System.Xml.XmlDocumentLoad con el siguiente mensaje: ‚>‘ es un Token inesperado

Aquí sólo necesitas el CU248
SOAPWebServiceRequestMgt.SetContentType(‚text/xml; charset=utf-8‘);
a instalar:

Captura de pantalla para la comprobación de VIES/Id. de IVA en Navision Financials/Business Central 365 para "Error al llamar a System.Xml.XmlDocumentLoad con el siguiente mensaje (token inesperado)

Sugerencia: Utilice el tiempo de espera más largo de inmediato, en versiones anteriores todavía está establecido en 5000 (5 segundos). Vea los dos mensajes de error siguientes.

TIMEOUT

En este caso, los servicios de consulta VIES están simplemente desbordados. Inténtelo más tarde. Véase también „Qué es VIES“ en la parte superior.

MS_MAX_CONCURRENT_REQ

También en este caso los servidores de la UE están sobrecargados. Encontrará aquí y aquí explicaciones muy detalladas, cómo funciona en absoluto toda la tontería del desorden... o, a menudo mejor: debería funcionar 🙂 .

En Navision estándar no recibirá más información sobre estos dos errores, simplemente tendrá que volver a intentarlo más tarde. A menudo funciona unos minutos más tarde. Véase más arriba: Con mi cambio, encontrará la consulta y la respuesta en forma de texto XML en c:\temp\, lo que a menudo ayuda a responder exactamente a esta pregunta.

Por la noche, entre las 23.00 y las 5.00 horas, el servicio puede no estar disponible en absoluto, como se documenta aquí:

BZSt - Confirmación de los números de identificación a efectos del IVA extranjeros

Corrección de errores mediante inteligencia artificial

Error con valores ceroEn versiones anteriores (p.ej. NAV 2009/5.0) el informe 11007 (VAT-Vies Declaration Tax-DE) no puede procesar valores cero correctamente. Se requiere un hotfix.

Mhmnjaja... El „consejo“ es técnicamente correcto... pero desgraciadamente esto no tiene absolutamente nada que ver con la comprobación del CIF, el mencionado informe 11007 ni siquiera puede enviar el archivo XML creado vía SOAP o RestAPi 🙂 .
Puede encontrar la revisión aquí:
El informe „VAT-Vies Declaration Tax-DE“ (11007) no gestiona correctamente el valor cero en la versión alemana de Microsoft Dynamics NAV - Microsoft Support

AutenticaciónAl utilizar claves API (si es necesario), el nombre de usuario y la contraseña deben almacenarse correctamente en la CA (Autoridad de Certificación).

VIES no requiere autenticación.

Por lo demás, las respuestas de Copilot, por ejemplo, son más bien... bueno. Para no usar la palabra „basura“, escribiré „escasamente útiles“ 🙂 .

Ya he expresado mi opinión sobre la Inteligencia Artificial en Navision aquí anunciado. Pero me gusta utilizar la función de imagen de Copilot. Esta foto de aquí también fue tomada con Copilot. Aparte de eso, actualmente (febrero de 2026) todavía no tengo miedo de perder mi trabajo por algún LLM/AI como ChatGPT u otro 🙂.

Unidades de código actualizadas a partir de la versión de 2016

Si tienes acceso a las unidades de código 248, 249 y 1290, te enumero aquí los contenidos corregidos, para que ya sepas lo que tienes que hacer 🙂 Saludos.

OBJETO Codeunit 248 Búsqueda IVA Datos ext. Hndl
{
 OBJETO-PROPIEDADES
 {
 Fecha=09.02.26;
 Hora=13:19:58;
 Modificado=Sí;
 Lista de versiones=NAVW19.00;
 }
 PROPIEDADES
 {
 TablaNo=249;
 Permisos=TableData 249=rimd;
 OnRun=BEGIN
 IVARegistroLog := Rec;

 LookupVatRegistrationFromWebService(TRUE);

 Rec := VATRegistrationLog;
 FIN;

 }
 CÓDIGO
 {
 VAR
 NamespaceTxt@1003 : TextConst '@@@={Bloqueado};DEU=urn:ec.europa.eu:taxud:vies:services:checkVat:types;ENU=urn:ec.europa.eu:taxud:vies:services:checkVat:types';
 VATRegistrationLog@1000 : Registro 249;
 VATRegistrationLogMgt@1002 : Unidad de código 249;
 VatRegNrValidationWebServiceURLTxt@1001 : TextConst '@@@={Bloqueado};DEU=http://ec.europa.eu/taxation_customs/vies/services/checkVatService;ENU=http://ec.europa.eu/taxation_customs/vies/services/checkVatService';
 MissingWebServiceURLErr@1004 : TextConst 'DEU=No se ha especificado la URL de validación del N.I.F. en la ventana de configuración de la contabilidad financiera;ENU=No se ha especificado la URL de validación del N.I.F. en la ventana de configuración del libro mayor";

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

 SendRequestToVatRegistrationService(RequestBodyTempBlob,ShowErrors);

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

 InsertLogEntry(RequestBodyTempBlob);

 COMMIT;
 END;

 LOCAL PROCEDURE SendRequestToVatRegistrationService@1(VAR BodyTempBlob@1004 : Record 99008535;ShowErrors@1003 : Boolean);
 VAR
 GeneralLedgerSetup@1005 : Record 98;
 SOAPWebServiceRequestMgt@1001 : Unidad de código 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);
 END ELSE
 IF ShowErrors THEN
 SOAPWebServiceRequestMgt.ProcessFaultResponse('');
 END;

 LOCAL PROCEDURE PrepareSOAPRequestBody@12(VAR BodyTempBlob@1000 : Record 99008535);
 VAR
 XMLDOMMgt@1006 : Unidad de código 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');
 FIN;

 PROCEDIMIENTO LOCAL 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);
 FIN;

 PROCEDURE GetVATRegNrValidationWebServiceURL@5() : Texto[250];
 BEGIN
 EXIT(VatRegNrValidationWebServiceURLTxt);
 END;

 BEGIN
 END.
 }
}

OBJETO Codeunit 249 Registro de IVA Mgt.
{
 OBJETO-PROPIEDADES
 {
 Fecha=09.02.26;
 Hora=14:57:32;
 Modificado=Sí;
 Lista de versiones=NAVW19.00;
 }
 PROPIEDADES
 {
 Permisos=TableData 249=rimd;
 OnRun=BEGIN
 END;

 }
 CÓDIGO
 {

 PROCEDURE LogCustomer@1(Cliente@1000 : Registro 18);
 VAR
 VATRegistrationLog@1001 : Registro 249;
 CódigoPaís@1002 : Código[10];
 BEGIN
 CódigoPaís := GetCountryCode(Cliente. 'Código País/Región");
 IF NOT IsEUCountry(CountryCode) THEN
 EXIT;

 InsertVATRegistrationLog(
 Tipo de cuenta"::Cliente,Nº de cliente");
 END;

 PROCEDURE LogVendor@2(Vendedor@1002 : Registro 23);
 VAR
 VATRegistrationLog@1001 : Registro 249;
 CódigoPaís@1000 : Código[10];
 BEGIN
 CódigoPaís := GetCountryCode(Vendedor. "Código País/Región");
 IF NOT IsEUCountry(CountryCode) THEN
 EXIT;

 InsertVATRegistrationLog(
 VATRegistrationLog. "Tipo de cuenta"::Vendedor,Vendedor. "Nº");
 END;

 PROCEDURE LogContact@8(Contacto@1000 : Registro 5050);
 VAR
 VATRegistrationLog@1001 : Registro 249;
 CódigoPaís@1002 : Código[10];
 BEGIN
 CódigoPaís := GetCountryCode(Contacto. "Código País/Región");
 IF NOT IsEUCountry(CountryCode) THEN
 EXIT;

 InsertVATRegistrationLog(
 Tipo de cuenta"::Contacto,Nº de contacto");
 END;

 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 : Unidad de código 6224;
 FoundXmlNode@1004 : DotNet ""System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".System.Xml.XmlNode";
 NombreRutaTxt@5326066 : TextConst "@@@={Bloqueado};DEU=descendiente::iva:traderName;ENU=descendiente::iva: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';
 CalleTxt@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. 'Nº Entrada' := 0;
 VATRegistrationLog.Status := VATRegistrationLog.Status::Valid;
 VATRegistrationLog. 'Fecha de verificación' := CURRENTDATETIME;
 VATRegistrationLog. 'ID de usuario' := USERID;

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

 //XMLDOMMgt.FindNodeWithNamespace(XMLDoc.DocumentElement,NamePathTxt,'vat',Namespace,FoundXmlNode);
 VATRegistrationLog. 'Verified Name' := ExtractValue(NamePathTxt,XMLDoc,Namespace);
 //COPYSTR(FoundXmlNode.InnerText,1,MAXSTRLEN(VATRegistrationLog. 'Nombre verificado'));
 //XMLDOMMgt.FindNodeWithNamespace(XMLDoc.DocumentElement,AddressPathTxt,"vat",Namespace,FoundXmlNode);
 VATRegistrationLog. "Dirección verificada" := ExtractValue(AddressPathTxt,XMLDoc,Namespace);
 //COPYSTR(FoundXmlNode.InnerText,1,MAXSTRLEN(VATRegistrationLog. "Dirección verificada"));

 VATRegistrationLog.INSERT(TRUE);
 END;
 'false':
 BEGIN
 VATRegistrationLog. "Nº de entrada" := 0;
 VATRegistrationLog. "Fecha de verificación" := CURRENTDATETIME;
 VATRegistrationLog.Status := VATRegistrationLog.Status::Invalid;
 VATRegistrationLog. 'User ID' := USERID;
 VATRegistrationLog. "Nombre verificado" := "";
 VATRegistrationLog 'Dirección verificada' := "";

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

 PROCEDIMIENTO LOCAL LogUnloggedVATRegistrationNumbers@10();
 VAR
 Cliente@1000 : Registro 18;
 Vendedor@1001 : Registro 23;
 Contacto@1002 : Registro 5050;
 VATRegistrationLog@1003 : Registro 249;
 BEGIN
 Customer.SETFILTER("NIF","%1","");
 IF Customer.FINDSET THEN
 REPETIR
 VATRegistrationLog.SETRANGE('N.º registro IVA',Customer. "N.º registro IVA");
 IF VATRegistrationLog.ISEMPTY THEN
 LogCustomer(Cliente);
 UNTIL Cliente.SIGUIENTE = 0;

 Vendor.SETFILTER('N.º registro IVA',"%1",'');
 IF Vendedor.FINDSET THEN
 REPETIR
 VATRegistrationLog.SETRANGE('N.º registro IVA',Vendor. "N.º registro IVA");
 IF VATRegistrationLog.ISEMPTY THEN
 LogVendor(Vendedor);
 UNTIL Vendedor.SIGUIENTE = 0;

 Contact.SETFILTER("N.º registro IVA","%1",'');
 IF Contacto.FINDSET THEN
 REPETIR
 VATRegistrationLog.SETRANGE('N.º registro IVA',Contact. "N.º registro IVA");
 IF VATRegistrationLog.ISEMPTY THEN
 LogContact(Contacto);
 UNTIL Contacto.SIGUIENTE = 0;

 COMMIT;
 END;

 LOCAL PROCEDURE InsertVATRegistrationLog@16(VATRegNo@1002 : Text[20];CountryCode@1000 : Code[10];AccountType@1001 : Option;AccountNo@1003 : Code[20]);
 VAR
 VATRegistrationLog@1004 : Registro 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 INIT;
 "VAT Registration No. = VATRegNo;
 "Código País/Región" := CódigoPaís;
 "Account Type' := AccountType;
 'Número de cuenta' := AccountNo. := NºCuenta
 'ID Usuario" := USERID;
 INSERT(TRUE);
 FIN;
 FIN;

 PROCEDURE DeleteCustomerLog@4(Cliente@1000 : Registro 18);
 VAR
 VATRegistrationLog@1001 : Registro 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 SETRANGE("Tipo de cuenta", "Tipo de cuenta"::Cliente);
 SETRANGE("Account No.",Customer. "No.");
 DELETEALL;
 END;
 END;

 PROCEDURE DeleteVendorLog@5(Vendedor@1000 : Registro 23);
 VAR
 VATRegistrationLog@1001 : Registro 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 SETRANGE("Tipo de cuenta", "Tipo de cuenta"::Vendedor);
 SETRANGE("Account No.",Vendor. "No.");
 DELETEALL;
 END;
 END;

 PROCEDURE DeleteContactLog@9(Contacto@1000 : Registro 5050);
 VAR
 VATRegistrationLog@1001 : Registro 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 SETRANGE("Tipo de cuenta", "Tipo de cuenta"::Contacto);
 SETRANGE("Nº Cuenta",Nº Contacto");
 DELETEALL;
 END;
 END;

 PROCEDURE AssistEditCustomerVATReg@7(Cliente@1000 : Registro 18);
 VAR
 VATRegistrationLog@1001 : Registro 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 IF ISEMPTY THEN
 LogUnloggedVATRegistrationNumbers;
 SETRANGE("Tipo de cuenta", "Tipo de cuenta"::Cliente);
 SETRANGE("Nº Cuenta",Nº Cliente");
 PAGE.RUNMODAL(PAGE:: "Registro de IVA",VATRegistrationLog);
 END;
 FIN;

 PROCEDURE AssistEditVendorVATReg@6(Vendedor@1001 : Registro 23);
 VAR
 VATRegistrationLog@1000 : Registro 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 IF ISEMPTY THEN
 LogUnloggedVATRegistrationNumbers;
 SETRANGE("Tipo de cuenta", "Tipo de cuenta"::Proveedor);
 SETRANGE("Nº de cuenta",Nº de vendedor);
 PAGE.RUNMODAL(PAGE:: "Registro de IVA",VATRegistrationLog);
 END;
 FIN;

 PROCEDURE AssistEditContactVATReg@11(Contacto@1001 : Registro 5050);
 VAR
 VATRegistrationLog@1000 : Registro 249;
 BEGIN
 WITH VATRegistrationLog DO BEGIN
 IF ISEMPTY THEN
 LogUnloggedVATRegistrationNumbers;
 SETRANGE("Tipo de cuenta", "Tipo de cuenta"::Contacto);
 SETRANGE("Nº Cuenta",Nº Contacto");
 PAGE.RUNMODAL(PAGE:: "Registro de IVA",VATRegistrationLog);
 END;
 FIN;

 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);
 END;

 PROCEDIMIENTO LOCAL GetCountryCode@13(CountryCode@1000 : Code[10]) : Código[10];
 VAR
 CompanyInformation@1001 : Registro 79;
 BEGIN
 IF CódigoPaís  "" THEN
 EXIT(CódigoPaís);

 InformaciónEmpresa.GET;
 EXIT(InformaciónEmpresa. "Código País/Región");
 END;

 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 : Texto) : Texto;
 VAR
 XMLDOMMgt@5326066 : Unidad de código 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);
 END;

 BEGIN
 END.
 }
}

OBJECT Codeunit 1290 SOAP Web Service Request Mgt.
{
 OBJETO-PROPIEDADES
 {
 Fecha=09.02.26;
 Hora=13:09:26;
 Modificado=Sí;
 Lista de versiones=NAVW19.00;
 }
 PROPIEDADES
 {
 OnRun=BEGIN
 FIN;

 }
 CÓDIGO
 {
 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=El cuerpo de la solicitud no está establecido.;ENU=El cuerpo de la solicitud no está establecido.';
 NoServiceAddressErr@1017 : TextConst 'DEU=El URI del servicio web no está definido.;ENU=El URI del servicio web no está definido.';
 ExpectedResponseNotReceivedErr@1009 : TextConst 'DEU=No se han recibido los datos esperados del servicio web.;ENU=No se han recibido los datos esperados del servicio web.";
 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 : Registro TEMPORAL 99008535;
 ResponseBodyTempBlob@1020 : Registro 99008535;
 ResponseInStreamTempBlob@1019 : Registro 99008535;
 Trace@1016 : Unidad de código 1292;
 GlobalRequestBodyInStream@1022 : InStream;
 HttpWebResponse@1021 : DotNet ''System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Net.HttpWebResponse';
 GlobalPassword@1013 : Texto;
 GlobalURL@1014 : Texto
 GlobalUsername@1008 : Texto;
 TraceLogEnabled@1011 : Booleano;
 GlobalTimeout@1024 : Entero;
 InternalErr@1028 : TextConst 'DEU=El servicio remoto ha devuelto el siguiente mensaje de error:\\N;ENU=El servicio remoto ha devuelto el siguiente mensaje de error:\N';
 GlobalSkipCheckHttps@1018 : Booleano;
 GlobalProgressDialogEnabled@1023 : Booleano;
 GlobalContentType@5326063 : Texto;

 [TryFunction]
 PROCEDIMIENTO 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);
 FIN;

 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 := TRUE;
 HttpWebRequest.UseDefaultCredentials := TRUE;
 IF GlobalContentType = "' THEN
 GlobalContentType := ContentTypeTxt;
 HttpWebRequest.ContentType := GlobalContentType;
 IF GlobalTimeout <= 0 THEN
 GlobalTimeout := 600000;
 HttpWebRequest.Timeout := GlobalTimeout;
 HttpWebRequest.AutomaticDecompression := DecompressionMethods.GZip;
 FIN;

 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,'SolicitudCompleta");
 FIN;

 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 : Unidad de código 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';
 ContraseñaXmlNode@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);
 FIN;

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

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

 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));
 FIN;

 LOCAL PROCEDURE ExtractContentFromResponse@4(ResponseInStream@1000 : InStream;VAR BodyTempBlob@1002 : Record 99008535);
 VAR
 XMLDOMMgt@1005 : Unidad de código 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 : Booleano;
 BEGIN
 TraceLogStreamToTempFile(ResponseInStream,"FullResponse',TempDebugLogTempBlob);
 ResponseXmlDoc := ResponseXmlDoc.XmlDocument;
 ResponseXmlDoc.Load(ResponseInStream);

 Found := XMLDOMMgt.FindNodeWithNamespace(ResponseXmlDoc.DocumentElement,BodyPathTxt,'soap",SoapNamespaceTxt,ResponseBodyXmlNode);
 IF NOT Found THEN
 ERROR(ExpectedResponseNotReceivedErr);

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

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

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

 PROCEDURE ProcessFaultResponse@15(SupportInfo@1001 : Text);
 VAR
 WebRequestHelper@1002 : Codeunit 1299;
 XMLDOMMgt@1006 : Unidad de código 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 : Texto;
 ServiceURL@1010 : Texto;
 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;

 IF SupportInfo  '' THEN
 ErrorText += "\' + SupportInfo;

 ERROR(ErrorText);
 END;

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

 GlobalSkipCheckHttps := FALSE;

 GlobalURL := URL;
 GlobalUsername := NombreUsuario;
 GlobalPassword := Contraseña;

 GlobalProgressDialogEnabled := TRUE;

 TraceLogEnabled := FALSE;
 FIN;

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

 PROCEDURE SetContentType@5326062(NewContentType@5326062 : Texto);
 BEGIN
 GlobalContentType := NuevoTipoContenido;
 END;

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

 IF GlobalURL = '" THEN
 ERROR(NoServiceAddressErr);

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

 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);
 END;

 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,Nombre);
 END;

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

 PROCEDIMIENTO DisableHttpsCheck@13();
 BEGIN
 GlobalSkipCheckHttps := TRUE;
 END;

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

 BEGIN
 END.
 }
}