Buenas tardes
Espero que puedan apoyarme con el siguiente error:
Tengo creado un JOB en SQL server 2012, que ejecuta un stored prodecure en SAP B1, cada minuto. Hace unos días dejo de funcionar y no me había fijado de ello. El error que me muestra en en el LOG es el siguiente:
Executed as user: NT AUTHORITY\SYSTEM. Procedure or function ‘Nombre del JOB’ expects parameter ‘@DocKey’, which was not supplied. [SQLSTATE 42000] (Error 201). The step failed.
En el store declaro el DocKey.
De antemano agradezco el apoyo que me puedan proporcionar.
Hola
El error parece claro, No estas enviando el Parametro “@DocKey” al momento de llamar el SP (Dices que estas declarando dicha variable pero ¿Como parametro o variable interna?).
Si es un parametro, al momento de declaralo coloca un valor por default
ALTER PROCEDURE [MyStoredProcedure]
@DocKey INTEGER = 0
Pero lo mejor es que seas mas explicito y publica el codigo, caso contrario es muy dificil precisar la causa exacta.
Saludos.
1 me gusta
Buenos días
Disculpa por omitir ese dato importante.
Este es el codigo:
CREATE PROCEDURE [dbo].[SP_PDF1]
@DocKey int,
@ObjectId varchar(3)
WITH ENCRYPTION
AS
BEGIN
SET NOCOUNT ON;
SELECT TOP 1
CONVERT(VARCHAR(254),T1."U_RXML")+'\'+CONVERT(VARCHAR,YEAR(T0."DocDate"))+'-'+RIGHT('00'+CONVERT(VARCHAR,MONTH(T0."DocDate")),2)+'\'+T0."CardCode"+'\IN' AS "UBICACIONXML",
T1."U_RPDF" AS "UbicacionPDF",
T1."U_Crystal" AS "Crystal",
T0."DocEntry" AS "DocEntry",
T0."ObjType" AS "ObjType",
'Factura' AS "Tipo",
T2.ReportID AS "ReportID",
T0."DocType" AS "DocType"
FROM
OINV T0
CROSS JOIN "@FACTURACION" T1
INNER JOIN ECM2 T2 ON T0.[DocEntry] = T2.[SrcObjAbs]
WHERE
T1."U_Factura" = 'SI' AND T0."U_PdfGenerado" = 'NO' AND T0."EDocProces" = 'I' AND T0."EDocStatus" = 'E' AND T0."isIns" != 'Y' AND T0."DocSubType" != 'DN'
AND T0."DocEntry" = CASE WHEN @DocKey = 0 THEN T0."DocEntry" ELSE @DocKey END AND T0."ObjType" = CASE WHEN @ObjectId = '0' THEN T0."ObjType" ELSE @ObjectId END
UNION ALL
SELECT TOP 1
CONVERT(VARCHAR(254),T1."U_RXML")+'\'+CONVERT(VARCHAR,YEAR(T0."DocDate"))+'-'+RIGHT('00'+CONVERT(VARCHAR,MONTH(T0."DocDate")),2)+'\'+T0."CardCode"+'\IN' AS "UBICACIONXML",
T1."U_RPDF" AS "UbicacionPDF",
T1."U_Crystal" AS "Crystal",
T0."DocEntry" AS "DocEntry",
T0."ObjType" AS "ObjType",
'Factura_de_Reserva' AS "Tipo",
T2.ReportID AS "ReportID",
T0."DocType" AS "DocType"
FROM
OINV T0
CROSS JOIN "@FACTURACION" T1
INNER JOIN ECM2 T2 ON T0.[DocEntry] = T2.[SrcObjAbs]
WHERE
T1."U_FacturaR" = 'SI' AND T0."U_PdfGenerado" = 'NO' AND T0."EDocProces" = 'I' AND T0."EDocStatus" = 'E' AND T0."isIns" = 'Y' AND T0."DocSubType" != 'DN'
AND T0."DocEntry" = CASE WHEN @DocKey = 0 THEN T0."DocEntry" ELSE @DocKey END AND T0."ObjType" = CASE WHEN @ObjectId = '0' THEN T0."ObjType" ELSE @ObjectId END
Tengo creada una tabla, donde se especifico los datos mencionados, como la ubicación del xml, la ubicación del pdf. También campos para las facturas como el U_PdfGenerado.
Gracias
2 Me gusta
Prueba de esta manera y toma en cuenta estos consejos en SQL Server:
- Nunca coloques los campos de una tabla entre comillas dobles (T0.“Campo1”), usa corchetes o no uses nada (T0.[Campo1] o T0.Campo1).
- Nunca uses comillas dobles para asignarle alias a los campos, usa corchetes o comilla simple ( as [Mi Campo1] o as ‘Mi Campo1’).
- Usa una buena tabulacion para ordenar cualquier consulta o codigo T-SQL asi se hace mas facil de leer y comprender.
Seguir estos consejos evita problemas mentales y surgimiento de instintos homicidas a terceros que puedan revisar tu codigo
ALTER PROCEDURE [dbo].[SP_PDF1]
@DocKey int = 0,
@ObjectId varchar(3) = '0'
WITH ENCRYPTION
AS
BEGIN
SET NOCOUNT ON;
SELECT TOP 1
CONVERT(VARCHAR(254),T1.U_RXML)+''+CONVERT(VARCHAR,YEAR(T0.DocDate))+'-'+RIGHT('00'+CONVERT(VARCHAR,MONTH(T0.DocDate)),2)+''+T0.CardCode+'\IN' AS 'UBICACIONXML',
T1.U_RPDF AS 'UbicacionPDF',
T1.U_Crystal AS 'Crystal',
T0.DocEntry AS 'DocEntry',
T0.ObjType AS 'ObjType',
'Factura' AS 'Tipo',
T2.ReportID AS 'ReportID',
T0.DocType AS 'DocType'
FROM
OINV T0
CROSS JOIN [@FACTURACION] T1
INNER JOIN ECM2 T2 ON T0.[DocEntry] = T2.[SrcObjAbs]
WHERE
T1.U_Factura = 'SI'
AND T0.U_PdfGenerado = 'NO'
AND T0.EDocProces = 'I'
AND T0.EDocStatus = 'E'
AND T0.isIns != 'Y'
AND T0.DocSubType != 'DN'
AND T0.DocEntry = CASE WHEN @DocKey = 0
THEN T0.DocEntry
ELSE @DocKey
END
AND T0.ObjType = CASE WHEN @ObjectId = '0'
THEN T0.ObjType
ELSE @ObjectId
END
UNION ALL
SELECT TOP 1
CONVERT(VARCHAR(254),T1.U_RXML)+'\'+CONVERT(VARCHAR,YEAR(T0.DocDate))+'-'+RIGHT('00'+CONVERT(VARCHAR,MONTH(T0.DocDate)),2)+'\'+T0.CardCode+'\IN' AS 'UBICACIONXML',
T1.U_RPDF AS 'UbicacionPDF',
T1.U_Crystal AS 'Crystal',
T0.DocEntry AS 'DocEntry',
T0.ObjType AS 'ObjType',
'Factura_de_Reserva' AS 'Tipo',
T2.ReportID AS 'ReportID',
T0.DocType AS 'DocType'
FROM
OINV T0
CROSS JOIN [@FACTURACION] T1
INNER JOIN ECM2 T2 ON T0.[DocEntry] = T2.[SrcObjAbs]
WHERE
T1.U_FacturaR = 'SI'
AND T0.U_PdfGenerado = 'NO'
AND T0.EDocProces = 'I'
AND T0.EDocStatus = 'E'
AND T0.isIns = 'Y'
AND T0.DocSubType != 'DN'
AND T0.DocEntry = CASE WHEN @DocKey = 0
THEN T0.DocEntry
ELSE @DocKey
END
AND T0.ObjType = CASE WHEN @ObjectId = '0'
THEN T0.ObjType
ELSE @ObjectId
END
3 Me gusta
Hola GabrielGS
Gracias por tus consejos y una disculpa por ello, soy relativamente nueva en esto. Y tienes mucha razón.
Probaré tu código
2 Me gusta
Muchas Gracias
Ya no me muestra el error.
2 Me gusta
Que bien!
Recuerda marcar la respuesta como solucion para que se mantenga el orden dentro del foro.
Saludos.
1 me gusta