Power Builder - ERROR AL ENVIAR PARAMETROS A FUNCION EN POWER BUILDER

 
Vista:

ERROR AL ENVIAR PARAMETROS A FUNCION EN POWER BUILDER

Publicado por JUAN PAREDES (2 intervenciones) el 19/11/2014 23:27:25
Tengo el siguiente problema; estoy haciendo una función en Power Builder 11.5 , esta a su vez llama a un procedimiento almacenado hecho en SQL Server, se los ejemplifico y con ello agradecería me indiquen que podría ser que ocasione este error: error c0052 bad argument list for function.

El procedimiento almacenado es el siguiente:


ALTER PROCEDURE [dbo].[SQ_costo_promedio_erp]
--DECLARE
@vi_empresa varchar(2),
@vi_ptovta varchar(3),
@vi_almacen varchar(3),
@vi_codigo varchar(35),
@vi_moneda varchar(5),
@vi_fecha datetime,
@vi_costo decimal(18,4) OUTPUT

As
Begin

Declare @vi_fecha_max datetime
--Declare @vi_costo decimal(18,4)
Declare @vi_correlativo int



Select @vi_fecha_max = Max(Hmovialc.dfecha_doc)
From Hmovialc Inner Join Hmoviald
On Hmovialc.ccod_empresa = Hmoviald.ccod_empresa and
Hmovialc.ccod_almacen = Hmoviald.ccod_almacen and
Hmovialc.ccod_movimiento = Hmoviald.ccod_movimiento and
Hmovialc.ctip_movimiento = Hmoviald.ctip_movimiento and
Hmovialc.cnum_serie = Hmoviald.cnum_serie and
Hmovialc.cnum_doc = Hmoviald.cnum_doc
Where Hmovialc.ccod_empresa = @vi_empresa and
Hmovialc.ccod_almacen = @vi_ptovta and
Hmoviald.ccod_almacen_org = @vi_almacen and
Hmoviald.ccod_articulo = @vi_codigo and
Hmovialc.estado <> 'ANULADO' and
Hmovialc.desc_stock = 'S' and
Hmovialc.dfecha_doc = @vi_fecha
-- Hmovialc.dfecha_doc < @vi_fecha

Select @vi_correlativo = Max(Hmovialc.ncorrel)
From Hmovialc Inner Join Hmoviald
On Hmovialc.ccod_empresa = Hmoviald.ccod_empresa and
Hmovialc.ccod_almacen = Hmoviald.ccod_almacen and
Hmovialc.ccod_movimiento = Hmoviald.ccod_movimiento and
Hmovialc.ctip_movimiento = Hmoviald.ctip_movimiento and
Hmovialc.cnum_serie = Hmoviald.cnum_serie and
Hmovialc.cnum_doc = Hmoviald.cnum_doc
Where Hmovialc.ccod_empresa = @vi_empresa and
Hmovialc.ccod_almacen = @vi_ptovta and
Hmoviald.ccod_almacen_org = @vi_almacen and
Hmoviald.ccod_articulo = @vi_codigo and
Hmovialc.estado <> 'ANULADO' and
Hmovialc.desc_stock = 'S' and
Hmovialc.dfecha_doc = @vi_fecha_max

If (@vi_fecha_max Is Null) Begin Set @vi_fecha_max = '01/01/1900' End
If (@vi_correlativo Is Null) Begin Set @vi_correlativo = 0 End

Select Top 1 @vi_costo = (Case @vi_moneda when 'S/' then Hmoviald.erp_costmn else Hmoviald.erp_costme End)
From Hmovialc Inner Join Hmoviald
On Hmovialc.ccod_empresa = Hmoviald.ccod_empresa and
Hmovialc.ccod_almacen = Hmoviald.ccod_almacen and
Hmovialc.ccod_movimiento = Hmoviald.ccod_movimiento and
Hmovialc.ctip_movimiento = Hmoviald.ctip_movimiento and
Hmovialc.cnum_serie = Hmoviald.cnum_serie and
Hmovialc.cnum_doc = Hmoviald.cnum_doc
Where Hmovialc.ccod_empresa = @vi_empresa and
Hmovialc.ccod_almacen = @vi_ptovta and
Hmoviald.ccod_almacen_org = @vi_almacen and
Hmoviald.ccod_articulo = @vi_codigo and
Hmovialc.estado <> 'ANULADO' and
Hmovialc.desc_stock = 'S' and
Hmovialc.dfecha_doc = @vi_fecha_max and
Hmovialc.ncorrel = @vi_correlativo

if (@vi_costo Is Null) Begin Set @vi_costo = 0 End

Return @vi_costo
end


LA FUNCIÓN EN POWER BUILDER QUE LLAMA ESTE PROCEDIMIENTO ES LA SIGUIENTE:

string str_procedure
decimal deccosto
decimal decpromedio


DECLARE str_procedure PROCEDURE FOR SQ_costo_promedio_erp
@vi_empresa = :vi_empresa,
@vi_ptovta = :vi_ptovta,
@vi_almacen = :vi_almacen,
@vi_codigo = :vi_codigo,
@vi_moneda = :vi_moneda,
@vi_fecha = :vi_fecha,
@vi_costo = :decpromedio output;

execute str_procedure;
fetch str_procedure into :deccosto;
close str_procedure;
return deccosto

Y FINALMENTE AL ENVIAR LOS PARÁMETROS DESDE EL DATAWINDOWS

deccosto = uf_costo_promedio(gs_codempresa,dw_1.getitemstring(1,'almacen'),dw_2.getitemstring(intcuenta,'almacen'),
dw_2.getitemstring(intcuenta,'codigo'),dw_1.getitemstring(1,'moneda'),dw_1.getitemdatetime(1,'fecha'))

donde: gs_codempresa es una variable general q indica codigo de empresa, ya q el sistema es multiempresa

y los demás son campos que se deberian extraer de la datawindows para enviar como parametros a la funcion y esta se calcule en el procedimiento almacenado, y me retorne el valor buscado, pero en esta ultima parte es que me sale el eroro mencionado al inicio.

ALGUNA SUGERENCIA POR FAVOR;;;;;;;;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

ERROR AL ENVIAR PARAMETROS A FUNCION EN POWER BUILDER

Publicado por eduardo.v (23 intervenciones) el 20/11/2014 16:04:01
Juan

Tu función de Power Builder....¿Cuantos argumentos tiene?
Considerar que el error "bad argument list for function." aparece cuando no calza el numero de argumentos enviados con el numero de argumentos definidos.
Según la aplicación que haces de la función, esta debe tener 6 argumentos.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ERROR AL ENVIAR PARAMETROS A FUNCION EN POWER BUILDER

Publicado por JUAN PAREDES (2 intervenciones) el 20/11/2014 18:16:41
EDUARDO

HACIENDO EL COMPARATIVO ENTRE LOS ARGUMENTOS DE LA FUNCION Y LOS LABELS DE MIS DATAWINDOWS SERIAN ASI:

deccosto = uf_costo_promedio(gs_codempresa,dw_1.getitemstring(1,'almacen'),dw_2.getitemstring(intcuenta,'almacen'),
dw_2.getitemstring(intcuenta,'codigo'),dw_1.getitemstring(1,'moneda'),dw_1.getitemdatetime(1,'fecha'))

@vi_empresa = :vi_empresa, ---------> gs_codempresa
@vi_ptovta = :vi_ptovta, ---------> dw_1.getitemstring(1,'almacen')
@vi_almacen = :vi_almacen, ---------> dw_2.getitemstring(intcuenta,'almacen')
@vi_codigo = :vi_codigo, --------> dw_2.getitemstring(intcuenta,'codigo')
@vi_moneda = :vi_moneda, ---------> dw_1.getitemstring(1,'moneda')
@vi_fecha = :vi_fecha, ----------> dw_1.getitemdatetime(1,'fecha')
@vi_costo = :decpromedio output;

en donde el DW_1 es la cabecera y DW_2 es la ventana detalle:

Supuestamente estos enviando correctamente los argumentos; he estado realizando otras funciones similares y funcionan normal solo esta me esta causando ciertos problemas:
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ERROR AL ENVIAR PARAMETROS A FUNCION EN POWER BUILDER

Publicado por eduardo.v (23 intervenciones) el 20/11/2014 20:39:01
Juan

Insisto. ¿Cuantos argumentos has definido en tu función uf_costo_promedio?
En tu ejemplo no se visualiza la definición de argumentos.
Si la respuesta es 6, entonces revisa ahora que los 6 datos que le estas pasando tengan el mismo tipo de dato que has definido en la función, específicamente en la sección "argument type".

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar