Уведомление о транзакциях SAP b1 для блокировки документов заказов на продажу для клиентов с превышением кредита

Ситуация: Клиент имеет кредитный лимит 50K и 0 Баланс. Клиент заказал сумму, превышающую его кредитный лимит (например, 54 000). Таким образом, уведомление о транзакции должно быть активировано. Проблема: получить клиентскую кредитную лимитную сумму; получить баланс заказа клиента;

Что я пробовал до сих пор:

IF @object_type='17' AND @transaction_type IN ('A','U')
BEGIN
    Declare @CredLimit As nvarchar(250)
    SET @CredLimit= (SELECT T0.CreditLine FROM OCRD T0
     WHERE T0.CardCode=@list_of_cols_val_tab_del)

IF (
    SELECT (T0.DocTotal+T1.Balance) FROM ORDR T0 INNER JOIN OCRD T1 ON T0.CardCode=T1.CardCode
    WHERE DocStatus='O' AND T1.DocEntry=@list_of_cols_val_tab_del) > @CredLimit
    BEGIN   
        Set @error = -1
        SET @error_message = 'Business Partner is Over Credit Limit! Save this document as DRAFT, thank you'
    END
END 

В SAP b1 есть собственная система, определяющая уведомление о кредитном лимите, но мы не хотим отвечать на его «Да или нет», мы просто хотим сообщить кодировщику SO, что заказ на продажу теперь делает клиента сверх CL и, следовательно, сохранить SO как проект.


person aintno12u    schedule 29.04.2017    source источник


Ответы (1)


IF @object_type='17' AND @transaction_type IN ('A','U')
BEGIN
    Declare @CredLimit As nvarchar(250)
    SET @CredLimit= (SELECT T0.CreditLine FROM OCRD T0
                     WHERE T0.CardCode=(SELECT CardCode FROM ORDR 
                                        WHERE DocEntry = @list_of_cols_val_tab_del)

IF (
    SELECT (T0.DocTotal+T1.Balance) 
    FROM ORDR T0 
    INNER JOIN OCRD T1 ON T0.CardCode=T1.CardCode
    WHERE DocStatus='O' AND T1.DocEntry=@list_of_cols_val_tab_del) > @CredLimit
    BEGIN   
        Set @error = -1
        SET @error_message = 'Business Partner is Over Credit Limit! Save this document as DRAFT, thank you'
    END
END 

Проблема в том, что в операторе SET @CredLimit проверялось, равно ли T0.CardCode @list_of_cols_val_tab_del, что на самом деле является DocEntry заказа. На самом деле, теперь, когда я смотрю на это, вы могли бы даже сделать что-то вроде

IF @object_type='17' AND @transaction_type IN ('A','U')
BEGIN
    IF EXISTS (
        SELECT T0.DocEntry
        FROM ORDR T0 
        INNER JOIN OCRD T1 ON T0.CardCode=T1.CardCode
        WHERE DocStatus='O' 
        AND T1.DocEntry=@list_of_cols_val_tab_del
        AND (T0.DocTotal + T1.Balance) > T1.CreditLine)
    BEGIN   
        Set @error = -1
        SET @error_message = 'Business Partner is Over Credit Limit! Save this document as DRAFT, thank you'
    END
END 

Во второй версии вы полностью игнорируете ненужный шаг объявления переменной.

person phroureo    schedule 15.09.2017