(Not so) Impossible Code

SogSog Member Posts: 1,023
  IF Item."Item Tracking Code" <> '' THEN BEGIN
      Code to be executed if Item tracking code is true
    END ELSE BEGIN
      IF Item."Item Tracking Code" <> '' THEN
        MESSAGE(Item."Item Tracking Code");
      ItemTrackingMgt.CopyItemTracking(RowID1,ItemJnlLine.RowID1,FALSE);
According to me I should never see the message.
Alas I see it every time when I run that code.
|Pressing F1 is so much faster than opening your browser|
|To-Increase|

Answers

  • Luc_VanDyckLuc_VanDyck Member, Moderator, Administrator Posts: 3,633
    Are you sure it's this MESSAGE statement that is executed, and not some other MESSAGE-statement?
    What is displayed as message?

    If you show us some more code, then we can see how it's structured and whether the BEGIN's & END's are all at the right places.
    No support using PM or e-mail - Please use this forum. BC TechDays 2024: 13 & 14 June 2024, Antwerp (Belgium)
  • SogSog Member Posts: 1,023
    I'm a 100% sure.
    Lotall is showed as message. (which is correct because the items in the production have lotall as item tracking code)
    Codeunit 5510 Production Journal Managment -> InsertConsumptionJnlLine (this snippet comes behind ItemJnlLine.INSERT;)
      IF Item."Item Tracking Code" <> '' THEN BEGIN
        IF lv_ProdOrder.GET(ProdOrderLine.Status,ProdOrderLine."Prod. Order No.") AND lv_ProdOrder."Main Prod. Order" THEN BEGIN
           lv_ProdOrder2.SETRANGE("Source No.", ItemJnlLine."Item No.");
           lv_ProdOrder2.SETRANGE(lv_ProdOrder2."Main Production Order",lv_ProdOrder."No.");
           IF lv_ProdOrder2.FINDFIRST THEN BEGIN
             lv_itledg.SETRANGE("Item No.",ItemJnlLine."Item No.");
             lv_itledg.SETRANGE("Entry Type",lv_itledg."Entry Type"::Output);
             lv_itledg.SETRANGE("Source No.",ItemJnlLine."Item No.");
             lv_itledg.SETRANGE("Document No.",lv_ProdOrder2."No.");
             IF lv_itledg.FINDFIRST THEN BEGIN
              (code with lv_resEntr2 assigning values)
               lv_ResEntr2.MODIFY;
             END ELSE
             ItemTrackingMgt.CopyItemTracking(RowID1,ItemJnlLine.RowID1,FALSE);
           END ELSE
             ItemTrackingMgt.CopyItemTracking(RowID1,ItemJnlLine.RowID1,FALSE);
        END ELSE BEGIN
          IF Item."Item Tracking Code" <> '' THEN
            MESSAGE(Item."Item Tracking Code");
          ItemTrackingMgt.CopyItemTracking(RowID1,ItemJnlLine.RowID1,FALSE);
        END;
    
    |Pressing F1 is so much faster than opening your browser|
    |To-Increase|
  • Luc_VanDyckLuc_VanDyck Member, Moderator, Administrator Posts: 3,633
    The lines
    END ELSE BEGIN
          IF Item."Item Tracking Code" <> '' THEN
    
    belongs to
    IF lv_ProdOrder.GET(ProdOrderLine.Status,ProdOrderLine."Prod. Order No.") AND lv_ProdOrder."Main Prod. Order" THEN BEGIN
    
    IF Item."Item Tracking Code" &lt;&gt; '' THEN BEGIN
        IF lv_ProdOrder.GET(ProdOrderLine.Status,ProdOrderLine."Prod. Order No.") AND lv_ProdOrder."Main Prod. Order" THEN BEGIN
          &#91;...lines deleted to make it more clear...&#93;
        END ELSE BEGIN
          IF Item."Item Tracking Code" <> '' THEN
            MESSAGE(Item."Item Tracking Code");
          ItemTrackingMgt.CopyItemTracking(RowID1,ItemJnlLine.RowID1,FALSE);
        END;
    

    So the message is displayed when no Production Order is found!
    No support using PM or e-mail - Please use this forum. BC TechDays 2024: 13 & 14 June 2024, Antwerp (Belgium)
  • MBergerMBerger Member Posts: 413
    This is why i always put my BEGINs on a new line , so the BEGIN and END are on the same level ( i KNOW that is against the official guidelines ). Here's what you get when you rewrite it that way ( also turns out you are missing an END )
    IF Item."Item Tracking Code" <> '' THEN 
      BEGIN
        IF lv_ProdOrder.GET(ProdOrderLine.Status,ProdOrderLine."Prod. Order No.") AND lv_ProdOrder."Main Prod. Order" THEN 
          BEGIN
            lv_ProdOrder2.SETRANGE("Source No.", ItemJnlLine."Item No.");
            lv_ProdOrder2.SETRANGE(lv_ProdOrder2."Main Production Order",lv_ProdOrder."No.");
            IF lv_ProdOrder2.FINDFIRST THEN 
              BEGIN
                lv_itledg.SETRANGE("Item No.",ItemJnlLine."Item No.");
                lv_itledg.SETRANGE("Entry Type",lv_itledg."Entry Type"::Output);
                lv_itledg.SETRANGE("Source No.",ItemJnlLine."Item No.");
                lv_itledg.SETRANGE("Document No.",lv_ProdOrder2."No.");
                IF lv_itledg.FINDFIRST THEN 
                  BEGIN
                    (code with lv_resEntr2 assigning values)
                    lv_ResEntr2.MODIFY;
                  END 
                ELSE
                  ItemTrackingMgt.CopyItemTracking(RowID1,ItemJnlLine.RowID1,FALSE);
              END 
            ELSE
              ItemTrackingMgt.CopyItemTracking(RowID1,ItemJnlLine.RowID1,FALSE);
          END 
        ELSE 
          BEGIN
            IF Item."Item Tracking Code" <> '' THEN
            MESSAGE(Item."Item Tracking Code");
            ItemTrackingMgt.CopyItemTracking(RowID1,ItemJnlLine.RowID1,FALSE);
          END;
    
  • SogSog Member Posts: 1,023
    Expand/collapse like most editors is something I miss the most.
    because the debugger had me fooled when the yellow arrow stayed on the upper IF

    Thank you all
    |Pressing F1 is so much faster than opening your browser|
    |To-Increase|
Sign In or Register to comment.