Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-03-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 886
Poder: 3
ermendalenda Va por buen camino
Cita:
Empezado por ramherfer Ver Mensaje
Aquí la respuesta de la AEAT,
Aquien del foro comento que le habian respondido lo mismo. Asi que habrá que imaginar y analizar la lógica aplicandola o esperar....


Buenos días:

El desarrollo normativo(*) aún no está completado y se encuentra en fase de estudio y elaboración definitiva. Por ello, sería aventurado adelantarle alguna respuesta con el riesgo de que esta cambiara tras la publicación oficial en el BOE de la orden ministerial y en la Sede electrónica de la AEAT de la documentación que completará dicha orden. Además, es muy probable que la lectura de dicha documentación oficial pudiera responder total o parcialmente su consulta. Por lo tanto, le emplazamos a que espere a dicho momento en el que podrá disponer de toda la información oficial necesaria. Si entonces aún siguiera teniendo dudas, por favor, remítanoslas por esta misma vía.

En cualquier caso, ya hemos tomado nota de sus consultas y se tendrá en cuenta para su estudio y, en su caso, incorporación a la documentación final del proyecto.

Muchas gracias por contactar con la AEAT.

(*) Artículos 29.2.j) y 201 bis de la Ley 58/2003, de 17 de diciembre, General Tributaria, y Real Decreto 1007/2023, de 5 de diciembre, por el que se aprueba el Reglamento que establece los requisitos que deben adoptar los sistemas y programas informáticos o electrónicos que soporten los procesos de facturación de empresarios y profesionales, y la estandarización de formatos de los registros de facturación. La orden ministerial que desarrollará el RD 1007/2023, publicada en enero de 2024 en el portal del Ministerio de Hacienda para dar cumplimiento a su trámite de audiencia e información pública, está en fase de estudio y elaboración definitiva, así como la documentación que completará dicha orden y que estará disponible en la Sede electrónica de la AEAT tras la aprobación y publicación oficial de la orden ministerial.
A una pregunta radicalmente distinta me respondieron exactamente lo mismo, un copia y pega.
Tiene contenido muy usado por los IAChats jeje.
Responder Con Cita
  #2  
Antiguo 05-03-2024
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.035
Poder: 22
keys Va por buen camino
Cita:
Empezado por ermendalenda Ver Mensaje
A una pregunta radicalmente distinta me respondieron exactamente lo mismo, un copia y pega.
Tiene contenido muy usado por los IAChats jeje.
Yo creo que ya no contestan hasta que este la normativa definitiva. A mi me contestaron lo mismo
Responder Con Cita
  #3  
Antiguo 05-03-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 886
Poder: 3
ermendalenda Va por buen camino
Bd C.p.

Buenas, estoy intentando hacer una BD con las relaciones de los
Códigos Postales con la Poblacion/Nombre Municipio/CodigoMunicipio/CodigoUnidadPoblacion/Provincias/Autonomia
He visto que hay cosas de Pago, bastante caras.
A ver quien quiere colaborar haciendo alguna Autonomia para que compartamos, yo creo que lo mejor que puedo conseguir es Andalucia de una fuente fiable, las demas autonomias las puedo conseguir pero la fuente que encuentro por internet es bastante regular.
Esto creo que nos va a ayudar que las facturas tengan los datos más fiables posible y posteriormente para Facturae. Al menos para tener algo y evitrar en la medida de lo posible errores de los operadores, ya sé que después necesita de actualización, pero al menos tendremos bastante.
Saludos

Última edición por ermendalenda fecha: 05-03-2024 a las 14:16:33.
Responder Con Cita
  #4  
Antiguo 05-03-2024
rci rci is offline
Miembro
 
Registrado: nov 2020
Posts: 143
Poder: 4
rci Va por buen camino
mensaje para eliminar

Última edición por rci fecha: 05-03-2024 a las 16:09:28. Razón: error
Responder Con Cita
  #5  
Antiguo 05-03-2024
rci rci is offline
Miembro
 
Registrado: nov 2020
Posts: 143
Poder: 4
rci Va por buen camino
Cita:
Empezado por ermendalenda Ver Mensaje
Buenas, estoy intentando hacer una BD con las relaciones de los
Códigos Postales con la Poblacion/Nombre Municipio/CodigoMunicipio/CodigoUnidadPoblacion/Provincias/Autonomia
He visto que hay cosas de Pago, bastante caras.
A ver quien quiere colaborar haciendo alguna Autonomia para que compartamos, yo creo que lo mejor que puedo conseguir es Andalucia de una fuente fiable, las demas autonomias las puedo conseguir pero la fuente que encuentro por internet es bastante regular.
Esto creo que nos va a ayudar que las facturas tengan los datos más fiables posible y posteriormente para Facturae. Al menos para tener algo y evitrar en la medida de lo posible errores de los operadores, ya sé que después necesita de actualización, pero al menos tendremos bastante.
Saludos
A lo mejor me equivoco pero, puede que en la web del Instituto Nacional de Estadística encuentres lo que buscas.

Hay varias "bases de datos" en varias versiones y diría que encontrarás buena parte de la información que comentas.
En el siguiente enlace puedes ver la relación de datos a 1 de enero del 2024

https://ine.es/dyngs/INEbase/es/oper...=1254735976614

Si no es esto lo que buscas, disculpa la confusión

Saludos
Responder Con Cita
  #6  
Antiguo 05-03-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 886
Poder: 3
ermendalenda Va por buen camino
Cita:
Empezado por rci Ver Mensaje
A lo mejor me equivoco pero, puede que en la web del Instituto Nacional de Estadística encuentres lo que buscas.

Hay varias "bases de datos" en varias versiones y diría que encontrarás buena parte de la información que comentas.
En el siguiente enlace puedes ver la relación de datos a 1 de enero del 2024

https://ine.es/dyngs/INEbase/es/oper...=1254735976614

Si no es esto lo que buscas, disculpa la confusión

Saludos
Gracias eso es parte, pero hay un trabajo de relacionar el código postal(correos) con el código del municipio(ine)
Las bases de datos que he encontrado con esta relación son bastantes defectuosoas, entre otras cosas por que en jn mismo xodigo postal puede estar enmedio de 2 zonas de municipios según el ine y viceversa.
Eñ código postal es el que se usa para las facturas . Pero en lss facturas electrónicas hay campos en los que pide los códigos de municipios.
Responder Con Cita
  #7  
