Re: problemas al Generar PDF

841 views
Skip to first unread message

ESSEDE

unread,
May 10, 2013, 7:30:36 AM5/10/13
to pyaf...@googlegroups.com
SOLUCIONADO.... era el campo Text en el procedimiento AgregarCampo.
Saludos!

El jueves, 9 de mayo de 2013 15:38:30 UTC-3, ESSEDE escribió:
buenas tardes, tomé el ejemplo de VB para generar el PDF
cuando llego al procedimiento GenerarPDF me aparece el siguiente error
-245755 
Unexpected Python Error: Traceback (most recent call last):
  File "win32com\server\policy.pyo", line 277, in _Invoke_
  File "win32com\server\policy.pyo", line 282, in _invoke_
  File "win32com\server\policy.pyo", line 585, in _invokeex_
  File "pyfepdf.pyo", line 710, in GenerarPDF
  File "pyfpdf_hg\template.pyo", line 118, in render
  File "pyfpdf_hg\template.pyo", line 134, in text
AttributeError: 'PyIDispatch' object has no attribute 'strip'

Dejo el codigo de prueba para ver si se puede corregir.
Muchas Gracias.

Private Sub FECrearPDF()
    Dim PyFEPDF As Object
    Dim Fecha As String
    Dim salida As String
    Dim nombre_cliente As String
    Dim domicilio_cliente As String
    Dim imp_total As Double
    Dim imp_tot_conc As Double
    Dim imp_neto As Double
    Dim imp_iva As Double
    Dim imp_trib As Double
    Dim imp_op_ex As Double
    Dim imp_subtotal As Double
    Dim moneda_ctz As Double
    Dim motivo_obs As String
    Dim cae As String
    Dim fecha_vto_cae As String
    Dim base_imp As Double
    Dim feImporte As Double
    Dim u_mtx As Integer
    Dim cod_mtx As String
    Dim feCodigo As String
    Dim ds As String
    Dim qty As Double
    Dim precio As Double
    Dim bonif As Double
    Dim Importe As Double
    Dim despacho As String
    
    On Error GoTo ManejoError
    
    ' Crear objeto interface para generación de F.E. en PDF
    Set PyFEPDF = CreateObject("PyFEPDF")
    Debug.Print PyFEPDF.Version
    Debug.Print PyFEPDF.InstallDir
        
    ' CUIT del emisor
    PyFEPDF.cuit = "20255229363"
    
    tipo_cbte = 1       ' Factura A
    punto_vta = 4000    ' prefijo
    cbte_nro = 12345678 ' número de factura
    Fecha = "2011-3-27"
    concepto = 3
    ' datos del cliente:
    tipo_doc = 80
    nro_doc = "30000000007"
    nombre_cliente = "Joao Da Silva"
    domicilio_cliente = "Rua 76 km 34.5 Alagoas"
    pais_dst_cmp = 16 ' código para exportación
    id_impositivo = "PJ54482221-l"
    ' totales del comprobante:
    imp_total = 122#
    imp_tot_conc = 0#
    imp_neto = 100#
    imp_iva = 21#
    imp_trib = 0#
    imp_op_ex = 0#
    imp_subtotal = 100#
