Hola Nicolas:

A simple vista estaría bien tu ejemplo.
Habría que ver bien que error te menciona (atributos Excepcion y
Traceback), podes ver una rutina para analizar los mensajes de depuración
en:

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

(no aplica Token, Sign, XmlResponse y XmlRequest porque no es un webservice)

Sobre el tema de la cantidad de parámetros, justamente para estos casos la
interfaz tiene un método EstablecerParametro que te permite completar los
campos de la factura de a uno (en el metodo CrearFactura son todos
opcionales, pero debés respetar la posición).

Podes ver el ejemplo completo funcional para VFP que arme recién en base al
código para VB:

https://code.google.com/p/pyafipws/source/browse/ejemplos/pyfepdf/pyfepdf.prg

Cualquier duda avisame,

Sds

Mariano Reingart
http://www.sistemasagiles.com.ar
http://reingart.blogspot.com


2014-04-15 14:59 GMT-03:00 Nicolas Arnaldo <[email protected]>:

> Hola Mariano, gracias por tu respuesta, aca debajo pego el codigo que
> estoy tratando de implementar :
>
> oPyFEPDF = CreateObject("PyFEPDF")
>  cVersion = oPyFEPDF.Version
> cInstallDir = oPyFEPDF.InstallDir
>  oPyFEPDF.CUIT = Alltrim(Parametros.CuitEmpresa)
>
> Do case
>  Case TiposComprobantes.CodigoAFIP = '001'
> tipo_cbte = 1       && Factura A
>  Case TiposComprobantes.CodigoAFIP = '002'
>  Otherwise
>  tipo_cbte = 1       && Factura A
>  EndCase
>
> ** POR EL MOMENTO ESTOY PROBANDO SOLO CON FACTURA A
>
>
> punto_vta = 1 && 4000    ' prefijo
>  cbte_nro = Val(Cabecera.Numero)   &&  12345678 '
> fecha = Dtoc(Cabecera.Fecha)  &&    "27/03/2011"
>  concepto = 3
>
> * ' datos del cliente:
> Do case
>  Case Cliente.IDtipoDocumento = '80'
> tipo_doc = 80
>  Case Cliente.IDtipoDocumento = '96'
> tipo_doc = 96
>  Otherwise
> tipo_doc = 80
>  EndCase
>      nro_doc =  Strtran(Cliente.Cuit,'-','')   &&  "30000000007"
>  nombre_cliente = Cliente.RazonSocial   &&  "Joao Da Silva"
> domicilio_cliente =  Alltrim(Cliente.Direccion) + ' ' +
> Alltrim(Localidad.Descripcion) + ' ' + Alltrim(Provincia.Descripcion) + ' '
> + Alltrim(Pais.Nombre)     &&  "Rua 76 km 34.5 Alagoas"
>
> pais_dst_cmp = 16     && ' código para exportación
> id_impositivo =   ""     && "PJ54482221-l"
>  *' totales del comprobante:
>  imp_total = Alltrim(Str(Cabecera.Total,12,2))    &&  "122.00"
>  imp_tot_conc = "0.00"
> imp_neto = Alltrim(Str(Cabecera.SubTotal,12,2))   &&  "100.00"
>  imp_iva = Alltrim(Str(Cabecera.IVAinscripto,12,2))    &&  "21.00"
> imp_trib = "0.00"
>  imp_op_ex = "0.00"
> imp_subtotal = Alltrim(Str(Cabecera.SubTotal,12,2))   &&  "100.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.000"
> obs_generales = "Observaciones Generales, texto libre"
> obs_comerciales = "Observaciones Comerciales, texto libre"
>  moneda_id = "012"
> moneda_ctz = 0.5
> 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_obs = "11"  && motivo de observación (F136 y otros)
>
> * Código de Autorización Electrónica y fecha de vencimiento:
>  * (para facturas tradicionales, no imprimir el CAE ni código de barras)
> cae = Alltrim(Cabecera.Cae)   &&  "61123022925855"
>  fecha_vto_cae = FechaSql(Cabecera.VencimientoAFIP)   &&  "20110320"
>
> *' Creo la factura (internamente en la interfaz)
> *ok = oPyFEPDF.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)
>
> ok = oPyFEPDF.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 = Cabecera.SubTotal    && 100  ' importe neto sujeto a esta
> alícuota
> importe = Cabecera.IVAinscripto   && 21    ' importe liquidado de iva
>  ok = oPyFEPDF.AgregarIva(iva_id, base_imp, importe)
>  *' 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)
>  Go top in Detalle
> Do while not Eof('Detalle')
>  *' Agrego detalles de cada item de la factura:
> u_mtx = Detalle.Cantidad   && 123456              ' unidades
>  cod_mtx =  ""
>                                          &&   ' código de barras
>
>
>                 ** ACA EN COD_MTX TRATE DE PONERLE UN CODIGO NUMERICO Y
> TAMPOCO FUNCIONO
>
>
> codigo = Detalle.IDarticulo   &&  "P0001"            ' codigo interno a
> imprimir (ej. "articulo")
>  ds =  Detalle.Descripcion     &&  "Descripcion del producto P0001"
> qty = Detalle.Cantidad &&   1                     ' cantidad
>  umed = 1   &&  7                    ' código de unidad de medida (ej. 7
> para "unidades")
>  precio = Detalle.SubTotalSinIVA     && 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 = (Detalle.SubTotal - Detalle.SubTotalSinIVA)   && 21
>      ' importe liquidado de iva
>  importe = Detalle.SubTotal       && 121               ' importe total
> del item
> despacho = ""               && "Nº 123456"      ' numero de despacho de
> importación
>  ok = oPyFEPDF.AgregarDetalleItem(u_mtx, cod_mtx, codigo, ds, qty, umed,
> precio, bonif, iva_id, imp_iva, importe, despacho)
>
>  Skip in Detalle
>  EndDo
>  *' Agrego datos adicionales fijos:
> ok = oPyFEPDF.AgregarDato("logo", oPyFEPDF.InstallDir + "\fpdf.png")
>  ok = oPyFEPDF.AgregarDato("EMPRESA", Alltrim(Parametros.NombreEmpresa))
>   &&   "Empresa de Prueba")
> ok = oPyFEPDF.AgregarDato("MEMBRETE1", Alltrim(Parametros.Direccion))
> &&  "Direccion de Prueba")
>  ok = oPyFEPDF.AgregarDato("MEMBRETE2", "Capital Federal")
> ok = oPyFEPDF.AgregarDato("ObservacionesGenerales1", "Nota al pie1")
>  *' Cargo el formato desde el archivo CSV (opcional)
> *' (carga todos los campos a utilizar desde la planilla)
>  ok = oPyFEPDF.CargarFormato(oPyFEPDF.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 = oPyFEPDF.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 = oPyFEPDF.ProcesarPlantilla(num_copias, lineas_max, qty_pos)
>  *' Genero el PDF de salida según la plantilla procesada
>  salida = "factura.pdf"
> ok = oPyFEPDF.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 = oPyFEPDF.MostrarPDF(salida, imprimir)
>
>
>
> Ahora la duda que me surge tambien es en la funcion CrearFactura, que
> recibe mas de 28 parametros. En visual foxpro no es posible pasarle a una
> funcion mas de 27 parametros, es posible crear la factura y luego ir
> pasandole o completando parametros al objeto oPyFEPDF ?
>
> Saludos y gracias
>
>
>
> El 14 de abril de 2014, 20:47, Mariano Reingart <[email protected]>escribió:
>
>> Hola Nicolas:
>>
>> Yo soy el desarrollador principal de la libreria PyAfipWs, asique con
>> todo gusto me interesaría ayudarte.
>> ¿Tendrías el mensaje de error completo para analizarlo?
>> Un fragmento de código para poder reproducir el problema también ayudaría.
>>
>> Sds
>>
>> Mariano Reingart
>> http://www.sistemasagiles.com.ar
>> http://reingart.blogspot.com
>>
>>
>> 2014-04-14 19:10 GMT-03:00 Nicolas Arnaldo <[email protected]>:
>>
>>> Hola grupo, alguien esta utilizando las librerias de PyAfipWS ?
>>>
>>> Logro generar las facturas electronicas, pero al utilizar la libreria de
>>> generacion de pdf (PyFEPDF)
>>> me esta dando un error de Caracter "-" invalido para el codigo de barras
>>> I25
>>> y no se de donde puede venir el problema porque no le estoy enviando
>>> ningun caracter de ese estilo.
>>> Si alguien me puede ayudar estaria agradecido.
>>>
>>> Nicolas.
>>>
>>>
>>
>

Responder a