Antiguo 05-03-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 886
Poder: 3
ermendalenda Va por buen camino
Análisis video seminario

He visto algún punto del seminario sobre la reglamentación y me da la sensación de que va a crear alguna confusión:
* Si eres verifactu, no tendrás que conservar los registros de facturación, puesto que los vas a enviar.
OJO, con este punto. Lo que enviamos con verifactu es un resumen de la factura, no van los Items/conceptos, punto muy importante. Lo que tenemos que tener claro es que lo que no hay que conservar son esos XML que enviamos, pero no olvidemos que el reglamento de facturación obliga a la conservación de las facturas 5 años y que ai hablamos de tiquets o factura simplificada el cliente noss puede solicitar la sustitutiva hasta 4 años después, así que olvidaos de dejar de hacer copias de seguridad
*El envío instantáneo no es estrictamente instantáneo, eso es lo que han dicho, pero si intentas el envío y ves que no hay conexión, marcado mejor como incidencia, es un punto importante, aún no sabemos que margen de tiempo es el que nos dan para que no nos "llamen la atención", pero está claro que sí vemos que es un margen corto tendremos que exponerles la problemática de nuestros casos, por ejemplo un punto de venta con un router de datos con sim en una zona de pica cobertura, un tpv con pocos recursos que no puede estar enviando constantemente, El envio de los datos através de un tercero, que a veces dependerá de la carga de envíos de ese tercero.Total yo veo bien 24 horas los diss laborables y 72 los fines de semana, y en comdiciones normales si no hay problemas. Este tiempo que pongan, parece ser que, también marcará la alerta que los usuarios que lean el QR reciban si no lo hemos subido aún.
*Rotura de encadenamiento. Por otro lado hablan de que si enviamos registros con errores de hash será un error leve, otros errores tendremos que tratarlo para sustituir el registro , ya nos dirán como. Pero lo que más me importaba parece que lo van a tratar de una forma "lógica", si se produce una rotura de encadenamiento, lo auditarán, o sea, analizarán si merece la pena escalarlo. Así que supongo que sí un negocio, que normalmente envia correctamente y son ventas pequeñas, un día puede tenerr un problema y que no les llamen la atención

Última edición por ermendalenda fecha: 05-03-2024 a las 19:01:43.
Responder Con Cita
  #8  
Antiguo 05-03-2024
Delphier Delphier is offline
Miembro
 
Registrado: feb 2024
Posts: 14
Poder: 0
Delphier Va por buen camino
Generación RegistroFacturacion ALTA y XML para guardar y leer después

Pues lo dicho , aquí va mi primer ptototipo de unit para verifactu , con el código para generar un RegistroFacturacion de una factura y extraer el XML , por si le sirve a alguien para algo.
Evidentemente los campos y als tablas son los míos y no va a funcionar directamente, pero el esqueleto del registrofafcturacion de Alta está.


Código Delphi [-]
unit UVerifactu;

interface

Uses

System.SysUtils,
Xml.xmldom,
Xml.XMLIntf,
Xml.XMLDoc,
Data.Win.ADODB,
System.DateUtils,
Vcl.Dialogs,
Udatam, // Use interno propio
System.hash,
System.StrUtils,
GesAdoDataset, // Use interno propio
SistemaFacturacionSOAPv12,
Soap.InvokeRegistry,
Soap.OPConvert,
Soap.SOAPDomConv,
Soap.OPToSOAPDomConv;

function Trimestre(Dia:TDate):integer;
function TipoFacturaVerifactu(DTFactura : TGesAdoDataset) : ClaveTipoFacturaType;
function TipoRectificativaVerifactu(CorrectionMethod : String) : ClaveTipoRectificativaType;
function ClaveRegimenVerifactu(Conexion : TAdoConnection ; RegimenIva : Integer) : IdOperacionesTrascendenciaTributariaType;
function TipoCalificacionOperacion : CalificacionOperacionType;
function TipoOperacionExenta : OperacionExentaType;

function GenerarRegistroFacturacion_AltaVerifactu(Conexion : TAdoConnection ; TablaMaestra : Integer ; IdDocumento : String) : String;
procedure AgregarRelacionRectificadasPorDiferencias(Conexion : TAdoConnection ; TablaMaestra : Integer ; IdFactura : String; Factura :FacturasEmitidasType);
procedure AgregarRelacionRectificadasPorSustitucion(Conexion : TAdoConnection ; TablaMaestra : Integer ; IdFactura : String; Factura :FacturasEmitidasType);


function GenerarHashRegistroVerifactu(CadenaVerifactu : String) : String;


implementation

Uses Ur_user; // Use interno propio

function GenerarHashRegistroVerifactu(CadenaVerifactu : String) : String;
Begin

// NIF (RegistroFactura/RegistroAlta/IDFactura/IDEmisorFactura/NIF)
// NumserieFacturaEmisor (RegistroFactura/RegistroAlta/IDFactura/NumSerieFacturaEmisor)
// FechaExpedicionFacturaEmisor (RegistroFactura/RegistroAlta/IDFactura/FechaExpedicionFacturaEmisor)
// TipoRegistroSIF (RegistroFactura/RegistroAlta/TipoRegistroSIF)
// TipoFactura (RegistroFactura/RegistroAlta/TipoFactura)
// CuotaTotal (RegistroFactura/RegistroAlta/CuotaTotal)
// ImporteTotal (RegistroFactura/RegistroAlta/ImporteTotal)
// HuellaRegistroAnterior (RegistroFactura/RegistroAlta/EncadenamientoRegistroAnterior/HuellaRegistroAnterior)
// FechaHoraHusoGenRegistro (RegistroFactura/RegistroAlta/FechaHoraHusoGenRegistro)

// formato fECHAS verifactu (dd-mm-yyyy)

 // Ejemplo cadena
 {
 CadenaVerifactu :=
 'BXXXXXXXXXX'+
 'F1-01-150'+
 '27-02-2024'+
 'VERIFACTU'+ // ???
 'F1'+
 '1000'+
 '1210'+
 '27-02-2024 11:19:00';
  }

 Result := THashSHA2.GetHashString(CadenaVerifactu,THashSHA2.TSHA2Version.SHA256);


