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:

(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

„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:

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

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:

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.
}
}
