Aplicacion para Consumir Web Service Soriana - Proveedores

Para los que programamos en Delphi, aqui estan las respuestas
[[ FORO CERRADO DEBIDO A QUE YA LA INFORMACION YA NO ES VIGENTE ]]
s3cr3to
Mensajes: 501
Registrado: Mar Dic 28, 2010 2:12 pm

Aplicacion para Consumir Web Service Soriana - Proveedores

Mensajepor s3cr3to » Vie Feb 25, 2011 5:39 pm

Saludos Programas !

El motivo de este post es conseguir asesoria de la comunidad para elaborar una aplicaciónn que consuma el web service de soriana publicado aqui:
http://www2.soriana.com/Proveedor/acuse ... vicio.asmx

Este seria mi primer programa para consumir un web services y mi intención es que sirva como base (open source) para otros proveedores de soriana que esten en la misma situacion.

Soriana publica dos servicios para obtener la información que nosotros como proveedores requerimos para poder facturar y añadir la adenda.

En mi caso particular, implemente ciertas reglas en nuestro ERP para que los usuarios no puedan facturar remisiones a soriana si previamente no existe una nota de entrada que sirva como base para lo que se esta facturando y asi evitar en lo posible errores.

Para esto, defini un tabla (que no sirve al 100% para esta implemementación del web services) donde registro la mayoria de los datos que requiero para poder facturar y posteriormente uso para añadir la adenda reverse (con el código delphi que DADO vende).

Ya posteriormente guardo el XML con addenda en un directorio donde la aplicación de "enviosoriana" (DADO tambien vende esta aplicacion) se encarga de cargar y enviar a soriana.

Pues bien, ya registre nuestro numero de proveedor al web service de soriana con una clave de acceso y siguiendo las instrucciones de este post: http://egostar.delphiaccess.com/?p=7/ "Crear, publicar y consumir un WebService con Delphi", intente crear mi aplicacion.

El web service soporta estas operaciones a la fecha:
  • ComprobarAcceso

  • CrearReporte

  • ObtenerDocumentos

Anexo parte del código que tengo actualmente, si alguien tuviera la paciencia y conocimiento quizas hasta podriamos crear una aplicación "open source" que a nosotros como proveedores de soriana podriamos adecuar a nuestras necesidades.

En cuanto a mis necesidades que busco cumplir son:
  • Generar una base de datos indenpendiente de mi ERP (en sql server)

  • Almacenar en tablas la información consumida para elaborar desde ahi reportes que mis usuarios podran usar para capturar la factura de soriana

  • Almacenar los datos de las notas de entrada para asi controlar que solo aquellas remisiones con nota de entrada puedan ser facturadas

  • Consultar los datos requeridos de la nota de entrada para de manera "automatica" llenar la adenda reverse de soriana.

Actualmente todo esto lo tengo implementado con capturas manuales y pequeñas aplicaciones, pero precisamente, es con la captura manual que he visto que no estoy libre de cometer errores... ojala exista interes en este proyecto.

Saludos,
Adjuntos
AAVWSSoriana.zip
Proyecto Web Service Proveedor Soriana
(38.36 KiB) Descargado 939 veces

s3cr3to
Mensajes: 501
Registrado: Mar Dic 28, 2010 2:12 pm

Avances...

Mensajepor s3cr3to » Dom Feb 27, 2011 7:55 pm

Curioso que haya poco interes en este tema.. en fin.

DADO si me das tu permiso añado algunas observaciones sobre el avance de mi proyecto.

Encontre un "bug" en Delphi 7 al crear el nuevo: "Web services / Import WSDL"
Cuando se crea la unidad "servicio.pas" observe que por mas intentos que hacia, no se conectaba al web service de soriana, lo atribui a mi poca experiencia y busque ejemplos para crear clientes de web service. Encontre un magnifico y simple proyecto ejemplo que incluye el código en http://www.devarticles.com/c/a/Delphi-Kylix/Creating-a-Web-Service-Client-with-Delphi/