End;



function GenerarRegistroFacturacion_AltaVerifactu(Conexion : TAdoConnection ; TablaMaestra : Integer ; IdDocumento : String) : String;
var NombreTabla,NombreVista,IdFactura : String;
var DTFactura,DTDesgloseIvas : TGesAdoDataset;
begin



  // Buscamos pro tabla
  NombreTabla := f_devolver_valor_campo(0,Conexion,'C','Tablas','Codigo','Nombre',TablaMaestra);
  NombreVista := 'Vista'+NombreTabla;


  // Vamos a Buscar la Factura
  DTFactura      := f_crear_dataset(Conexion,DTFactura,'DTFactura','');
  DTDesgloseIvas := f_crear_dataset(Conexion,DTDesgloseIvas,'DTDesgloseIvas','');

  DTFactura.TableName := NombreTabla;
  DTFactura.VistaName := NombreVista;



  DTFactura.CommandText := 'Select * From '+NombreVista+' where Identificador = :Identificador';
  f_valor_parametro_tabla(DTFactura,'Identificador',IdDocumento);
  f_open_adodataset(DTFactura,ltReadOnly);

  DTDesgloseIvas.CommandText := 'Select * From DocumentosDesgloseIvas where IdDocumento = :Identificador';
  f_valor_parametro_tabla(DTDesgloseIvas,'Identificador',IdDocumento);
  f_open_adodataset(DTDesgloseIvas,ltReadOnly);


  IdFactura := DTFactura.FieldByName('Identificador').AsString;

  ///EsPrimera factura del ejercicio?

  //vamos vamos


  // Factura ejemplo

  var Factura :FacturasEmitidasType;
  Factura := FacturasEmitidasType.Create;

  Factura.RegistroFacturacion := RegistroFacturacionType.Create;
  Factura.DatosControl  := DatosControlType.Create;



  //IdFactura
  Factura.RegistroFacturacion.IDFactura := IDFacturaExpedidaType.Create;

  Factura.RegistroFacturacion.IDFactura.IDEmisorFactura := IDEmisorFactura.Create;
  Factura.RegistroFacturacion.IDFactura.IDEmisorFactura.NIF   := Datam.TBEmpresa.FieldByName('NIF').AsString;
  Factura.RegistroFacturacion.IDFactura.NumSerieFacturaEmisor := DTFactura.FieldByName('ReferenciaDocumento').AsString;
  Factura.RegistroFacturacion.IDFactura.FechaExpedicionFacturaEmisor := StringReplace(DTFactura.FieldByName('FECH').AsString,FormatSettings.DateSeparator,'-',
  [rfReplaceAll, rfIgnoreCase]); // (dd-mm-yyyy)

  Factura.RegistroFacturacion.NombreRazonEmisor := Datam.TBEmpresa.FieldByName('C_EMPRESA').AsString;
  Factura.RegistroFacturacion.TipoRegistroSIF   := TipoRegistroSIFType.S0; // averiguar cuando usar //S0  Alta inicial del registro de facturación en el SIF ,  
//S1  Alta sustitutiva del registro de facturación en el SIF,  
//S2  Anulación inicial del registro de facturación en el SIF,  
//S3  Anulación sustitutiva del registro de facturación en el SIF
  Factura.RegistroFacturacion.TipoFactura       := TipoFacturaVerifactu(DTFactura);
  if Length(Trim(DTFactura.FieldByName('CorrectionMethod1').AsString)) > 0 then
  Factura.RegistroFacturacion.TipoRectificativa := TipoRectificativaVerifactu(DTFactura.FieldByName('CorrectionMethod1').AsString);


    // Rectificads por direfencias  "Factura.RegistroFacturacion.FacturasRectificadas"
    if Factura.RegistroFacturacion.TipoRectificativa = ClaveTipoRectificativaType.I then
    Begin
      AgregarRelacionRectificadasPorDiferencias(DTFactura.Connection,TablaMaestra,IdFactura,Factura);
    End;


    // por sustitucion
    if Factura.RegistroFacturacion.TipoRectificativa = ClaveTipoRectificativaType.S then
    Begin
      AgregarRelacionRectificadasPorSustitucion(DTFactura.Connection,TablaMaestra,IdFactura,Factura);
    End;


  Factura.RegistroFacturacion.FechaOperacion := StringReplace(DTFactura.FieldByName('FECH').AsString,FormatSettings.DateSeparator,'-',[rfReplaceAll, rfIgnoreCase]); // (dd-mm-yyyy)
  Factura.RegistroFacturacion.DescripcionOperacion := 'Venta';
  Factura.RegistroFacturacion.FacturaSimplificadaArticulos7_2_7_3 := SimplificadaCualificadaType.N; // Factura simplificada Articulo 7,2 Y 7,3 RD 1619/2012. 
//Si no se informa este campo se entenderá que tiene valor  “N , si l afacutra simplificada tiene nif i datos
  Factura.RegistroFacturacion.FacturaSinIdentifDestinatarioArticulo6_1_d := CompletaSinDestinatarioType.N; //si es simplificada N ordinaria S , por aclarar
  Factura.RegistroFacturacion.Macrodato := MacrodatoType.N; // S  Sí - N  No


  // Tervero No aplicamos ->
  // Factura.RegistroFacturacion.EmitidaPorTercerosODestinatario := ''; //TercerosODestinatarioType.D;
  //   Factura.RegistroFacturacion.Tercero

     { el ejemplo
    // Detalle
    var detalle := DetalleType.Create;
    detalle.CuotaRepercutida := '100';
    detalle.TipoImpositivo := '21';
    SetLength(arrayDetallesDesglose, 1);
    arrayDetallesDesglose[0] := detalle;



    // desglose
    var desglose: DesgloseType := DesgloseType.Create();
    SetLength(Desglose, 1);
    Desglose[0] := detalle;
    fact.RegistroFacturacion.Desglose := Desglose;
    }


  //Factura.RegistroFacturacion.Destinatarios := En simplificadas ?????

  // Destinatario
  var Destinatario := PersonaFisicaJuridicaType.Create;
  Destinatario.NombreRazon := DTFactura.FieldByName('NOMB').AsString;
  Destinatario.NIF         := DTFactura.FieldByName('NIF').AsString;

  Destinatario.IDOtro := IDOtroType.Create;
  //Destinatario.IDOtro.CodigoPais := '';

  //PersonaFisicaJuridicaIDTypeType ->
  //02  NIF-IVA
  //03  Pasaporte
  //04  Documento oficial de identificación expedido por el país o territorio de residencia
  //05  Certificado de residencia
  //06  Otro documento probatorio
  //07  No censado

  Destinatario.IDOtro.IdType := PersonaFisicaJuridicaIDTypeType._02;
  Destinatario.IDOtro.ID     := DTFactura.FieldByName('NIF').AsString;

  // Los destinatarios , la lista
  var ListaDestinatarios : Destinatarios := Destinatarios.Create();
  SetLength(ListaDestinatarios, 1);
  ListaDestinatarios[0] := Destinatario;
  Factura.RegistroFacturacion.Destinatarios := ListaDestinatarios;




  Factura.RegistroFacturacion.Cupon := CuponType.N;


