nexg-erp / Forms
Refused
fmb_promotion, study

all forms

fmb_promotion: 23 programs convert in part

Shortest first. Left, the PL/SQL as the form holds it. Right, the clauses in the vocabulary’s spelling and, under them, each refused statement with the converter’s reason. 9 of them are program units, headed on unit: a unit’s refusals belong to the unit and are finished there once, and a caller that inlined one links to it rather than asking for the same work again.

1. fmb_promotionon unit SHOW_LISTstudy
What you havePROGRAM-UNIT
PROCEDURE Show_List(Lov_Name Varchar2) IS
  v_Bol_Lov boolean;
BEGIN
  v_Bol_Lov := Show_Lov(Lov_Name);
END;
What you getClause Rule Language
on unit SHOW_LIST(LOV_NAME):
# 1 statement did not convert.#   line 4
#   v_Bol_Lov := Show_Lov(Lov_Name);
#   reason: Show_Lov names the list it opens with a literal, and this one does not, so which list it opens is not known until the form runs

0 clauses converted, 1 statement refused

2. fmb_promotionon unit GET_PLU_CODEstudy
What you havePROGRAM-UNIT
FUNCTION Get_Plu_Code(Item varchar2) RETURN Varchar2 IS
  v_Plu Varchar2(50);
BEGIN
  Select ITEMPLU_CODE Into v_Plu from M_Item_Plu Where ItemPlu_Item_Code = Item;
  Return v_Plu;
Exception When Others Then
  Return Null;
END;
What you getClause Rule Language
on unit GET_PLU_CODE(ITEM):
# 1 statement did not convert.#   FUNCTION Get_Plu_Code(Item varchar2) RETURN Varchar2 IS
#     v_Plu Varchar2(50);
#   BEGIN
#     Select ITEMPLU_CODE Into v_Plu from M_Item_Plu Where ItemPlu_Item_Code = Item;
#     Return v_Plu;
#   Exception When Others Then
#     Return Null;
#   END;
#   reason: it handles OTHERS and recovers, writing a value or showing a message on the error path, so the statements above it do not mean what they would mean without it: CRL has no clause that runs when a statement fails

0 clauses converted, 1 statement refused

3. fmb_promotionPRE-UPDATE on T_PROM_ALLOC_ITEMstudy
What you havePRE-UPDATE
Declare
  v_divn_code varchar2(10);
Begin
  select loc_divn_code into v_divn_code from m_location 
        where loc_comp_code =:Global.COMPANY
            and loc_code =:promh_loc_code;
  :PromAI_Wac := Nvl(Fn_Get_Cost(:PromAI_Item_Code, :Global.Company, v_Divn_Code, Sysdate, 'WAC', 0), 0) * Nvl(:PromAI_Max_Loose, 0);
  :PromAI_Fifo := Nvl(Fn_Get_Cost(:PromAI_Item_Code, :Global.Company, v_Divn_Code, Sysdate, 'FIFO', 0), 0) * Nvl(:PromAI_Max_Loose, 0);
  
  :PROMAI_Edt_User := :Global.User;
  :PROMAI_Edt_Dt := SysDate;
  :PROMAI_PLU_CODE := get_plu_code(:PROMAI_ITEM_CODE);
End;
What you getClause Rule Language
on save update:    from load-fmb-promotion-t-prom-alloc-item-0(PROMH_LOC_CODE)    set PROMAI_WAC to nvl(FN_GET_COST(PROMAI_ITEM_CODE, GLOBAL.COMPANY, LOC_DIVN_CODE, sysdate(), 'WAC', 0), 0) * nvl(PROMAI_MAX_LOOSE, 0)    set PROMAI_FIFO to nvl(FN_GET_COST(PROMAI_ITEM_CODE, GLOBAL.COMPANY, LOC_DIVN_CODE, sysdate(), 'FIFO', 0), 0) * nvl(PROMAI_MAX_LOOSE, 0)    set PROMAI_EDT_USER to GLOBAL.USER    set PROMAI_EDT_DT to sysdate()
# 1 statement did not convert.#   line 12
#   :PROMAI_PLU_CODE := get_plu_code(:PROMAI_ITEM_CODE);
#   reason: GET_PLU_CODE is a program unit of this form used as a value, and a unit's body is inlined at a call statement rather than read for a return, so no FormConnect entry is written for it and what this expression holds is not stated

4 clauses converted, 1 statement refused

4. fmb_promotionWHEN-VALIDATE-ITEM on T_PROM_ALLOC_ITEM.PROMAI_QTYstudy
What you haveWHEN-VALIDATE-ITEM
Declare
  v_Stk_Flag Number;
Begin
  v_Stk_Flag := Item_Stock_Compare(:Global.Company, :PromH_Loc_Code, :PromAI_Item_Code, :PromAI_Uom_Code, :PromAI_Qty, :PromAI_Loose, 0, 0);
  If v_Stk_Flag = 1 Then
    :PromAI_Qty := Null;
  End If;
  If Nvl(:Frm_Cost_Valuation_Method, 'WAC') = 'WAC' Then
    :PromAI_Wac_Val := Nvl(:PromAI_Wac*:PromAI_Qty, 0) + Nvl(:PromAI_Wac*:PromAI_Loose/:PromAI_Max_Loose, 0);
    :PromI_Rate := Round(:PromAI_Tot_Wac_Val*Nvl(:PromI_Max_Loose, 0)/(Nvl(:PromI_Qty*:PromI_Max_Loose, 0)+Nvl(:PromI_Loose, 0)), 2);
  Else
    :PromAI_Fifo_Val := Nvl(:PromAI_Fifo*:PromAI_Qty, 0) + Nvl(:PromAI_Fifo*:PromAI_Loose/:PromAI_Max_Loose, 0);
    :PromI_Rate := Round(:PromAI_Tot_Fifo_Val*Nvl(:PromI_Max_Loose, 0)/(Nvl(:PromI_Qty*:PromI_Max_Loose, 0)+Nvl(:PromI_Loose, 0)), 2);
  End If;
End;
What you getClause Rule Language
on change of PROMAI_QTY:    set PROMAI_WAC_VAL to nvl(PROMAI_WAC * PROMAI_QTY, 0) + nvl((PROMAI_WAC * PROMAI_LOOSE) / PROMAI_MAX_LOOSE, 0) when nvl(FRM_COST_VALUATION_METHOD, 'WAC') = 'WAC'    set PROMI_RATE to round((PROMAI_TOT_WAC_VAL * nvl(PROMI_MAX_LOOSE, 0)) / (nvl(PROMI_QTY * PROMI_MAX_LOOSE, 0) + nvl(PROMI_LOOSE, 0)), 2) when nvl(FRM_COST_VALUATION_METHOD, 'WAC') = 'WAC'    set PROMAI_FIFO_VAL to nvl(PROMAI_FIFO * PROMAI_QTY, 0) + nvl((PROMAI_FIFO * PROMAI_LOOSE) / PROMAI_MAX_LOOSE, 0) when not (nvl(FRM_COST_VALUATION_METHOD, 'WAC') = 'WAC')    set PROMI_RATE to round((PROMAI_TOT_FIFO_VAL * nvl(PROMI_MAX_LOOSE, 0)) / (nvl(PROMI_QTY * PROMI_MAX_LOOSE, 0) + nvl(PROMI_LOOSE, 0)), 2) when not (nvl(FRM_COST_VALUATION_METHOD, 'WAC') = 'WAC')
# 1 statement did not convert.#   line 6
#   :PromAI_Qty := Null;
#   reason: ITEM_STOCK_COMPARE is a program unit of this form used as a value, and a unit's body is inlined at a call statement rather than read for a return, so no FormConnect entry is written for it and what this expression holds is not stated

4 clauses converted, 1 statement refused

5. fmb_promotionWHEN-VALIDATE-ITEM on T_PROM_ALLOC_ITEM.PROMAI_LOOSEstudy
What you haveWHEN-VALIDATE-ITEM
Declare
  v_Stk_Flag Number;
Begin
  v_Stk_Flag := Item_Stock_Compare(:Global.Company, :PromH_Loc_Code, :PromAI_Item_Code, :PromAI_Uom_Code, :PromAI_Qty, :PromAI_Loose, 0, 0);
  If v_Stk_Flag = 1 Then
    :PromAI_Loose := Null;
  End If;
  If Nvl(:PromAI_Loose, 0) > 0 And :PromAI_Loose <> :AOld_Loose Then
    :PromAI_Sl_Manual_Flag:=0;
  End If;
  If Nvl(:Frm_Cost_Valuation_Method, 'WAC') = 'WAC' Then
    :PromAI_Wac_Val := Nvl(:PromAI_Wac*:PromAI_Qty, 0) + Nvl(:PromAI_Wac*:PromAI_Loose/:PromAI_Max_Loose, 0);
    :PromI_Rate := Round(:PromAI_Tot_Wac_Val*Nvl(:PromI_Max_Loose, 0)/(Nvl(:PromI_Qty*:PromI_Max_Loose, 0)+Nvl(:PromI_Loose, 0)), 2);
  Else
    :PromAI_Fifo_Val := Nvl(:PromAI_Fifo*:PromAI_Qty, 0) + Nvl(:PromAI_Fifo*:PromAI_Loose/:PromAI_Max_Loose, 0);
    :PromI_Rate := Round(:PromAI_Tot_Fifo_Val*Nvl(:PromI_Max_Loose, 0)/(Nvl(:PromI_Qty*:PromI_Max_Loose, 0)+Nvl(:PromI_Loose, 0)), 2);
  End If;
End;
What you getClause Rule Language
on change of PROMAI_LOOSE:    set PROMAI_SL_MANUAL_FLAG to 0 when (nvl(PROMAI_LOOSE, 0) > 0) and (PROMAI_LOOSE <> AOLD_LOOSE)    set PROMAI_WAC_VAL to nvl(PROMAI_WAC * PROMAI_QTY, 0) + nvl((PROMAI_WAC * PROMAI_LOOSE) / PROMAI_MAX_LOOSE, 0) when nvl(FRM_COST_VALUATION_METHOD, 'WAC') = 'WAC'    set PROMI_RATE to round((PROMAI_TOT_WAC_VAL * nvl(PROMI_MAX_LOOSE, 0)) / (nvl(PROMI_QTY * PROMI_MAX_LOOSE, 0) + nvl(PROMI_LOOSE, 0)), 2) when nvl(FRM_COST_VALUATION_METHOD, 'WAC') = 'WAC'    set PROMAI_FIFO_VAL to nvl(PROMAI_FIFO * PROMAI_QTY, 0) + nvl((PROMAI_FIFO * PROMAI_LOOSE) / PROMAI_MAX_LOOSE, 0) when not (nvl(FRM_COST_VALUATION_METHOD, 'WAC') = 'WAC')    set PROMI_RATE to round((PROMAI_TOT_FIFO_VAL * nvl(PROMI_MAX_LOOSE, 0)) / (nvl(PROMI_QTY * PROMI_MAX_LOOSE, 0) + nvl(PROMI_LOOSE, 0)), 2) when not (nvl(FRM_COST_VALUATION_METHOD, 'WAC') = 'WAC')
# 1 statement did not convert.#   line 6
#   :PromAI_Loose := Null;
#   reason: ITEM_STOCK_COMPARE is a program unit of this form used as a value, and a unit's body is inlined at a call statement rather than read for a return, so no FormConnect entry is written for it and what this expression holds is not stated

5 clauses converted, 1 statement refused

6. fmb_promotionPRE-INSERT on T_PROM_ALLOC_ITEMstudy
What you havePRE-INSERT
Declare
  v_Divn_Code Varchar2(10);
Begin
  If Nvl(:PARAMETER.P_GRP, 'N') = 'A' 
      And Get_Record_Property(1, 'T_PROM_ALLOC_ITEM', Status) = 'NEW' Then
    Prom_Message('Item Allocation Details Not Entered!');
    Raise Form_Trigger_Failure;
  End If;
  
  Select Loc_Divn_Code Into v_Divn_Code From M_Location 
  Where Loc_Comp_Code = :Global.Company
    And Loc_Code = :PromH_Loc_Code;
  :PromAI_Wac := Nvl(Fn_Get_Cost(:PromAI_Item_Code, :Global.Company, v_Divn_Code, Sysdate, 'WAC', 0), 0) * Nvl(:PromAI_Max_Loose, 0);
  :PromAI_Fifo := Nvl(Fn_Get_Cost(:PromAI_Item_Code, :Global.Company, v_Divn_Code, Sysdate, 'FIFO', 0), 0) * Nvl(:PromAI_Max_Loose, 0);
  
  :PromAI_Id := Fn_Get_Next_Id('PROM_ALLOC_ITEM');
  :PromAI_Cr_User := :Global.User;
  :PromAI_Cr_Dt := SysDate;
  :PromAI_Plu_Code := Get_Plu_Code(:PromAI_Item_Code);
  
  WP_Qty_Ratio_Checking;   --Added by mojish on 10/05/13
End;
What you getClause Rule Language
on save insert:    from load-fmb-promotion-t-prom-alloc-item-0(PROMH_LOC_CODE)    deny when (PARAMETER.P_GRP = 'A') and (status of T_PROM_ALLOC_ITEM = 'NEW') else "Item Allocation Details Not Entered!"    set PROMAI_WAC to nvl(FN_GET_COST(PROMAI_ITEM_CODE, GLOBAL.COMPANY, LOC_DIVN_CODE, sysdate(), 'WAC', 0), 0) * nvl(PROMAI_MAX_LOOSE, 0)    set PROMAI_FIFO to nvl(FN_GET_COST(PROMAI_ITEM_CODE, GLOBAL.COMPANY, LOC_DIVN_CODE, sysdate(), 'FIFO', 0), 0) * nvl(PROMAI_MAX_LOOSE, 0)    set PROMAI_ID to FN_GET_NEXT_ID('PROM_ALLOC_ITEM')    set PROMAI_CR_USER to GLOBAL.USER    set PROMAI_CR_DT to sysdate()    call WP_QTY_RATIO_CHECKING()
# 1 statement did not convert.#   line 19
#   :PromAI_Plu_Code := Get_Plu_Code(:PromAI_Item_Code);
#   reason: GET_PLU_CODE is a program unit of this form used as a value, and a unit's body is inlined at a call statement rather than read for a return, so no FormConnect entry is written for it and what this expression holds is not stated

7 clauses converted, 1 statement refused

7. fmb_promotionWHEN-VALIDATE-ITEM on T_PROM_ITEM.PROMI_QTYstudy
What you haveWHEN-VALIDATE-ITEM
Declare
  v_Stk_Flag Number;
  v_MxLoose Number;
Begin
  If :PromI_Qty Is Not Null Then
    If Nvl(:PARAMETER.P_GRP, 'N') = 'N' Then  --stock verification
      v_Stk_Flag := Item_Stock_Compare(:Global.Company, :PromH_Loc_Code, :PromI_Item_Code, :PromI_Uom_Code, :PromI_Qty, :PromI_Loose, 0, 0);
      If v_Stk_Flag = 1 Then
        :PromI_Qty := Null;
      End If;
    Else
      Select Uom_Max_Loose Into  v_MxLoose From M_Uom 
        Where uom_code = :PromI_Uom_Code;
      If :PromH_Option <> 'P' And Nvl(:PromI_Qty * v_MxLoose, 0) + Nvl(:PromI_Loose, 0) > Nvl(:PromH_Qty_Limit_Bu, 0) Then
        Prom_Message('Promotion Limit Qty is Less!');
        :PromI_Loose := :PromH_Qty_Limit_Bu;
        If Nvl(:PromI_Loose, 0) >= Nvl(v_MxLoose, 1) Then  --Convert Qty to Carton and Loose
          :PromI_Qty := Floor(:PromI_Loose / Nvl(v_MxLoose, 1));
          :PromI_Loose := Mod(:PromI_Loose, Nvl(v_MxLoose, 1));
        End If;  
      End IF;    
    End If;
  End If;
End;
What you getClause Rule Language
on change of PROMI_QTY when is_filled(PROMI_QTY):    from UOM(PROMI_UOM_CODE) when not (nvl(PARAMETER.P_GRP, 'N') = 'N')
        # load-fmb-promotion-t-prom-item-promi-qty-change-0    when not (nvl(PARAMETER.P_GRP, 'N') = 'N') and ((PROMH_OPTION <> 'P') and ((nvl(PROMI_QTY * UOM.UOM_MAX_LOOSE, 0) + nvl(PROMI_LOOSE, 0)) > nvl(PROMH_QTY_LIMIT_BU, 0)))
# 1 statement did not convert.#   line 9
#   :PromI_Qty := Null;
#   reason: ITEM_STOCK_COMPARE is a program unit of this form used as a value, and a unit's body is inlined at a call statement rather than read for a return, so no FormConnect entry is written for it and what this expression holds is not stated

1 clause converted, 1 statement refused

8. fmb_promotionWHEN-VALIDATE-ITEM on T_PROM_ITEM.PROMI_LOOSEstudy
What you haveWHEN-VALIDATE-ITEM
Declare
  v_Stk_Flag Number;
  v_MxLoose Number;
Begin
  If :PromI_Loose Is Not Null Then
    If Nvl(:PARAMETER.P_GRP, 'N') = 'N' Then  --stock verification
      v_Stk_Flag := Item_Stock_Compare(:Global.Company, :PromH_Loc_Code, :PromI_Item_Code, :PromI_Uom_Code, :PromI_Qty, :PromI_Loose, 0, 0);
      If v_Stk_Flag = 1 Then
        :Promi_Loose := Null;
      End If;
    Else
      Select Uom_Max_Loose Into  v_MxLoose From M_Uom 
        Where uom_code = :PromI_Uom_Code;
      If :PromH_Option <> 'P' And Nvl(:PromI_Qty * v_MxLoose, 0) + Nvl(:PromI_Loose, 0) > Nvl(:PromH_Qty_Limit_Bu, 0) Then
        Prom_Message('Promotion Limit Qty is Less!');
        :PromI_Loose := :PromH_Qty_Limit_Bu;
        If Nvl(:PromI_Loose, 0) >= Nvl(v_MxLoose, 1) Then  --Convert Qty to Carton and Loose
          :PromI_Qty := Floor(:PromI_Loose / Nvl(v_MxLoose, 1));
          :PromI_Loose := Mod(:PromI_Loose, Nvl(v_MxLoose, 1));
        End If;  
      End IF;    
    End If;
  End If;
End;
What you getClause Rule Language
on change of PROMI_LOOSE when is_filled(PROMI_LOOSE):    from UOM(PROMI_UOM_CODE) when not (nvl(PARAMETER.P_GRP, 'N') = 'N')
        # load-fmb-promotion-t-prom-item-promi-loose-change-0    when not (nvl(PARAMETER.P_GRP, 'N') = 'N') and ((PROMH_OPTION <> 'P') and ((nvl(PROMI_QTY * UOM.UOM_MAX_LOOSE, 0) + nvl(PROMI_LOOSE, 0)) > nvl(PROMH_QTY_LIMIT_BU, 0)))
# 1 statement did not convert.#   line 9
#   :Promi_Loose := Null;
#   reason: ITEM_STOCK_COMPARE is a program unit of this form used as a value, and a unit's body is inlined at a call statement rather than read for a return, so no FormConnect entry is written for it and what this expression holds is not stated

1 clause converted, 1 statement refused

9. fmb_promotionWHEN-BUTTON-PRESSED on T_PROM_ALLOC_ITEM_SERIAL.PB_PAI_OKstudy
What you haveWHEN-BUTTON-PRESSED
Declare
  v_Sl_To Number;
  v_Num_Rec Number;
  v_Count Number;
