Bloquear Moneda local y moneda del sistema

Buenas tardes, quiero hacer algo para que a la hora de crear estos documentos tanto una ov o una fact de deudores no me permita tomar otra moneda que no sea Moneda SN ya intente desde transaction notification pero no me lo toma, alguien mas sabe como o tiene el código exacto, este es mi código para la ov.

IF @object_type = '17' AND @TRANSACTION_TYPE IN ('A', 'U') 
BEGIN
    IF EXISTS (
        SELECT T0.DocNum
        FROM ORDR T0
        WHERE T0.DocEntry = @list_of_cols_val_tab_del
		AND T0.CurSource <> 'C'
    )
    BEGIN
        SET @error = 100
        SET @error_message = 'RECUERDA QUE LA MONEDA DEBE SER SN'
    END
END


:heavy_heart_exclamation: Importante :exclamation: La siguiente respuesta es generada por nuestro Robot AI de Consultoria‑SAP denominado “CSAPBOT” usando tecnología de IA ‑ inteligencia artificial. Por lo tanto, puede haber datos incorrectos. No podemos garantizar que la información sea 100% correcta, solo consultores SAP profesionales y usuarios del sistema podrían verificar la información. ¿Te animas a hacerlo? ¿Aceptas el reto? Puedes responder este debate si sigue abierto!

Si quieres aprender más sobre nuestros sistemas con AI, te esperamos en este artículo.


Gracias por compartir tu caso. Estás intentando restringir que al crear una Orden de Venta (OV, objeto tipo ‘17’) o una Factura de Deudores (objeto tipo ‘13’) en SAP Business One, solo se pueda usar la Moneda del Socio de Negocio (SN).

Tu enfoque con Transaction Notification es correcto en intención, pero la condición que estás usando no es suficiente. El campo CurSource no refleja directamente si se está usando la moneda del SN o una diferente en todos los casos.


:white_check_mark: ¿Cómo validar que la moneda del documento sea la misma que la del SN?

Debes comparar directamente el campo DocCur del documento con el campo Currency del socio de negocio (OCRD).


:wrench: Código correcto para OV (objeto ‘17’)

IF @object_type = '17' AND @transaction_type IN ('A', 'U')
BEGIN
    IF EXISTS (
        SELECT 1
        FROM ORDR T0
        INNER JOIN OCRD T1 ON T0.CardCode = T1.CardCode
        WHERE T0.DocEntry = @list_of_cols_val_tab_del
          AND T0.DocCur <> T1.Currency
    )
    BEGIN
        SET @error = 100
        SET @error_message = 'RECUERDA QUE LA MONEDA DEBE SER LA MONEDA DEL SOCIO DE NEGOCIO (SN)'
    END
END


:wrench: Código similar para Factura de Deudores (objeto ‘13’)

IF @object_type = '13' AND @transaction_type IN ('A', 'U')
BEGIN
    IF EXISTS (
        SELECT 1
        FROM OINV T0
        INNER JOIN OCRD T1 ON T0.CardCode = T1.CardCode
        WHERE T0.DocEntry = @list_of_cols_val_tab_del
          AND T0.DocCur <> T1.Currency
    )
    BEGIN
        SET @error = 101
        SET @error_message = 'SOLO SE PERMITE LA MONEDA DEL SOCIO DE NEGOCIO EN LA FACTURA'
    END
END


:brain: Notas importantes (Consultoria‑SAP)

  • DocCur contiene la moneda del documento (p. ej., ‘USD’, ‘MXN’, etc.).

  • Currency en OCRD indica la moneda base del socio (‘USD’, ‘MXN’ o ‘##’ si es multimoneda).

  • Si el cliente tiene moneda ‘##’ (multimoneda), deberías permitir más de una. Puedes ajustar con:

    AND T1.Currency <> '##'
    
    

Resumen Consultoria‑SAP

Para validar que las Ordenes de Venta y Facturas de Deudores en SAP Business One usen exclusivamente la moneda del socio de negocio (SN), tu validación en Transaction Notification debe comparar directamente DocCur (documento) con Currency (OCRD). Tu lógica inicial con CurSource no cubre este requerimiento. Este control es parte de los módulos SD / FI / ADMIN. ¡Estamos aquí para ayudarte en los Foros SAP de Consultoria‑SAP!