//vamos por aqui




      // Desglose de IVAS
      var ListaDesglose : DesgloseType := DesgloseType.Create();
      var Orden := 0;
      while not DTDesgloseIvas.Eof do
      Begin

          var DetalleDesglose := DetalleType.Create;;

          DetalleDesglose.ClaveRegimen :=
          ClaveRegimenVerifactu(DTFactura.Connection,DTFactura.FieldByName('RegimenIva').AsInteger); //'L8';

          DetalleDesglose.CalificacionOperacion := TipoCalificacionOperacion; //L9

          // Si es exenta , motivo
          if (DetalleDesglose.CalificacionOperacion = CalificacionOperacionType.N1)
          or (DetalleDesglose.CalificacionOperacion = CalificacionOperacionType.N2) then
          DetalleDesglose.OperacionExenta := TipoOperacionExenta; //L10

          DetalleDesglose.TipoImpositivo := FormatFloat('0.00',DTDesgloseIvas.FieldByName('IVA').AsFloat);
          DetalleDesglose.BaseImponibleOimporteNoSujeto := FormatFloat('0.00',DTDesgloseIvas.FieldByName('BASIMP').AsFloat);;
          DetalleDesglose.BaseImponibleACoste := '0.00';
          DetalleDesglose.CuotaRepercutida := FormatFloat('0.00',DTDesgloseIvas.FieldByName('BASIVA').AsFloat);
          DetalleDesglose.TipoRecargoEquivalencia := FormatFloat('0.00',DTDesgloseIvas.FieldByName('REC').AsFloat);
          DetalleDesglose.CuotaRecargoEquivalencia := FormatFloat('0.00',DTDesgloseIvas.FieldByName('BASREC').AsFloat);

       DTDesgloseIvas.Next;

           // desglose

        SetLength(ListaDesglose, Orden+1);
        ListaDesglose[Orden] := DetalleDesglose ;


       Orden := Orden + 1;

      end;

      Factura.RegistroFacturacion.Desglose := ListaDesglose;


    Factura.RegistroFacturacion.ImporteTotal := FormatFloat('0.00',DTFactura.FieldByName('TOTA').AsCurrency);

    // EncadenamientoFacturaAnterior
    Factura.RegistroFacturacion.EncadenamientoRegistroAnterior := EncadenamientoFacturaAnteriorType.Create;
    //Factura.RegistroFacturacion.EncadenamientoRegistroAnterior.IDEmisorFacturaRegistroAnterior := '' ;
    Factura.RegistroFacturacion.EncadenamientoRegistroAnterior.NumSerieFacturaRegistroAnterior := '';
    Factura.RegistroFacturacion.EncadenamientoRegistroAnterior.FechaExpedicionFacturaRegistroAnterior := '';
    Factura.RegistroFacturacion.EncadenamientoRegistroAnterior.HuellaRegistroAnterior := '';



    Factura.RegistroFacturacion.SistemaInformatico := SistemaInformaticoType.Create;
    Factura.RegistroFacturacion.SistemaInformatico.NombreRazon := '';
    Factura.RegistroFacturacion.SistemaInformatico.NIF         := '';

    Factura.RegistroFacturacion.SistemaInformatico.IDOtro := IDOtroType.Create;
    //Factura.RegistroFacturacion.SistemaInformatico.IDOtro.CodigoPais
    Factura.RegistroFacturacion.SistemaInformatico.IDOtro.IDType := PersonaFisicaJuridicaIDTypeType._02;

    Factura.RegistroFacturacion.SistemaInformatico.NombreSistemaInformatico := '';
    Factura.RegistroFacturacion.SistemaInformatico.IdSistemaInformatico     := '';
    Factura.RegistroFacturacion.SistemaInformatico.Version                  := '';
    Factura.RegistroFacturacion.SistemaInformatico.NumeroInstalacion        := '';
    Factura.RegistroFacturacion.SistemaInformatico.TipoUsoPosibleSoloVerifactu := SiNoType.S;
    Factura.RegistroFacturacion.SistemaInformatico.TipoUsoPosibleOtros         := SiNoType.N;
    Factura.RegistroFacturacion.SistemaInformatico.TipoUsoPosibleMultiOT       := SiNoType.N;
    Factura.RegistroFacturacion.SistemaInformatico.NumeroOTAlta := '1';


    Factura.RegistroFacturacion.FechaGenRegistro := '';
    Factura.RegistroFacturacion.HoraGenRegistro  := '';
    Factura.RegistroFacturacion.HusoHorarioGenRegistro := HusoHorarioGenRegistroType._02; //L13 provisional
    Factura.RegistroFacturacion.NumRegistroAcuerdoFacturacion := '';
    Factura.RegistroFacturacion.IdAcuerdoSistemaInformatico   := '';


  DTFactura.DisposeOf;

  Showmessage('// Extraemos XML');

  var ARootNode,newNode : IXMLNode;
  var RefId,Swdsl : String;
  var XML : TXMLDocument;
  XML := TXMLDocument.Create(Fr_user);

  XML.Active := True;
  XML.Version:='1.0';
  XML.Encoding:='utf-8';


  ARootNode := XML.CreateNode('RegistroFacturacion');

  var MOPToSoapDomConvert : TOPtoSOAPDomConvert;
  MOPToSoapDomConvert := TOPtoSOAPDomConvert.Create(Fr_user);

  MOPToSoapDomConvert.Encoding := 'utf-8';

  MOPToSoapDomConvert.Options :=
  [TSOAPConvertOption.soSendMultiRefObj,
  TSOAPConvertOption.soTryAllSchema,
  TSOAPConvertOption.soRootRefNodesToBody,
  TSOAPConvertOption.soCacheMimeResponse,
  TSOAPConvertOption.soUTF8EncodeXML,
  TSOAPConvertOption.soSOAP12];

  try

   Swdsl := 'no puedo poner enlaces 2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SistemaFacturacion.wsdl';

   try
   newNode := Factura.RegistroFacturacion.ObjectToSOAP( ARootNode, ARootNode, MOPToSoapDomConvert, 'RegistroFacturacionType',
   Swdsl,'T',[ocoDontPrefixNode,ocoDontPutTypeAttr], RefId  ); //ocoDontPrefixNode

   XML.DocumentElement := ARootNode;
   XML.XML.SaveToFile('RegistroFacturacion.xml',TEncoding.UTF8);
   XML.Active := False;

   Except
   On E : Exception do
   Begin
    Showmessage(E.Message);
    XML.DocumentElement := ARootNode;
    XML.XML.SaveToFile('RegistroFacturacionError.xml',TEncoding.UTF8);
    XML.Active := False;
   End;

   end;

  finally
    XML.DisposeOf;
    MOPToSoapDomConvert.disposeOf;
    Factura.DisposeOf;

  end;