Esta vez (afortunadamente) sin ver el código completo decidí seguir los pasos y crear el proyecto.
Cual fue mi sorpresa: un error semejante que pasa en el proyecto wsSoriana se repetia en este ejemplo, molesto decidí compilar el código fuente del proyecto y oh sorpresa este si funciona!... que hice mal, re-leí los pasos, lo volvi a hacer y siempre el mismo error.
Asi que compare línea a línea el código de mi unidad con la del proyecto que si funciona, fue en el area "Implementation" donde encontré una línea diferente.
Dudando añadi esa línea en mi proyecto y sopas! el proyecto funciono, no me quede ahí, busque en google (http://www.google.com/search?q=delphi+ioDocument&hl=en) el porque de esa línea y encontre un post bastante informativo en http://www.delphigroups.info/2/5/344488.html que dice:
Fix for using Delphi 6/7 client with ASP.NET 2.0 Web Service
2005-12-06 03:47:13 AM
delphi172
The Delphi 6/7 WSDL importer fails to add the following line to newly created webservice units for any .NET 2.0 webservice:
InvRegistry.RegisterInvokeOptions(TypeInfo(Service1Soap), ioDocument);

To fix, simply copy this line (replacing Service1 with your webservice name) into the Service unit's initialization section BELOW
InvRegistry.RegisterInterface and
InvRegistry.RegisterDefaultSOAPAction.
The cause of the problem relates to document-based vs RPC soap rules.
Brett

Permitanme medio traducirlo:
El importador WDSL de Delphi 6/7 falla al agregar la línea de unidades webservice recien creadas para cualquier servicio .NET 2.0:
InvRegistry.RegisterInvokeOptions(TypeInfo(Service1Soap), ioDocument);
Para corregirlo, simplemente copia esta línea (reemplazando Service1 con el nombre de tu webservice) en la sección de inicialización de la unidad Service DEBAJO de
InvRegistry.RegisterInterface y
InvRegistry.RegisterDefaultSOAPAction.
La causa del problema se refiere a reglas basado-documentos vs RPC soap.
Brett

Total, que este mismo le paso al código del proyecto que esta anexo en el primer post.
Desde ahi, con la línea corregida, estoy haciendo mis pruebas y oooh sorpresa, ya el servidor del web service me acepta e incluso ya pude crear y consultar un reporte.

Código: Seleccionar todo

Unidad Servicio.pas
initialization
  InvRegistry.RegisterInterface(TypeInfo(ServicioSoap), 'http://tempuri.org/', 'utf-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(ServicioSoap), 'http://tempuri.org/%operationName%');

  InvRegistry.RegisterInvokeOptions(TypeInfo(ServicioSoap), ioDocument); // <<< Esta es la línea que hay que añadir para que funcione.

  RemClassRegistry.RegisterXSClass(Reporte, 'http://tempuri.org/', 'Reporte');
  RemClassRegistry.RegisterXSClass(Articulo, 'http://tempuri.org/', 'Articulo');
  RemClassRegistry.RegisterXSInfo(TypeInfo(ArrayOfArticulo), 'http://tempuri.org/', 'ArrayOfArticulo');
  RemClassRegistry.RegisterXSClass(Acuse, 'http://tempuri.org/', 'Acuse');
  RemClassRegistry.RegisterXSInfo(TypeInfo(ArrayOfAcuse), 'http://tempuri.org/', 'ArrayOfAcuse');

Si hay interés publicare mis resultados.

s3cr3to

s3cr3to
Mensajes: 501
Registrado: Mar Dic 28, 2010 2:12 pm

Resultado v1

Mensajepor s3cr3to » Dom Feb 27, 2011 11:35 pm

Saludos Programas!

Todo parece que este día fue bueno... mi primera versión beta ya se conecta y regresa los valores... Ahora solo queda diseñar algunas tablas para localmente almacenar esta información y explotarla en nuestra empresa... Al conseguirlo, creo que por fin dejare de capturar manualmente los pedidos!

Nota: la información que aparece es real, solo elimine datos del proveedor para hacerlo algo "discreto".

s3cr3to
Adjuntos
wsSoriana_test1.png
Cliente wsSoriana v0.1
wsSoriana_test1.png (78.18 KiB) Visto 28119 veces

Avatar de Usuario
Dado
Mensajes: 15824
Registrado: Mar Jul 06, 2010 8:56 pm

Re: Resultado v1

Mensajepor Dado » Dom Feb 27, 2011 11:49 pm

s3cr3to escribió:Saludos Programas!

Todo parece que este día fue bueno... mi primera versión beta ya se conecta y regresa los valores... Ahora solo queda diseñar algunas tablas para localmente almacenar esta información y explotarla en nuestra empresa... Al conseguirlo, creo que por fin dejare de capturar manualmente los pedidos!

Nota: la información que aparece es real, solo elimine datos del proveedor para hacerlo algo "discreto".

s3cr3to


FELICIDADES, si se ve que eres bueno, no'mas que aveces necesitas un empujon !

Supongo que incluso puede llegar a intercalar toda la informacion de forma automatica y crear la factura CON LA ADDENDA ya practicamente sin tener que agregar los datos manualmenteo o no?
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

s3cr3to
Mensajes: 501
Registrado: Mar Dic 28, 2010 2:12 pm

.. ahi va la cosa.

Mensajepor s3cr3to » Lun Feb 28, 2011 11:23 am

Mr DADO,

Precisamente, ese es mi objetivo, lograr hacerlo "automatico", y es que ya no puedo darme el lujo de equivocarme al re-capturar tanto dato.

De hecho actualmente con tu codigo Adenda-Soriana y los datos de las notas de entrada ya pongo la adenda semi-automaticamente, estaba muy contento, hasta que andale que otro tipo de productos que entregamos a soriana viene con mas datos en la nota de entrada. Supongo que esto va a afectarme en la adenda pues no vienen en "1" Caja, sino "n" Cajas con "m" empaques.

No se si es la necesidad o la flojera, pero al final san google se compadecio y me arrojo un sitio con la información que necesitaba.. ya estaba a punto de pedirte ayuda. :oops:

Total, y por si alguien tiene el mismo problema, soriana ofrece dos soluciones para obtener la información del acuse de recibo:
1) via web service (hay que desarrollarlo)
2) via programa enlace (hay que descargarlo)

