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;;;;;;;;
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


0