Begin
  v_Sl_To := Nvl(:PromAI_Qty * :PromAI_Max_Loose, 0) + Nvl(:PromAI_Loose, 0);
  If v_Sl_To > 0 And :PromAI_Item_Sl_Status In ('Auto', 'Manual') And v_Sl_To <> Nvl(:Sum_PaiSl_Qty_Bu, 0) Then
    Prom_Message('Serial number records insufficient/ more!');
    Raise Form_Trigger_Failure;
  Else
    Post;
  End If;
  
  Select Count(*) Into v_Count From T_Prom_Alloc_Item_Serial a, 
  (Select c.PaiSl_PromAI_Id, c.PaiSl_Items_Sl_Ref Fm_Qty, Min(b.PaiSl_Items_Sl_Ref) Min_Fm_Qty
  From T_Prom_Alloc_Item_Serial b, T_Prom_Alloc_Item_Serial c
  Where c.PaiSl_PromAI_Id = b.PaiSl_PromAI_Id And c.PaiSl_PromAI_Id = :PromAI_Id 
  And b.PaiSl_PromAI_Id = :PromAI_Id And b.PaiSl_Items_Sl_Ref > c.PaiSl_Items_Sl_Ref
  Group By c.PaiSl_PromAI_Id, c.PaiSl_Items_Sl_Ref) k
  Where k.PaiSl_PromAI_Id = a.PaiSl_PromAI_Id And k.Fm_Qty = a.PaiSl_Items_Sl_Ref
  And a.PaiSl_PromAI_Id = :PromAI_Id And k.Min_Fm_Qty <= (a.PaiSl_Items_Sl_Ref + a.PaiSl_Qty_Bu - 1);
  
  If v_Count > 0 Then
    Prom_Message('Serial number invalid range!');
    Raise Form_Trigger_Failure;
  End If;
  
  :AOld_Qty := :PromAI_Qty;
  :AOld_Loose := :PromAI_Loose;
  Go_Block('T_Prom_Alloc_Item');
End;
What you getClause Rule Language
on press of PB_PAI_OK:    from load-fmb-promotion-t-prom-alloc-item-serial-pb-pai-ok-press-0(PROMAI_ID)    deny when (((nvl(PROMAI_QTY * PROMAI_MAX_LOOSE, 0) + nvl(PROMAI_LOOSE, 0)) > 0) and ((PROMAI_ITEM_SL_STATUS = 'Auto') or (PROMAI_ITEM_SL_STATUS = 'Manual'))) and ((nvl(PROMAI_QTY * PROMAI_MAX_LOOSE, 0) + nvl(PROMAI_LOOSE, 0)) <> nvl(SUM_PAISL_QTY_BU, 0)) else "Serial number records insufficient/ more!"    unique else "Serial number invalid range!"    set AOLD_QTY to PROMAI_QTY    set AOLD_LOOSE to PROMAI_LOOSE    go to T_PROM_ALLOC_ITEM
# 1 statement did not convert.#   line 11
#   Post;
#   reason: POST is a Forms built-in, which no FormConnect document declares because no database holds it, and no program unit of this form declares one either, so there is no body to inline under the caller's point and item and nothing to bridge to

5 clauses converted, 1 statement refused

10. fmb_promotionWHEN-CHECKBOX-CHANGED on T_PROM_ALLOC_ITEM.PROMAI_CHECK_SLstudy
What you haveWHEN-CHECKBOX-CHANGED
Declare
  v_Rec_Num Number;
  v_Rec_Num_Sl Number;
Begin
  v_Rec_Num := Get_Block_Property('T_PROM_ALLOC_ITEM', Current_Record);
  Go_Block('T_Prom_Item_Serial');
  Last_Record;
  v_Rec_Num_Sl := Get_Block_Property('T_Prom_Item_Serial', Current_Record);
  If :PiSl_Items_Sl_Ref Is Null Then
    v_Rec_Num_Sl:= v_Rec_Num_Sl - 1;
  End If;
  If :PromAI_Check_Sl = 'Y' Then
    First_Record;
    Loop
      If :PromAI_Check_Sl ='Y' Then
        :PromAI_Check_Sl := 'N';
      End If;
      If :System.Last_Record = 'TRUE' Then
        Exit;
      End If;
      Next_Record;
    End Loop;
    Go_Record(v_Rec_Num);
    If Nvl(:PromI_Qty * :PromI_Max_Loose, 0) + Nvl(:PromI_Loose, 0) <> Nvl(:PromAI_Qty * :PromI_Max_Loose, 0) + Nvl(:PromAI_Loose, 0) Then
      Prom_Message('Allocated qty is mismatch with promotion Item qty!');
    ElsIf v_Rec_Num_Sl > 0 Then
      Prom_Message('Already serial number entered!!');
    Else
      :PromAI_Check_Sl := 'Y';
    End If;
  End If;
End;
What you getClause Rule Language
on change of PROMAI_CHECK_SL:    go to T_PROM_ITEM_SERIAL    last record of T_PROM_ITEM_SERIAL    first record of T_PROM_ALLOC_ITEM when PROMAI_CHECK_SL = 'Y'    for each row in T_PROM_ALLOC_ITEM when (PROMAI_CHECK_SL = 'Y') and (PROMAI_CHECK_SL = 'Y')    warn "Allocated qty is mismatch with promotion Item qty!" when (PROMAI_CHECK_SL = 'Y') and ((nvl(PROMI_QTY * PROMI_MAX_LOOSE, 0) + nvl(PROMI_LOOSE, 0)) <> (nvl(PROMAI_QTY * PROMI_MAX_LOOSE, 0) + nvl(PROMAI_LOOSE, 0)))
# 2 statements did not convert.#   line 23
#   Go_Record(v_Rec_Num);
#   reason: navigate carries three actions, goTo a field, goToBlock a block and requery a block, and every one of them names its target; crl-loops.md rules that none of them lands on a row, so a step is refused rather than approximated#   line 26
#   If v_Rec_Num_Sl > 0 Then
#     Prom_Message('Already serial number entered!!');
#   Else
#     :PromAI_Check_Sl := 'Y';
#   End If;
#   reason: the guard reads the local V_REC_NUM_SL, which the one arm of a branch above it writes from its own previous value, `V_REC_NUM_SL - 1`, so what it holds here is that arithmetic where the branch ran and what it held before where it did not

5 clauses converted, 2 statements refused

11. fmb_promotionWHEN-BUTTON-PRESSED on T_PROM_FOC_QUALIFY_SERIAL.PB_FQ_OKstudy
What you haveWHEN-BUTTON-PRESSED
Declare
  v_Sl_To Number;
  v_Num_Rec Number;
  v_Count Number;
Begin
  v_Sl_To := Nvl(:PromFq_Qty * :PromFq_Max_Loose, 0) + Nvl(:PromFq_Loose, 0);
  If v_Sl_To > 0 And :PromFq_Item_Sl_Status In ('Auto', 'Manual') And v_Sl_To <> Nvl(:Sum_PfqS_Qty_Bu, 0) Then
    Prom_Message('Serial number records insufficient/ more!');
    Raise Form_Trigger_Failure;
  Else
    Post;
  End If;
  
  
  Select Count(*) Into v_Count From T_Prom_Foc_Qualify_Serial a, 
  (Select c.PfQs_PromFq_Id, c.PfQs_Items_Sl_Ref Fm_Qty, Min(b.PfQs_Items_Sl_Ref) Min_Fm_Qty
  From T_Prom_Foc_Qualify_Serial b, T_Prom_Foc_Qualify_Serial c
  Where c.PfQs_PromFq_Id = b.PfQs_PromFq_Id And c.PfQs_PromFq_Id = :PromFq_Id 
  And b.PfQs_PromFq_Id = :PromFq_Id And b.PfQs_Items_Sl_Ref > c.PfQs_Items_Sl_Ref
  Group By c.PfQs_PromFq_Id, c.PfQs_Items_Sl_Ref) k
  Where k.PfQs_PromFq_Id = a.PfQs_PromFq_Id And k.Fm_Qty = a.PfQs_Items_Sl_Ref
  And a.PfQs_PromFq_Id = :PromFq_Id And k.Min_Fm_Qty <= (a.PfQs_Items_Sl_Ref + a.PfQs_Qty_Bu - 1);
  
  If v_Count > 0 Then
    Prom_Message('Serial number invalid range!');
    Raise Form_Trigger_Failure;
  End If;
  :OldFq_Item_Code   := :PromFq_Item_Code;
  :OldFq_Qty   := :PromFq_Qty;
  :OldFq_Loose := :PromFq_Loose;
  Go_Block('T_Prom_Foc_Qualify');
End;
What you getClause Rule Language
on press of PB_FQ_OK:    from load-fmb-promotion-t-prom-foc-qualify-serial-pb-fq-ok-press-0(PROMFQ_ID)    deny when (((nvl(PROMFQ_QTY * PROMFQ_MAX_LOOSE, 0) + nvl(PROMFQ_LOOSE, 0)) > 0) and ((PROMFQ_ITEM_SL_STATUS = 'Auto') or (PROMFQ_ITEM_SL_STATUS = 'Manual'))) and ((nvl(PROMFQ_QTY * PROMFQ_MAX_LOOSE, 0) + nvl(PROMFQ_LOOSE, 0)) <> nvl(SUM_PFQS_QTY_BU, 0)) else "Serial number records insufficient/ more!"    unique else "Serial number invalid range!"    set OLDFQ_ITEM_CODE to PROMFQ_ITEM_CODE    set OLDFQ_QTY to PROMFQ_QTY    set OLDFQ_LOOSE to PROMFQ_LOOSE    go to T_PROM_FOC_QUALIFY
# 1 statement did not convert.#   line 11
#   Post;
#   reason: POST is a Forms built-in, which no FormConnect document declares because no database holds it, and no program unit of this form declares one either, so there is no body to inline under the caller's point and item and nothing to bridge to

6 clauses converted, 1 statement refused

12. fmb_promotionWHEN-BUTTON-PRESSED on T_PROM_FOC_ITEM_SERIAL.PB_FI_OKstudy
What you haveWHEN-BUTTON-PRESSED
Declare
  v_Sl_To Number;
  v_Num_Rec Number;
  v_Count Number;
Begin
  v_Sl_To := Nvl(:PromFi_Qty * :PromFi_Max_Loose, 0) + Nvl(:PromFi_Loose, 0);
  If v_Sl_To > 0 And :PromFi_Item_Sl_Status In ('Manual', 'Auto') 
    And v_Sl_To <> Nvl(:Sum_PfiS_Qty_Bu, 0) Then
    Prom_Message('Serial number records insufficient/ more!');
    Raise Form_Trigger_Failure;
  Else
    Post;
   End If;
    
  Select Count(*) Into v_Count From T_Prom_Foc_Item_Serial a, 
  (Select c.Pfis_PromFi_Id, c.Pfis_Items_Sl_Ref Fm_Qty, Min(b.Pfis_Items_Sl_Ref) Min_Fm_Qty
  From T_Prom_Foc_Item_Serial b, T_Prom_Foc_Item_Serial c
  Where c.Pfis_PromFi_Id = b.Pfis_PromFi_Id And c.Pfis_PromFi_Id = :PromFi_Id 
  And b.Pfis_PromFi_Id = :PromFi_Id And b.Pfis_Items_Sl_Ref > c.Pfis_Items_Sl_Ref
  Group By c.Pfis_PromFi_Id, c.Pfis_Items_Sl_Ref) k
  Where k.Pfis_PromFi_Id = a.Pfis_PromFi_Id And k.Fm_Qty = a.Pfis_Items_Sl_Ref
  And a.Pfis_PromFi_Id = :PromFi_Id And k.Min_Fm_Qty <= (a.Pfis_Items_Sl_Ref + a.Pfis_Qty_Bu - 1);
  
  If v_Count > 0 Then
    Prom_Message('Serial number invalid range!');
    Raise Form_Trigger_Failure;
  End If;
  :OldFi_Item_Code := :PromFi_Item_Code;
  :OldFi_Qty   := :PromFi_Qty;
  :OldFi_Loose := :PromFi_Loose;
  Go_Block('T_Prom_Foc_Item');
End;
What you getClause Rule Language
on press of PB_FI_OK:    from load-fmb-promotion-t-prom-foc-item-serial-pb-fi-ok-press-0(PROMFI_ID)    deny when (((nvl(PROMFI_QTY * PROMFI_MAX_LOOSE, 0) + nvl(PROMFI_LOOSE, 0)) > 0) and ((PROMFI_ITEM_SL_STATUS = 'Manual') or (PROMFI_ITEM_SL_STATUS = 'Auto'))) and ((nvl(PROMFI_QTY * PROMFI_MAX_LOOSE, 0) + nvl(PROMFI_LOOSE, 0)) <> nvl(SUM_PFIS_QTY_BU, 0)) else "Serial number records insufficient/ more!"    unique else "Serial number invalid range!"    set OLDFI_ITEM_CODE to PROMFI_ITEM_CODE    set OLDFI_QTY to PROMFI_QTY    set OLDFI_LOOSE to PROMFI_LOOSE    go to T_PROM_FOC_ITEM
# 1 statement did not convert.#   line 12
#   Post;
#   reason: POST is a Forms built-in, which no FormConnect document declares because no database holds it, and no program unit of this form declares one either, so there is no body to inline under the caller's point and item and nothing to bridge to

6 clauses converted, 1 statement refused

13. fmb_promotionon unit UPDATION_ALLOC_SERIALstudy
What you havePROGRAM-UNIT
PROCEDURE Updation_Alloc_Serial IS
Cursor CurAiSl Is 
    Select PaiSl_PromAI_Id, PaiSl_Items_Sl_Ref, PaiSl_Qty_Bu 
    From T_Prom_Alloc_Item_Serial, T_Prom_Alloc_Item
    Where PromAI_Id = PaiSl_PromAI_Id And PromAI_Item_Sl_Status In ('Manual', 'Auto')
    And PromAI_PromH_Id = :PromH_Id And Nvl(PromAI_Check_Sl, 'N') = 'Y';
  v_Rec_Num_Sl Number;
BEGIN
  If :PromI_Item_Sl_Status In ('Auto', 'Manual') And Nvl(:PARAMETER.P_GRP, 'N') = 'A' Then
    Set_Block_Property('T_Prom_Item_Serial', Insert_Allowed, Property_True);
    Set_Block_Property('T_Prom_Item_Serial', Update_Allowed, Property_True);
    Set_Block_Property('T_Prom_Item_Serial', Delete_Allowed, Property_True);
    Go_Block('T_Prom_Item_Serial');
    Clear_Block(No_Commit);
    First_Record;
    For c In CurAiSl Loop
      :PiSl_PromI_Id := :PromI_Id;
      :PiSl_Items_Sl_Ref := c.PaiSl_Items_Sl_Ref;
      :PiSl_Qty_Bu := c.PaiSl_Qty_Bu;
      :PiSl_Load_Flag := 'Loaded';
      Next_Record;
    End Loop;
    First_Record;
    
    Go_Block('T_Prom_Item_Serial');
    Last_Record;
    v_Rec_Num_Sl := Get_Block_Property('T_Prom_Item_Serial', Current_Record);
    If :PiSl_Items_Sl_Ref Is Null Then
      v_Rec_Num_Sl:= v_Rec_Num_Sl - 1;
    End If;
    If v_Rec_Num_Sl <= 0 Then
      Prom_Message('Promotion Item has no Serial Numbers!');
      Raise Form_Trigger_Failure;
    End If;
  End If;
END;
What you getClause Rule Language
on unit UPDATION_ALLOC_SERIAL:    state unlock T_PROM_ITEM_SERIAL on insert, update, delete when ((PROMI_ITEM_SL_STATUS = 'Auto') or (PROMI_ITEM_SL_STATUS = 'Manual')) and (PARAMETER.P_GRP = 'A')    go to T_PROM_ITEM_SERIAL when ((PROMI_ITEM_SL_STATUS = 'Auto') or (PROMI_ITEM_SL_STATUS = 'Manual')) and (PARAMETER.P_GRP = 'A')    clear T_PROM_ITEM_SERIAL when ((PROMI_ITEM_SL_STATUS = 'Auto') or (PROMI_ITEM_SL_STATUS = 'Manual')) and (PARAMETER.P_GRP = 'A')    first record when ((PROMI_ITEM_SL_STATUS = 'Auto') or (PROMI_ITEM_SL_STATUS = 'Manual')) and (PARAMETER.P_GRP = 'A')    append rows to T_PROM_ITEM_SERIAL in loop-fmb-promotion-program-unit-0 when ((PROMI_ITEM_SL_STATUS = 'Auto') or (PROMI_ITEM_SL_STATUS = 'Manual')) and (PARAMETER.P_GRP = 'A')    first record when ((PROMI_ITEM_SL_STATUS = 'Auto') or (PROMI_ITEM_SL_STATUS = 'Manual')) and (PARAMETER.P_GRP = 'A')    go to T_PROM_ITEM_SERIAL when ((PROMI_ITEM_SL_STATUS = 'Auto') or (PROMI_ITEM_SL_STATUS = 'Manual')) and (PARAMETER.P_GRP = 'A')    last record of T_PROM_ITEM_SERIAL when ((PROMI_ITEM_SL_STATUS = 'Auto') or (PROMI_ITEM_SL_STATUS = 'Manual')) and (PARAMETER.P_GRP = 'A')
# 1 statement did not convert.#   line 31
#   If v_Rec_Num_Sl <= 0 Then
#     Prom_Message('Promotion Item has no Serial Numbers!');
#     Raise Form_Trigger_Failure;
#   End If;
#   reason: the guard reads the local V_REC_NUM_SL, which the one arm of a branch above it writes from its own previous value, `V_REC_NUM_SL - 1`, so what it holds here is that arithmetic where the branch ran and what it held before where it did not

8 clauses converted, 1 statement refused

14. fmb_promotionWHEN-VALIDATE-ITEM on T_PROM_FOC_QUALIFY.PROMFQ_ITEM_CODEstudy
What you haveWHEN-VALIDATE-ITEM
Begin
  If :PromFq_Item_Code Is Not Null Then
    If :OldFq_Item_Code Is Not Null And :OldFq_Item_Code <> :PromFq_Item_Code Then
       Prom_Message('Serial number already entered. Can''t change itemcode!');
       Raise Form_Trigger_Failure;
    End If;
    If Nvl(:Frm_Loc_Validate_Stock, 'Y') = 'Y' Then
      Select Item_Name, Nvl(:PromFq_Uom_Code,Item_Uom_Code), Item_Serial_Status, Nvl(:PromFq_Max_Loose,Uom_Max_Loose)
      Into :PromFq_Item_Name, :PromFq_Uom_Code, :PromFq_Item_Sl_Status, :PromFq_Max_Loose
      From M_Item, M_Stock, M_Stock_Company, M_Uom
      Where Stkc_Item_Code = Item_Code And Uom_Code = Item_Uom_Code
        And Stkc_Comp_Code = Stk_Comp_Code(+)  And Stkc_Item_Code = Stk_Item_Code(+)
        And Stk_Loc_Code(+) = :PromH_Loc_Code
        And Stkc_Comp_Code = :Global.Company And Item_Code = :PromFq_Item_Code
        And Stk_Unconf_Qty >0;
      If :PromFq_Item_Name Is Null AND Nvl(:PROMH_PROMT_CODE,'N') <> 'PP' Then   ---Added By Faisal Habeeb on 12/01/2015
        Prom_Message('Invalid Item Code/ Insufficient Stock!');
        Raise Form_Trigger_Failure;
      End If;
    Else
      Select Item_Name,  Nvl(:PromFq_Uom_Code,Item_Uom_Code), Item_Serial_Status, Nvl(:PromFq_Max_Loose,Uom_Max_Loose) 
      Into :PromFq_Item_Name, :PromFq_Uom_Code, :PromFq_Item_Sl_Status, :PromFq_Max_Loose
      From M_Item, M_Uom
      Where Item_Uom_Code = Uom_Code And Item_Code = :PromFq_Item_Code
      And Nvl(Item_Status, 'Open') = 'Open';
      
      If :PromFq_Item_Name Is Null Then
        Prom_Message('Item not found!');
        Raise Form_Trigger_Failure;
      End If;
    End If;
    
    If :PromFq_Uom_Code = 'PCS' Then
      :PromFq_Loose := Null;
      Set_Item_Property('PromFq_Loose', ENABLED, PROPERTY_FALSE);
    Else
      Set_Item_Property('PromFq_Loose', ENABLED, PROPERTY_TRUE);
      Set_Item_Property('PromFq_Loose', NAVIGABLE, PROPERTY_TRUE);
    End If;
    If :PromFq_Item_Sl_Status In ('Manual', 'Auto') Then
      Set_Item_Property('Pb_Fq_Manual_Sl', Enabled, Property_True);
      Set_Item_Property('Pb_Fq_Manual_Sl', Navigable, Property_True);  
    End If;
  End If;
Exception When No_Data_Found Then
  Prom_Message('Invalid Item Code/ Insufficient Stock!');
  Raise Form_Trigger_Failure;
End;
What you getClause Rule Language
on change of PROMFQ_ITEM_CODE:    from ITEM_0(PROMFQ_ITEM_CODE, PROMFQ_MAX_LOOSE, PROMFQ_UOM_CODE, PROMH_LOC_CODE) when is_filled(PROMFQ_ITEM_CODE) and (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')
        # load-fmb-promotion-t-prom-foc-qualify-promfq-item-code-when-validate-item-change-0    from ITEM_1(PROMFQ_ITEM_CODE, PROMFQ_MAX_LOOSE, PROMFQ_UOM_CODE)
        # load-fmb-promotion-t-prom-foc-qualify-promfq-item-code-when-validate-item-change-1    deny when is_filled(PROMFQ_ITEM_CODE) and (is_filled(OLDFQ_ITEM_CODE) and (OLDFQ_ITEM_CODE <> PROMFQ_ITEM_CODE)) else "Serial number already entered. Can't change itemcode!"    set PROMFQ_ITEM_NAME to ITEM_0.ITEM_NAME when is_filled(PROMFQ_ITEM_CODE) and (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')    set PROMFQ_UOM_CODE to ITEM_0.PROMFQ_UOM_CODE when is_filled(PROMFQ_ITEM_CODE) and (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')    set PROMFQ_ITEM_SL_STATUS to ITEM_0.ITEM_SERIAL_STATUS when is_filled(PROMFQ_ITEM_CODE) and (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')    set PROMFQ_MAX_LOOSE to ITEM_0.PROMFQ_MAX_LOOSE when is_filled(PROMFQ_ITEM_CODE) and (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')    deny when (is_filled(PROMFQ_ITEM_CODE) and (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')) and (is_blank(ITEM_0.ITEM_NAME) and (nvl(PROMH_PROMT_CODE, 'N') <> 'PP')) else "Invalid Item Code/ Insufficient Stock!"    fetch ITEM_1 when is_filled(PROMFQ_ITEM_CODE) and not (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')    set PROMFQ_ITEM_NAME to ITEM_1.ITEM_NAME when is_filled(PROMFQ_ITEM_CODE) and not (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')    set PROMFQ_UOM_CODE to ITEM_1.PROMFQ_UOM_CODE when is_filled(PROMFQ_ITEM_CODE) and not (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')    set PROMFQ_ITEM_SL_STATUS to ITEM_1.ITEM_SERIAL_STATUS when is_filled(PROMFQ_ITEM_CODE) and not (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')    set PROMFQ_MAX_LOOSE to ITEM_1.PROMFQ_MAX_LOOSE when is_filled(PROMFQ_ITEM_CODE) and not (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')    deny when (is_filled(PROMFQ_ITEM_CODE) and not (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')) and is_blank(ITEM_1.ITEM_NAME) else "Item not found!"    set PROMFQ_LOOSE to null when is_filled(PROMFQ_ITEM_CODE) and (ITEM_1.PROMFQ_UOM_CODE = 'PCS')    state disable PROMFQ_LOOSE when is_filled(PROMFQ_ITEM_CODE) and (ITEM_1.PROMFQ_UOM_CODE = 'PCS')    state enable PROMFQ_LOOSE when is_filled(PROMFQ_ITEM_CODE) and not (ITEM_1.PROMFQ_UOM_CODE = 'PCS')    state unskip PROMFQ_LOOSE when is_filled(PROMFQ_ITEM_CODE) and not (ITEM_1.PROMFQ_UOM_CODE = 'PCS')    state enable PB_FQ_MANUAL_SL when is_filled(PROMFQ_ITEM_CODE) and ((ITEM_1.ITEM_SERIAL_STATUS = 'Manual') or (ITEM_1.ITEM_SERIAL_STATUS = 'Auto'))    state unskip PB_FQ_MANUAL_SL when is_filled(PROMFQ_ITEM_CODE) and ((ITEM_1.ITEM_SERIAL_STATUS = 'Manual') or (ITEM_1.ITEM_SERIAL_STATUS = 'Auto'))
# 1 statement did not convert.#   line 45
#   Exception When No_Data_Found Then
#     Prom_Message('Invalid Item Code/ Insufficient Stock!');
#     Raise Form_Trigger_Failure;
#   reason: it handles NO_DATA_FOUND and re-raises, and CRL has no clause that runs when a statement fails: the error path ends the program either way, so the statements above it convert and the handler does not

18 clauses converted, 1 statement refused

15. fmb_promotionWHEN-VALIDATE-ITEM on T_PROM_FOC_ITEM.PROMFI_ITEM_CODEstudy
What you haveWHEN-VALIDATE-ITEM
Declare
  v_PromFq_Qty_Bu Number;
Begin
  If :PromFi_Item_Code Is Not Null Then
    If :OldFi_Item_Code Is Not Null And :OldFi_Item_Code <> :PromFi_Item_Code Then
       Prom_Message('Serial number already entered. Can''t change itemcode!');
       Raise Form_Trigger_Failure;
    End If;
    
    If Nvl(:Frm_Loc_Validate_Stock, 'Y') = 'Y' Then
      Select Item_Name, Nvl(:PromFi_Uom_Code, Item_Uom_Code), Item_Serial_Status, Nvl(:PromFi_Max_Loose, Uom_Max_Loose) 
      Into :PromFi_Item_Name, :PromFi_Uom_Code, :PromFi_Item_Sl_Status, :PromFi_Max_Loose
        From M_Item, M_Stock, M_Stock_Company, M_Uom
          Where Stkc_Item_Code = Item_Code And Uom_Code = Item_Uom_Code
            And Stkc_Comp_Code = Stk_Comp_Code(+)  And Stkc_Item_Code = Stk_Item_Code(+)
            And Stk_Loc_Code(+) = :PromH_Loc_Code
            And Stkc_Comp_Code = :Global.Company And Item_Code = :PromFi_Item_Code
            And Stk_Unconf_Qty >0 ;
            
      If :PromFi_Item_Name Is Null Then
        Prom_Message('Invalid Item Code/ Insufficient Stock!');
        Raise Form_Trigger_Failure;
      End If;
    Else
      Select Item_Name, Nvl(:PromFi_Uom_Code, Item_Uom_Code), Item_Serial_Status, Nvl(:PromFi_Max_Loose, Uom_Max_Loose)  
      Into :PromFi_Item_Name, :PromFi_Uom_Code, :PromFi_Item_Sl_Status, :PromFi_Max_Loose
      From M_Item, M_Uom
      Where Item_Uom_Code = Uom_Code  And Item_Code = :PromFi_Item_Code
      And Nvl(Item_Status, 'Open') = 'Open';
      
      If :PromFi_Item_Name Is Null Then
        Prom_Message('Item not found!');
        Raise Form_Trigger_Failure;
      End If;
    End If;  
    
    If :PromFi_Uom_Code = 'PCS' Then
      :PromFi_Loose := Null;
      Set_Item_Property('PromFi_Loose', ENABLED, PROPERTY_FALSE);
    Else
      Set_Item_Property('PromFi_Loose', ENABLED, PROPERTY_TRUE);
      Set_Item_Property('PromFi_Loose', NAVIGABLE, PROPERTY_TRUE);
    End If;
    If :PromH_Promt_Code In ('FG','AS') And :PromH_Option <> 'P' And :PromFi_Item_Sl_Status In ('Manual', 'Auto') Then               --Checking Foc Qty
      If Nvl(:PromH_Qty_Bu, 0) = 0 Or Nvl(:PromH_Foc_Bu, 0) = 0 Then
         Prom_Message('Foc Qty is not defined!');
         Raise Form_Trigger_Failure;
      End If;
      v_PromFq_Qty_Bu := Nvl(:PromFq_Qty * :PromFq_Max_Loose, 0) + Nvl(:PromFq_Loose, 0);
      :PromFi_Loose:= Floor((v_PromFq_Qty_Bu/:PromH_Qty_Bu)* :PromH_Foc_Bu);
      If Nvl(:PromFi_Loose, 0) >= Nvl(:PromFi_Max_Loose, 1) Then  --Convert Qty to Carton and Loose
        :PromFi_Qty := Floor(:PromFi_Loose / Nvl(:PromFi_Max_Loose, 1));
        :PromFi_Loose := Mod(:PromFi_Loose, Nvl(:PromFi_Max_Loose, 1));
      End If;
    End If;
    If :PromFi_Item_Sl_Status In ('Manual', 'Auto') Then
      Set_Item_Property('Pb_Fi_Manual_Sl', Enabled, Property_True);
      Set_Item_Property('Pb_Fi_Manual_Sl', Navigable, Property_True);
    End If;
  End If;
Exception When No_Data_Found Then
  Prom_Message('Invalid Item Code/ Insufficient Stock!');
  Raise Form_Trigger_Failure;
End;
What you getClause Rule Language
on change of PROMFI_ITEM_CODE:    from ITEM_0(PROMFI_ITEM_CODE, PROMFI_MAX_LOOSE, PROMFI_UOM_CODE, PROMH_LOC_CODE) when is_filled(PROMFI_ITEM_CODE) and (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')
        # load-fmb-promotion-t-prom-foc-item-promfi-item-code-when-validate-item-change-0    from ITEM_1(PROMFI_ITEM_CODE, PROMFI_MAX_LOOSE, PROMFI_UOM_CODE)
        # load-fmb-promotion-t-prom-foc-item-promfi-item-code-when-validate-item-change-1    deny when is_filled(PROMFI_ITEM_CODE) and (is_filled(OLDFI_ITEM_CODE) and (OLDFI_ITEM_CODE <> PROMFI_ITEM_CODE)) else "Serial number already entered. Can't change itemcode!"    set PROMFI_ITEM_NAME to ITEM_0.ITEM_NAME when is_filled(PROMFI_ITEM_CODE) and (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')    set PROMFI_UOM_CODE to ITEM_0.PROMFI_UOM_CODE when is_filled(PROMFI_ITEM_CODE) and (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')    set PROMFI_ITEM_SL_STATUS to ITEM_0.ITEM_SERIAL_STATUS when is_filled(PROMFI_ITEM_CODE) and (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')    set PROMFI_MAX_LOOSE to ITEM_0.PROMFI_MAX_LOOSE when is_filled(PROMFI_ITEM_CODE) and (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')    deny when (is_filled(PROMFI_ITEM_CODE) and (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')) and is_blank(ITEM_0.ITEM_NAME) else "Invalid Item Code/ Insufficient Stock!"    fetch ITEM_1 when is_filled(PROMFI_ITEM_CODE) and not (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')    set PROMFI_ITEM_NAME to ITEM_1.ITEM_NAME when is_filled(PROMFI_ITEM_CODE) and not (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')    set PROMFI_UOM_CODE to ITEM_1.PROMFI_UOM_CODE when is_filled(PROMFI_ITEM_CODE) and not (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')    set PROMFI_ITEM_SL_STATUS to ITEM_1.ITEM_SERIAL_STATUS when is_filled(PROMFI_ITEM_CODE) and not (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')    set PROMFI_MAX_LOOSE to ITEM_1.PROMFI_MAX_LOOSE when is_filled(PROMFI_ITEM_CODE) and not (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')    deny when (is_filled(PROMFI_ITEM_CODE) and not (nvl(FRM_LOC_VALIDATE_STOCK, 'Y') = 'Y')) and is_blank(ITEM_1.ITEM_NAME) else "Item not found!"    set PROMFI_LOOSE to null when is_filled(PROMFI_ITEM_CODE) and (ITEM_1.PROMFI_UOM_CODE = 'PCS')    state disable PROMFI_LOOSE when is_filled(PROMFI_ITEM_CODE) and (ITEM_1.PROMFI_UOM_CODE = 'PCS')    state enable PROMFI_LOOSE when is_filled(PROMFI_ITEM_CODE) and not (ITEM_1.PROMFI_UOM_CODE = 'PCS')    state unskip PROMFI_LOOSE when is_filled(PROMFI_ITEM_CODE) and not (ITEM_1.PROMFI_UOM_CODE = 'PCS')    deny when (is_filled(PROMFI_ITEM_CODE) and ((((PROMH_PROMT_CODE = 'FG') or (PROMH_PROMT_CODE = 'AS')) and (PROMH_OPTION <> 'P')) and ((ITEM_1.ITEM_SERIAL_STATUS = 'Manual') or (ITEM_1.ITEM_SERIAL_STATUS = 'Auto')))) and ((nvl(PROMH_QTY_BU, 0) = 0) or (nvl(PROMH_FOC_BU, 0) = 0)) else "Foc Qty is not defined!"    set PROMFI_LOOSE to floor(((nvl(PROMFQ_QTY * PROMFQ_MAX_LOOSE, 0) + nvl(PROMFQ_LOOSE, 0)) / PROMH_QTY_BU) * PROMH_FOC_BU) when is_filled(PROMFI_ITEM_CODE) and ((((PROMH_PROMT_CODE = 'FG') or (PROMH_PROMT_CODE = 'AS')) and (PROMH_OPTION <> 'P')) and ((ITEM_1.ITEM_SERIAL_STATUS = 'Manual') or (ITEM_1.ITEM_SERIAL_STATUS = 'Auto')))    set PROMFI_QTY to floor(PROMFI_LOOSE / nvl(ITEM_1.PROMFI_MAX_LOOSE, 1)) when (is_filled(PROMFI_ITEM_CODE) and ((((PROMH_PROMT_CODE = 'FG') or (PROMH_PROMT_CODE = 'AS')) and (PROMH_OPTION <> 'P')) and ((ITEM_1.ITEM_SERIAL_STATUS = 'Manual') or (ITEM_1.ITEM_SERIAL_STATUS = 'Auto')))) and (nvl(PROMFI_LOOSE, 0) >= nvl(ITEM_1.PROMFI_MAX_LOOSE, 1))    set PROMFI_LOOSE to mod(PROMFI_LOOSE, nvl(ITEM_1.PROMFI_MAX_LOOSE, 1)) when (is_filled(PROMFI_ITEM_CODE) and ((((PROMH_PROMT_CODE = 'FG') or (PROMH_PROMT_CODE = 'AS')) and (PROMH_OPTION <> 'P')) and ((ITEM_1.ITEM_SERIAL_STATUS = 'Manual') or (ITEM_1.ITEM_SERIAL_STATUS = 'Auto')))) and (nvl(PROMFI_LOOSE, 0) >= nvl(ITEM_1.PROMFI_MAX_LOOSE, 1))    state enable PB_FI_MANUAL_SL when is_filled(PROMFI_ITEM_CODE) and ((ITEM_1.ITEM_SERIAL_STATUS = 'Manual') or (ITEM_1.ITEM_SERIAL_STATUS = 'Auto'))    state unskip PB_FI_MANUAL_SL when is_filled(PROMFI_ITEM_CODE) and ((ITEM_1.ITEM_SERIAL_STATUS = 'Manual') or (ITEM_1.ITEM_SERIAL_STATUS = 'Auto'))
# 1 statement did not convert.#   line 61
#   Exception When No_Data_Found Then
#     Prom_Message('Invalid Item Code/ Insufficient Stock!');
#     Raise Form_Trigger_Failure;
#   reason: it handles NO_DATA_FOUND and re-raises, and CRL has no clause that runs when a statement fails: the error path ends the program either way, so the statements above it convert and the handler does not

22 clauses converted, 1 statement refused

16. fmb_promotionWHEN-VALIDATE-ITEM on T_PROM_ITEM.PROMI_ITEM_CODEstudy
What you haveWHEN-VALIDATE-ITEM
Declare
  v_Uom_Code Varchar2(10);
  v_Max_Loose Number;
Begin
  If :PromI_Item_Code Is Not Null Then
    If :PromH_Promt_Code In ('FG','AS') Then  -- Free Goods
      If :PromI_Item_Code <> Nvl(:Old_Item_Code, 'Xx') Then
        Prom_Message('Item Code Mismatch with Qualified Item Code!');
        Raise Form_Trigger_Failure;
      End If;
    End If;
    
    If (Nvl(:PARAMETER.P_GRP, 'N') = 'A' Or  Nvl(:Frm_Loc_Validate_Stock, 'Y') = 'N') Then  --Wrapped Items/ no validate stock then no stock verification
      Select Item_Name, Item_Uom_Code, Item_Serial_Status, Uom_Max_Loose, Item_Exp_Type 
      Into :T_PROM_ITEM.Item_Name, v_Uom_Code, :PromI_Item_Sl_Status, v_Max_Loose, :En_Batch1
      From M_Item, M_Uom
      Where Item_Uom_Code = Uom_Code And Nvl(Item_Status, 'Open') = 'Open' And Item_Code = :PromI_Item_Code;
    Else                                      --Stock Verification
      Select Item_Name, Item_Uom_Code, Item_Serial_Status, Uom_Max_Loose
      Into :T_PROM_ITEM.Item_Name, v_Uom_Code, :PromI_Item_Sl_Status, v_Max_Loose
      From M_Item, M_Stock, M_Stock_Company, M_Uom
      Where Stkc_Item_Code = Item_Code And Uom_Code = Item_Uom_Code
          And Stkc_Comp_Code = Stk_Comp_Code(+)  And Stkc_Item_Code = Stk_Item_Code(+)
          And Stk_Loc_Code(+) = :PromH_Loc_Code
          And Stkc_Comp_Code = :Global.Company And Item_Code = :PromI_Item_Code
          And Stk_Unconf_Qty >0;
    End If;
    
    If :PromI_Plu_Code Is Null And :PromI_Item_Code Is Not Null Then
      :PromI_Uom_Code := v_Uom_Code;
    End If;
    
    If :PromI_Uom_Code Is Not Null Then
      Select Uom_Max_Loose Into :PromI_Max_Loose 
      From M_Uom
      Where Uom_Code = :PromI_Uom_Code;
    End If;
    
    If :PromI_Uom_Code = 'PCS' Then
      :PromI_Loose := Null;
      Set_Item_Property('PROMI_LOOSE', ENABLED, PROPERTY_FALSE);
    Else
      Set_Item_Property('PROMI_LOOSE', ENABLED, PROPERTY_TRUE);
      Set_Item_Property('PROMI_LOOSE', NAVIGABLE, PROPERTY_TRUE);
    End If;
    If :PromI_Item_Sl_Status In ('Manual', 'Auto') Then
      Set_Item_Property('Pb_Pi_manual_Sl', Enabled, Property_True);
      Set_Item_Property('Pb_Pi_manual_Sl', Navigable, Property_True);
    End If;
    
   
    If Nvl(:En_Batch1,'N') = 'N' Then
      Set_Item_Property('PromI_Batch', Enabled, Property_False);
      Set_Item_Property('PromI_Exp_Dt', Enabled, Property_False);
     Else
      Set_Item_Property('PromI_Batch', Enabled, Property_True);
      Set_Item_Property('PromI_Exp_Dt', Required, Property_True);
      Set_Item_Property('PromI_Exp_Dt', Enabled, Property_True);
    End If;


  End If;
  
  
Exception When No_Data_Found Then
  Prom_Message('Invalid Item Code/ Insufficient Stock!');
  Raise Form_Trigger_Failure;  
End;
What you getClause Rule Language
on change of PROMI_ITEM_CODE:    from ITEM_0(PROMI_ITEM_CODE) when is_filled(PROMI_ITEM_CODE) and ((PARAMETER.P_GRP = 'A') or (FRM_LOC_VALIDATE_STOCK = 'N'))
        # load-fmb-promotion-t-prom-item-promi-item-code-when-validate-item-change-0    from ITEM_1(PROMH_LOC_CODE, PROMI_ITEM_CODE) when is_filled(PROMI_ITEM_CODE) and not ((PARAMETER.P_GRP = 'A') or (FRM_LOC_VALIDATE_STOCK = 'N'))
        # load-fmb-promotion-t-prom-item-promi-item-code-when-validate-item-change-1    from UOM(PROMI_UOM_CODE)
        # load-fmb-promotion-t-prom-item-promi-item-code-when-validate-item-change-2    deny when (is_filled(PROMI_ITEM_CODE) and ((PROMH_PROMT_CODE = 'FG') or (PROMH_PROMT_CODE = 'AS'))) and (PROMI_ITEM_CODE <> nvl(OLD_ITEM_CODE, 'Xx')) else "Item Code Mismatch with Qualified Item Code!"    set ITEM_NAME to ITEM_0.ITEM_NAME when is_filled(PROMI_ITEM_CODE) and ((PARAMETER.P_GRP = 'A') or (FRM_LOC_VALIDATE_STOCK = 'N'))    set PROMI_ITEM_SL_STATUS to ITEM_0.ITEM_SERIAL_STATUS when is_filled(PROMI_ITEM_CODE) and ((PARAMETER.P_GRP = 'A') or (FRM_LOC_VALIDATE_STOCK = 'N'))    set EN_BATCH1 to ITEM_0.ITEM_EXP_TYPE when is_filled(PROMI_ITEM_CODE) and ((PARAMETER.P_GRP = 'A') or (FRM_LOC_VALIDATE_STOCK = 'N'))    set ITEM_NAME to ITEM_1.ITEM_NAME when is_filled(PROMI_ITEM_CODE) and not ((PARAMETER.P_GRP = 'A') or (FRM_LOC_VALIDATE_STOCK = 'N'))    set PROMI_ITEM_SL_STATUS to ITEM_1.ITEM_SERIAL_STATUS when is_filled(PROMI_ITEM_CODE) and not ((PARAMETER.P_GRP = 'A') or (FRM_LOC_VALIDATE_STOCK = 'N'))    set PROMI_UOM_CODE to ITEM_1.ITEM_UOM_CODE when is_filled(PROMI_ITEM_CODE) and (is_blank(PROMI_PLU_CODE) and is_filled(PROMI_ITEM_CODE))    fetch UOM when is_filled(PROMI_ITEM_CODE) and is_filled(PROMI_UOM_CODE)    set PROMI_MAX_LOOSE to UOM.UOM_MAX_LOOSE when is_filled(PROMI_ITEM_CODE) and is_filled(PROMI_UOM_CODE)    set PROMI_LOOSE to null when is_filled(PROMI_ITEM_CODE) and (PROMI_UOM_CODE = 'PCS')    state disable PROMI_LOOSE when is_filled(PROMI_ITEM_CODE) and (PROMI_UOM_CODE = 'PCS')    state enable PROMI_LOOSE when is_filled(PROMI_ITEM_CODE) and not (PROMI_UOM_CODE = 'PCS')    state unskip PROMI_LOOSE when is_filled(PROMI_ITEM_CODE) and not (PROMI_UOM_CODE = 'PCS')    state enable PB_PI_MANUAL_SL when is_filled(PROMI_ITEM_CODE) and ((ITEM_1.ITEM_SERIAL_STATUS = 'Manual') or (ITEM_1.ITEM_SERIAL_STATUS = 'Auto'))    state unskip PB_PI_MANUAL_SL when is_filled(PROMI_ITEM_CODE) and ((ITEM_1.ITEM_SERIAL_STATUS = 'Manual') or (ITEM_1.ITEM_SERIAL_STATUS = 'Auto'))    state disable PROMI_BATCH, PROMI_EXP_DT when is_filled(PROMI_ITEM_CODE) and (nvl(ITEM_0.ITEM_EXP_TYPE, 'N') = 'N')    state enable PROMI_BATCH when is_filled(PROMI_ITEM_CODE) and not (nvl(ITEM_0.ITEM_EXP_TYPE, 'N') = 'N')    state require PROMI_EXP_DT when is_filled(PROMI_ITEM_CODE) and not (nvl(ITEM_0.ITEM_EXP_TYPE, 'N') = 'N')    state enable PROMI_EXP_DT when is_filled(PROMI_ITEM_CODE) and not (nvl(ITEM_0.ITEM_EXP_TYPE, 'N') = 'N')
# 1 statement did not convert.#   line 65
#   Exception When No_Data_Found Then
#     Prom_Message('Invalid Item Code/ Insufficient Stock!');
#     Raise Form_Trigger_Failure;
#   reason: it handles NO_DATA_FOUND and re-raises, and CRL has no clause that runs when a statement fails: the error path ends the program either way, so the statements above it convert and the handler does not

19 clauses converted, 1 statement refused

17. fmb_promotionon unit PROC_DRAFTstudy
What you havePROGRAM-UNIT
PROCEDURE Proc_Draft IS
 v_Alert Number;
BEGIN
  
  Set_Block_Property('T_PROM_HEAD', Update_Allowed, Property_True);
  Set_item_Property('Promh_Status',Enabled,Property_True);    
  Set_item_Property('Promh_Status',Update_allowed,Property_True);
  Set_item_Property('PromH_Approval_Status',Enabled,Property_True);  
  Set_item_Property('PromH_Approval_Status',Update_allowed,Property_True);
  Set_item_Property('Promh_Draft_Yn',Enabled,Property_True);  
  Set_item_Property('Promh_Draft_Yn',Update_allowed,Property_True);
  
  :Frm_En_Draft := Fn_Get_Stk_Txn_Param(:PromH_Txn_Code,:Global.Company, 'PROM_EN_DRAFT');  ---Added on 06/Aug/2020 , Adding Draft.      
  If Nvl(:Frm_En_Draft,'N') = 'N' Then --- For No Darft Companies, without manual approval
      :Promh_Draft_Yn := 'N';
     If Nvl(Fn_Get_Stk_Txn_Param(:PromH_Txn_Code, :Global.Company, 'PROM_REQ_APPROVAL'), 'N') = 'N' Then
        :PromH_Approval_Status := 'F';               
        :Promh_Status := 'F';
        :Promh_Draft_Yn := 'N';
     End If;            
  Else --- For Companies with Draft option enabled
      --- Added on 18/10/2019,Shebin,  -- Confirm Documents
      If Nvl(:Frm_En_Draft,'N') ='Y' and Nvl(:Promh_Approval_Status,'N') <>'F' 
         and Nvl(:Promh_Draft_Yn,' ') <> 'N' Then ---to avoid the already saved record , saving as Draft again. --06/08/2020
        Set_Alert_Property('CAUTION', ALERT_MESSAGE_TEXT, 'Would you like to keep this document as draft?');
        V_Alert := Show_Alert ('CAUTION');
      End If;
        If Nvl(Fn_Get_Stk_Txn_Param(:PromH_Txn_Code, :Global.Company, 'PROM_REQ_APPROVAL'), 'N') = 'Y' Then    --- Added on 27/7/2020,Anju,5603
           If V_Alert = Alert_Button1 Then
             :Promh_Draft_Yn := 'Y';
           ElsIf V_Alert = Alert_Button2 Then
             :Promh_Draft_Yn := 'N';       
           Else --- if cancel button is clicked
              Set_Block_Property('T_PROM_HEAD', Update_Allowed, Property_False);
              Set_item_Property('Promh_Status',Enabled,Property_False);    
              Set_item_Property('Promh_Status',Update_allowed,Property_False);
              Set_item_Property('PromH_Approval_Status',Enabled,Property_False);  
              Set_item_Property('PromH_Approval_Status',Update_allowed,Property_False);
              Set_item_Property('Promh_Draft_Yn',Enabled,Property_False);  
              Set_item_Property('Promh_Draft_Yn',Update_allowed,Property_False);
              Raise Form_Trigger_Failure;
           End If; --till
       ElsIf Nvl(Fn_Get_Stk_Txn_Param(:PromH_Txn_Code, :Global.Company, 'PROM_REQ_APPROVAL'), 'N') = 'N' Then  --Auto Then   --till here
            If V_Alert = Alert_Button2 or V_Alert is Null  Then 
               :PromH_Approval_Status := 'F';               
               :Promh_Status := 'F';
               :Promh_Draft_Yn := 'N';
            ElsIf V_Alert = Alert_Button1 Then
              :Promh_Draft_Yn := 'Y';     
            Else --- If cancel button is clicked              
              Set_Block_Property('T_PROM_HEAD', Update_Allowed, Property_False);
              Set_item_Property('Promh_Status',Enabled,Property_False);    
              Set_item_Property('Promh_Status',Update_allowed,Property_False);
              Set_item_Property('PromH_Approval_Status',Enabled,Property_False);  
              Set_item_Property('PromH_Approval_Status',Update_allowed,Property_False);
              Set_item_Property('Promh_Draft_Yn',Enabled,Property_False);  
              Set_item_Property('Promh_Draft_Yn',Update_allowed,Property_False);
              Raise Form_Trigger_Failure;
            End If;
        End If;
   End If;--- Else ---  Nvl(:Frm_En_Draft,'N') = 'N' Then
  Set_Block_Property('T_PROM_HEAD', Update_Allowed, Property_False);
  Set_item_Property('Promh_Status',Enabled,Property_False);    
  Set_item_Property('Promh_Status',Update_allowed,Property_False);
  Set_item_Property('PromH_Approval_Status',Enabled,Property_False);  
  Set_item_Property('PromH_Approval_Status',Update_allowed,Property_False);
  Set_item_Property('Promh_Draft_Yn',Enabled,Property_False);  
  Set_item_Property('Promh_Draft_Yn',Update_allowed,Property_False);
  
  Approval_Validation; 
END;
What you getClause Rule Language
on unit PROC_DRAFT:    state unlock T_PROM_HEAD on update    state enable PROMH_STATUS    state unlock PROMH_STATUS on update    state enable PROMH_APPROVAL_STATUS    state unlock PROMH_APPROVAL_STATUS on update    state enable PROMH_DRAFT_YN    state unlock PROMH_DRAFT_YN on update    set FRM_EN_DRAFT to FN_GET_STK_TXN_PARAM(PROMH_TXN_CODE, GLOBAL.COMPANY, 'PROM_EN_DRAFT')    set PROMH_DRAFT_YN to 'N' when nvl(FRM_EN_DRAFT, 'N') = 'N'    set PROMH_APPROVAL_STATUS to 'F' when (nvl(FRM_EN_DRAFT, 'N') = 'N') and (nvl(FN_GET_STK_TXN_PARAM(PROMH_TXN_CODE, GLOBAL.COMPANY, 'PROM_REQ_APPROVAL'), 'N') = 'N')    set PROMH_STATUS to 'F' when (nvl(FRM_EN_DRAFT, 'N') = 'N') and (nvl(FN_GET_STK_TXN_PARAM(PROMH_TXN_CODE, GLOBAL.COMPANY, 'PROM_REQ_APPROVAL'), 'N') = 'N')    set PROMH_DRAFT_YN to 'N' when (nvl(FRM_EN_DRAFT, 'N') = 'N') and (nvl(FN_GET_STK_TXN_PARAM(PROMH_TXN_CODE, GLOBAL.COMPANY, 'PROM_REQ_APPROVAL'), 'N') = 'N')    show alert CAUTION with 'Would you like to keep this document as draft?' when not (nvl(FRM_EN_DRAFT, 'N') = 'N') and (((FRM_EN_DRAFT = 'Y') and (nvl(PROMH_APPROVAL_STATUS, 'N') <> 'F')) and (nvl(PROMH_DRAFT_YN, ' ') <> 'N'))    state lock T_PROM_HEAD on update    state disable PROMH_STATUS    state lock PROMH_STATUS on update    state disable PROMH_APPROVAL_STATUS    state lock PROMH_APPROVAL_STATUS on update    state disable PROMH_DRAFT_YN    state lock PROMH_DRAFT_YN on update    call APPROVAL_VALIDATION()
# 2 statements did not convert.#   line 29
#   If V_Alert = Alert_Button1 Then
#     :Promh_Draft_Yn := 'Y';
#   Else
#     If V_Alert = Alert_Button2 Then
#       :Promh_Draft_Yn := 'N';
#     Else
#       Set_Block_Property('T_PROM_HEAD', Update_Allowed, Property_False);
#       Set_item_Property('Promh_Status',Enabled,Property_False);
#       Set_item_Property('Promh_Status',Update_allowed,Property_False);
#       Set_item_Property('PromH_Approval_Status',Enabled,Property_False);
#       Set_item_Property('PromH_Approval_Status',Update_allowed,Property_False);
#       Set_item_Property('Promh_Draft_Yn',Enabled,Property_False);
#       Set_item_Property('Promh_Draft_Yn',Update_allowed,Property_False);
#       Raise Form_Trigger_Failure;
#     End If;
#   End If;
#   reason: the guard reads the local V_ALERT, which the one arm of a branch above it writes and the chain carries no Else, so on the path where no guard held it keeps whatever it held before the branch#   line 44
#   If V_Alert = Alert_Button2 or V_Alert is Null Then
#     :PromH_Approval_Status := 'F';
#     :Promh_Status := 'F';
#     :Promh_Draft_Yn := 'N';
#   Else
#     If V_Alert = Alert_Button1 Then
#       :Promh_Draft_Yn := 'Y';
#     Else
#       Set_Block_Property('T_PROM_HEAD', Update_Allowed, Property_False);
#       Set_item_Property('Promh_Status',Enabled,Property_False);
#       Set_item_Property('Promh_Status',Update_allowed,Property_False);
#       Set_item_Property('PromH_Approval_Status',Enabled,Property_False);
#       Set_item_Property('PromH_Approval_Status',Update_allowed,Property_False);
#       Set_item_Property('Promh_Draft_Yn',Enabled,Property_False);
#       Set_item_Property('Promh_Draft_Yn',Update_allowed,Property_False);
#       Raise Form_Trigger_Failure;
#     End If;
#   End If;
#   reason: the guard reads the local V_ALERT, which the one arm of a branch above it writes and the chain carries no Else, so on the path where no guard held it keeps whatever it held before the branch

21 clauses converted, 2 statements refused

18. fmb_promotionon unit LOAD_FOC_ITEMSstudy
What you havePROGRAM-UNIT
PROCEDURE Load_Foc_Items IS
  rg_Name Varchar(20):= 'RG_FOC_QUALIFY';
  rg_Id RecordGroup;
  rg_Col GroupColumn;
  v_Row_Num Number := 1;
  Cursor CurFqSl(v_PromFq_Id Number) Is 
    Select PfqS_PromFq_Id, PfqS_Items_Sl_Ref, PfqS_Qty_Bu 
    From T_Prom_Foc_Qualify_Serial, T_Prom_Foc_Qualify
    Where PromFq_Id = PfqS_PromFq_Id And PromFq_Item_Sl_Status In ('Manual', 'Auto')
    And PromFq_PromH_Id = :PromH_Id And PfqS_PromFq_Id = v_PromFq_Id;
BEGIN
  If :PromH_Promt_Code In ('FG','AS') Then  --Free Goods    
    rg_Id := Find_Group(rg_Name); 
    If Not Id_Null(rg_Id) Then
      Delete_Group_Row(rg_Id, ALL_ROWS);
    End If;
    If Id_Null(rg_Id) Then
      rg_Id := Create_Group('RG_FOC_QUALIFY');
      rg_Col := Add_Group_Column(rg_Id, 'Fq_Id', NUMBER_COLUMN);
      rg_Col := Add_Group_Column(rg_Id, 'ITEM_CODE', CHAR_COLUMN);
      rg_Col := Add_Group_Column(rg_Id, 'UOM_CODE', CHAR_COLUMN);
      rg_Col := Add_Group_Column(rg_Id, 'Fq_Qty', NUMBER_COLUMN);
      rg_Col := Add_Group_Column(rg_Id, 'Fq_Loose', NUMBER_COLUMN);
      rg_Col := Add_Group_Column(rg_Id, 'Fq_Sl_Ref', NUMBER_COLUMN);
    End If;
    
    Go_Block('T_Prom_Foc_Qualify');
    First_Record;
    Loop
      Add_Group_Row(rg_Id, v_Row_Num);
      Set_Group_Number_Cell('RG_FOC_QUALIFY.Fq_Id', v_Row_Num, :PromFq_Id);
      Set_Group_Char_Cell('RG_FOC_QUALIFY.ITEM_CODE', v_Row_Num, :PromFq_Item_Code);
      Set_Group_Char_Cell('RG_FOC_QUALIFY.UOM_CODE', v_Row_Num, :PromFq_Uom_Code);
      Set_Group_Number_Cell('RG_FOC_QUALIFY.Fq_Qty', v_Row_Num, :PromFq_Qty);
      Set_Group_Number_Cell('RG_FOC_QUALIFY.Fq_Loose', v_Row_Num, :PromFq_Loose);
      --Set_Group_Number_Cell('RG_FOC_QUALIFY.Fq_Sl_Ref', v_Row_Num, :PromFq_Item_Sl_Ref);
      If :System.Last_Record = 'TRUE' Then
        Exit;
      End If;
      v_Row_Num := v_Row_Num + 1;
      Next_Record;
    End Loop;
    First_Record;
    
    Set_Block_Property('T_Prom_Item_Serial', Insert_Allowed, Property_True);
    Set_Block_Property('T_Prom_Item_Serial', Update_Allowed, Property_True);
    Set_Block_Property('T_Prom_Item_Serial', Delete_Allowed, Property_True);
    
    Go_Block('T_Prom_Item');
    v_Row_Num := 1;
    First_Record;
    While (v_Row_Num <= Get_Group_Row_Count(rg_Id)) Loop
      :PromI_Item_Code := Get_Group_Char_Cell('RG_FOC_QUALIFY.ITEM_CODE', v_Row_Num);
      :PromI_Uom_Code := Get_Group_Char_Cell('RG_FOC_QUALIFY.UOM_CODE', v_Row_Num);
      :PromI_Qty := Get_Group_Number_Cell('RG_FOC_QUALIFY.Fq_Qty', v_Row_Num);
      :PromI_Loose := Get_Group_Number_Cell('RG_FOC_QUALIFY.Fq_Loose', v_Row_Num);  
      --:PromI_Item_Sl_Ref := Get_Group_Number_Cell('RG_FOC_QUALIFY.Fq_Sl_Ref', v_Row_Num);  
      :PromI_Sl_Manual_Flag := 1;
      :Old_Item_Code := :PromI_Item_Code;
      :Old_Qty := :PromI_Qty;
      :Old_Loose := :PromI_Loose;
    
      --Assigned Manual serial Number
      Go_Block('T_Prom_Item_Serial');
      First_Record;
      For sl In CurFqSl(Get_Group_Number_Cell('RG_FOC_QUALIFY.Fq_Id', v_Row_Num)) Loop
        :PiSl_Items_Sl_Ref := sl.PfqS_Items_Sl_Ref;
        :PiSl_Qty_Bu := sl.PfqS_Qty_Bu;
        Next_Record;
      End Loop;
      Previous_Record;
      Post;
      Clear_Block(No_Commit);
      Go_Block('T_Prom_Item');
      --End of Assigned Manual serial Number
      v_Row_Num := v_Row_Num + 1;
      Next_Record;
    End Loop;
    First_Record;
    --Set_Item_Property('PromI_Item_Sl_Ref', Enabled, Property_False);
    Set_Block_Property('T_Prom_Foc_Qualify', Insert_Allowed, Property_False);
    Set_Block_Property('T_Prom_Foc_Qualify', Update_Allowed, Property_False);
    Set_Block_Property('T_Prom_Foc_Qualify', Delete_Allowed, Property_False);

    Set_Block_Property('T_Prom_Foc_Qualify_Serial', Insert_Allowed, Property_False);
    Set_Block_Property('T_Prom_Foc_Qualify_Serial', Update_Allowed, Property_False);
    Set_Block_Property('T_Prom_Foc_Qualify_Serial', Delete_Allowed, Property_False);
    
    Set_Block_Property('T_Prom_Item_Serial', Insert_Allowed, Property_False);
    Set_Block_Property('T_Prom_Item_Serial', Update_Allowed, Property_False);
    Set_Block_Property('T_Prom_Item_Serial', Delete_Allowed, Property_False);
    
    Set_Item_Property('PromI_Item_Code', Insert_Allowed, Property_False);
    Set_Item_Property('PromI_Item_Code', Update_Allowed, Property_False);
    Set_Item_Property('PromI_Uom_Code', Enabled, Property_False);
    Set_Item_Property('PromI_Qty', Enabled, Property_False);
    Set_Item_Property('PromI_Loose', Enabled, Property_False);
  End If;
END;
What you getClause Rule Language
on unit LOAD_FOC_ITEMS:    go to T_PROM_FOC_QUALIFY when (PROMH_PROMT_CODE = 'FG') or (PROMH_PROMT_CODE = 'AS')    first record when (PROMH_PROMT_CODE = 'FG') or (PROMH_PROMT_CODE = 'AS')    state unlock T_PROM_ITEM_SERIAL on insert, update, delete when (PROMH_PROMT_CODE = 'FG') or (PROMH_PROMT_CODE = 'AS')    go to T_PROM_ITEM when (PROMH_PROMT_CODE = 'FG') or (PROMH_PROMT_CODE = 'AS')    first record when (PROMH_PROMT_CODE = 'FG') or (PROMH_PROMT_CODE = 'AS')    first record when (PROMH_PROMT_CODE = 'FG') or (PROMH_PROMT_CODE = 'AS')    state lock T_PROM_FOC_QUALIFY on insert, update, delete when (PROMH_PROMT_CODE = 'FG') or (PROMH_PROMT_CODE = 'AS')    state lock T_PROM_FOC_QUALIFY_SERIAL on insert, update, delete when (PROMH_PROMT_CODE = 'FG') or (PROMH_PROMT_CODE = 'AS')    state lock T_PROM_ITEM_SERIAL on insert, update, delete when (PROMH_PROMT_CODE = 'FG') or (PROMH_PROMT_CODE = 'AS')    state lock PROMI_ITEM_CODE on insert, update when (PROMH_PROMT_CODE = 'FG') or (PROMH_PROMT_CODE = 'AS')    state disable PROMI_LOOSE, PROMI_QTY, PROMI_UOM_CODE when (PROMH_PROMT_CODE = 'FG') or (PROMH_PROMT_CODE = 'AS')
# 4 statements did not convert.#   line 14
#   If Not Id_Null(rg_Id) Then
#     Delete_Group_Row(rg_Id, ALL_ROWS);
#   End If;
#   reason: the guard reads the local RG_ID, which is written from FIND_GROUP, and FIND_GROUP is a Forms built-in, which no FormConnect document declares because no database holds it, and no program unit of this form declares one either, so there is no body to inline under the caller's point and item and nothing to bridge to#   line 17
#   If Id_Null(rg_Id) Then
#     rg_Id := Create_Group('RG_FOC_QUALIFY');
#     rg_Col := Add_Group_Column(rg_Id, 'Fq_Id', NUMBER_COLUMN);
#     rg_Col := Add_Group_Column(rg_Id, 'ITEM_CODE', CHAR_COLUMN);
#     rg_Col := Add_Group_Column(rg_Id, 'UOM_CODE', CHAR_COLUMN);
#     rg_Col := Add_Group_Column(rg_Id, 'Fq_Qty', NUMBER_COLUMN);
#     rg_Col := Add_Group_Column(rg_Id, 'Fq_Loose', NUMBER_COLUMN);
#     rg_Col := Add_Group_Column(rg_Id, 'Fq_Sl_Ref', NUMBER_COLUMN);
#   End If;
#   reason: the guard reads the local RG_ID, which is written from FIND_GROUP, and FIND_GROUP is a Forms built-in, which no FormConnect document declares because no database holds it, and no program unit of this form declares one either, so there is no body to inline under the caller's point and item and nothing to bridge to#   line 29
#   Loop
#         Add_Group_Row(rg_Id, v_Row_Num);
#         Set_Group_Number_Cell('RG_FOC_QUALIFY.Fq_Id', v_Row_Num, :PromFq_Id);
#         Set_Group_Char_Cell('RG_FOC_QUALIFY.ITEM_CODE', v_Row_Num, :PromFq_Item_Code);
#         Set_Group_Char_Cell('RG_FOC_QUALIFY.UOM_CODE', v_Row_Num, :PromFq_Uom_Code);
#         Set_Group_Number_Cell('RG_FOC_QUALIFY.Fq_Qty', v_Row_Num, :PromFq_Qty);
#         Set_Group_Number_Cell('RG_FOC_QUALIFY.Fq_Loose', v_Row_Num, :PromFq_Loose);
#          
#         If :System.Last_Record = 'TRUE' Then
#           Exit;
#         End If;
#         v_Row_Num := v_Row_Num + 1;
#         Next_Record;
#       End Loop;
#   reason: its body holds a statement no recognizer claims, and a for each with one dropped runs the rest against every row: Add_Group_Row(rg_Id, v_Row_Num); Set_Group_Number_Cell('RG_FOC_QUALIFY.Fq_Id', v_Row_Num, :PromFq_Id); Set_Group_Char_Cell('RG_FOC_QUALIFY.ITEM_CODE', v_Row_Num, :PromFq_Ite...; Set_Group_Char_Cell('RG_FOC_QUALIFY.UOM_CODE', v_Row_Num, :PromFq_Uom_...; Set_Group_Number_Cell('RG_FOC_QUALIFY.Fq_Qty', v_Row_Num, :PromFq_Qty); Set_Group_Number_Cell('RG_FOC_QUALIFY.Fq_Loose', v_Row_Num, :PromFq_Lo...#   line 52
#   While (v_Row_Num <= Get_Group_Row_Count(rg_Id)) Loop
#         :PromI_Item_Code := Get_Group_Char_Cell('RG_FOC_QUALIFY.ITEM_CODE', v_Row_Num);
#         :PromI_Uom_Code := Get_Group_Char_Cell('RG_FOC_QUALIFY.UOM_CODE', v_Row_Num);
#         :PromI_Qty := Get_Group_Number_Cell('RG_FOC_QUALIFY.Fq_Qty', v_Row_Num);
#         :PromI_Loose := Get_Group_Number_Cell('RG_FOC_QUALIFY.Fq_Loose', v_Row_Num);  
#          
#         :PromI_Sl_Manual_Flag := 1;
#         :Old_Item_Code := :PromI_Item_Code;
#         :Old_Qty := :PromI_Qty;
#         :Old_Loose := :PromI_Loose;
#       
#          
#         Go_Block('T_Prom_Item_Serial');
#         First_Record;
#         For sl In CurFqSl(Get_Group_Number_Cell('RG_FOC_QUALIFY.Fq_Id', v_Row_Num)) Loop
#           :PiSl_Items_Sl_Ref := sl.PfqS_Items_Sl_Ref;
#           :PiSl_Qty_Bu := sl.PfqS_Qty_Bu;
#           Next_Record;
#         End Loop;
#         Previous_Record;
#         Post;
#         Clear_Block(No_Commit);
#         Go_Block('T_Prom_Item');
#          
#         v_Row_Num := v_Row_Num + 1;
#         Next_Record;
#       End Loop;
#   reason: it repeats while (v_Row_Num <= Get_Group_Row_Count(rg_Id)) holds, and a condition is not a collection: crl-loops.md's six operations each read a finite collection whose rows are known before the first pass, and a while loop states only when it stops

11 clauses converted, 4 statements refused

19. fmb_promotionon unit PRINT_PROMOTIONstudy
What you havePROGRAM-UNIT
PROCEDURE Print_Promotion IS
  Pl_Id     ParamList;
  v_Status  VarChar2(20);
  v_Log_Id  Number;
  v_Report  Varchar2(30);
  v_Report VarChar2(30) :=  'rep_prom_voucher';
  v_Rep_Id  Report_Object;
  v_Rep_Job_Id VarChar2(100);
  v_Job_Id VarChar2(100);
  v_Rep_Status VarChar2(100);
  v_Rep_URL VarChar2(1000);
  v_Host_Name VarChar2(100) := :Global.Rep_Host_Name;
  v_Port    VarChar2(100) := :Global.Rep_Port;
  v_Rep_Server VarChar2(100) := :Global.Rep_Server;
  v_Dt       Date;
Begin
  /*Select count(*) INTO :PromH_Prn_Count From T_Txn_Print_Log
  Where Log_Comp_Code =:PROMH_Comp_Code
  and Log_Loc_Code =:PROMH_Loc_Code
  and Log_Ayr_Code =:PROMH_Ayr_Code
  and Log_Txn_Code =:PROMH_Txn_Code
  and :PROMH_No Between log_No_From and Log_No_To;*/

  :Frm_Desformat  :=  Fn_Get_Stk_Txn_Param(:PROMH_Txn_Code,:Global.Company, 'PROM_REP_DESFORMAT');
  :Frm_Skip_Print :=  Fn_Get_Stk_Txn_Param(:PROMH_Txn_Code,:Global.Company, 'PROM_SKIP_PRINT');
  :Frm_Report := Fn_Get_Stk_Txn_Param(:PROMH_Txn_Code,:Global.Company, 'PROM_REPORT');

  /*If Nvl(:PROMH_Prn_Count, 0) > 0 Then
      Exit_Form(No_Commit, No_RollBack);
  Els*/
  If Nvl(:PROMH_Prn_Count, 0) = 0 AND Nvl(:Frm_Skip_Print, 'N') = 'N'  Then  
    PL_Id := Get_Parameter_List('Print');
    If Not Id_Null(Pl_Id) Then
       Destroy_Parameter_List(Pl_Id);
    End If;

     PL_Id := Create_Parameter_List('Print');

    
    Add_Parameter(PL_Id, 'Comp_Code', Text_Parameter, :Global.Company);
    Add_Parameter(PL_Id, 'Loc_Code', Text_Parameter, :PROMH_Loc_Code);
    Add_Parameter(PL_Id, 'Txn_Code', Text_Parameter, :PROMH_Txn_Code);
    Add_Parameter(PL_Id, 'Ayear_Code', Text_Parameter, :PROMH_AYr_Code);
    Add_Parameter(PL_Id, 'Doc_No', Text_Parameter, :PROMH_No);
    Add_Parameter(PL_Id, 'User_Code', Text_Parameter, :Global.User);
    Add_Parameter(Pl_Id, 'ParamForm', Text_Parameter, 'No');


    v_Rep_Id := Find_Report_Object('rep_prom_voucher');
    --Communication Mode
    Set_Report_Object_Property(v_Rep_Id, Report_Comm_Mode, Synchronous);
    Set_Report_Object_Property(v_Rep_Id, Report_Desformat, 'PDF');

    --User pref.Printer    
    :Frm_Printer_Name := Fn_Get_User_Preference(:Global.User, :Global.Company, :PROMH_Txn_Code, 'USR_PRINTER');
    
    If :Frm_Printer_Name Is Null Then
      :Frm_Printer_Name := Fn_Get_Stk_Txn_Param(:PROMH_Txn_Code, :Global.Company, 'PROMH_PRINTER');
    End If;

    --Handled Destination Type and Name
    If Nvl(:Frm_Printer_Name,:Mnu_Printer_Name) Is Not Null Then
       Set_Report_Object_Property(v_Rep_Id, Report_DesName, Nvl(:Frm_Printer_Name,:Mnu_Printer_Name));
    Else
       Set_Report_Object_Property(v_Rep_Id, Report_DesType,CACHE);
    End If;
    
    --Specify Report Server and Report File Name
     Set_Report_Object_Property(v_Rep_Id, Report_Server, v_Rep_Server);
     Set_Report_Object_Property(v_Rep_Id, Report_FileName,lower(:FRM_REPORT));
     
    --Run Report
    v_Rep_Job_Id := Run_Report_Object(v_Rep_Id, PL_Id);
    v_Rep_Status := Report_Object_Status(v_Rep_Job_Id);
    
    
    SET_CUSTOM_PROPERTY('CTRL.PRINTBEAN',1,'DEFAULT_PRINTER',Nvl(:Frm_Printer_Name,:Mnu_Printer_Name));
    If v_Rep_Status = 'FINISHED' Then
      If Upper(:Mnu_Dest_Name) = 'PRINTER' Then
           v_Job_Id := SubStr(v_Rep_Job_Id, length(v_Rep_Server)+2);
           v_Rep_URL := 'http://' || v_Host_Name || ':' || v_Port || '/reports/rwservlet/getjobid' || v_Job_Id || '?server=' || v_Rep_Server;
           Message(v_Rep_URL);
           SET_CUSTOM_PROPERTY('CTRL.PRINTBEAN',1,'FILE_NAME',v_Rep_URL);
           SET_CUSTOM_PROPERTY('CTRL.PRINTBEAN',1,'PRINT_FILE','');
           Message(v_Rep_URL);
           --Web.Show_Document(v_Rep_URL, '_blank');
      Elsif Upper(:Mnu_Dest_Name) = 'CACHE' Then
            v_Job_Id := SubStr(v_Rep_Job_Id, length(v_Rep_Server)+2);
           v_Rep_URL := 'http://' || v_Host_Name || ':' || v_Port || '/reports/rwservlet/getjobid' || v_Job_Id || '?server=' || v_Rep_Server;
           Message(v_Rep_URL);
           Web.Show_Document(v_Rep_URL, '_blank');
      End If;
    Else
      Message('Error Running Report');
    End If;
  
    Proc_Insert_Txn_Print_Log1(:Global.Company,
                  :PROMH_Loc_Code,:PROMH_Ayr_Code,:PROMH_Txn_Code,:PROMH_No,:PROMH_No, Sysdate,:Global.User);
    Standard.Commit;  
  End If;        
End;
What you getClause Rule Language
on unit PRINT_PROMOTION:    set FRM_DESFORMAT to FN_GET_STK_TXN_PARAM(PROMH_TXN_CODE, GLOBAL.COMPANY, 'PROM_REP_DESFORMAT')    set FRM_SKIP_PRINT to FN_GET_STK_TXN_PARAM(PROMH_TXN_CODE, GLOBAL.COMPANY, 'PROM_SKIP_PRINT')    set FRM_REPORT to FN_GET_STK_TXN_PARAM(PROMH_TXN_CODE, GLOBAL.COMPANY, 'PROM_REPORT')    set FRM_PRINTER_NAME to FN_GET_USER_PREFERENCE(GLOBAL.USER, GLOBAL.COMPANY, PROMH_TXN_CODE, 'USR_PRINTER') when (nvl(PROMH_PRN_COUNT, 0) = 0) and (nvl(FRM_SKIP_PRINT, 'N') = 'N')    set FRM_PRINTER_NAME to FN_GET_STK_TXN_PARAM(PROMH_TXN_CODE, GLOBAL.COMPANY, 'PROMH_PRINTER') when ((nvl(PROMH_PRN_COUNT, 0) = 0) and (nvl(FRM_SKIP_PRINT, 'N') = 'N')) and is_blank(FRM_PRINTER_NAME)    report lower(FRM_REPORT) with (Ayear_Code = PROMH_AYR_CODE, Comp_Code = GLOBAL.COMPANY, Doc_No = PROMH_NO, Loc_Code = PROMH_LOC_CODE, ParamForm = 'No', Txn_Code = PROMH_TXN_CODE, User_Code = GLOBAL.USER) when (nvl(PROMH_PRN_COUNT, 0) = 0) and (nvl(FRM_SKIP_PRINT, 'N') = 'N')    call PROC_INSERT_TXN_PRINT_LOG1(GLOBAL.COMPANY, PROMH_LOC_CODE, PROMH_AYR_CODE, PROMH_TXN_CODE, PROMH_NO, PROMH_NO, sysdate(), GLOBAL.USER) when (nvl(PROMH_PRN_COUNT, 0) = 0) and (nvl(FRM_SKIP_PRINT, 'N') = 'N')
# 3 statements did not convert.#   line 77
#   SET_CUSTOM_PROPERTY('CTRL.PRINTBEAN',1,'DEFAULT_PRINTER',Nvl(:Frm_Printer_Name,:Mnu_Printer_Name));
#   reason: 'CTRL.PRINTBEAN' is a bean for printing, a Bean Area, and component-tracker.md tier 4.4 rules Bean Areas will not be built: they are a Forms applet's own protocol and the web has no equivalent#   line 78
#   If v_Rep_Status = 'FINISHED' Then
#     If Upper(:Mnu_Dest_Name) = 'PRINTER' Then
#       v_Job_Id := SubStr(v_Rep_Job_Id, length(v_Rep_Server)+2);
#       v_Rep_URL := 'http://' || v_Host_Name || ':' || v_Port || '/reports/rwservlet/getjobid' || v_Job_Id || '?server=' || v_Rep_Server;
#       Message(v_Rep_URL);
#       SET_CUSTOM_PROPERTY('CTRL.PRINTBEAN',1,'FILE_NAME',v_Rep_URL);
#       SET_CUSTOM_PROPERTY('CTRL.PRINTBEAN',1,'PRINT_FILE','');
#       Message(v_Rep_URL);
#     Else
#       If Upper(:Mnu_Dest_Name) = 'CACHE' Then
#         v_Job_Id := SubStr(v_Rep_Job_Id, length(v_Rep_Server)+2);
#         v_Rep_URL := 'http://' || v_Host_Name || ':' || v_Port || '/reports/rwservlet/getjobid' || v_Job_Id || '?server=' || v_Rep_Server;
#         Message(v_Rep_URL);
#         Web.Show_Document(v_Rep_URL, '_blank');
#       End If;
#     End If;
#   Else
#     Message('Error Running Report');
#   End If;
#   reason: the guard reads the local V_REP_STATUS, which is written from something CRL has no expression for: a Forms built-in, a database call or a shape the reader refuses#   line 99
#   Standard.Commit;
#   reason: G13: mid-trigger DML and the transaction boundary are refused, not converted

7 clauses converted, 3 statements refused

20. fmb_promotionon unit INIT_FORMstudy
What you havePROGRAM-UNIT
PROCEDURE INIT_FORM IS
BEGIN
  Clear_Form(No_Commit);
  
  
  :Frm_Comp_Name := :Global.Company_Name;
  :Frm_Mand_Eod := Fn_Get_Company_Param(:Global.Company,'COM_MAND_EOD');
  :Frm_Cost_Valuation_Method := Fn_Get_Company_Param(:Global.Company,'COM_COST_VALUATION_METHOD');
  
  --Date Formats
  Set_Item_Property('PROMH_Dt', Format_Mask, :Global.DateFormat);
  Set_Item_Property('PROMH_Dt_Fm', Format_Mask, :Global.DateFormat);
  Set_Item_Property('PROMH_Dt_to', Format_Mask, :Global.DateFormat);
  Set_Item_Property('PROMI_EXP_DT', Format_Mask, :Global.DateFormat);
  Set_Item_Property('PROMAI_EXP_DT', Format_Mask, :Global.DateFormat);

  Set_Item_Property('PROMH_EXT_UPTO', Format_Mask, :Global.DateFormat);

  :Frm_Rights_New := Fn_Get_User_Rights(:Global.Company, :Parameter.Menu_Code, :Global.User, 'New');
  :Frm_Rights_Edt := Fn_Get_User_Rights(:Global.Company, :Parameter.Menu_Code, :Global.User, 'Edit');
  :Frm_Rights_Can := Fn_Get_User_Rights(:Global.Company, :Parameter.Menu_Code, :Global.User, 'Cancel');
  :Frm_Rights_Prn := Fn_Get_User_Rights(:Global.Company, :Parameter.Menu_Code, :Global.User, 'Print');
  
  --Menu Parameters
  :Mnu_Txn := Fn_Get_Menu_Param(:Parameter.Menu_Code, 'MNU_DEF_TXN_CODE');
  :Mnu_En_Txn := Fn_Get_Menu_Param(:Parameter.Menu_Code, 'MNU_EN_TXN_CODE');
  :Mnu_Dest_Name := Fn_Get_Menu_Param(:Parameter.Menu_Code, 'MNU_DEST_NAME');
  :Mnu_Title := Fn_Get_Menu_Param(:Parameter.Menu_Code, 'MNU_TITLE');
  :Mnu_FormColor := Fn_Get_Menu_Param(:Parameter.Menu_Code, 'MNU_FORMCOLOR');  
  
  SET_ITEM_PROPERTY('BT_NEXT_CUST',LABEL,'&Next');
  SET_ITEM_PROPERTY('BT_NEXT_SUPP',LABEL,'&Next');
  SET_ITEM_PROPERTY('BT_NEXT_ITEMS',LABEL,'&Finish');
  
  SET_TAB_PAGE_PROPERTY('PROM_CUSTOMER', Visible, Property_False);  
  SET_TAB_PAGE_PROPERTY('PROM_SUPP_CHARGE', Visible, Property_False);  
  SET_TAB_PAGE_PROPERTY('PROM_ITEM', Visible, Property_False);
  
  Set_Item_Property('PROMH_TXN_CODE', Enabled, Property_True);
  Set_Item_Property('PROMH_TXN_CODE', Navigable, Property_True);
  Set_Item_Property('LOV_PROMT_CODE', Enabled, Property_True);
  Set_Item_Property('PROMH_PROMT_CODE', Enabled, Property_True);
  Set_Item_Property('PROMH_PROMT_CODE', Navigable, Property_True);
  Set_Item_Property('PROMH_CHARG_TYPE', Enabled, Property_True);
  Set_Item_Property('PROMH_CUST_ALLOC', Enabled, Property_True);
  Set_Item_Property('PROMH_OPTION', Enabled, Property_True);  --Qty and period enabled
  
   If :Frm_Rights_New > 0 Then -- If condition added , 21/Aug/2020
    Set_Block_Property('T_PROM_HEAD', Insert_Allowed, Property_True);
    Set_Block_Property('T_PROM_HEAD', Update_Allowed, Property_True);
    Set_Block_Property('T_PROM_HEAD', Delete_Allowed, Property_True);
  
    Set_Block_Property('T_PROM_CUSTOMER', Insert_Allowed, Property_True);
    Set_Block_Property('T_PROM_CUSTOMER', Update_Allowed, Property_True);
    Set_Block_Property('T_PROM_CUSTOMER', Delete_Allowed, Property_True);
  
    Set_Block_Property('T_PROM_SUPP_CHARGE', Insert_Allowed, Property_True);
    Set_Block_Property('T_PROM_SUPP_CHARGE', Update_Allowed, Property_True);
    Set_Block_Property('T_PROM_SUPP_CHARGE', Delete_Allowed, Property_True);
  
    Set_Block_Property('T_PROM_ITEM', Insert_Allowed, Property_True);
    Set_Block_Property('T_PROM_ITEM', Update_Allowed, Property_True);
    Set_Block_Property('T_PROM_ITEM', Delete_Allowed, Property_True);
    
    Set_Item_Property('BT_NEXT_ITEMS', Enabled, Property_True);   
   Else ---else part added , 21/Aug/2020
    Set_Block_Property('T_PROM_HEAD', Insert_Allowed, Property_False);
    Set_Block_Property('T_PROM_HEAD', Update_Allowed, Property_False);
    Set_Block_Property('T_PROM_HEAD', Delete_Allowed, Property_False);
  
    Set_Block_Property('T_PROM_CUSTOMER', Insert_Allowed, Property_False);
    Set_Block_Property('T_PROM_CUSTOMER', Update_Allowed, Property_False);
    Set_Block_Property('T_PROM_CUSTOMER', Delete_Allowed, Property_False);
  
    Set_Block_Property('T_PROM_SUPP_CHARGE', Insert_Allowed, Property_False);
    Set_Block_Property('T_PROM_SUPP_CHARGE', Update_Allowed, Property_False);
    Set_Block_Property('T_PROM_SUPP_CHARGE', Delete_Allowed, Property_False);
  
    Set_Block_Property('T_PROM_ITEM', Insert_Allowed, Property_False);
    Set_Block_Property('T_PROM_ITEM', Update_Allowed, Property_False);
    Set_Block_Property('T_PROM_ITEM', Delete_Allowed, Property_False);
    
    Set_Item_Property('BT_NEXT_ITEMS', Enabled, Property_False);         
   End If;  


  Set_Block_Property('T_PROM_ALLOC_ITEM', INSERT_ALLOWED, Property_False); --not wrapped items block disabled
  Set_Block_Property('T_PROM_ALLOC_ITEM', UPDATE_ALLOWED, Property_False);
  Set_Block_Property('T_PROM_ALLOC_ITEM', DELETE_ALLOWED, Property_False);
  Set_Item_Property('BT_ITEM_ALLOC', Enabled, Property_False);
  
  Set_Item_Property('PROMH_DT_FM', Enabled, Property_False);
  Set_Item_Property('PROMH_DT_TO', Enabled, Property_False);
  Set_Item_Property('PROMH_EXT_UPTO', Enabled, Property_False);
  
  Set_Lov_Property('LOV_ITEM',GROUP_NAME,'LOV_ITEM'); 
  Set_Item_Property('PROMI_WLOC_CODE', Required, Property_False);
  
    
  If :Frm_Rights_Prn > 0 Then
    Set_Item_Property('PB_DUPLICATE', Enabled, Property_True);
  Else
    Set_Item_Property('PB_DUPLICATE', Enabled, Property_False);
  End If;
  
END;
What you getClause Rule Language
on unit INIT_FORM:    clear form    set FRM_COMP_NAME to GLOBAL.COMPANY_NAME    set FRM_MAND_EOD to FN_GET_COMPANY_PARAM(GLOBAL.COMPANY, 'COM_MAND_EOD')    set FRM_COST_VALUATION_METHOD to FN_GET_COMPANY_PARAM(GLOBAL.COMPANY, 'COM_COST_VALUATION_METHOD')    state format PROMAI_EXP_DT, PROMH_DT, PROMH_DT_FM, PROMH_DT_TO, PROMH_EXT_UPTO, PROMI_EXP_DT as GLOBAL.DATEFORMAT    set FRM_RIGHTS_NEW to FN_GET_USER_RIGHTS(GLOBAL.COMPANY, PARAMETER.MENU_CODE, GLOBAL.USER, 'New')    set FRM_RIGHTS_EDT to FN_GET_USER_RIGHTS(GLOBAL.COMPANY, PARAMETER.MENU_CODE, GLOBAL.USER, 'Edit')    set FRM_RIGHTS_CAN to FN_GET_USER_RIGHTS(GLOBAL.COMPANY, PARAMETER.MENU_CODE, GLOBAL.USER, 'Cancel')    set FRM_RIGHTS_PRN to FN_GET_USER_RIGHTS(GLOBAL.COMPANY, PARAMETER.MENU_CODE, GLOBAL.USER, 'Print')    set MNU_TXN to FN_GET_MENU_PARAM(PARAMETER.MENU_CODE, 'MNU_DEF_TXN_CODE')    set MNU_EN_TXN to FN_GET_MENU_PARAM(PARAMETER.MENU_CODE, 'MNU_EN_TXN_CODE')    set MNU_DEST_NAME to FN_GET_MENU_PARAM(PARAMETER.MENU_CODE, 'MNU_DEST_NAME')    set MNU_TITLE to FN_GET_MENU_PARAM(PARAMETER.MENU_CODE, 'MNU_TITLE')    set MNU_FORMCOLOR to FN_GET_MENU_PARAM(PARAMETER.MENU_CODE, 'MNU_FORMCOLOR')    state label BT_NEXT_CUST, BT_NEXT_SUPP as '&Next'    state label BT_NEXT_ITEMS as '&Finish'    state hide TAB.PROM_CUSTOMER, TAB.PROM_ITEM, TAB.PROM_SUPP_CHARGE    state enable PROMH_TXN_CODE    state unskip PROMH_TXN_CODE    state enable LOV_PROMT_CODE, PROMH_PROMT_CODE    state unskip PROMH_PROMT_CODE    state enable PROMH_CHARG_TYPE, PROMH_CUST_ALLOC, PROMH_OPTION    state unlock T_PROM_HEAD on insert, update, delete when FRM_RIGHTS_NEW > 0    state unlock T_PROM_CUSTOMER on insert, update, delete when FRM_RIGHTS_NEW > 0    state unlock T_PROM_SUPP_CHARGE on insert, update, delete when FRM_RIGHTS_NEW > 0    state unlock T_PROM_ITEM on insert, update, delete when FRM_RIGHTS_NEW > 0    state enable BT_NEXT_ITEMS when FRM_RIGHTS_NEW > 0    state lock T_PROM_HEAD on insert, update, delete when not (FRM_RIGHTS_NEW > 0)    state lock T_PROM_CUSTOMER on insert, update, delete when not (FRM_RIGHTS_NEW > 0)    state lock T_PROM_SUPP_CHARGE on insert, update, delete when not (FRM_RIGHTS_NEW > 0)    state lock T_PROM_ITEM on insert, update, delete when not (FRM_RIGHTS_NEW > 0)    state disable BT_NEXT_ITEMS when not (FRM_RIGHTS_NEW > 0)    state lock T_PROM_ALLOC_ITEM on insert, update, delete    state disable BT_ITEM_ALLOC, PROMH_DT_FM, PROMH_DT_TO, PROMH_EXT_UPTO    state optional PROMI_WLOC_CODE    state enable PB_DUPLICATE when FRM_RIGHTS_PRN > 0    state disable PB_DUPLICATE when not (FRM_RIGHTS_PRN > 0)
# 1 statement did not convert.#   line 96
#   Set_Lov_Property('LOV_ITEM',GROUP_NAME,'LOV_ITEM');
#   reason: this swaps the record group behind a value list, and formspec.md declares one source per value help, so a list that changes what it queries mid-run is refused

37 clauses converted, 1 statement refused

21. fmb_promotionWHEN-BUTTON-PRESSED on T_PROM_HEAD.BT_NEXT_ITEMSstudy
What you haveWHEN-BUTTON-PRESSED
Declare
  v_Al Number;
  v_Cnt_Qual Number;
  v_Cnt_Item Number;
  v_Count Number;
Begin
  Go_Block('T_PROM_FOC_QUALIFY');
  If :PromH_Promt_Code In ('FG','AS') And Get_Record_Property(1, 'T_PROM_FOC_QUALIFY', Status) = 'NEW' Then
    Prom_Message('Foc Qualified Item Details Not Entered!');
    Raise Form_Trigger_Failure;
  End If;
  Last_Record;
  v_Cnt_Qual := Get_Block_Property('T_PROM_FOC_QUALIFY', Current_Record);
  
  Go_Block('T_PROM_FOC_ITEM');
  If :PromH_Promt_Code In ('FG','AS') And Get_Record_Property(1, 'T_PROM_FOC_ITEM', Status) = 'NEW' Then
    Prom_Message('Foc Item Details Not Entered!');
    Raise Form_Trigger_Failure;
  End If;
  Go_Block('T_PROM_CUSTOMER');
  If Nvl(:PromH_Cust_Alloc, 'N') = 'Y' And Get_Record_Property(1, 'T_PROM_CUSTOMER', Status) = 'NEW' Then
    Prom_Message('Customer Details Not Entered!');
    Raise Form_Trigger_Failure;
  End If;
  Go_Block('T_PROM_SUPP_CHARGE');
  If Nvl(:PromH_Charg_Type, 'NONE') = 'SUPP'  And  Get_Record_Property(1, 'T_PROM_SUPP_CHARGE', Status) = 'NEW' Then
    Prom_Message('Supplier Details Not Entered!');
    Raise Form_Trigger_Failure;
  End If;
  Go_Block('T_PROM_PLIST');
  If Get_Record_Property(1, 'T_PROM_PLIST', Status) = 'NEW' Then
    PROM_Message('Price Details Not Entered!');
    Raise Form_Trigger_Failure;
  End If;
  Go_Block('T_PROM_ITEM');
  If Get_Record_Property(1, 'T_PROM_ITEM', Status) = 'NEW' Then
    PROM_Message('Item Details Not Entered!');
    Raise Form_Trigger_Failure;
  End If;
  Last_Record;
  v_Cnt_Item := Get_Block_Property('T_PROM_ITEM', Current_Record);
  
  Go_Block('T_PROM_ALLOC_ITEM');
  If Nvl(:PARAMETER.P_GRP, 'N') = 'A' And Get_Record_Property(1, 'T_PROM_ALLOC_ITEM', Status) = 'NEW' Then
    Prom_Message('Item Allocation Details Not Entered!');
    Raise Form_Trigger_Failure;
  End If;
  
  If v_Cnt_Qual <> v_Cnt_Item And :PromH_Promt_Code In ('FG','AS') Then
    Prom_Message('Item and Foc Item mismatch!');
    Raise Form_Trigger_Failure;
  End If;
  
  Check_Dupicate_Promo_Item;        --Checking Duplicate Promotion Item
  Post;
  If :PromI_Item_Sl_Status In ('Auto','Manual') And :PromI_Sl_Manual_Flag = 1 Then
    Select Count(*) Into v_Count From T_Prom_Item_Serial a, 
    (Select c.PiSl_PromI_Id, c.PiSl_Items_Sl_Ref Fm_Qty, Min(b.PiSl_Items_Sl_Ref) Min_Fm_Qty
    From T_Prom_Item_Serial b, T_Prom_Item_Serial c
    Where c.PiSl_PromI_Id = b.PiSl_PromI_Id And c.PiSl_PromI_Id = :PromI_Id 
    And b.PiSl_PromI_Id = :PromI_Id And b.PiSl_Items_Sl_Ref > c.PiSl_Items_Sl_Ref
    Group By c.PiSl_PromI_Id, c.PiSl_Items_Sl_Ref) k
    Where k.PiSl_PromI_Id = a.PiSl_PromI_Id And k.Fm_Qty = a.PiSl_Items_Sl_Ref
    And a.PiSl_PromI_Id = :PromI_Id And k.Min_Fm_Qty <= (a.PiSl_Items_Sl_Ref + a.PiSl_Qty_Bu - 1);
    
    If v_Count > 0 Then
      Prom_Message('Serial number invalid range!');
      Raise Form_Trigger_Failure;
    End If;
  End If;
  
  Updation_Alloc_Serial; --Updating wrapped promotion serial to items if check_cl= 'Y'

  --Proc_Draft; ---Added on 06/Aug/2020, Draft Option enabled      --- Commented on 20/8/2020, Draft option is not needed, reverting back
  If Nvl(Fn_Get_Stk_Txn_Param(:PromH_Txn_Code, :Global.Company, 'PROM_REQ_APPROVAL'), 'N') = 'N' Then  --Auto Then
      :PromH_Approval_Status := 'F';
  End If; --Added on 20/Aug/2020 , Moved from below
  
  Commit_Form;
  
  ---Price applicable for all branch--------
  If Nvl(:PromH_Price_All_Branch, 'N') = 'Y' Then
    Insert Into T_Prom_PList(Promp_Id, Promp_Promh_Id, Promp_Promi_Id, Promp_Plh_Code, Promp_Comp_Code,
    Promp_Item_Code, Promp_Uom_Code,  Promp_Rate, Promp_Disc_Perc, Promp_Disc_Amt, Promp_Cr_User, Promp_Cr_Dt)
    Select Fn_Get_Next_Id('PROM_PLIST'), Promp_Promh_Id, Promp_Promi_Id, Locpar_Par_Value, Promp_Comp_Code,
    Promp_Item_Code, Promp_Uom_Code,  Promp_Rate, Promp_Disc_Perc, Promp_Disc_Amt, :Global.User, Sysdate
    From T_Prom_Plist, (Select Locpar_Comp_Code, Locpar_Par_Value, Count(*) From M_Location_Param
    Where Locpar_Comp_Code = :Global.Company And Locpar_Par_Code = 'LOC_POSDATA_PLIST' And Locpar_Par_Value Is Not Null
    group by Locpar_Comp_Code, Locpar_Par_Value)
    Where Locpar_Par_Value <> Promp_Plh_Code
    And Exists (Select 'x' From M_Pl_Head
    Where PlH_Comp_Code = :Global.Company And Plh_Code = Locpar_Par_Value And Nvl(Plh_Auto_Update, 'N') = 'Y')
    And PromP_PromH_Id = :PromH_Id;
    Standard.Commit;
  End If;
 

  If Form_Success And :System.Form_Status = 'QUERY' Then
  /*
    If Nvl(Fn_Get_Stk_Txn_Param(:PromH_Txn_Code, :Global.Company, 'PROM_REQ_APPROVAL'), 'N') = 'N' Then  --Auto Then
      :PromH_Approval_Status := 'F';
    End If; */ --- Moved just before Commit_Form, Proc_draft is commented - 20/Aug/20
    
    Print_Promotion;                      --Added By Mojish 07/03/15
    
    Prom_Message('Do#: '||:PromH_Loc_Code||'/'||:PromH_Txn_Code||'/'||:PromH_No);
    Clear_Form(Do_Commit);
    Init_Form;
    
  End If;
End;
What you getClause Rule Language
on press of BT_NEXT_ITEMS:    from PROM_ITEM_SERIAL(PROMI_ID) when ((PROMI_ITEM_SL_STATUS = 'Auto') or (PROMI_ITEM_SL_STATUS = 'Manual')) and (PROMI_SL_MANUAL_FLAG = 1)
        # load-fmb-promotion-t-prom-head-bt-next-items-press-0    go to T_PROM_FOC_QUALIFY    deny when ((PROMH_PROMT_CODE = 'FG') or (PROMH_PROMT_CODE = 'AS')) and (status of T_PROM_FOC_QUALIFY = 'NEW') else "Foc Qualified Item Details Not Entered!"    last record of T_PROM_HEAD    go to T_PROM_FOC_ITEM    deny when ((PROMH_PROMT_CODE = 'FG') or (PROMH_PROMT_CODE = 'AS')) and (status of T_PROM_FOC_ITEM = 'NEW') else "Foc Item Details Not Entered!"    go to T_PROM_CUSTOMER    deny when (PROMH_CUST_ALLOC = 'Y') and (status of T_PROM_CUSTOMER = 'NEW') else "Customer Details Not Entered!"    go to T_PROM_SUPP_CHARGE    deny when (PROMH_CHARG_TYPE = 'SUPP') and (status of T_PROM_SUPP_CHARGE = 'NEW') else "Supplier Details Not Entered!"    go to T_PROM_PLIST    deny when status of T_PROM_PLIST = 'NEW' else "Price Details Not Entered!"    go to T_PROM_ITEM    deny when status of T_PROM_ITEM = 'NEW' else "Item Details Not Entered!"    last record of T_PROM_HEAD    go to T_PROM_ALLOC_ITEM    deny when (PARAMETER.P_GRP = 'A') and (status of T_PROM_ALLOC_ITEM = 'NEW') else "Item Allocation Details Not Entered!"    call CHECK_DUPICATE_PROMO_ITEM()    unique of PROM_ITEM_SERIAL else "Serial number invalid range!" when ((PROMI_ITEM_SL_STATUS = 'Auto') or (PROMI_ITEM_SL_STATUS = 'Manual')) and (PROMI_SL_MANUAL_FLAG = 1)    call UPDATION_ALLOC_SERIAL()    set PROMH_APPROVAL_STATUS to 'F' when nvl(FN_GET_STK_TXN_PARAM(PROMH_TXN_CODE, GLOBAL.COMPANY, 'PROM_REQ_APPROVAL'), 'N') = 'N'    call WRITE_T_PROM_PLIST_6A697248(GLOBAL.USER, GLOBAL.COMPANY, PROMH_ID) when PROMH_PRICE_ALL_BRANCH = 'Y'
# 4 statements did not convert.#   line 49
#   If v_Cnt_Qual <> v_Cnt_Item And :PromH_Promt_Code In ('FG','AS') Then
#     Prom_Message('Item and Foc Item mismatch!');
#     Raise Form_Trigger_Failure;
#   End If;
#   reason: the guard reads the local V_CNT_QUAL, which is written from something CRL has no expression for: a Forms built-in, a database call or a shape the reader refuses#   line 55
#   Post;
#   reason: POST is a Forms built-in, which no FormConnect document declares because no database holds it, and no program unit of this form declares one either, so there is no body to inline under the caller's point and item and nothing to bridge to#   line 94
#   Standard.Commit;
#   reason: G13: mid-trigger DML and the transaction boundary are refused, not converted#   line 98
#   If Form_Success And :System.Form_Status = 'QUERY' Then
#     Print_Promotion;
#     Prom_Message('Do#: '||:PromH_Loc_Code||'/'||:PromH_Txn_Code||'/'||:PromH_No);
#     Clear_Form(Do_Commit);
#     Init_Form;
#   End If;
#   reason: the guard reads FORM_SUCCESS, which is one of Forms' own constants and not a value: CRL has no expression for what a property or an alert button is called

21 clauses converted, 4 statements refused

22. fmb_promotionon unit BUTTON_NEXTstudy
What you havePROGRAM-UNIT
PROCEDURE BUTTON_NEXT(Tab_Name varchar2) IS
  v_Block_Status varchar2(15);
BEGIN
  If Tab_Name Is Null Then         --default then  
    v_Block_Status := Get_Block_Property('T_PROM_HEAD', STATUS);
    If v_block_status = 'QUERY' And :Parameter.Exec_Qry_Flag = 1 Then
      Set_Block_Property('T_PROM_CUSTOMER', Insert_Allowed, Property_False);
      Set_Block_Property('T_PROM_CUSTOMER', Update_Allowed, Property_False);
      Set_Block_Property('T_PROM_CUSTOMER', Delete_Allowed, Property_False);
      Go_Block('T_PROM_CUSTOMER'); Execute_Query(No_Commit);
        
      Set_Block_Property('T_PROM_SUPP_CHARGE', Insert_Allowed, Property_False);
      Set_Block_Property('T_PROM_SUPP_CHARGE', Update_Allowed, Property_False);
      Set_Block_Property('T_PROM_SUPP_CHARGE', Delete_Allowed, Property_False);
      Go_Block('T_PROM_SUPP_CHARGE'); Execute_Query(No_Commit);
        
      Set_Block_Property('T_PROM_ITEM', Insert_Allowed, Property_False);
      Set_Block_Property('T_PROM_ITEM', Update_Allowed, Property_False);
      Set_Block_Property('T_PROM_ITEM', Delete_Allowed, Property_False);
      Go_Block('T_PROM_ITEM'); Execute_Query(No_Commit);
      
      Set_Block_Property('T_PROM_PLIST', Insert_Allowed, Property_False);
      Set_Block_Property('T_PROM_PLIST', Update_Allowed, Property_False);
      Set_Block_Property('T_PROM_PLIST', Delete_Allowed, Property_False);  
        
      Set_Block_Property('T_PROM_ALLOC_ITEM', Insert_Allowed, Property_False);
      Set_Block_Property('T_PROM_ALLOC_ITEM', Update_Allowed, Property_False);
      Set_Block_Property('T_PROM_ALLOC_ITEM', Delete_Allowed, Property_False);
      Go_Block('T_PROM_ALLOC_ITEM'); Execute_Query(No_Commit);
      
      Set_Block_Property('T_PROM_FOC_QUALIFY', Insert_Allowed, Property_False);
      Set_Block_Property('T_PROM_FOC_QUALIFY', Update_Allowed, Property_False);
      Set_Block_Property('T_PROM_FOC_QUALIFY', Delete_Allowed, Property_False);
      
      Set_Block_Property('T_PROM_FOC_ITEM', Insert_Allowed, Property_False);
      Set_Block_Property('T_PROM_FOC_ITEM', Update_Allowed, Property_False);
      Set_Block_Property('T_PROM_FOC_ITEM', Delete_Allowed, Property_False);
      
      Set_Block_Property('T_Prom_Foc_Qualify_Serial', Insert_Allowed, Property_False);
      Set_Block_Property('T_Prom_Foc_Qualify_Serial', Update_Allowed, Property_False);
      Set_Block_Property('T_Prom_Foc_Qualify_Serial', Delete_Allowed, Property_False);
      
      Set_Block_Property('T_Prom_Foc_Item_Serial', Insert_Allowed, Property_False);
      Set_Block_Property('T_Prom_Foc_Item_Serial', Update_Allowed, Property_False);
      Set_Block_Property('T_Prom_Foc_Item_Serial', Delete_Allowed, Property_False);  
      
      Set_Block_Property('T_Prom_Item_Serial', Insert_Allowed, Property_False);
      Set_Block_Property('T_Prom_Item_Serial', Update_Allowed, Property_False);
      Set_Block_Property('T_Prom_Item_Serial', Delete_Allowed, Property_False);
      
      Set_Block_Property('T_Prom_Alloc_Item_Serial', Insert_Allowed, Property_False);
      Set_Block_Property('T_Prom_Alloc_Item_Serial', Update_Allowed, Property_False);
      Set_Block_Property('T_Prom_Alloc_Item_Serial', Delete_Allowed, Property_False);
    Else
      Form_Validation;                  -- Form Validations
      If :PromH_Promt_Code In ('FG','AS') Then  -- Free Goods
        Load_Foc_Items;
      End If;
    End If;
    
    SET_TAB_PAGE_PROPERTY('PROM_CUSTOMER', Visible, Property_False);  
    SET_TAB_PAGE_PROPERTY('PROM_SUPP_CHARGE', Visible, Property_False);  
    SET_TAB_PAGE_PROPERTY('PROM_ITEM', Visible, Property_False);
      
    Set_Item_Property('PROMH_OPTION', Enabled, Property_False);  --Qty and period disabled
      
    If :PROMH_CUST_ALLOC = 'Y' Then  --Limited Customer
      SET_TAB_PAGE_PROPERTY('PROM_CUSTOMER', Visible, Property_True);
      Set_Item_Property('PROMH_CUST_ALLOC', Enabled, Property_False);  
      Go_Item('PROMC_CUST_CODE');
    End If;
      
    If Nvl(:PROMH_CHARG_TYPE, 'NONE') = 'SUPP' Then             --Supplier Charge
      SET_TAB_PAGE_PROPERTY('PROM_SUPP_CHARGE', Visible, Property_True);
      Set_Item_Property('PROMH_CHARG_TYPE', Enabled, Property_False);
      If :PROMH_CUST_ALLOC = 'N' Then
        Go_Item('PROMS_SUPP_CODE');
      End If;
    End If;  
      
    SET_TAB_PAGE_PROPERTY('PROM_ITEM', Visible, Property_True);
    Set_Item_Property('PROMH_TXN_CODE', Enabled, Property_False);
    Set_Item_Property('PROMH_PROMT_CODE', Enabled, Property_False);
    Set_Item_Property('LOV_PROMT_CODE', Enabled, Property_False);
      
    If :PROMH_CUST_ALLOC = 'N' And :PROMH_CHARG_TYPE Is Null Then
      Go_Item('PROMI_PLU_CODE');
    End If;
    SET_ITEM_PROPERTY('BT_NEXT_ITEMS', LABEL, '&Finish');
      
    If Nvl(:PARAMETER.P_GRP, 'N') = 'A' And v_block_status <> 'QUERY' Then  -- Allocated Items which means wrapped items only.
      Set_Block_Property('T_PROM_ALLOC_ITEM', INSERT_ALLOWED, Property_True);
      Set_Block_Property('T_PROM_ALLOC_ITEM', UPDATE_ALLOWED, Property_True);
      Set_Block_Property('T_PROM_ALLOC_ITEM', DELETE_ALLOWED, Property_True);
      Set_Item_Property('BT_ITEM_ALLOC', Enabled, Property_True);
      If Nvl(:Frm_Wh_Trans, 'Y') = 'Y' Then
        Set_Item_Property('PROMI_WLOC_CODE', Required, Property_True);
      End If;
    ElsIf v_block_status <> 'QUERY' Then
      Set_Lov_Property('LOV_ITEM',GROUP_NAME,'LOV_ALOC_ITEM'); 
    END IF;
  ElsIf Tab_Name = 'PROM_CUSTOMER' Then       -- Customer limit
    If Nvl(:PROMH_CHARG_TYPE, 'NONE') = 'SUPP' Then  
      Go_Item('PROMS_SUPP_CODE');
    Else
      Go_Item('PROMI_PLU_CODE');
    End If;
  ElsIf Tab_Name = 'PROM_SUPP_CHARGE' Then    -- Supplier
        Go_Item('PROMI_PLU_CODE');
  End If;   
  
--- Commented on 20/8/2020, Draft option is not needed, reverting back
/*
If Nvl(:Promh_Approval_Status ,' ') In ('F','R') Or  Nvl(:Promh_Draft_YN,' ') = 'N'  Then 
 Set_Item_Property('BT_NEXT_ITEMS', Enabled, Property_False);
Else ---If :Promh_Draft_YN = 'Y' And Nvl(:Promh_Approval_Status ,' ') not in ('F','R') Then 
 Set_Item_Property('BT_NEXT_ITEMS', Enabled, Property_True);
End If;  */

END;
What you getClause Rule Language
on unit BUTTON_NEXT(TAB_NAME):    state hide TAB.PROM_CUSTOMER, TAB.PROM_ITEM, TAB.PROM_SUPP_CHARGE when is_blank(ARG.TAB_NAME)    state disable PROMH_OPTION when is_blank(ARG.TAB_NAME)    state show TAB.PROM_CUSTOMER when is_blank(ARG.TAB_NAME) and (PROMH_CUST_ALLOC = 'Y')    state disable PROMH_CUST_ALLOC when is_blank(ARG.TAB_NAME) and (PROMH_CUST_ALLOC = 'Y')    go to PROMC_CUST_CODE when is_blank(ARG.TAB_NAME) and (PROMH_CUST_ALLOC = 'Y')    state show TAB.PROM_SUPP_CHARGE when is_blank(ARG.TAB_NAME) and (PROMH_CHARG_TYPE = 'SUPP')    state disable PROMH_CHARG_TYPE when is_blank(ARG.TAB_NAME) and (PROMH_CHARG_TYPE = 'SUPP')    go to PROMS_SUPP_CODE when (is_blank(ARG.TAB_NAME) and (PROMH_CHARG_TYPE = 'SUPP')) and (PROMH_CUST_ALLOC = 'N')    state show TAB.PROM_ITEM when is_blank(ARG.TAB_NAME)    state disable LOV_PROMT_CODE, PROMH_PROMT_CODE, PROMH_TXN_CODE when is_blank(ARG.TAB_NAME)    go to PROMI_PLU_CODE when is_blank(ARG.TAB_NAME) and ((PROMH_CUST_ALLOC = 'N') and is_blank(PROMH_CHARG_TYPE))    state label BT_NEXT_ITEMS as '&Finish' when is_blank(ARG.TAB_NAME)    go to PROMS_SUPP_CODE when (not is_blank(ARG.TAB_NAME) and (ARG.TAB_NAME = 'PROM_CUSTOMER')) and (PROMH_CHARG_TYPE = 'SUPP')    go to PROMI_PLU_CODE when (not is_blank(ARG.TAB_NAME) and (ARG.TAB_NAME = 'PROM_CUSTOMER')) and not (PROMH_CHARG_TYPE = 'SUPP')    go to PROMI_PLU_CODE when (not is_blank(ARG.TAB_NAME) and not (ARG.TAB_NAME = 'PROM_CUSTOMER')) and (ARG.TAB_NAME = 'PROM_SUPP_CHARGE')
# 2 statements did not convert.#   line 6
#   If v_block_status = 'QUERY' And :Parameter.Exec_Qry_Flag = 1 Then
#     Set_Block_Property('T_PROM_CUSTOMER', Insert_Allowed, Property_False);
#     Set_Block_Property('T_PROM_CUSTOMER', Update_Allowed, Property_False);
#     Set_Block_Property('T_PROM_CUSTOMER', Delete_Allowed, Property_False);
#     Go_Block('T_PROM_CUSTOMER');
#     Execute_Query(No_Commit);
#     Set_Block_Property('T_PROM_SUPP_CHARGE', Insert_Allowed, Property_False);
#     Set_Block_Property('T_PROM_SUPP_CHARGE', Update_Allowed, Property_False);
#     Set_Block_Property('T_PROM_SUPP_CHARGE', Delete_Allowed, Property_False);
#     Go_Block('T_PROM_SUPP_CHARGE');
#     Execute_Query(No_Commit);
#     Set_Block_Property('T_PROM_ITEM', Insert_Allowed, Property_False);
#     Set_Block_Property('T_PROM_ITEM', Update_Allowed, Property_False);
#     Set_Block_Property('T_PROM_ITEM', Delete_Allowed, Property_False);
#     Go_Block('T_PROM_ITEM');
#     Execute_Query(No_Commit);
#     Set_Block_Property('T_PROM_PLIST', Insert_Allowed, Property_False);
#     Set_Block_Property('T_PROM_PLIST', Update_Allowed, Property_False);
#     Set_Block_Property('T_PROM_PLIST', Delete_Allowed, Property_False);
#     Set_Block_Property('T_PROM_ALLOC_ITEM', Insert_Allowed, Property_False);
#     Set_Block_Property('T_PROM_ALLOC_ITEM', Update_Allowed, Property_False);
#     Set_Block_Property('T_PROM_ALLOC_ITEM', Delete_Allowed, Property_False);
#     Go_Block('T_PROM_ALLOC_ITEM');
#     Execute_Query(No_Commit);
#     Set_Block_Property('T_PROM_FOC_QUALIFY', Insert_Allowed, Property_False);
#     Set_Block_Property('T_PROM_FOC_QUALIFY', Update_Allowed, Property_False);
#     Set_Block_Property('T_PROM_FOC_QUALIFY', Delete_Allowed, Property_False);
#     Set_Block_Property('T_PROM_FOC_ITEM', Insert_Allowed, Property_False);
#     Set_Block_Property('T_PROM_FOC_ITEM', Update_Allowed, Property_False);
#     Set_Block_Property('T_PROM_FOC_ITEM', Delete_Allowed, Property_False);
#     Set_Block_Property('T_Prom_Foc_Qualify_Serial', Insert_Allowed, Property_False);
#     Set_Block_Property('T_Prom_Foc_Qualify_Serial', Update_Allowed, Property_False);
#     Set_Block_Property('T_Prom_Foc_Qualify_Serial', Delete_Allowed, Property_False);
#     Set_Block_Property('T_Prom_Foc_Item_Serial', Insert_Allowed, Property_False);
#     Set_Block_Property('T_Prom_Foc_Item_Serial', Update_Allowed, Property_False);
#     Set_Block_Property('T_Prom_Foc_Item_Serial', Delete_Allowed, Property_False);
#     Set_Block_Property('T_Prom_Item_Serial', Insert_Allowed, Property_False);
#     Set_Block_Property('T_Prom_Item_Serial', Update_Allowed, Property_False);
#     Set_Block_Property('T_Prom_Item_Serial', Delete_Allowed, Property_False);
#     Set_Block_Property('T_Prom_Alloc_Item_Serial', Insert_Allowed, Property_False);
#     Set_Block_Property('T_Prom_Alloc_Item_Serial', Update_Allowed, Property_False);
#     Set_Block_Property('T_Prom_Alloc_Item_Serial', Delete_Allowed, Property_False);
#   Else
#     Form_Validation;
#     If :PromH_Promt_Code In ('FG','AS') Then
#       Load_Foc_Items;
#     End If;
#   End If;
#   reason: the guard reads the local V_BLOCK_STATUS, which is written from something CRL has no expression for: a Forms built-in, a database call or a shape the reader refuses#   line 91
#   If Nvl(:PARAMETER.P_GRP, 'N') = 'A' And v_block_status <> 'QUERY' Then
#     Set_Block_Property('T_PROM_ALLOC_ITEM', INSERT_ALLOWED, Property_True);
#     Set_Block_Property('T_PROM_ALLOC_ITEM', UPDATE_ALLOWED, Property_True);
#     Set_Block_Property('T_PROM_ALLOC_ITEM', DELETE_ALLOWED, Property_True);
#     Set_Item_Property('BT_ITEM_ALLOC', Enabled, Property_True);
#     If Nvl(:Frm_Wh_Trans, 'Y') = 'Y' Then
#       Set_Item_Property('PROMI_WLOC_CODE', Required, Property_True);
#     End If;
#   Else
#     If v_block_status <> 'QUERY' Then
#       Set_Lov_Property('LOV_ITEM',GROUP_NAME,'LOV_ALOC_ITEM');
#     End If;
#   End If;
#   reason: the guard reads the local V_BLOCK_STATUS, which is written from something CRL has no expression for: a Forms built-in, a database call or a shape the reader refuses

15 clauses converted, 2 statements refused

23. fmb_promotionon unit CHECK_DUPICATE_PROMO_ITEMstudy
What you havePROGRAM-UNIT
PROCEDURE Check_Dupicate_Promo_Item IS
  v_Count Number; 
  v_Chk_Val Number := 0;
  rg_Name Varchar(20):= 'RG_PROM_CUST';
  rg_Id RecordGroup;
  rg_Col GroupColumn;
  v_Row_Num Number := 1;
  v_Cust_Code Varchar2(10);
BEGIN
  --Checking For Item_Code and Customer Code has Multipile Promotion
  rg_Id := Find_Group(rg_Name); 
  If Not Id_Null(rg_Id) Then
    Delete_Group_Row(rg_Id, ALL_ROWS);
  End If;
  
  If Id_Null(rg_Id) Then
    rg_Id := Create_Group('RG_PROM_CUST');
    rg_Col := Add_Group_Column(rg_Id, 'CUST_CODE', CHAR_COLUMN);
  End If;
  
  If Nvl(:PromH_Cust_Alloc, 'N') = 'Y' Then            --Selected Customer
    Go_Block('T_PROM_CUSTOMER');
    First_Record;
    Loop       -- T_Prom_Customer  
      Add_Group_Row(rg_Id, v_Row_Num);
      Set_Group_Char_Cell('RG_PROM_CUST.CUST_CODE', v_Row_Num, :PromC_Cust_Code); 
      If :System.Last_Record = 'TRUE' Then
        Exit;
      End If;
      v_Row_Num := v_Row_Num + 1;
      Next_Record;
    End Loop;
    First_Record;
  End If;
    
  Go_Block('T_PROM_ITEM');                               --Checking Qualifty Item Code
  If Get_Block_Property('T_PROM_ITEM', Status) = 'QUERY' Then
    v_Chk_Val := 1;
  ElsIf Get_Block_Property('T_PROM_ITEM', Status) = 'CHANGED' Then
    v_Chk_Val := 0;
  End If;
  First_Record;
  Loop             -- T_Prom_Item
    If Nvl(:PromH_Cust_Alloc, 'N') = 'Y' Then             --Selected Customer
      v_Row_Num := 1;
      While (v_Row_Num <= Get_Group_Row_Count(rg_Id)) Loop
        v_Cust_Code := Get_Group_Char_Cell('RG_PROM_CUST.CUST_CODE', v_Row_Num);
        
        SELECT Count(*) INTO v_Count                                
        FROM T_Prom_Head, T_Prom_Item, T_Prom_Customer
        WHERE  PromH_Id = PromI_PromH_Id AND PromH_Id = PromC_PromH_Id(+)  
          AND PromH_Comp_Code = :Global.Company And Nvl(PromH_Status, 'F') = 'F' And PromH_Loc_Code = :PromH_Loc_Code
          AND ((PromH_Cust_Alloc = 'Y' AND PromC_Cust_Code = v_Cust_Code) OR PromH_Cust_Alloc = 'N')
          AND PromI_Item_Code = :PromI_Item_Code AND PromI_Uom_Code = :PromI_Uom_Code And Nvl(PromI_Item_Sl_Status, 'NA') = 'NA'
          AND ((PromH_Option = 'Q' AND NVL(PromH_Qty_Limit_Bu, 0) > NVL(PromH_Inv_Qty_Bu, 0)) 
          OR (PromH_Option = 'P' AND :PromH_Dt BETWEEN PromH_Dt_Fm AND Nvl(PromH_Ext_Upto, PromH_Dt_To))
          OR (PromH_Option = 'B' AND NVL(PromH_Qty_Limit_Bu, 0) > NVL(PromH_Inv_Qty_Bu, 0)
          AND :PromH_Dt BETWEEN PromH_Dt_Fm AND Nvl(PromH_Ext_Upto, PromH_Dt_To)))
          AND Not EXISTS (SELECT 'X' FROM M_Prom_Type WHERE PromT_Code=PromH_PromT_Code AND PromT_Grp='A'); --Added By Faissal On 04/05/2015 (Ref:support #30344)
          
        If v_Count > v_Chk_Val Then
          Null; --commneted by shibu on 05/01/17
          --Prom_Message('Duplicate Promotion Item Code '||:PromI_Item_Code||' Customer Code '||v_Cust_Code);
          --Raise Form_Trigger_Failure;
           Exit;
        End If;  
        
        v_Row_Num := v_Row_Num + 1;
      End Loop;
    Else  
      /******** Checking for All Customers  *************/
      SELECT Count(*) INTO v_Count 
      FROM T_Prom_Head, T_Prom_Item, T_Prom_Customer
      WHERE  PromH_Id = PromI_PromH_Id AND PromH_Id = PromC_PromH_Id(+)  
        AND PromH_Comp_Code = :Global.Company And Nvl(PromH_Status, 'F') = 'F' And PromH_Loc_Code = :PromH_Loc_Code
        AND PromI_Item_Code = :PromI_Item_Code AND PromI_Uom_Code = :PromI_Uom_Code And Nvl(PromI_Item_Sl_Status, 'NA') = 'NA'
        AND ((PromH_Option = 'Q' AND Nvl(PromH_Qty_Limit_Bu, 0) > Nvl(PromH_Inv_Qty_Bu, 0)) 
        OR (PromH_Option = 'P' AND :PromH_Dt BETWEEN PromH_Dt_Fm AND Nvl(PromH_Ext_Upto, PromH_Dt_To))
        OR (PromH_Option = 'B' AND NVL(PromH_Qty_Limit_Bu, 0) > NVL(PromH_Inv_Qty_Bu, 0)
        AND :PromH_Dt BETWEEN PromH_Dt_Fm AND Nvl(PromH_Ext_Upto, PromH_Dt_To)))
        AND Not EXISTS (SELECT 'X' FROM M_Prom_Type WHERE PromT_Code=PromH_PromT_Code AND PromT_Grp='A'); --Added By Faissal On 04/05/2015 (Ref:support #30344);
          
      If v_Count > v_Chk_Val Then
        Null; --commneted by shibu on 05/01/17
        --Prom_Message('Duplicate Promotion Item Code '||:PromI_Item_Code);
         --Raise Form_Trigger_Failure;
         Exit;
      End If;      
    End If; 
    
    If :System.Last_Record = 'TRUE' Then
      Exit;
    End If;
    Next_Record;
  End Loop;
  First_Record;
  
  /*********** Checking Foc Item for Duplicate *************/
  Go_Block('T_PROM_FOC_ITEM');  
  If Get_Block_Property('T_PROM_FOC_ITEM', Status) = 'QUERY' Then
    v_Chk_Val := 1;
  ElsIf Get_Block_Property('T_PROM_FOC_ITEM', Status) = 'CHANGED' Then
    v_Chk_Val := 0;
  End If;                             --Checking Foc Item Code
  First_Record;
  Loop             -- T_Prom_Item
    If Nvl(:PromH_Cust_Alloc, 'N') = 'Y' Then             --Selected Customer
      v_Row_Num := 1;
      While (v_Row_Num <= Get_Group_Row_Count(rg_Id)) Loop
        v_Cust_Code := Get_Group_Char_Cell('RG_PROM_CUST.CUST_CODE', v_Row_Num);
        
        SELECT Count(*) INTO v_Count                                
        FROM T_Prom_Head, T_Prom_Foc_Item, T_Prom_Customer
        WHERE  PromH_Id = PromFi_PromH_Id AND PromH_Id = PromC_PromH_Id(+)  
          AND PromH_Comp_Code = :Global.Company And Nvl(PromH_Status, 'F') = 'F' And PromH_Loc_Code = :PromH_Loc_Code
          AND ((PromH_Cust_Alloc = 'Y' AND PromC_Cust_Code = v_Cust_Code) OR PromH_Cust_Alloc = 'N')
          AND PromFi_Item_Code = :PromFi_Item_Code AND PromFi_Uom_Code = :PromFi_Uom_Code AND Nvl(PromFi_Item_Sl_Status, 'NA') = 'NA'
          AND ((PromH_Option = 'Q' AND NVL(PromH_Qty_Limit_Bu, 0) > NVL(PromH_Inv_Qty_Bu, 0)) 
          OR (PromH_Option = 'P' AND :PromH_Dt BETWEEN PromH_Dt_Fm AND Nvl(PromH_Ext_Upto, PromH_Dt_To))
          OR (PromH_Option = 'B' AND NVL(PromH_Qty_Limit_Bu, 0) > NVL(PromH_Inv_Qty_Bu, 0)
          AND :PromH_Dt BETWEEN PromH_Dt_Fm AND Nvl(PromH_Ext_Upto, PromH_Dt_To)));
       
        If v_Count > v_Chk_Val Then
          --Prom_Message('Duplicate Promotion Foc Item Code '||:PromFi_Item_Code||' Customer Code '||v_Cust_Code);
          --Raise Form_Trigger_Failure;
           Exit;
        End If;  
        
        v_Row_Num := v_Row_Num + 1;
      End Loop;
    Else  
      /******** Checking for All Customers  *************/
      SELECT Count(*) INTO v_Count 
      FROM T_Prom_Head, T_Prom_Foc_Item, T_Prom_Customer
      WHERE  PromH_Id = PromFi_PromH_Id AND PromH_Id = PromC_PromH_Id(+)  
        AND PromH_Comp_Code = :Global.Company And Nvl(PromH_Status, 'F') = 'F' And PromH_Loc_Code = :PromH_Loc_Code
        AND PromFi_Item_Code = :PromFi_Item_Code AND PromFi_Uom_Code = :PromFi_Uom_Code AND Nvl(PromFi_Item_Sl_Status, 'NA') = 'NA'
        AND ((PromH_Option = 'Q' AND Nvl(PromH_Qty_Limit_Bu, 0) > Nvl(PromH_Inv_Qty_Bu, 0)) 
        OR (PromH_Option = 'P' AND :PromH_Dt BETWEEN PromH_Dt_Fm AND Nvl(PromH_Ext_Upto, PromH_Dt_To))
        OR (PromH_Option = 'B' AND NVL(PromH_Qty_Limit_Bu, 0) > NVL(PromH_Inv_Qty_Bu, 0)
        AND :PromH_Dt BETWEEN PromH_Dt_Fm AND Nvl(PromH_Ext_Upto, PromH_Dt_To)));
          
      If v_Count > v_Chk_Val Then
        --Prom_Message('Duplicate Promotion Foc Item Code '||:PromFi_Item_Code);
         --Raise Form_Trigger_Failure;
         Exit;
      End If;      
    End If; 
    
    If :System.Last_Record = 'TRUE' Then
      Exit;
    End If;
    Next_Record;
  End Loop;
  First_Record;
  /*********** End of Checking Foc Item for Duplicate *************/
END;
What you getClause Rule Language
on unit CHECK_DUPICATE_PROMO_ITEM:    go to T_PROM_CUSTOMER when PROMH_CUST_ALLOC = 'Y'    first record when PROMH_CUST_ALLOC = 'Y'    go to T_PROM_ITEM    first record    first record    go to T_PROM_FOC_ITEM    first record    first record
# 7 statements did not convert.#   line 12
#   If Not Id_Null(rg_Id) Then
#     Delete_Group_Row(rg_Id, ALL_ROWS);
#   End If;
#   reason: the guard reads the local RG_ID, which is written from FIND_GROUP, and FIND_GROUP is a Forms built-in, which no FormConnect document declares because no database holds it, and no program unit of this form declares one either, so there is no body to inline under the caller's point and item and nothing to bridge to#   line 16
#   If Id_Null(rg_Id) Then
#     rg_Id := Create_Group('RG_PROM_CUST');
#     rg_Col := Add_Group_Column(rg_Id, 'CUST_CODE', CHAR_COLUMN);
#   End If;
#   reason: the guard reads the local RG_ID, which is written from FIND_GROUP, and FIND_GROUP is a Forms built-in, which no FormConnect document declares because no database holds it, and no program unit of this form declares one either, so there is no body to inline under the caller's point and item and nothing to bridge to#   line 24
#   Loop        
#         Add_Group_Row(rg_Id, v_Row_Num);
#         Set_Group_Char_Cell('RG_PROM_CUST.CUST_CODE', v_Row_Num, :PromC_Cust_Code); 
#         If :System.Last_Record = 'TRUE' Then
#           Exit;
#         End If;
#         v_Row_Num := v_Row_Num + 1;
#         Next_Record;
#       End Loop;
#   reason: its body holds a statement no recognizer claims, and a for each with one dropped runs the rest against every row: Add_Group_Row(rg_Id, v_Row_Num); Set_Group_Char_Cell('RG_PROM_CUST.CUST_CODE', v_Row_Num, :PromC_Cust_C...#   line 37
#   If Get_Block_Property('T_PROM_ITEM', Status) = 'QUERY' Then
#     v_Chk_Val := 1;
#   Else
#     If Get_Block_Property('T_PROM_ITEM', Status) = 'CHANGED' Then
#       v_Chk_Val := 0;
#     End If;
#   End If;
#   reason: the guard reads STATUS of a block, and the one property read the language has a value for is a field's own state: a block, a record, a window, a view and a canvas each carry properties CRL has no expression for#   line 43
#   Loop              
#       If Nvl(:PromH_Cust_Alloc, 'N') = 'Y' Then              
#         v_Row_Num := 1;
#         While (v_Row_Num <= Get_Group_Row_Count(rg_Id)) Loop
#           v_Cust_Code := Get_Group_Char_Cell('RG_PROM_CUST.CUST_CODE', v_Row_Num);
#           
#           SELECT Count(*) INTO v_Count                                
#           FROM T_Prom_Head, T_Prom_Item, T_Prom_Customer
#           WHERE  PromH_Id = PromI_PromH_Id AND PromH_Id = PromC_PromH_Id(+)  
#             AND PromH_Comp_Code = :Global.Company And Nvl(PromH_Status, 'F') = 'F' And PromH_Loc_Code = :PromH_Loc_Code
#             AND ((PromH_Cust_Alloc = 'Y' AND PromC_Cust_Code = v_Cust_Code) OR PromH_Cust_Alloc = 'N')
#             AND PromI_Item_Code = :PromI_Item_Code AND PromI_Uom_Code = :PromI_Uom_Code And Nvl(PromI_Item_Sl_Status, 'NA') = 'NA'
#             AND ((PromH_Option = 'Q' AND NVL(PromH_Qty_Limit_Bu, 0) > NVL(PromH_Inv_Qty_Bu, 0)) 
#             OR (PromH_Option = 'P' AND :PromH_Dt BETWEEN PromH_Dt_Fm AND Nvl(PromH_Ext_Upto, PromH_Dt_To))
#             OR (PromH_Option = 'B' AND NVL(PromH_Qty_Limit_Bu, 0) > NVL(PromH_Inv_Qty_Bu, 0)
#             AND :PromH_Dt BETWEEN PromH_Dt_Fm AND Nvl(PromH_Ext_Upto, PromH_Dt_To)))
#             AND Not EXISTS (SELECT 'X' FROM M_Prom_Type WHERE PromT_Code=PromH_PromT_Code AND PromT_Grp='A');  
#             
#           If v_Count > v_Chk_Val Then
#             Null;  
#              
#              
#              Exit;
#           End If;  
#           
#           v_Row_Num := v_Row_Num + 1;
#         End Loop;
#       Else  
#          
#         SELECT Count(*) INTO v_Count 
#         FROM T_Prom_Head, T_Prom_Item, T_Prom_Customer
#         WHERE  PromH_Id = PromI_PromH_Id AND PromH_Id = PromC_PromH_Id(+)  
#           AND PromH_Comp_Code = :Global.Company And Nvl(PromH_Status, 'F') = 'F' And PromH_Loc_Code = :PromH_Loc_Code
#           AND PromI_Item_Code = :PromI_Item_Code AND PromI_Uom_Code = :PromI_Uom_Code And Nvl(PromI_Item_Sl_Status, 'NA') = 'NA'
#           AND ((PromH_Option = 'Q' AND Nvl(PromH_Qty_Limit_Bu, 0) > Nvl(PromH_Inv_Qty_Bu, 0)) 
#           OR (PromH_Option = 'P' AND :PromH_Dt BETWEEN PromH_Dt_Fm AND Nvl(PromH_Ext_Upto, PromH_Dt_To))
#           OR (PromH_Option = 'B' AND NVL(PromH_Qty_Limit_Bu, 0) > NVL(PromH_Inv_Qty_Bu, 0)
#           AND :PromH_Dt BETWEEN PromH_Dt_Fm AND Nvl(PromH_Ext_Upto, PromH_Dt_To)))
#           AND Not EXISTS (SELECT 'X' FROM M_Prom_Type WHERE PromT_Code=PromH_PromT_Code AND PromT_Grp='A');  
#             
#         If v_Count > v_Chk_Val Then
#           Null;  
#            
#             
#            Exit;
#         End If;      
#       End If; 
#       
#       If :System.Last_Record = 'TRUE' Then
#         Exit;
#       End If;
#       Next_Record;
#     End Loop;
#   reason: it walks until a row matches and stops there, and the test it stops on names something CRL has no expression node for, so which row it chose is not stated#   line 100
#   If Get_Block_Property('T_PROM_FOC_ITEM', Status) = 'QUERY' Then
#     v_Chk_Val := 1;
#   Else
#     If Get_Block_Property('T_PROM_FOC_ITEM', Status) = 'CHANGED' Then
#       v_Chk_Val := 0;
#     End If;
#   End If;
#   reason: the guard reads STATUS of a block, and the one property read the language has a value for is a field's own state: a block, a record, a window, a view and a canvas each carry properties CRL has no expression for#   line 106
#   Loop              
#       If Nvl(:PromH_Cust_Alloc, 'N') = 'Y' Then              
#         v_Row_Num := 1;
#         While (v_Row_Num <= Get_Group_Row_Count(rg_Id)) Loop
#           v_Cust_Code := Get_Group_Char_Cell('RG_PROM_CUST.CUST_CODE', v_Row_Num);
#           
#           SELECT Count(*) INTO v_Count                                
#           FROM T_Prom_Head, T_Prom_Foc_Item, T_Prom_Customer
#           WHERE  PromH_Id = PromFi_PromH_Id AND PromH_Id = PromC_PromH_Id(+)  
#             AND PromH_Comp_Code = :Global.Company And Nvl(PromH_Status, 'F') = 'F' And PromH_Loc_Code = :PromH_Loc_Code
#             AND ((PromH_Cust_Alloc = 'Y' AND PromC_Cust_Code = v_Cust_Code) OR PromH_Cust_Alloc = 'N')
#             AND PromFi_Item_Code = :PromFi_Item_Code AND PromFi_Uom_Code = :PromFi_Uom_Code AND Nvl(PromFi_Item_Sl_Status, 'NA') = 'NA'
#             AND ((PromH_Option = 'Q' AND NVL(PromH_Qty_Limit_Bu, 0) > NVL(PromH_Inv_Qty_Bu, 0)) 
#             OR (PromH_Option = 'P' AND :PromH_Dt BETWEEN PromH_Dt_Fm AND Nvl(PromH_Ext_Upto, PromH_Dt_To))
#             OR (PromH_Option = 'B' AND NVL(PromH_Qty_Limit_Bu, 0) > NVL(PromH_Inv_Qty_Bu, 0)
#             AND :PromH_Dt BETWEEN PromH_Dt_Fm AND Nvl(PromH_Ext_Upto, PromH_Dt_To)));
#          
#           If v_Count > v_Chk_Val Then
#              
#              
#              Exit;
#           End If;  
#           
#           v_Row_Num := v_Row_Num + 1;
#         End Loop;
#       Else  
#          
#         SELECT Count(*) INTO v_Count 
#         FROM T_Prom_Head, T_Prom_Foc_Item, T_Prom_Customer
#         WHERE  PromH_Id = PromFi_PromH_Id AND PromH_Id = PromC_PromH_Id(+)  
#           AND PromH_Comp_Code = :Global.Company And Nvl(PromH_Status, 'F') = 'F' And PromH_Loc_Code = :PromH_Loc_Code
#           AND PromFi_Item_Code = :PromFi_Item_Code AND PromFi_Uom_Code = :PromFi_Uom_Code AND Nvl(PromFi_Item_Sl_Status, 'NA') = 'NA'
#           AND ((PromH_Option = 'Q' AND Nvl(PromH_Qty_Limit_Bu, 0) > Nvl(PromH_Inv_Qty_Bu, 0)) 
#           OR (PromH_Option = 'P' AND :PromH_Dt BETWEEN PromH_Dt_Fm AND Nvl(PromH_Ext_Upto, PromH_Dt_To))
#           OR (PromH_Option = 'B' AND NVL(PromH_Qty_Limit_Bu, 0) > NVL(PromH_Inv_Qty_Bu, 0)
#           AND :PromH_Dt BETWEEN PromH_Dt_Fm AND Nvl(PromH_Ext_Upto, PromH_Dt_To)));
#             
#         If v_Count > v_Chk_Val Then
#            
#             
#            Exit;
#         End If;      
#       End If; 
#       
#       If :System.Last_Record = 'TRUE' Then
#         Exit;
#       End If;
#       Next_Record;
#     End Loop;
#   reason: it walks until a row matches and stops there, and the test it stops on names something CRL has no expression node for, so which row it chose is not stated

8 clauses converted, 7 statements refused