La opcion 2 parecia la mas simple PERO no viene completo, no trae un script para crear las tablas o base de datos requeridas y ademas necesita .NET 2.0, y ahi es donde mis problemas iniciaron, he visto equipos 100% correctos irse al infierno de la reinstalación por culpa del .NET, si a eso le añadimos que mi servidor es windows 2000 y ya no hay soporte, debo ser muy cuidadoso de no instalar "soluciones" no probadas previamente, y claro, probe este en un servidor virtual, para empezar si usan un servidor de 64bits no jala el .NET 2.0 ni la aplicacion de instalacion de soriana, como se me vino el tiempo, no probe en un servidor virtual de 32 bits en cuanto tenga pruebas aviso (pero sin la base de datos, ni ganas dan de fatigarme)... ¿sera posible que el instalador se conecte y descarge las tablas o base de datos..? naaah seria mucha suerte pero existe esa posibilidad.

Bueno, dedicare este dia a crear las tablas que necesito con algunos campos para uso interno de nuestro ERP y los mantengo informados, ya que hay mas que informar.

ala_lee
Mensajes: 2
Registrado: Mié Ago 25, 2010 9:47 am

Re: Aplicacion para Consumir Web Service Soriana - Proveedor

Mensajepor ala_lee » Jue Abr 14, 2011 12:30 pm

Hola s3cr3to

Estoy también tratando de implementar el web service de soriana, tengo una duda con respecto a las función obtener documentos, esta me pide los siguientes parámetros obtenerdocumentos(InfoReporte as servicio.reporte, ClaveServicio as string, NumeroPagina as integer). Mi preguntas es clave servicio es el numero de folio que se obtiene con la función creareporte o es mi numero de proveedor. De antemano gracias. Un Saludo!

s3cr3to
Mensajes: 501
Registrado: Mar Dic 28, 2010 2:12 pm

Re: Aplicacion para Consumir Web Service Soriana - Proveedor

Mensajepor s3cr3to » Jue Abr 14, 2011 2:02 pm

