Visual Basic - timbrar xml con & en el nombre del cliente

Life is soft - evento anual de software empresarial
 
Vista:

timbrar xml con & en el nombre del cliente

Publicado por Oscar Picos Martinez (1 intervención) el 11/06/2016 01:57:32
Buen día. Desarrollé un sistema en Microsoft Access con VBA para timbrar CFDI vía un proveedor oficial de timbres. El asunto es que tengo un cliente que su nombre contiene un &, pero diseñé el proceso de generación de xml reemplazando las vocales con acento por sin acento, ñ’s por n’s y si tiene caracter & el proceso se detenga para que el usuario corrijan el nombre del cliente por una Y en el catálogo.

Si el nombre del cliente contiene caracteres no permitidos:
1
2
3
4
5
6
If InStr(1, Me!Arrendatario.Value, "&") > 0 Then
    MsgBox "El nombre del arrendatario (cliente):" & vbCr & vbCr & Me!Arrendatario.Value & vbCr & vbCr & _
        "No debe contener caracteres extraños como '&'." & vbCr & vbCr & _
        "Para corregir esto, vaya al catálogo de cliente y modifique el nombre.", vbCritical, TítMsj
    Exit Sub
End If

La mayoría de los clientes con esa situación no hay problema, pero salió uno que lo quiere con el & porque así está registrado ante hacienda y es algo que no sé cómo hacerle por qué al reemplazar “&” por “&”, y al momento de intentar timbrarlo, me falla el sistema totalmente, al parecer el problema está en el UTF8sinBOM. El soporte técnico de mi proveedor de timbres,me comentó que como el sistema está desarrollado con VBA en Access por ahí va el problema.

Mando el segmento de código que procesa esta situación:
______________________________________________________________________

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
'Reemplaza caracteres especiales:
strCadenaOriginal = Replace(strCadenaOriginal, "&", "&")
strCadenaOriginal = Replace(strCadenaOriginal, """", """)
strCadenaOriginal = Replace(strCadenaOriginal, "<", "&lt;")
strCadenaOriginal = Replace(strCadenaOriginal, ">", "&gt;")
strCadenaOriginal = Replace(strCadenaOriginal, "'", "&apos;")
 
strCadenaOriginal = RetiraSecuencia(strCadenaOriginal)
 
strCadenaOriginal = fcnReemplazarAcentosyÑs(strCadenaOriginal)
 
On Error Resume Next
	Kill pathClaves & "\ArchCadenaOriginalUTF8sinBOM.txt"
On Error GoTo 0
 
'Llama a la función:
fcnGenerarUTF8sinBOM strCadenaOriginal, pathClaves & "\ArchCadenaOriginalUTF8sinBOM.txt"

……………………………………………………………………………………………

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Function fcnGenerarUTF8sinBOM(strCadenaOriginal As String, archivoUTF8sinBOM As String)
    Dim UTFStream As Object
    Set UTFStream = CreateObject("ADODB.stream")
    UTFStream.Type = adTypeText
    UTFStream.Mode = adModeReadWrite
    UTFStream.Charset = "UTF-8"
    UTFStream.LineSeparator = adLF
    UTFStream.Open
    'UTFStream.WriteText "This is an unicode/UTF-8 test.", adWriteLine
    'UTFStream.WriteText "First set of special characters: öäåñüûú€", adWriteLine
    'UTFStream.WriteText "Second set of special characters: qwertzuiopõúasdfghjkléáûyxcvbnm\|Ä€Í÷×äðÐ[]í³£;?¤>#&@{}<;>*^¢°²`ÿ´½¨¸0", adWriteLine
    UTFStream.WriteText strCadenaOriginal
 
    UTFStream.Position = 3 'skip BOM
 
    Dim BinaryStream As Object
    Set BinaryStream = CreateObject("ADODB.stream")
    BinaryStream.Type = adTypeBinary
    BinaryStream.Mode = adModeReadWrite
    BinaryStream.Open
 
    'Strips BOM (first 3 bytes)
    UTFStream.CopyTo BinaryStream
 
    'UTFStream.SaveToFile "d:\adodb-stream1.txt", adSaveCreateOverWrite
    UTFStream.Flush
    UTFStream.Close
 
    BinaryStream.SaveToFile archivoUTF8sinBOM, adSaveCreateOverWrite
    BinaryStream.Flush
    BinaryStream.Close
End Function

______________________________________________________________________

Al intentar timbrar y esperar respuesta del servidor, el sistema me falla totalmente.

Cualquier orientación te lo agradezco de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder