Hola Baltazar,
El esquema propuesto por Victor Espina, autor de la clase y quien definió la estructura de su funcionamiento es lo que yo considero la mejor manera de hacerlo; esto es lo que Victor propuso el 8 de Octubre:
--- De
Victor Espina:
Yo sugeriria un esquema mas ordenado.
1. Se deberia
crear una interfaz o clase abstracta que represente a una addenda
cualquiera, digamos CFDAddenda. Esta clase solo contendria un metodo
cuya funcion seria la de devolver el XML completo de la adenda en forma
de una cadena. Llamemos a ese metodo, recordando a .NET, ToString().
2.
Cada addenda especifica se deberia representar como una clase que
herede de CFDAddenda y que se almacene en un PRG externo al PRG
principal de la libreria CFD Esto permitira a terceros crear addendas
especificas y distribuirlas sin necesidad de modificar la libreria
principal. Por ejemplo, para la addenda de Pemex se crearia un archivo
PRG llamado CFDPEMEX.PRG que contendria el codigo:
DEFINE CLASS CFDPemexAddenda AS CFDAddenda
ENDDEFINE
Esta
clase deberia contener las propiedades necesarias para definir la
addenda de Pemex y tener una implementacion del metodo ToString() que
devuelva el XML especifico de esa addenda con los datos indicados en las
propiedades. De esta forma, el usuario final haria algo asi:
SET PROCEDURE TO CFDPemex ADDITIVE
oAddenda = CREATEOBJECT("CFDPemexAddenda")
oAddenda.Prop1 = valor1
oAddenda.Prop2 = valor2
...
oAddenda.PropN = valorN
3.
La clase CFD deberia contener un metodo llamado addAddenda() el cual
reciba como parametro una instancia de una clase derivada de CFDAddenda,
y este metodo se deberia encargar de invocar el metodo ToString() del
objeto recibido e incluir el resultado dentro del XML del certificado.
Si
todo lo que hara el metodo es invocar a ToString(), porque no pasarle
directamente el XML en lugar de la instancia de la clase? Por que eso
nos daria la posibilidad de ampliar la interfaz base de CFDAddenda en el
futuro si fuese necesario, y estas modificaciones a la clase serian
manejadas directamente dentro del metodo addAddenda() de CFD, sin
afectar la firma del metodo y por tanto sin requerir cambios a nivel del
codigo del usuario.
Se que es
mas laborioso, pero me parece un mejor esquema que permite la creacion
de nuevas addendas sin requerir la modificacion constante de la libreria
para incluir ess nuevas addendas.
Saludos
Victor Espina
--- Referencia:
https://groups.google.com/forum/#!topic/vfp-factura-electronica-mexico/RCknmcqGBCkYa quedamos en hacerlo de esta manera, incluso Victor ya trabajo sobre esto, lo puedes ver en el repositorio del código.
Entiendo tu postura y la respeto, sinceramente espero que no todos piensen igual =( ... sabes que aprecio muchos tus aportaciones al foro, eres preciso, constante y participas en todo lo que se pregunta o discute; siempre tienes información devidamente documentada y sustentada, muchas gracias por eso; estoy seguro que más de uno aquí también lo agradece.
Yo estoy en lo de CFD desde apenas hace un año (unos días antes de la reunion de ZorrosMexicanos en la Cd. de México). Hice desde mis aplicaciones el primer CFD real a mediados de Diciembre 2010, estoy haciendo CFDI reales desde hace algunos meses, de todos mis clientes ninguno ha necesitado una addenda pero sé que tarde o temprano se van a necesitar.
La propuesta no es hacer cientos de addendas, como dices, sería un cuento de no terminar; No, la idea es definir desde la clase la forma como crear y procesas una addenda; Victor se propuso para hacer esto y seleccionamos la addenda de PEMEX que sabemos que lo que esta requiere es una cadena de 10 valores separados por pipes; un ejemplo simple de cómo hacerla y procesarla en la clase con la intención de dejar definida la forma cómo se deben hacer otras; Así se puede ir recolectando otras addendas, todas las addendas que sean posibles como extensiones de la clase.
Si se requiere una addenda que no se ha desarrollado, la puedes desarrollar bajo ese esquema para la clase, la pueda compartir con el foro o integrarla directamente para que este disponible para los que la puedan llegar a necesitar.
Ahora, lo que pido, si quieren y pueden compartir las addendas que ya tienen para que una vez que Victor tenga el 'modelo' de addenda yo las pueda ir integrando a la clase, claro, poco a poco pues entiendo lo que tu dices, hay que entenderlas, estudiarlas, etc, etc. y eso requiere un trabajo y tiempo. Estoy seguro que entre todos podemos dejar las addendas más comunes listas y funcionales para la clase en poco tiempo.
Si puedes compartir esos documentos estaría genial, se que si después de estudiarlos tengo alguna duda te puedo preguntar y estarás dispuesto a ayudar como siempre; tu experiencia en addendas y tu idea en complementos son bien recibidos también.
Bien, perdón por el rollo, que opinas Baltazar, foro ?