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:
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:
______________________________________________________________________
……………………………………………………………………………………………
______________________________________________________________________
Al intentar timbrar y esperar respuesta del servidor, el sistema me falla totalmente.
Cualquier orientación te lo agradezco de antemano.
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, "<", "<")
strCadenaOriginal = Replace(strCadenaOriginal, ">", ">")
strCadenaOriginal = Replace(strCadenaOriginal, "'", "'")
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


0