ala_lee escribió:Hola s3cr3to
..me pide los siguientes parámetros
obtenerdocumentos (InfoReporte as servicio.reporte, ClaveServicio as string, NumeroPagina as integer).
Mi preguntas es clave servicio es el numero de folio que se obtiene con la función creareporte o es mi numero de proveedor. De antemano gracias. Un Saludo!

Asi hago la llamada:

Código: Seleccionar todo

arrAcuse:= wsServicio.ObtenerDocumentos( wsReporte, leClave.Text, i);

PERO "claveservicio" es una clave que tuviste que registrar en el portal de proveedores / sistemas de informacion.
NO es la misma clave que usas para acceder al portal de proveedor.
Es una clave nueva que registras para el servicio que deseas usar: webservice.
Porque puedes elegir el usar el webservice o la dichosa aplicacion .NET que no he logrado hacer funcionar (aunque parece que ya le arreglaron algo).

Saludos

ala_lee
Mensajes: 2
Registrado: Mié Ago 25, 2010 9:47 am

Re: Aplicacion para Consumir Web Service Soriana - Proveedor

Mensajepor ala_lee » Vie Abr 15, 2011 9:59 am

Hola s3cr3to

Entonces eso me esta faltando para poder obtener los documentos? Yo veo que en tu aplicación tu ya estas bajando los documentos, tu diste de alta esa clave y después ya pudiste descargar los documentos. Muchas Gracias por contestar me eh estado ayudando de este foro. Saludos!

s3cr3to escribió:
ala_lee escribió:Hola s3cr3to
..me pide los siguientes parámetros
obtenerdocumentos (InfoReporte as servicio.reporte, ClaveServicio as string, NumeroPagina as integer).
Mi preguntas es clave servicio es el numero de folio que se obtiene con la función creareporte o es mi numero de proveedor. De antemano gracias. Un Saludo!

Asi hago la llamada:

Código: Seleccionar todo

arrAcuse:= wsServicio.ObtenerDocumentos( wsReporte, leClave.Text, i);

PERO "claveservicio" es una clave que tuviste que registrar en el portal de proveedores / sistemas de informacion.
NO es la misma clave que usas para acceder al portal de proveedor.
Es una clave nueva que registras para el servicio que deseas usar: webservice.
Porque puedes elegir el usar el webservice o la dichosa aplicacion .NET que no he logrado hacer funcionar (aunque parece que ya le arreglaron algo).

Saludos

scanales
Mensajes: 1
Registrado: Jue Jun 27, 2013 12:09 pm

Re: Aplicacion para Consumir Web Service Soriana - Proveedor

Mensajepor scanales » Jue Jun 27, 2013 1:02 pm

Hola s3cr3to,

Es muy interesante lo que estas haciendo (aunque sea de hace tiempo). Yo estoy comenzando una aplicacion para extraer informacion y generar reportes a traves de los WS de Soriana, pero he encontrado muy poca documentacion. Que tanto provecho le pudiste sacar a esta plataforma? Has utilizado los reportes de desplazamiento (http://www2.soriana.com/proveedor/Despl ... vicio.asmx) ? Tienes algun numero telefonico de Soriana para buscar soporte, o algun tip que me pudieras compartir (en el WS de desplazamiento puedes generar varios tipos de reportes, que se identifican por enteros "TipoReporte", como un parametro, pero no he podido descifrar que significa cada uno de los numeros)?

Te lo agradezco!

S.

s3cr3to
Mensajes: 501
Registrado: Mar Dic 28, 2010 2:12 pm

Re: Aplicacion para Consumir Web Service Soriana - Proveedor

Mensajepor s3cr3to » Mié Jul 31, 2013 12:59 pm

Disculpa la tardanza scanales,

Debido a mis ocupaciones deje de visitar el foro un buen rato.

Si todavia tienes intereses, permiteme busco la aplicación que desarrolle, con la cual descargo las notas de entrada de soriana. Claro, es un Beta (todas lo son) en producción :o.
Es decir, quizas ni documentado y como espaguetti; salí del apuro (casi vaporware).

Por la falta de tiempo no he realizado el equivalente del servicio (desplazamiento) que mencionas.

Saludos.
Adjuntos
notas de entrada.png
Aplicación en producción
notas de entrada.png (151.3 KiB) Visto 25604 veces


Volver a “Delphi”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados