Hola a todos,

Resulta que estoy integrando en un POS (bajo la GPL) una funcionalidad para vender mercaderías compuestas, entendiendo por 'mercadería compuesta' a un producto integrado por otros 2 o más productos, tal como las ofertas, de modo que al vender esta mercadería puedo rebajar el stock de sus componentes. Cuando se crea la mercadería compuesta también se define la cantidad de unidades de cada
componente que participa de ella.

Ej: Oferta A = 2xMantquillas + 1xPan

Hasta ahí todo bien.
El problema radica cuando asocio una mercadería compuesta a otra, el sistema debería ser capaz de recorrer todo sus componentes y sub-componentes para obtener el stock 'posible' del compuesto. Para ello he creado una función recursiva, sin embargo no da el resultado esperado.

Adjunto el link de la tabla de asociación:
http://pastebin.com/rqip8ddd

nota: tipo 4 = compuesta,
          tipo 1 = corriente,

cant_mud = las unidades de la mercadería que participa del compuesto.

Esta tabla también la utilizo para asociar materias primas a mercaderías derivadas de ellas
          pero los eximo de esta explicación.

Adjunto el link de la función:
http://pastebin.com/h0V1fsvy

La función retorna el stock que corresponde cuando se consulta por una mercadería corriente (una normal), y cuando se consulta por una mercadería compuesta integrada
por mercaderías corrientes.
Pero cuando consulto por una mercadería compuesta, donde uno de sus componentes es otro compuesto (incluso si este compuesto solo tiene mercaderías corrientes) me retorna 0.

En este ejemplo específico si llamo a la función se esta forma:

select * from obtener_stock_desde_barcode(1313000)
resulta 10 (esta bien)

pero si hago:
select * from obtener_stock_desde_barcode(1414000)
retorna 0, se supone que dentro de sí esta función se llama a sí misma de esta forma:
select * from obtener_stock_desde_barcode(1313000) y da como resultado 0,
cuando debería retornar 10.

Ese es el problema, si ejecuto select * from obtener_stock_desde_barcode(1313000) me da el resultado esperado, pero no así cuando se ejecuta esa misma sentencia
dentro de sí misma. )=

Estaré omitiendo algo?
Está bien realizarlo de esta forma o existe algún proceso especial para trabajar con recursividad
en postgresql?

De antemano muchísimas gracias! =)

----
P.D:
Leí de antemando sobre esta funcionalidad
http://wiki.postgresql.org/wiki/CTEReadme
pero por lo visto no es aplicable a mi situación, puesto que no solo debo consultar los datos
sino también calcular el stock por cada componente y subcomponente.
(y además porque un compuesto puede tener otro compuesto)










-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a