'    Descuento = "10.00"
    fecha_cbte = Fecha
    fecha_venc_pago = Fecha
    ' Fechas del período del servicio facturado
    fecha_serv_desde = Fecha
    fecha_serv_hasta = Fecha
    moneda_id = "PES"
    moneda_ctz = 1
    obs_generales = "Observaciones Generales, texto libre"
    obs_comerciales = "Observaciones Comerciales, texto libre"
    forma_pago = "30 dias"
    incoterms = "FOB" ' termino de comercio exterior para exportación
    idioma_cbte = 1   ' idioma para exportación (no usado por el momento)
    ' motivo de observación (F136 y otros - RG2485/08 Art. 30 inc. c):
    motivo_obs = "10063: Factura individual, DocTipo: 80, " & _
        "DocNro 30000000007 no se encuentra inscripto en condicion ACTIVA en el impuesto."

    ' Código de Autorización Electrónica y fecha de vencimiento:
    ' (para facturas tradicionales, no imprimir el CAE ni código de barras)
    cae = "61123022925855"
    fecha_vto_cae = "2015-03-20"
    
    ' Creo la factura (internamente en la interfaz)
    ok = PyFEPDF.CrearFactura( _
        concepto, tipo_doc, nro_doc, tipo_cbte, punto_vta, _
        cbte_nro, imp_total, imp_tot_conc, imp_neto, _
        imp_iva, imp_trib, imp_op_ex, fecha_cbte, fecha_venc_pago, _
        fecha_serv_desde, fecha_serv_hasta, _
        moneda_id, moneda_ctz, cae, fecha_vto_cae, id_impositivo, _
        nombre_cliente, domicilio_cliente, pais_dst_cmp, _
        obs_comerciales, obs_generales, forma_pago, incoterms, _
        idioma_cbte, motivo_obs)
    
    ' Agregar comprobantes asociados (si es una NC/ND):
    'tipo = 19
    'pto_vta = 2
    'nro = 1234
    'pyfepdf.AgregarCmpAsoc(tipo, pto_vta, nro)
    
    ' Agrego subtotales de IVA (uno por alicuota)
    iva_id = 5      ' código para alícuota del 21%
    base_imp = 100  ' importe neto sujeto a esta alícuota
    feImporte = 21    ' importe liquidado de iva
    ok = PyFEPDF.AgregarIva(iva_id, base_imp, feImporte)
    
    ' Agregar cada impuesto (por ej. IIBB, retenciones, percepciones, etc.):
'    tributo_id = 99         ' codigo para 99-otros tributos
'    Desc = "Impuesto Municipal Matanza"
'    base_imp = "100.00"     ' importe sujeto a este tributo
'    alic = "1.00"           ' alicuota (porcentaje) de este tributo
'    importe = "1.00"        ' importe liquidado de este tributo
'    ok = PyFEPDF.AgregarTributo(tributo_id, Desc, base_imp, alic, importe)

    ' Agrego detalles de cada item de la factura:
    u_mtx = 12              ' unidades
    cod_mtx = "1234567890123"    ' código de barras
    feCodigo = "P0001"            ' codigo interno a imprimir (ej. "articulo")
    ds = "Descripcion del producto P0001"
    qty = 1                     ' cantidad
    umed = 7                    ' código de unidad de medida (ej. 7 para "unidades")
    precio = 100                ' precio neto (A) o iva incluido (B)
    bonif = 0                   ' importe de descuentos
    iva_id = 5                  ' código para alícuota del 21%
    imp_iva = 21                ' importe liquidado de iva
    Importe = 121               ' importe total del item
    despacho = "Nº 123456"      ' numero de despacho de importación
