Ayuda SAP

Error en JOB en SQL

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 :upside_down_face:

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. :vulcan_salute:

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 :slight_smile:

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 :grin:

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 :slight_smile:

2 Me gusta

:exclamation: @america, por favor editá el mensaje tuyo, y formateá correctamente ese código que has pegado :pray: Más info sobre cómo hacer para formatear códigos en el foro aquí.

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.:smile:

1 me gusta