End;



function Trimestre(Dia:TDate):integer;
var mes,Trimestre : Integer;
begin

  Mes := monthof(dia);
  case mes of
  1 : Trimestre := 1;
  2 : Trimestre := 1;
  3 : Trimestre := 1;
  4 : Trimestre := 2;
  5 : Trimestre := 2;
  6 : Trimestre := 2;
  7 : Trimestre := 3;
  8 : Trimestre := 3;
  9 : Trimestre := 3;
  10: Trimestre := 4;
  11: Trimestre := 4;
  12: Trimestre := 4;
  end;


 result:= Trimestre;

end;

function TipoFacturaVerifactu(DTFactura : TGesAdoDataset) : ClaveTipoFacturaType;
var TipoVerifactu : ClaveTipoFacturaType;
var TablaMaestra : Integer;
Begin


  //F1  Factura (art. 6, 7.2 y 7.3 del RD 1619/2012)   // Factura ordinadia normal
  //F2  Factura Simplificada y Facturas sin identificación del destinatario art. 6.1.d) RD 1619/2012
  //F3  Factura emitida en sustitución de facturas simplificadas facturadas y declaradas // Canje i Recapitulativa?

  //R1  Factura Rectificativa (Error fundado en derecho y Art. 80 Uno Dos y Seis LIVA) // Resolucion Judicial
  //R2  Factura Rectificativa (Art. 80.3)   // Impago
  //R3  Factura Rectificativa (Art. 80.4)   // Impago
  //R4  Factura Rectificativa (Resto) // Lo normal , por error
  //R5  Factura Rectificativa en facturas simplificadas

  // A ver que de que tabla es la factura
  TablaMaestra :=
  f_devolver_valor_campo(0,DTFactura.Connection,'N','Tablas','Nombre','Codigo',DTFactura.TableName);

  // Ordinarias
  if TablaMaestra = 24 then
  Begin

    // Es rectificativa u Ordinaria
    if DTFactura.FieldByName('TipoRectificativo').AsInteger = 0 then
    TipoVerifactu := ClaveTipoFacturaType.F1
    else
    TipoVerifactu := ClaveTipoFacturaType.R4;

  End;

  // Simplificadas
  if TablaMaestra = 3 then
  Begin

    // SImplificada ordinaria
    if DTFactura.FieldByName('Tipo').AsInteger = 1 then
    TipoVerifactu := ClaveTipoFacturaType.F2;

    // Es rectificativa //R5  Factura Rectificativa en facturas simplificadas
    if DTFactura.FieldByName('Tipo').AsInteger = 6 then
    TipoVerifactu := ClaveTipoFacturaType.R5;

  End;



  //Factura de canje de simplificads y recapitulativas
  //F3  Factura emitida en sustitución de facturas simplificadas facturadas y declaradas // Canje i Recapitulativa?
  if (TablaMaestra = 252) or (TablaMaestra = 248) then
  Begin

    // Es rectificativa u Ordinaria
    if DTFactura.FieldByName('TipoRectificativo').AsInteger = 0 then
    TipoVerifactu := ClaveTipoFacturaType.F3
    else
    TipoVerifactu := ClaveTipoFacturaType.R4;

  End;




  Result := TipoVerifactu;

End;


function TipoRectificativaVerifactu(CorrectionMethod : String) : ClaveTipoRectificativaType;
var TipoVerifactu : ClaveTipoRectificativaType;
Begin

  //S  Por sustitución
  //I  Por diferencias

  // Si es rectificativa

    //Sustitucion
    if CorrectionMethod = '01' then TipoVerifactu := ClaveTipoRectificativaType.S;

    //Diferencias
    if CorrectionMethod = '02' then TipoVerifactu := ClaveTipoRectificativaType.I;


  Result := TipoVerifactu;

End;