'    dato_a = "DATO A"           ' primer dato adicional del item
'    dato_b = "DATO B"
'    dato_c = "DATO C"
'    dato_d = "DATO D"
'    dato_e = "DATO E"           ' ultimo dato adicional del item
    ok = PyFEPDF.AgregarDetalleItem(u_mtx, cod_mtx, feCodigo, ds, qty, umed, _
            precio, bonif, iva_id, imp_iva, Importe, despacho)

    ' Agrego datos adicionales fijos:
    ok = PyFEPDF.AgregarDato("logo", PyFEPDF.InstallDir + "\fpdf.png")
    ok = PyFEPDF.AgregarDato("EMPRESA", "Empresa de Prueba")
    ok = PyFEPDF.AgregarDato("MEMBRETE1", "Direccion de Prueba")
    ok = PyFEPDF.AgregarDato("MEMBRETE2", "Capital Federal")
    ok = PyFEPDF.AgregarDato("CUIT", "CUIT xx-xxxxxxxx-x")
    ok = PyFEPDF.AgregarDato("IIBB", "IIBB xx-xxxxxxxx-x")
    ok = PyFEPDF.AgregarDato("IVA", "IVA Responsable Inscripto")
    ok = PyFEPDF.AgregarDato("INICIO", "Inicio de Actividad: 01/04/2006")
    ok = PyFEPDF.AgregarDato("ObservacionesGenerales1", "Nota al pie1")
    ok = PyFEPDF.AgregarDato("ObservacionesGenerales2", "")
    ok = PyFEPDF.AgregarDato("ObservacionesGenerales3", "")

    ' Cargo el formato desde el archivo CSV (opcional)
    ' (carga todos los campos a utilizar desde la planilla)
    ok = PyFEPDF.CargarFormato(PyFEPDF.InstallDir + "\factura.csv")
    
    ' Agrego campos manualmente (opcional):
    nombre = "prueba": Tipo = "T"           ' "T" texto, "L" lineas, "I" imagen, etc.
    X1 = 50: Y1 = 150: X2 = 150: Y2 = 255   ' coordenadas (en milimetros)
    Font = "Arial": Size = 20: Bold = 1: Italic = 1: Underline = 1 ' tipo de letra
    foreground = "000000": background = "FFFFFF"    ' colores de frente y fondo
    Align = "C" ' Alineación: Centrado, Izquierda, Derecha
    prioridad = 2 ' Orden Z, menor prioridad se dibuja primero (para superposiciones)
    Text = "¡prueba!"
    ok = PyFEPDF.AgregarCampo(nombre, Tipo, X1, Y1, X2, Y2, _
                        Font, Size, Bold, Italic, Underline, _
                        foreground, background, _
                        Align, Text, priority)

    ' Creo plantilla para esta factura (papel A4 vertical):
    papel = "A4" ' o "letter" para carta, "legal" para oficio
    orientacion = "portrait" ' o landscape (apaisado)
    ok = PyFEPDF.CrearPlantilla(papel, orientacion)
    num_copias = 3  ' original, duplicado y triplicado
    lineas_max = 24 ' cantidad de linas de items por página
    qty_pos = "izq" ' (cantidad a la izquierda de la descripción del artículo)
    ' Proceso la plantilla
    ok = PyFEPDF.ProcesarPlantilla(num_copias, lineas_max, qty_pos)
    ' Genero el PDF de salida según la plantilla procesada
    salida = "factura.pdf"
    ok = PyFEPDF.GenerarPDF(salida)
    
    ' Abro el visor de PDF y muestro lo generado
    ' (es necesario tener instalado Acrobat Reader o similar)
    Imprimir = False ' cambiar a True para que lo envie directo a la impresora
    ok = PyFEPDF.MostrarPDF(salida, Imprimir)

    Exit Sub
ManejoError:
    ' Si hubo error:
    Debug.Print Err.Description            ' descripción error afip
    Debug.Print Err.Number - vbObjectError ' codigo error afip
    Select Case MsgBox(Err.Description, vbCritical + vbRetryCancel, "Error:" & Err.Number - vbObjectError & " en " & Err.Source)
        Case vbRetry
            Debug.Print PyFEPDF.Excepcion
            Debug.Print PyFEPDF.Traceback
            Debug.Assert False
            Resume
        Case vbCancel
            Debug.Print Err.Description
    End Select
    Debug.Assert False
End Sub






Daniel Penachi

unread,
Apr 2, 2015, 12:31:11 PM4/2/15
to pyaf...@googlegroups.com
Disculpa, el siguiente conjunto de sentencia te funcionaron?

    num_copias = 3  ' original, duplicado y triplicado
    lineas_max = 24 ' cantidad de linas de items por página
    qty_pos = "izq" ' (cantidad a la izquierda de la descripción del artículo)
    ' Proceso la plantilla
    ok = PyFEPDF.ProcesarPlantilla(num_copias, lineas_max, qty_pos)

La que veo rara es la que marco en rojo, para mi va una cantidad, pues aca se me queda

Gracias

Daniel

Mariano Reingart

unread,
Apr 3, 2015, 5:52:40 PM4/3/15
to pyaf...@googlegroups.com
2015-04-02 13:17 GMT-03:00 Daniel Penachi <dpen...@gmail.com>:
Disculpa, el siguiente conjunto de sentencia te funcionaron?

    num_copias = 3  ' original, duplicado y triplicado
    lineas_max = 24 ' cantidad de linas de items por página
    qty_pos = "izq" ' (cantidad a la izquierda de la descripción del artículo)
    ' Proceso la plantilla
    ok = PyFEPDF.ProcesarPlantilla(num_copias, lineas_max, qty_pos)

La que veo rara es la que marco en rojo, para mi va una cantidad, pues aca se me queda

Esta bien ese valor, qty_pos indica la posición de la columna cantidad, para ubicarla a la izquierda o a la derecha de la descripción (y así poder dividir las líneas de la factura correctamente).

El error debe provenir de otro lado, ¿estas usando una versión reciente? (la última de PyFEPDF es 1.07m, podes verlo en pyfepdf.py)

El ejemplo completo actualizado para VFP podes verlo en el repositorio:

https://github.com/reingart/pyafipws/blob/master/ejemplos/pyfepdf/pyfepdf.prg

Lo más común en estos casos es que no puede ubicar la plantilla o el logo, deberías revisar las líneas:

ok = PyFEPDF.CargarFormato(PyFEPDF.InstallDir + "\plantillas\factura.csv")
ok = PyFEPDF.AgregarDato("logo", PyFEPDF.InstallDir + "\plantillas\logo.png")

(cambiar la ruta si el csv y el logo no estan en la ubicación predeterminada)

Recién lo acabo de probar y funciona OK con el último instalador:


Si el problema persiste, necesitaría el contenido de PyFEPDF.Traceback para analizarlo.

Sds

Daniel Penachi

unread,
Apr 4, 2015, 12:07:04 PM4/4/15
to pyaf...@googlegroups.com
Evidentemente no  tengo la ultima versión, de donde la puedo bajar, asi termino con las pruebas . mil gracias

Daniel Penachi

Mariano Reingart

unread,
Apr 4, 2015, 12:39:20 PM4/4/15
to pyaf...@googlegroups.com
2015-04-04 11:19 GMT-03:00 Daniel Penachi <dpen...@gmail.com>:
Evidentemente no  tengo la ultima versión, de donde la puedo bajar, asi termino con las pruebas . mil gracias


Las últimas versiones del instalador para evaluación están detalladas en nuestra Documentación en:

http://www.sistemasagiles.com.ar/trac/wiki/ManualPyAfipWs#Descargas

Específicamente sería (para 32 bits):


En cuanto pueda voy a empezar a publicarlo utilizando la funcionalidad de descargas de GitHub, porque GoogleCode fue discontinuado y no soporta subir nuevos archivos.

Es recomendable que desinstales y borres las carpetas de instalación de versiones anteriores (incluso reiniciando el equipo para evitar que queden archivos temporales en memoria).

El código siempre está actualizado en el repositorio:


Daniel Cernotto

unread,
Apr 29, 2015, 6:03:36 PM4/29/15
to pyaf...@googlegroups.com
Hola Mariano

Tengo un problema similar, en 
    num_copias = 3  ' original, duplicado y triplicado
    lineas_max = 24 ' cantidad de linas de items por página
    qty_pos = "izq" ' (cantidad a la izquierda de la descripción del artículo)
    ' Proceso la plantilla
    OK = PyFEPDF.ProcesarPlantilla(num_copias, lineas_max, qty_pos)


    Debug.Print err.Description            ' descripción error afip
Unexpected Python Error: Traceback (most recent call last):
  File "win32com\server\policy.pyo", line 277, in _Invoke_
  File "win32com\server\policy.pyo", line 282, in _invoke_
  File "win32com\server\policy.pyo", line 585, in _invokeex_
  File "pyfepdf.pyo", line 66, in capturar_errores_wrapper
  File "pyfepdf.pyo", line 527, in ProcesarPlantilla
TypeError: float argument required


    Debug.Print err.Number - vbObjectError ' codigo error afip

-245755 


            Debug.Print PyFEPDF.Excepcion

float argument required

            Debug.Print PyFEPDF.Traceback

Traceback (most recent call last):
  File "pyfepdf.pyo", line 66, in capturar_errores_wrapper
  File "pyfepdf.pyo", line 527, in ProcesarPlantilla
TypeError: float argument required



Mi definicion de las variables en VBasic  es

    Dim num_copias As Integer, lineas_max   As Integer
    Dim qty_pos As String



Alguna idea?

Daniel Penachi

unread,
Apr 29, 2015, 10:03:26 PM4/29/15
to pyaf...@googlegroups.com
En mi caso era un problema de versión de la DLL, procura instalar la ultima

Daniel Cernotto

unread,
Apr 30, 2015, 9:51:58 PM4/30/15
to pyaf...@googlegroups.com
Si , si,  ayer mismo, antes de subir la consulta (y como lei tu caso)  reinstale todo.
Un solo detalle, la versión que está en la pagina es 1.01b   y no 1.07 como se menciono en alguna parte. No se si es un error de tipeo o la version en definitiva es la 1.07 y hay que descargarla de otra parte.

Gracias por tu respuesta
Reply all
Reply to author
Forward
0 new messages