Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   TICKET BAI (TicketBAI); Nuevo sistema de la Agencia Tributaria del Pais Vasco (https://www.clubdelphi.com/foros/showthread.php?t=94264)

ermendalenda 22-09-2021 16:04:15

Cita:

Empezado por rci (Mensaje 543031)
Hola, veo que comentais mucho sobre el número de serie del dispositivo, pero yo tengo entendido que debido a la imposibilidad técnica de saberlo en todos los casos, es un valor que no es obligatorio y por lo tanto no lo relleno y no me he preocupado en obtenerlo.


Es así o estoy equivocado?


Muchas gracias

Yo he entendido que quiere usar un certificado de dispositivo para firmar, nada que ver con identificar el dispositivo en el fichero tbai que de momento no es obligatorio

rci 22-09-2021 16:16:50

Cita:

Empezado por ermendalenda (Mensaje 543033)
Yo he entendido que quiere usar un certificado de dispositivo para firmar, nada que ver con identificar el dispositivo en el fichero tbai que de momento no es obligatorio


Tienes razón, ahora me he fijado en eso.
Yo me referia al campo de la HuellaTBAI


Muchas gracias

Noe277 22-09-2021 16:39:34

Cita:

Empezado por ermendalenda (Mensaje 543033)
Yo he entendido que quiere usar un certificado de dispositivo para firmar, nada que ver con identificar el dispositivo en el fichero tbai que de momento no es obligatorio

Nosotros lo estamos metiendo como obligatorio y les obligamos a que lo pidan. Puedo tener a 10 usuarios atacando a una misma empresa y de esta manera puedo llevar la concatenación de las facturas por equipo y si falla algo en algún equipo no fastidia a los demás.

Sistel 22-09-2021 16:40:03

Cita:

Empezado por rci (Mensaje 543030)
Hola Espinete,
En bizkaia se pospone la obligatoriedad de Batuz y de ticketBAI también

Hola rci y Espinete,

Aunque se posponga la obligatoriedad de TicketBAI-Batuz en Bizkaia, puede ser muy interesante implementarlo de forma voluntaria.
Han aprobado, recientemente, una deducción del 15% de la base imponible del Impuesto sobre Sociedades (o del IRPF en el caso de autónomos) durante el 2022 y 2023 a quienes lo pongan en marcha.
(Aparte del 30% de gasto deducible por la puesta en marcha)

Saludos

ermendalenda 22-09-2021 16:51:41

Cita:

Empezado por Noe277 (Mensaje 543035)
Nosotros lo estamos metiendo como obligatorio y les obligamos a que lo pidan. Puedo tener a 10 usuarios atacando a una misma empresa y de esta manera puedo llevar la concatenación de las facturas por equipo y si falla algo en algún equipo no fastidia a los demás.

Sí, yo también, pero meto la MAC, que además la uso como parte de la licencia del software junto a la id del disco, del procesador. Y de otras.

ermendalenda 22-09-2021 16:56:18

Por cierto alguien conoce el blockchain? (intercambios de ficheros JSON) parecido al p2p pero con firma electrónica. Esperemos que la Aeat no se vaya por esos derroteros para la gestión similar a TicketBai. Da miedete meterse en otro tema.

tejano 22-09-2021 17:33:18

Cita:

Empezado por ermendalenda (Mensaje 543032)
A ver este tema me interesa. Lo que yo haría es intentar hablar con un emisor de certificados de dispositivos por ejemplo IZENPE para que te aconseje por que lo que yo pienso puedo estar equivicado:
El certificado de dispositivo se solicita sobre un número de serie y el certificado no va a comprobar que corresponde, pero si será necesario para posibles inspecciones que garantice un número de serie único y sigo pensando que te puede servir la MAC, y si te da 2 o as seguramente puedas identificarlas por software en un orden y puedes coger siempre la primera.

Yo utilizo el comando "wmic bios get serialnumber" para saber la serie del dispositivo.

De echo, he creado un certificado de dispositivo de Izenpe con esta serie.

ermendalenda 22-09-2021 17:44:21

Cita:

Empezado por tejano (Mensaje 543040)
Yo utilizo el comando "wmic bios get serialnumber" para saber la serie del dispositivo.

De echo, he creado un certificado de dispositivo de Izenpe con esta serie.

Gracias. Pues ya le has respondido y muy interesante.

HerensugeBeltz 22-09-2021 17:44:51

Cita:

Empezado por tejano (Mensaje 543040)
Yo utilizo el comando "wmic bios get serialnumber" para saber la serie del dispositivo.

De echo, he creado un certificado de dispositivo de Izenpe con esta serie.

En mi PC no puedo leer el serialnumber de la BIOS, por lo que uso el de la placa base.
A la hora de pedir el certificado, a Izenpe por ejemplo, comunicará el nº de serie que desees, BIOS o placa.

En nuestro caso, si el certificado de la firma es de dispositivo comprobamos que coincida con alguno de los dos, BIOS o placa. En caso contrario lanzamos un error.

ermendalenda 22-09-2021 17:54:04

Esta es la función en VB que uso para leer Identicador y serie procesador, es algo mas completo para evitar la duplicidad.
Código:

Public Function GetOsBitness() As String
    Dim ProcessorSet As Object
    Dim WMI As Object
    Dim CPU As Object
    Dim obj As Object
    Dim objs As Object
    Set WMI = GetObject("WinMgmts:")
    Set objs = WMI.InstancesOf("WIN32_BaseBoard")
    For Each obj In objs
        procid = procid & obj.SerialNumber
        If procid < objs.Count Then procid = procid & "."
    Next
   
    MBSerialNumber = procid
    procid = LTrim$(procid)
    procid = RTrim$(procid)
    Set ProcessorSet = GetObject("WinMgmts:"). _
    ExecQuery("SELECT * FROM Win32_Processor")
    For Each CPU In ProcessorSet
        GetOsBitness = CStr(CPU.AddressWidth)
       
    Next
    GetOsBitness = procid & " " & GetOsBitness
End Function


ermendalenda 22-09-2021 17:58:40

Si lo necesitas te hago un exe que te genere un fichero

Ramon88 22-09-2021 19:21:39

Cita:

Empezado por ermendalenda (Mensaje 543010)
En Vb cambiando poca cosa te vale para net:
Código:

Private Declare Function WideCharToMultiByte Lib "kernel32" ( _
    ByVal CodePage As Long, _
    ByVal dwFlags As Long, _
    ByVal lpWideCharStr As Long, _
    ByVal cchWideChar As Long, _
    ByVal lpMultiByteStr As Long, _
    ByVal cbMultiByte As Long, _
    ByVal lpDefaultChar As Long, _
    ByVal lpUsedDefaultChar As Long) As Long

Dim CRC8_Table As Variant
' CodePage constant for UTF-8
Private Const CP_UTF8 = 65001

''' Return byte array with VBA "Unicode" string encoded in UTF-8
Function Utf8BytesFromString(strInput As String) As Variant
    Dim nBytes As Long
    ' Catch empty or null input string
    Utf8BytesFromString = vbNullString
    If Len(strInput) < 1 Then Exit Function
    ' Get length in bytes *including* terminating null
    nBytes = WideCharToMultiByte(CP_UTF8, 0&, ByVal StrPtr(strInput), -1, 0&, 0&, 0&, 0&)
    ' We don't want the terminating null in our byte array, so ask for `nBytes-1` bytes
    Dim abBuffer() As Byte
   
    ReDim abBuffer(nBytes - 2)  ' NB ReDim with one less byte than you need
    nBytes = WideCharToMultiByte(CP_UTF8, 0&, ByVal StrPtr(strInput), -1, ByVal VarPtr(abBuffer(0)), nBytes - 1, 0&, 0&)
    Utf8BytesFromString = abBuffer
End Function


Public Function crc8(buffer As String, Polynom, Initial As Variant) As Variant
CRC8_Table = Array(&H0, &H7, &HE, &H9, &H1C, &H1B, &H12, &H15, _
    &H38, &H3F, &H36, &H31, &H24, &H23, &H2A, &H2D, &H70, &H77, &H7E, &H79, &H6C, &H6B, &H62, &H65, _
    &H48, &H4F, &H46, &H41, &H54, &H53, &H5A, &H5D, &HE0, &HE7, &HEE, &HE9, &HFC, &HFB, &HF2, &HF5, _
    &HD8, &HDF, &HD6, &HD1, &HC4, &HC3, &HCA, &HCD, &H90, &H97, &H9E, &H99, &H8C, &H8B, &H82, &H85, _
    &HA8, &HAF, &HA6, &HA1, &HB4, &HB3, &HBA, &HBD, &HC7, &HC0, &HC9, &HCE, &HDB, &HDC, &HD5, &HD2, _
    &HFF, &HF8, &HF1, &HF6, &HE3, &HE4, &HED, &HEA, &HB7, &HB0, &HB9, &HBE, &HAB, &HAC, &HA5, &HA2, _
    &H8F, &H88, &H81, &H86, &H93, &H94, &H9D, &H9A, &H27, &H20, &H29, &H2E, &H3B, &H3C, &H35, &H32, _
    &H1F, &H18, &H11, &H16, &H3, &H4, &HD, &HA, &H57, &H50, &H59, &H5E, &H4B, &H4C, &H45, &H42, _
    &H6F, &H68, &H61, &H66, &H73, &H74, &H7D, &H7A, &H89, &H8E, &H87, &H80, &H95, &H92, &H9B, &H9C, _
    &HB1, &HB6, &HBF, &HB8, &HAD, &HAA, &HA3, &HA4, &HF9, &HFE, &HF7, &HF0, &HE5, &HE2, &HEB, &HEC, _
    &HC1, &HC6, &HCF, &HC8, &HDD, &HDA, &HD3, &HD4, &H69, &H6E, &H67, &H60, &H75, &H72, &H7B, &H7C, _
    &H51, &H56, &H5F, &H58, &H4D, &H4A, &H43, &H44, &H19, &H1E, &H17, &H10, &H5, &H2, &HB, &HC, _
    &H21, &H26, &H2F, &H28, &H3D, &H3A, &H33, &H34, &H4E, &H49, &H40, &H47, &H52, &H55, &H5C, &H5B, _
    &H76, &H71, &H78, &H7F, &H6A, &H6D, &H64, &H63, &H3E, &H39, &H30, &H37, &H22, &H25, &H2C, &H2B, _
    &H6, &H1, &H8, &HF, &H1A, &H1D, &H14, &H13, &HAE, &HA9, &HA0, &HA7, &HB2, &HB5, &HBC, &HBB, _
    &H96, &H91, &H98, &H9F, &H8A, &H8D, &H84, &H83, &HDE, &HD9, &HD0, &HD7, &HC2, &HC5, &HCC, &HCB, _
    &HE6, &HE1, &HE8, &HEF, &HFA, &HFD, &HF4, &HF3)
 
  Dim data As Variant
    data = Utf8BytesFromString(buffer)
  Dim alen, i As Integer
  Dim crc As Byte
  'data = Buffer ':= TEncoding.UTF8.GetBytes(Cadena);
  alen = UBound(data)
  crc = 0
   
  For i = 0 To alen
    crc = CRC8_Table((crc Xor data(i)) And &HFF)
 
Next
    crc8 = crc And &HFF



End Function

Para llamar a la función y que te devuelva en cr8:
cr8 = crc8(Cadena_enviada, 7, 0)


iNITIAL Y POLYNOM CREO QUE PUEDES OBVIARLAS


Pues te lo agradezco muchisimo! me esta dando fallo en la linea

Código:

nBytes = WideCharToMultiByte(CP_UTF8, 0&, ByVal StrPtr(strInput), -1, 0&, 0&, 0&, 0&)
Exactamente en WideCharToMultiByte
Subo la funcion en si:
Código:

Private Declare Function WideCharToMultiByte Lib "kernel32" (
      ByVal CodePage As Long,
      ByVal dwFlags As Long,
      ByVal lpWideCharStr As Long,
      ByVal cchWideChar As Long,
      ByVal lpMultiByteStr As Long,
      ByVal cbMultiByte As Long,
      ByVal lpDefaultChar As Long,
      ByVal lpUsedDefaultChar As Long) As Long

    Dim CRC8_Table As Object
    ' CodePage constant for UTF-8
    Private Const CP_UTF8 = 65001

Tambien me da error aqui(Exactamente en Array(Es un tipo de clase y no se puede usar como una expresion)):
Código:

Public Function crc8(buffer As String, Polynom As Object, Initial As Object) As Object
        CRC8_Table = Array(&H0, &H7, &HE, &H9, &H1C, &H1B, &H12, &H15,
            &H38, &H3F, &H36, &H31, &H24, &H23, &H2A, &H2D, &H70, &H77, &H7E, &H79, &H6C, &H6B, &H62, &H65,
            &H48, &H4F, &H46, &H41, &H54, &H53, &H5A, &H5D, &HE0, &HE7, &HEE, &HE9, &HFC, &HFB, &HF2, &HF5,
            &HD8, &HDF, &HD6, &HD1, &HC4, &HC3, &HCA, &HCD, &H90, &H97, &H9E, &H99, &H8C, &H8B, &H82, &H85,
            &HA8, &HAF, &HA6, &HA1, &HB4, &HB3, &HBA, &HBD, &HC7, &HC0, &HC9, &HCE, &HDB, &HDC, &HD5, &HD2,
            &HFF, &HF8, &HF1, &HF6, &HE3, &HE4, &HED, &HEA, &HB7, &HB0, &HB9, &HBE, &HAB, &HAC, &HA5, &HA2,
            &H8F, &H88, &H81, &H86, &H93, &H94, &H9D, &H9A, &H27, &H20, &H29, &H2E, &H3B, &H3C, &H35, &H32,
            &H1F, &H18, &H11, &H16, &H3, &H4, &HD, &HA, &H57, &H50, &H59, &H5E, &H4B, &H4C, &H45, &H42,
            &H6F, &H68, &H61, &H66, &H73, &H74, &H7D, &H7A, &H89, &H8E, &H87, &H80, &H95, &H92, &H9B, &H9C,
            &HB1, &HB6, &HBF, &HB8, &HAD, &HAA, &HA3, &HA4, &HF9, &HFE, &HF7, &HF0, &HE5, &HE2, &HEB, &HEC,
            &HC1, &HC6, &HCF, &HC8, &HDD, &HDA, &HD3, &HD4, &H69, &H6E, &H67, &H60, &H75, &H72, &H7B, &H7C,
            &H51, &H56, &H5F, &H58, &H4D, &H4A, &H43, &H44, &H19, &H1E, &H17, &H10, &H5, &H2, &HB, &HC,
            &H21, &H26, &H2F, &H28, &H3D, &H3A, &H33, &H34, &H4E, &H49, &H40, &H47, &H52, &H55, &H5C, &H5B,
            &H76, &H71, &H78, &H7F, &H6A, &H6D, &H64, &H63, &H3E, &H39, &H30, &H37, &H22, &H25, &H2C, &H2B,
            &H6, &H1, &H8, &HF, &H1A, &H1D, &H14, &H13, &HAE, &HA9, &HA0, &HA7, &HB2, &HB5, &HBC, &HBB,
            &H96, &H91, &H98, &H9F, &H8A, &H8D, &H84, &H83, &HDE, &HD9, &HD0, &HD7, &HC2, &HC5, &HCC, &HCB,
            &HE6, &HE1, &HE8, &HEF, &HFA, &HFD, &HF4, &HF3)

        Dim data As Object
        data = Utf8BytesFromString(buffer)
        Dim alen, i As Integer
        Dim crc As Byte
        'data = Buffer ':= TEncoding.UTF8.GetBytes(Cadena);
        alen = UBound(data)
        crc = 0

        For i = 0 To alen
            crc = CRC8_Table((crc Xor data(i)) And &HFF)

        Next

        crc8 = crc And &HFF

    End Function


ermendalenda 22-09-2021 20:10:36

1 Archivos Adjunto(s)
Cita:

Empezado por Ramon88 (Mensaje 543046)
Pues te lo agradezco muchisimo! me esta dando fallo en la linea

Código:

nBytes = WideCharToMultiByte(CP_UTF8, 0&, ByVal StrPtr(strInput), -1, 0&, 0&, 0&, 0&)
Exactamente en WideCharToMultiByte
Subo la funcion en si:
Código:

Private Declare Function WideCharToMultiByte Lib "kernel32" (
      ByVal CodePage As Long,
      ByVal dwFlags As Long,
      ByVal lpWideCharStr As Long,
      ByVal cchWideChar As Long,
      ByVal lpMultiByteStr As Long,
      ByVal cbMultiByte As Long,
      ByVal lpDefaultChar As Long,
      ByVal lpUsedDefaultChar As Long) As Long

    Dim CRC8_Table As Object
    ' CodePage constant for UTF-8
    Private Const CP_UTF8 = 65001

Tambien me da error aqui(Exactamente en Array(Es un tipo de clase y no se puede usar como una expresion)):
Código:

Public Function crc8(buffer As String, Polynom As Object, Initial As Object) As Object
        CRC8_Table = Array(&H0, &H7, &HE, &H9, &H1C, &H1B, &H12, &H15,
            &H38, &H3F, &H36, &H31, &H24, &H23, &H2A, &H2D, &H70, &H77, &H7E, &H79, &H6C, &H6B, &H62, &H65,
            &H48, &H4F, &H46, &H41, &H54, &H53, &H5A, &H5D, &HE0, &HE7, &HEE, &HE9, &HFC, &HFB, &HF2, &HF5,
            &HD8, &HDF, &HD6, &HD1, &HC4, &HC3, &HCA, &HCD, &H90, &H97, &H9E, &H99, &H8C, &H8B, &H82, &H85,
            &HA8, &HAF, &HA6, &HA1, &HB4, &HB3, &HBA, &HBD, &HC7, &HC0, &HC9, &HCE, &HDB, &HDC, &HD5, &HD2,
            &HFF, &HF8, &HF1, &HF6, &HE3, &HE4, &HED, &HEA, &HB7, &HB0, &HB9, &HBE, &HAB, &HAC, &HA5, &HA2,
            &H8F, &H88, &H81, &H86, &H93, &H94, &H9D, &H9A, &H27, &H20, &H29, &H2E, &H3B, &H3C, &H35, &H32,
            &H1F, &H18, &H11, &H16, &H3, &H4, &HD, &HA, &H57, &H50, &H59, &H5E, &H4B, &H4C, &H45, &H42,
            &H6F, &H68, &H61, &H66, &H73, &H74, &H7D, &H7A, &H89, &H8E, &H87, &H80, &H95, &H92, &H9B, &H9C,
            &HB1, &HB6, &HBF, &HB8, &HAD, &HAA, &HA3, &HA4, &HF9, &HFE, &HF7, &HF0, &HE5, &HE2, &HEB, &HEC,
            &HC1, &HC6, &HCF, &HC8, &HDD, &HDA, &HD3, &HD4, &H69, &H6E, &H67, &H60, &H75, &H72, &H7B, &H7C,
            &H51, &H56, &H5F, &H58, &H4D, &H4A, &H43, &H44, &H19, &H1E, &H17, &H10, &H5, &H2, &HB, &HC,
            &H21, &H26, &H2F, &H28, &H3D, &H3A, &H33, &H34, &H4E, &H49, &H40, &H47, &H52, &H55, &H5C, &H5B,
            &H76, &H71, &H78, &H7F, &H6A, &H6D, &H64, &H63, &H3E, &H39, &H30, &H37, &H22, &H25, &H2C, &H2B,
            &H6, &H1, &H8, &HF, &H1A, &H1D, &H14, &H13, &HAE, &HA9, &HA0, &HA7, &HB2, &HB5, &HBC, &HBB,
            &H96, &H91, &H98, &H9F, &H8A, &H8D, &H84, &H83, &HDE, &HD9, &HD0, &HD7, &HC2, &HC5, &HCC, &HCB,
            &HE6, &HE1, &HE8, &HEF, &HFA, &HFD, &HF4, &HF3)

        Dim data As Object
        data = Utf8BytesFromString(buffer)
        Dim alen, i As Integer
        Dim crc As Byte
        'data = Buffer ':= TEncoding.UTF8.GetBytes(Cadena);
        alen = UBound(data)
        crc = 0

        For i = 0 To alen
            crc = CRC8_Table((crc Xor data(i)) And &HFF)

        Next

        crc8 = crc And &HFF

    End Function


Te dejo un ejecutable para que lo uses

keys 23-09-2021 08:10:41

En nuestro caso nos hemos encontrado con ordenadores que "wmic bios get serialnumber" no devuelve nada. Es mas en nuestro caso al obtener el certificado de dispositivo en Izenpe no encontraron ningún número que le proporcionara el equipo. Al final nos hicieron abrir el equipo y mirar el numero de seire que trae la palaca base en una pegatina.

Por lo tanto el numero de seire del dispositivo puede ser cualquier cosa. Nosotros lo que hacemos es que si utiliza un certificado de dispositivo nos tiene que indicar el uaurio el número de serie que le ha otrogado la entidad certificadora.

Ramon88 23-09-2021 09:43:57

Cita:

Empezado por ermendalenda (Mensaje 543048)
Te dejo un ejecutable para que lo uses


Eres increible, muchas gracias!

Neftali [Germán.Estévez] 23-09-2021 10:00:10

Cita:

Empezado por ermendalenda (Mensaje 543048)
Te dejo un ejecutable para que lo uses


En otro de los hilos tiene disponible lo mismo, pero en DLL (y el ejemplo de llamada), por si te puede servir.
https://www.clubdelphi.com/foros/sho...&postcount=607

Sistel 23-09-2021 10:17:08

Cita:

Empezado por espinete (Mensaje 543026)
...
Gipuzkoa y Araba sí permiten el envío del ticket en el momento de hacer la factura (no como Bizkaia que se hacía de 1000 en 1000). ¿Eso ha cambiado también? ¿Cómo y cuándo se hace el envío a Bizkaia tras los cambios de Batuz?
...

Hola espinete,

En Batuz (Bizkaia) los plazos para el envío de los ficheros TicketBAI son los mismos de presentación de IVA (trimestral en la mayoría de los casos, mensuales en algunos casos y en el plazo de 4 días laborables para los obligados al SII)
Ten en cuenta que a la entrada en funcionamiento de Batuz desaparecen las declaraciones de IVA (al igual que las declaraciones de operaciones con terceros, de SII y del Impuesto sobre Sociedades)
Hacienda enviará un borrador (ya que los datos ya los tiene por habérsele enviado por LROE) y sólo habrá que aceptarlo o solicitar cambios (enviando documentación que los avale).

Que se permitan envíos de hasta 1.000 facturas en los LROE 140 y 240, no obliga a hacerlos tan grandes.
Nadie te impide enviar cada fichero TicketBAI (mediante LROE) en el mismo momento de crearse y firmarse.
Es mucho más sencillo controlar la respuesta al envío de un solo fichero.
Y es una buena forma de estar al día y prevenir posibles problemas por pérdidas de datos.

Saludos

sEngine 23-09-2021 10:21:19

Cita:

Empezado por keys (Mensaje 543021)
Releyendo el mensaje que acaban de enviar de Bizkaia.



Por lo tanto vamos a estan sin entorno de pruebas hasta mediados de noviembre (:confused:), vamos a tener que enviar al real. Si es que puedes, ya que me imagino que tendrás que tener una empresa de Bizkaia y tener un certificado real de producción como dice el mensaje.

Que majos :eek:


Facilitando las cosas a los que no tenemos empresa en Bizkaia... que majos son

ermendalenda 23-09-2021 10:29:28

A mi me ha pasado lo que ha vosotros con lo del WMI, incluso al clonar equipos(HD) me clona el sn (supongo que lo lee del registro de sistema).

Que es lo que nunca me falla y siempre me da un número distinto para cada equipo,
combinar el WMI & SN(HD) & MAC, así me aseguro que si clonamos cuando compro equipos de las mismas caracteristicas no voy a tener el problema. La MAC nunca la clona pero hay que tener cuidado.

Os dejo un ejecutable que genera un .ini con los datos principales del equipo, para que tengais variedad con el número de serie.
Ojo que en determinados equipos, si no esta conectado en red, devuelve vacia la MAC. Así que si vais a usar la MAC tenedlo en cta.

ermendalenda 23-09-2021 10:30:40

1 Archivos Adjunto(s)
Faltaba el fichero, no lo ha pillado:D


La franja horaria es GMT +2. Ahora son las 07:32:45.

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