procedure AgregarRelacionRectificadasPorDiferencias(Conexion : TAdoConnection ; TablaMaestra : Integer ; IdFactura : String; Factura :FacturasEmitidasType);
var DTRectificadas : TGesAdoDataset;
var BaseRectificadas,IvaRectificadas,RecargoRectificadas : Currency;
var Orden : Integer;
var NombreTabla,NombreVista : String;
Begin

   //El fichero de lista de rectificadas por diferecnias
   DTRectificadas := f_crear_dataset(Conexion,DTRectificadas,'DTRectificadas','');

   try

   // Buscamos pro tabla
   NombreTabla := f_devolver_valor_campo(0,Conexion,'C','Tablas','Codigo','Nombre',TablaMaestra);
   NombreVista := 'Vista'+NombreTabla;

   DTRectificadas.Connection  :=  Conexion;
   DTRectificadas.TableName   := 'FacturasRectificadas';
   DTRectificadas.CommandText :=
   'Select * from '+NombreVista+' where Identificador in '+
   '(Select IdFacturaRectificada from FacturasRectificadas where (TablaFacturas = :TablaMaestra) and (IdFactura = :IdFactura)) ';

   f_valor_parametro_tabla(DTRectificadas,'TablaMaestra',TablaMaestra);
   f_valor_parametro_tabla(DTRectificadas,'IdFactura',IdFactura);

   f_open_adodataset(DTRectificadas,ltReadOnly);


   Orden := 0;
   BaseRectificadas    := 0;
   IvaRectificadas     := 0;
   RecargoRectificadas := 0;

   var ListaRectificadas : FacturasRectificadas := FacturasRectificadas.Create();
   while not DTRectificadas.Eof do
   Begin

    BaseRectificadas    := BaseRectificadas    + DTRectificadas.FieldByName('BASIMP').AsCurrency;
    IvaRectificadas     := IvaRectificadas     + DTRectificadas.FieldByName('BASIVA').AsCurrency;
    recargoRectificadas := RecargoRectificadas + DTRectificadas.FieldByName('BASREC').AsCurrency;

    // Añadimos la factura recitificada por diferencias
    var FacturaRectificada := IDFacturaARType.Create;
    FacturaRectificada.NumSerieFacturaEmisor        := DTRectificadas.FieldByName('ReferenciaDocumento').AsString;
    FacturaRectificada.FechaExpedicionFacturaEmisor := StringReplace(DTRectificadas.FieldByName('FECH').AsString,FormatSettings.DateSeparator,'-',
 [rfReplaceAll, rfIgnoreCase]); // (dd-mm-yyyy)

    SetLength(ListaRectificadas, Orden+1);
    ListaRectificadas[Orden] := FacturaRectificada;

    Orden := Orden + 1;

    DTRectificadas.Next;
   End;
   f_close_adodataset(DTRectificadas);
   Factura.RegistroFacturacion.FacturasRectificadas := ListaRectificadas;

    // La Suma de las bases rectificads i/o sustituidas
    Factura.RegistroFacturacion.ImporteRectificacion := DesgloseRectificacionType.Create;
    Factura.RegistroFacturacion.ImporteRectificacion.BaseRectificada         := CurrToStr(BaseRectificadas);
    Factura.RegistroFacturacion.ImporteRectificacion.CuotaRectificada        := CurrToStr(IvaRectificadas);
    Factura.RegistroFacturacion.ImporteRectificacion.CuotaRecargoRectificado := CurrToStr(RecargoRectificadas);

  finally
   DTRectificadas.DisposeOf;
  end;

end;


procedure AgregarRelacionRectificadasPorSustitucion(Conexion : TAdoConnection ; TablaMaestra : Integer ; IdFactura : String; Factura :FacturasEmitidasType);
var DTRectificadas : TGesAdoDataset;
var BaseRectificadas,IvaRectificadas,RecargoRectificadas : Currency;
var Orden : Integer;
var NombreTabla,NombreVista : String;
Begin

  //El fichero de lista de rectificadas por Sustitucion
  DTRectificadas := f_crear_dataset(Conexion,DTRectificadas,'DTRectificadas','');

  try

   // Buscamos pro tabla
   NombreTabla := f_devolver_valor_campo(0,Conexion,'C','Tablas','Codigo','Nombre',TablaMaestra);
   NombreVista := 'Vista'+NombreTabla;


    //El fichero de lista de rectificadas por Sustitucion
    DTRectificadas.Connection  :=  Conexion;
    DTRectificadas.TableName   := 'FacturasRectificadas';
    DTRectificadas.CommandText :=
    'Select * from '+NombreVista+' where Identificador in '+
    '(Select IdFacturaRectificada from FacturasRectificadas where (TablaFacturas = :TablaMaestra) and (IdFactura = :IdFactura)) ';

    f_valor_parametro_tabla(DTRectificadas,'TablaMaestra',TablaMaestra);
    f_valor_parametro_tabla(DTRectificadas,'IdFactura',IdFactura);

    f_open_adodataset(DTRectificadas,ltReadOnly);


    // Cada factura Sustituida
    Orden := 0;
    BaseRectificadas    := 0;
    IvaRectificadas     := 0;
    RecargoRectificadas := 0;

    var ListaFacturasSustituidas : FacturasSustituidas := FacturasSustituidas.Create();
    while not DTRectificadas.Eof do
    Begin

     BaseRectificadas    := BaseRectificadas + DTRectificadas.FieldByName('BASIMP').AsCurrency;
     IvaRectificadas     := IvaRectificadas + DTRectificadas.FieldByName('BASIVA').AsCurrency;
     recargoRectificadas := RecargoRectificadas + DTRectificadas.FieldByName('BASREC').AsCurrency;

     // Añadimos la factura recitificada sustitutiva
     var FacturaSustitutiva := IDFacturaARType.Create;
     FacturaSustitutiva.NumSerieFacturaEmisor        := DTRectificadas.FieldByName('ReferenciaDocumento').AsString;
     FacturaSustitutiva.FechaExpedicionFacturaEmisor := StringReplace(DTRectificadas.FieldByName('FECH').AsString,FormatSettings.DateSeparator,'-',
[rfReplaceAll, rfIgnoreCase]); // (dd-mm-yyyy)


     SetLength(ListaFacturasSustituidas, Orden+1);
     ListaFacturasSustituidas[Orden] := FacturaSustitutiva;


     Orden := Orden + 1;

     DTRectificadas.Next;

    End;
    f_close_adodataset(DTRectificadas);
    Factura.RegistroFacturacion.FacturasSustituidas := ListaFacturasSustituidas;

    // La Suma de las bases rectificads i/o sustituidas
    Factura.RegistroFacturacion.ImporteRectificacion := DesgloseRectificacionType.Create;
    Factura.RegistroFacturacion.ImporteRectificacion.BaseRectificada         := CurrToStr(BaseRectificadas);
    Factura.RegistroFacturacion.ImporteRectificacion.CuotaRectificada        := CurrToStr(IvaRectificadas);
    Factura.RegistroFacturacion.ImporteRectificacion.CuotaRecargoRectificado := CurrToStr(RecargoRectificadas);


  finally
   DTRectificadas.DisposeOf;
  end;



end;


function ClaveRegimenVerifactu(Conexion : TAdoConnection ; RegimenIva : Integer) : IdOperacionesTrascendenciaTributariaType;
var CodigoVerifactu : String;
var TypeRegimen : IdOperacionesTrascendenciaTributariaType;
Begin

  //'L8';

// 01  Operación de régimen general.
// 02  Exportación.
// 03  Operaciones a las que se aplique el régimen especial de bienes usados, objetos de arte, antigüedades y objetos de colección.
// 04  Régimen especial del oro de inversión.
// 05  Régimen especial de las agencias de viajes.
// 06  Régimen especial grupo de entidades en IVA (Nivel Avanzado)
// 07  Régimen especial del criterio de caja.
// 08  Operaciones sujetas al IPSI  / IGIC (Impuesto sobre la Producción, los Servicios y la Importación  / Impuesto General Indirecto Canario).
// 09  Facturación de las prestaciones de servicios de agencias de viaje que actúan como mediadoras en nombre y por cuenta ajena (D.A.4ª RD1619/2012)
// 10  Cobros por cuenta de terceros de honorarios profesionales o de derechos derivados de la propiedad industrial, de autor u otros por cuenta de sus socios, 
// asociados o colegiados efectuados por sociedades, asociaciones, colegios profesionales u otras entidades que realicen estas funciones de cobro.
// 11  Operaciones de arrendamiento de local de negocio.
// 12  Factura con IVA pendiente de devengo en certificaciones de obra cuyo destinatario sea una Administración Pública.
// 13  Factura con IVA pendiente de devengo en operaciones de tracto sucesivo.
// 14  Régimen simplificado
// 15  Recargo de equivalencia.
// 16  Régimen especial de la agricultura


  // Falta ponde ren la carga inicial
  CodigoVerifactu := f_devolver_valor_campo(0,Conexion,'C','RegimenesIVA','Codigo','CodVerifactu',RegimenIva);


   Case IndexStr(CodigoVerifactu, ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16']) of
   0  : TypeRegimen := IdOperacionesTrascendenciaTributariaType._01;
   1  : TypeRegimen := IdOperacionesTrascendenciaTributariaType._02;
   2  : TypeRegimen := IdOperacionesTrascendenciaTributariaType._03;
   3  : TypeRegimen := IdOperacionesTrascendenciaTributariaType._04;
   4  : TypeRegimen := IdOperacionesTrascendenciaTributariaType._05;
   5  : TypeRegimen := IdOperacionesTrascendenciaTributariaType._06;
   6  : TypeRegimen := IdOperacionesTrascendenciaTributariaType._07;
   7  : TypeRegimen := IdOperacionesTrascendenciaTributariaType._08;
   8  : TypeRegimen := IdOperacionesTrascendenciaTributariaType._09;
   9  : TypeRegimen := IdOperacionesTrascendenciaTributariaType._10;
   10 : TypeRegimen := IdOperacionesTrascendenciaTributariaType._11;
   11 : TypeRegimen := IdOperacionesTrascendenciaTributariaType._12;
   12 : TypeRegimen := IdOperacionesTrascendenciaTributariaType._13;
   13 : TypeRegimen := IdOperacionesTrascendenciaTributariaType._14;
   14 : TypeRegimen := IdOperacionesTrascendenciaTributariaType._15;
   15 : TypeRegimen := IdOperacionesTrascendenciaTributariaType._16;
   else
   Begin
     TypeRegimen := IdOperacionesTrascendenciaTributariaType._01;
   End;
  end;

  Result := TypeRegimen;


End;


function TipoCalificacionOperacion : CalificacionOperacionType;
Begin

// L9

// S1  Operación Sujeta y No exenta - Sin inversión del sujeto pasivo.
// S2  Operación Sujeta y No exenta - Con Inversión del sujeto pasivo
// N1  Operación No Sujeta artículo 7, 14, otros.
// N2  Operación No Sujeta por Reglas de localización.

  Result := CalificacionOperacionType.S1;

End;


function TipoOperacionExenta : OperacionExentaType;
Begin

  //L10 - solo si exenta de IVA

// E0  Exenta sin especificar causa
// E1  Exenta por el artículo 20
// E2  Exenta por el artículo 21
// E3  Exenta por el artículo 22
// E4  Exenta por los artículos 23 y 24
// E5  Exenta por el artículo 25
// E6  Exenta por otros

  result := OperacionExentaType.E0;

End;


end.


Luego el código en bruto para recogerlo:

Código Delphi [-]
  XMLDocument1.XML.LoadFromFile('RegistroFacturacion.xml');
  XMLDocument1.Active := True;

  var fact2:FacturasEmitidasType;
  fact2 := FacturasEmitidasType.Create;
  fact2.RegistroFacturacion := RegistroFacturacionType.Create;

  ARootNode := XMLDocument1.DocumentElement;

  var MySOAPDomConv: TSOAPDomConv;
  MySOAPDomConv:= TSOAPDomConv.Create(Self);

  fact2.RegistroFacturacion.SOAPToObject(ARootNode.ChildNodes[0] , ARootNode.ChildNodes[0] , MySOAPDomConv);

  Showmessage('2 '+
  fact2.RegistroFacturacion.DescripcionOperacion+' '+
  fact2.RegistroFacturacion.IDFactura.NumSerieFacturaEmisor);



  fact2.DisposeOf;
  fact2.RegistroFacturacion.DisposeOf;

Última edición por Neftali [Germán.Estévez] fecha: 06-03-2024 a las 08:20:35. Razón: Correccion ancho columna
Responder Con Cita
  #9  
Antiguo 13-03-2024
CarlosR CarlosR is offline
Miembro
 
Registrado: sep 2015
Posts: 67
Poder: 9
CarlosR Va por buen camino
NO es raro

Hace ya algunos meses que se hacen los suecos para contestar o te remiten a alguna norma o anteproyecto que tengan publicado.
No se pisan las uñas. Imagino que de algún modo querrán coordinarse también con la futura ley Crea y Crece de factura electrónica.

De todas formas hay mucha información disponible. Vídeo, preguntas y respuestas, boe, definición de servicio web, excell con formatos, etc.
Responder Con Cita
  #10  
Antiguo 13-03-2024
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.035
Poder: 22
keys Va por buen camino
Noticias frescas https://www.agenciatributaria.es/AEA...olladores.html
Responder Con Cita
  #11  
Antiguo 14-03-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 886
Poder: 3
ermendalenda Va por buen camino
Cita:
Empezado por keys Ver Mensaje
Gracias keys
A ver que nos encontramos.
Responder Con Cita
  #12  
Antiguo 14-03-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 886
Poder: 3
ermendalenda Va por buen camino
Post Nuevo Formato

Veo algunos cambios, los más importantes que veo son estos:
* Nuevos Nodos
Subsanacion
RechazoPrevio

Hay que esperar que nos expliquen si estos se encadenan y como, además los conceptos se entremezclan, por que el de subsanación es muy parecido al de rechazo previo, pero no se si cuando te rechazan hay que marcar los 2 una vez subsanado. Tendrán que aclarar y poner ejemplos o cambiarlo. Por otro lado ¿Como se encadena este registro, justo con el anterior generado en el orden secuencial actual?


*Nuevo Nodo
Macrodato
Identificador que especifica aquellas facturas con base o importe de la factura superior al umbral especificado. Este ...
A ver si alguno sabe para que puede ser


Por otro lado, han informado que el calculo del hash lo harñan sobre una parte del contenido que ya informaran, tambén han cambiado el nombre de algún nodo, otros nodos lo han cambiado de sitio y otros lo han eliminado.
No voy a tocar nada hasta que pongan el Wsdl o el Xsd por que aun no lo veo.
Responder Con Cita
  #13  
Antiguo 14-03-2024
antoine0 antoine0 is offline
Miembro
 
Registrado: oct 2021
Posts: 144
Poder: 3
antoine0 Va por buen camino
Cita:
Empezado por ermendalenda Ver Mensaje
*Nuevo Nodo
Macrodato
Identificador que especifica aquellas facturas con base o importe de la factura superior al umbral especificado. Este ...
A ver si alguno sabe para que puede ser
Esto existe ya en el SII. Es para evitar errores con consecuencias.
Cuando tienes una factura con un importe muy grande (100.000 € en el SII si no recuerdo mal, el importe es parametrizable de aquí la redacción poco esclarecedora), tienes que documentar este nodo para significar que S(í), el importe es grande pero está comprobado que es así.
Responder Con Cita
  #14  
Antiguo 14-03-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 886
Poder: 3
ermendalenda Va por buen camino
Duda Nodo ClaveRegimen

Hola. A ver si me podeis ayudar con la clave de Régimen
ya que lo normal es 01 pero si tiene recargo de equivalencia es 18,
mi duda es si el contenido de la clave 18 va el nodo del iva y el nodo del recargo o hay que crear 2 nodos de DetalleDesglose: 1 para el iva y otro para el recargo
Gracias
Responder Con Cita
  #15  
Antiguo 14-03-2024
CarlosR CarlosR is offline
Miembro
 
Registrado: sep 2015
Posts: 67
Poder: 9
CarlosR Va por buen camino
mas consultas

Ayer hice una consulta para certificar que el esquema que uso de un XML en una tabla de cabeceras con todos los datos que exige la AEAT, además de los hases si cumplirá normas o si bien debería usar tablas paralelas para el registro con los datos de la AEAT y me contestan que esté atento. Que toman nota de la consulta ¡ Y solo quedan 7 meses !
O sacan rápido la información definitiva o a alguno se le acercará de pronto la edad de jubilación.
Es cierto, ahora el hash se hará por partes y no por la totalidad. Aunque ahora no exigen firmar los xml a los que se acojan solo a veri*factu supongo que el tema queda abierto para un futuro.
Tampoco sé si los requerimientos son exportaciones de los xml de las altas, anulaciones y eventos que luego se suben a su portal web o bien habrá webservices para tal fin.

Todavía no hay un servicio de pruebas tal y como hubo en su momento con el SII.

Han relajado algo las normas para los NO Verifactu pero el hecho de que el productor informático sea el responsable de los datos del cliente durante 5 años es para pensarlo. Por mi parte intentaré cumplir con los requisitos de los dos modelos y decidiré a última hora si sólo me quedo con el veri*factu.
He visto que ya hay gente trabajando en el QR. Veo datos que se usarán en la página de la AEAT para consultar si hay el documento registrado pero no veo todos los detalles que debe tener la etiqueta. (tamaño, otros datos mas además de los que se usarán para la consulta de la página) Por otro lado la AEAT devolverá un código con cada factura que se suba por el webservice pero, además de que se archive en las tablas, ¿ se usa para algo ?
Si debe estar en el QR tenemos un problema a la hora de expedir cualquier tipo de factura incluida la simplificada puesto que no siempre pero a veces falla internet, o el router, o un switch, o la propia AEAT. ¿ Se paraliza entonces la expedición de tikets ? (simplificadas)

¡ Esto va lento !
Responder Con Cita
  #16  
Antiguo 14-03-2024
CarlosR CarlosR is offline
Miembro
 
Registrado: sep 2015
Posts: 67
Poder: 9
CarlosR Va por buen camino
Eliminacion de CE

Cita:
Empezado por keys Ver Mensaje

En la nueva especificación de la hoja de cálculo se han eliminado las referencias a C-E o el archivo general de los que no se acojan a veri*factu. Con lo que intuyo que todo va al "mismo paquete".
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Hijo de Informáticos gluglu Humor 3 13-03-2007 11:05:35
Adictos informaticos ... Trigger Humor 2 11-10-2004 12:18:32
Nosotros los Informáticos Trigger Humor 1 10-10-2004 14:58:09
Patrón de los Informáticos. obiwuan Varios 20 10-09-2003 14:44:54
Chistes Informaticos jhonny Humor 2 11-08-2003 21:59:09


La franja horaria es GMT +2. Ahora son las 18:05:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi