FUNCTION "FC_BARCODE_SEARCH" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT 
      nInArea : Int;   // Suchort eingrenzen: 0 = alles durchsuchen / xxx00 = nur hier suchen
      xInActive : Bool;   // Flanke für Starten des Abrufes
   END_VAR

   VAR_OUTPUT 
      xOutNewRetrieve : Bool;   // Flanke als Ausgang dass neuer Abruf VOM LAGER stattfindet
      nOutMissingBarcode : DInt;   // Fehlteil
      xOutError : Bool;   // FALSE: Kein Fehler | TRUE: Während der Bearbeitung ist ein Fehler aufgetreten
      nOutStatus : Int;   // Fehlercodes
   END_VAR

   VAR_IN_OUT 
      InOutTest : Array[*] of "stCarrier";   // Liste mit dem Jambereich des Lagerausgangs
      InOutStructRetrieve : Struct   // Struktur in der Abruf vorgegeben wird
         nBarcode : DInt;
         nDestination : USInt;
      END_STRUCT;
      InOutLocalized : "SearchResult";   // Ergebnis
   END_VAR

   VAR_TEMP 
      nBarcode : DInt;
      nDestination : Int;
      nIdx1 : Int;
      nIdx2 : Int;
      nIdx3 : Int;
      nLine : Int;   // Zwischenmerker für Suchergebnis
      nPos : Int;   // Zwischenmerker für Suchergebnis
      nArrTestMax : Int;
      xPartFound : Bool;   // Zwischenmerker Teil gefunden
   END_VAR

   VAR CONSTANT 
      ERR_RETRIEVE_INVALID : Int := 3000;   // Ungültige Eingaben jeglicher Art
      ERR_RETRIEVE_EMPTY : Int := 3001;   // NIU
      ERR_RETRIEVE_NOT_FOUND : Int := 3001;   // Nicht gefunden
      ERR_RETRIEVE_MISCERROR : Int := 3003;   // NIU
      "Store2.1.1" : Int := 1;
      "Store2.1.2" : Int := 2;
      "Store2.1.3" : Int := 3;
      "Store2.1.4" : Int := 4;
      "Store2.2.1" : Int := 5;
      "Store2.2.2" : Int := 6;
      "Store2.2.3" : Int := 7;
      "Store2.2.4" : Int := 8;
      "Store2.3.1" : Int := 9;
      "Store2.3.2" : Int := 10;
      "Store2.3.3" : Int := 11;
      "Store2.3.4" : Int := 12;
   END_VAR


BEGIN
	(*
	************************************************************************************
	Sucht in Vorsortierlinie sowie Lager nach dem Teil welches als EXPRESS abgerufen werden soll
	************************************************************************************
	*)
	
	IF #xInActive THEN
	    
	    REGION Array-Größen ermitteln
	        #nArrTestMax := DINT_TO_INT(UPPER_BOUND(ARR := #InOutTest, DIM := 1));
	    END_REGION
	    
	    REGION Return Bedingung TO DO
	        IF #InOutStructRetrieve.nDestination < "cDestLvl1B1" OR #InOutStructRetrieve.nDestination > "cDestExit" OR //kein gültiges Ziel
	            (#InOutStructRetrieve.nBarcode / 10000000 <> 2) OR //Wenn hier etwas anderes als 2 rauskommt, dann ist der angeforderte Barcode nicht 8-stellig oder beginnt nicht mit 2 für "MiniTrolley"
	            (((#InOutStructRetrieve.nBarcode / 10) MOD 100) MOD 2 <> 1) //Wenn hier etwas anderes als 1 rauskommt, dann ist die 10er Stelle nicht ungerade
	        THEN
	            #xOutError := TRUE;
	            #nOutStatus := #ERR_RETRIEVE_INVALID;
	            #nOutMissingBarcode := 0;
	            RETURN;//Abruf ungültig
	        ELSE //Wenn Eingaben in Ordnung, dann speichere in Temp
	            #nBarcode := #InOutStructRetrieve.nBarcode;
	            #nDestination := #InOutStructRetrieve.nDestination;
	        END_IF;
	    END_REGION
	    
	    REGION Durchsuche TEST
	        
	        // FOR #nIdx1 := 1 TO #nArrTestMax DO
	        //     IF #nBarcode = #InOutTest[#nIdx1].stLoadData.nProductNo AND
	        //         #InOutTest[#nIdx1].stLoadData.nDestinationNo <> INT_TO_USINT(#nTarget) AND
	        //         #InOutTest[#nIdx1].stLoadData.nDestinationNo <> "cDestQUALITY" (* AND
	        //         #InOutExitArray[#nIdx1].stLoadData.nDestinationNo <> "cDestSEAT" AND
	        //         #InOutExitArray[#nIdx1].stLoadData.nDestinationNo <> "cDestREST" *) THEN
	        //         // #tempPartFound := TRUE;
	        //         REGION Schreibe Daten
	        //             "FC_GetBackFcPart"(stInPart := #InOutTest[#nIdx1],
	        //                                xOutput => "DB_RetrieveSearchResult".xGetBackFc);
	        //             #InOutTest[#nIdx1].stLoadData.nDestinationNo := INT_TO_USINT(#nTarget);
	        //             #InOutTest[#nIdx1].stLoadData.nJobNo := #nJobNo;
	        //         END_REGION
	        //         #InOutLocalized.nBarcode := #nBarcode;
	        //         #InOutLocalized.Storage.Line := 0;
	        //         #InOutLocalized.Storage.Pos := 0;
	        //         #InOutLocalized.JamTest := #nIdx1;
	        //         #InOutLocalized.205_1 := 0;
	        //         #InOutLocalized.205_2 := 0;
	        //         // #xOutNewRetrieve := TRUE;
	        //         #xOutError := FALSE;
	        //         #nOutStatus := 0;
	        //         #nOutMissingBarcode[1] := 0;
	        //         #nOutMissingBarcode[2] := 0;
	        //         RETURN; //Suche unterbrechen wenn Teil gefunden wurde
	        //     END_IF;
	        // END_FOR;
	        
	    END_REGION
	    
	    REGION Durchsuche Lager 2.1.1
	        IF #nInArea = 0 OR #nInArea = "cDest21100" THEN
	            FOR #nIdx1 := 1 TO "cNoLines2.1.1" DO //Lagerlinien
	                FOR #nIdx2 := 1 TO "cNoPositionsBlock1" DO //Positionen pro Linie
	                    IF #nBarcode = "DB_Storage2.1.1".arLine[#nIdx1].arCarrier[#nIdx2].nBarcode AND
	                        // "DB_Storage2.1.1".arLine[#nIdx1].arCarrier[#nIdx2].nTarget <> INT_TO_USINT(#nTarget) AND
	                        (#nPos = 0 OR #nPos > #nIdx2) THEN
	                        //***********falls gefunden*********
	                        #nLine := #nIdx1;
	                        #nPos := #nIdx2;
	                        // #tempPartFound := TRUE;
	                        EXIT; //Suche unterbrechen wenn Teil gefunden wurde
	                    END_IF;
	                    IF #nIdx2 = "cNoPositionsBlock1" THEN
	                        EXIT; //nach letzter Position -> Schleife beenden
	                    END_IF;
	                END_FOR;
	                IF #nIdx1 = "cNoLines2.1.1" THEN
	                    EXIT; //nach letzter Linie -> Schleife beenden
	                END_IF;
	            END_FOR;
	        END_IF;
	
	        REGION Schreibe Daten
	            IF #nPos > 0 THEN
	                "DB_Storage2.1.1".arLine[#nLine].arCarrier[#nPos].nDestination := INT_TO_USINT(#nDestination);
	                #InOutLocalized.nBarcode := #nBarcode;
	                #InOutLocalized.Storage.Store := #"Store2.1.1";
	                #InOutLocalized.Storage.Line := #nLine;
	                #InOutLocalized.Storage.Pos := #nPos;
	                #InOutLocalized.JamTest := 0;
	                #xOutNewRetrieve := TRUE;
	                #xOutError := FALSE;
	                #nOutStatus := 0;
	                #nOutMissingBarcode := 0;
	                RETURN;
	            END_IF;
	        END_REGION
	    END_REGION
	    REGION Durchsuche Lager 2.1.2
	        IF #nInArea = 0 OR #nInArea = "cDest21200" THEN
	            FOR #nIdx1 := 1 TO "cNoLines2.1.2" DO //Lagerlinien
	                FOR #nIdx2 := 1 TO "cNoPositionsBlock1" DO //Positionen pro Linie
	                    IF #nBarcode = "DB_Storage2.1.2".arLine[#nIdx1].arCarrier[#nIdx2].nBarcode AND
	                        // "DB_Storage2.1.2".arLine[#nIdx1].arCarrier[#nIdx2].nTarget <> INT_TO_USINT(#nTarget) AND
	                        (#nPos = 0 OR #nPos > #nIdx2) THEN
	                        //***********falls gefunden*********
	                        #nLine := #nIdx1;
	                        #nPos := #nIdx2;
	                        // #tempPartFound := TRUE;
	                        EXIT; //Suche unterbrechen wenn Teil gefunden wurde
	                    END_IF;
	                    IF #nIdx2 = "cNoPositionsBlock1" THEN
	                        EXIT; //nach letzter Position -> Schleife beenden
	                    END_IF;
	                END_FOR;
	                IF #nIdx1 = "cNoLines2.1.2" THEN
	                    EXIT; //nach letzter Linie -> Schleife beenden
	                END_IF;
	            END_FOR;
	        END_IF;
	
	        REGION Schreibe Daten
	            IF #nPos > 0 THEN
	                "DB_Storage2.1.2".arLine[#nLine].arCarrier[#nPos].nDestination := INT_TO_USINT(#nDestination);
	                #InOutLocalized.nBarcode := #nBarcode;
	                #InOutLocalized.Storage.Store := #"Store2.1.2";
	                #InOutLocalized.Storage.Line := #nLine;
	                #InOutLocalized.Storage.Pos := #nPos;
	                #InOutLocalized.JamTest := 0;
	                #xOutNewRetrieve := TRUE;
	                #xOutError := FALSE;
	                #nOutStatus := 0;
	                #nOutMissingBarcode := 0;
	                RETURN;
	            END_IF;
	        END_REGION
	    END_REGION
	    REGION Durchsuche Lager 2.1.3
	        IF #nInArea = 0 OR #nInArea = "cDest21300" THEN
	            FOR #nIdx1 := 1 TO "cNoLines2.1.3" DO //Lagerlinien
	                FOR #nIdx2 := 1 TO "cNoPositionsBlock1" DO //Positionen pro Linie
	                    IF #nBarcode = "DB_Storage2.1.3".arLine[#nIdx1].arCarrier[#nIdx2].nBarcode AND
	                        // "DB_Storage2.1.3".arLine[#nIdx1].arCarrier[#nIdx2].nTarget <> INT_TO_USINT(#nTarget) AND
	                        (#nPos = 0 OR #nPos > #nIdx2) THEN
	                        //***********falls gefunden*********
	                        #nLine := #nIdx1;
	                        #nPos := #nIdx2;
	                        // #tempPartFound := TRUE;
	                        EXIT; //Suche unterbrechen wenn Teil gefunden wurde
	                    END_IF;
	                    IF #nIdx2 = "cNoPositionsBlock1" THEN
	                        EXIT; //nach letzter Position -> Schleife beenden
	                    END_IF;
	                END_FOR;
	                IF #nIdx1 = "cNoLines2.1.3" THEN
	                    EXIT; //nach letzter Linie -> Schleife beenden
	                END_IF;
	            END_FOR;
	        END_IF;
	
	        REGION Schreibe Daten
	            IF #nPos > 0 THEN
	                "DB_Storage2.1.3".arLine[#nLine].arCarrier[#nPos].nDestination := INT_TO_USINT(#nDestination);
	                #InOutLocalized.nBarcode := #nBarcode;
	                #InOutLocalized.Storage.Store := #"Store2.1.3";
	                #InOutLocalized.Storage.Line := #nLine;
	                #InOutLocalized.Storage.Pos := #nPos;
	                #InOutLocalized.JamTest := 0;
	                #xOutNewRetrieve := TRUE;
	                #xOutError := FALSE;
	                #nOutStatus := 0;
	                #nOutMissingBarcode := 0;
	                RETURN;
	            END_IF;
	        END_REGION
	    END_REGION
	    REGION Durchsuche Lager 2.1.4
	        IF #nInArea = 0 OR #nInArea = "cDest21400" THEN
	            FOR #nIdx1 := 1 TO "cNoLines2.1.4" DO //Lagerlinien
	                FOR #nIdx2 := 1 TO "cNoPositionsBlock1" DO //Positionen pro Linie
	                    IF #nBarcode = "DB_Storage2.1.4".arLine[#nIdx1].arCarrier[#nIdx2].nBarcode AND
	                        // "DB_Storage2.1.4".arLine[#nIdx1].arCarrier[#nIdx2].nTarget <> INT_TO_USINT(#nTarget) AND
	                        (#nPos = 0 OR #nPos > #nIdx2) THEN
	                        //***********falls gefunden*********
	                        #nLine := #nIdx1;
	                        #nPos := #nIdx2;
	                        // #tempPartFound := TRUE;
	                        EXIT; //Suche unterbrechen wenn Teil gefunden wurde
	                    END_IF;
	                    IF #nIdx2 = "cNoPositionsBlock1" THEN
	                        EXIT; //nach letzter Position -> Schleife beenden
	                    END_IF;
	                END_FOR;
	                IF #nIdx1 = "cNoLines2.1.4" THEN
	                    EXIT; //nach letzter Linie -> Schleife beenden
	                END_IF;
	            END_FOR;
	        END_IF;
	
	        REGION Schreibe Daten
	            IF #nPos > 0 THEN
	                "DB_Storage2.1.4".arLine[#nLine].arCarrier[#nPos].nDestination := INT_TO_USINT(#nDestination);
	                #InOutLocalized.nBarcode := #nBarcode;
	                #InOutLocalized.Storage.Store := #"Store2.1.4";
	                #InOutLocalized.Storage.Line := #nLine;
	                #InOutLocalized.Storage.Pos := #nPos;
	                #InOutLocalized.JamTest := 0;
	                #xOutNewRetrieve := TRUE;
	                #xOutError := FALSE;
	                #nOutStatus := 0;
	                #nOutMissingBarcode := 0;
	                RETURN;
	            END_IF;
	        END_REGION
	    END_REGION
	    REGION Durchsuche Lager 2.2.1
	        IF #nInArea = 0 OR #nInArea = "cDest22100" THEN
	            FOR #nIdx1 := 1 TO "cNoLines2.2.1" DO //Lagerlinien
	                FOR #nIdx2 := 1 TO "cNoPositionsBlock2" DO //Positionen pro Linie
	                    IF #nBarcode = "DB_Storage2.2.1".arLine[#nIdx1].arCarrier[#nIdx2].nBarcode AND
	                        // "DB_Storage2.2.1".arLine[#nIdx1].arCarrier[#nIdx2].nTarget <> INT_TO_USINT(#nTarget) AND
	                        (#nPos = 0 OR #nPos > #nIdx2) THEN
	                        //***********falls gefunden*********
	                        #nLine := #nIdx1;
	                        #nPos := #nIdx2;
	                        // #tempPartFound := TRUE;
	                        EXIT; //Suche unterbrechen wenn Teil gefunden wurde
	                    END_IF;
	                    IF #nIdx2 = "cNoPositionsBlock2" THEN
	                        EXIT; //nach letzter Position -> Schleife beenden
	                    END_IF;
	                END_FOR;
	                IF #nIdx1 = "cNoLines2.2.1" THEN
	                    EXIT; //nach letzter Linie -> Schleife beenden
	                END_IF;
	            END_FOR;
	        END_IF;
	
	        REGION Schreibe Daten
	            IF #nPos > 0 THEN
	                "DB_Storage2.2.1".arLine[#nLine].arCarrier[#nPos].nDestination := INT_TO_USINT(#nDestination);
	                #InOutLocalized.nBarcode := #nBarcode;
	                #InOutLocalized.Storage.Store := #"Store2.2.1";
	                #InOutLocalized.Storage.Line := #nLine;
	                #InOutLocalized.Storage.Pos := #nPos;
	                #InOutLocalized.JamTest := 0;
	                #xOutNewRetrieve := TRUE;
	                #xOutError := FALSE;
	                #nOutStatus := 0;
	                #nOutMissingBarcode := 0;
	                RETURN;
	            END_IF;
	        END_REGION
	    END_REGION
	    REGION Durchsuche Lager 2.2.2
	        IF #nInArea = 0 OR #nInArea = "cDest22200" THEN
	            FOR #nIdx1 := 1 TO "cNoLines2.2.2" DO //Lagerlinien
	                FOR #nIdx2 := 1 TO "cNoPositionsBlock2" DO //Positionen pro Linie
	                    IF #nBarcode = "DB_Storage2.2.2".arLine[#nIdx1].arCarrier[#nIdx2].nBarcode AND
	                        // "DB_Storage2.2.2".arLine[#nIdx1].arCarrier[#nIdx2].nTarget <> INT_TO_USINT(#nTarget) AND
	                        (#nPos = 0 OR #nPos > #nIdx2) THEN
	                        //***********falls gefunden*********
	                        #nLine := #nIdx1;
	                        #nPos := #nIdx2;
	                        // #tempPartFound := TRUE;
	                        EXIT; //Suche unterbrechen wenn Teil gefunden wurde
	                    END_IF;
	                    IF #nIdx2 = "cNoPositionsBlock2" THEN
	                        EXIT; //nach letzter Position -> Schleife beenden
	                    END_IF;
	                END_FOR;
	                IF #nIdx1 = "cNoLines2.2.2" THEN
	                    EXIT; //nach letzter Linie -> Schleife beenden
	                END_IF;
	            END_FOR;
	        END_IF;
	
	        REGION Schreibe Daten
	            IF #nPos > 0 THEN
	                "DB_Storage2.2.2".arLine[#nLine].arCarrier[#nPos].nDestination := INT_TO_USINT(#nDestination);
	                #InOutLocalized.nBarcode := #nBarcode;
	                #InOutLocalized.Storage.Store := #"Store2.2.2";
	                #InOutLocalized.Storage.Line := #nLine;
	                #InOutLocalized.Storage.Pos := #nPos;
	                #InOutLocalized.JamTest := 0;
	                #xOutNewRetrieve := TRUE;
	                #xOutError := FALSE;
	                #nOutStatus := 0;
	                #nOutMissingBarcode := 0;
	                RETURN;
	            END_IF;
	        END_REGION
	    END_REGION
	    REGION Durchsuche Lager 2.2.3
	        IF #nInArea = 0 OR #nInArea = "cDest22300" THEN
	            FOR #nIdx1 := 1 TO "cNoLines2.2.3" DO //Lagerlinien
	                FOR #nIdx2 := 1 TO "cNoPositionsBlock2" DO //Positionen pro Linie
	                    IF #nBarcode = "DB_Storage2.2.3".arLine[#nIdx1].arCarrier[#nIdx2].nBarcode AND
	                        // "DB_Storage2.2.3".arLine[#nIdx1].arCarrier[#nIdx2].nTarget <> INT_TO_USINT(#nTarget) AND
	                        (#nPos = 0 OR #nPos > #nIdx2) THEN
	                        //***********falls gefunden*********
	                        #nLine := #nIdx1;
	                        #nPos := #nIdx2;
	                        // #tempPartFound := TRUE;
	                        EXIT; //Suche unterbrechen wenn Teil gefunden wurde
	                    END_IF;
	                    IF #nIdx2 = "cNoPositionsBlock2" THEN
	                        EXIT; //nach letzter Position -> Schleife beenden
	                    END_IF;
	                END_FOR;
	                IF #nIdx1 = "cNoLines2.2.3" THEN
	                    EXIT; //nach letzter Linie -> Schleife beenden
	                END_IF;
	            END_FOR;
	        END_IF;
	
	        REGION Schreibe Daten
	            IF #nPos > 0 THEN
	                "DB_Storage2.2.3".arLine[#nLine].arCarrier[#nPos].nDestination := INT_TO_USINT(#nDestination);
	                #InOutLocalized.nBarcode := #nBarcode;
	                #InOutLocalized.Storage.Store := #"Store2.2.3";
	                #InOutLocalized.Storage.Line := #nLine;
	                #InOutLocalized.Storage.Pos := #nPos;
	                #InOutLocalized.JamTest := 0;
	                #xOutNewRetrieve := TRUE;
	                #xOutError := FALSE;
	                #nOutStatus := 0;
	                #nOutMissingBarcode := 0;
	                RETURN;
	            END_IF;
	        END_REGION
	    END_REGION
	    REGION Durchsuche Lager 2.2.4
	        IF #nInArea = 0 OR #nInArea = "cDest22400" THEN
	            FOR #nIdx1 := 1 TO "cNoLines2.2.4" DO //Lagerlinien
	                FOR #nIdx2 := 1 TO "cNoPositionsBlock2" DO //Positionen pro Linie
	                    IF #nBarcode = "DB_Storage2.2.4".arLine[#nIdx1].arCarrier[#nIdx2].nBarcode AND
	                        // "DB_Storage2.2.4".arLine[#nIdx1].arCarrier[#nIdx2].nTarget <> INT_TO_USINT(#nTarget) AND
	                        (#nPos = 0 OR #nPos > #nIdx2) THEN
	                        //***********falls gefunden*********
	                        #nLine := #nIdx1;
	                        #nPos := #nIdx2;
	                        // #tempPartFound := TRUE;
	                        EXIT; //Suche unterbrechen wenn Teil gefunden wurde
	                    END_IF;
	                    IF #nIdx2 = "cNoPositionsBlock2" THEN
	                        EXIT; //nach letzter Position -> Schleife beenden
	                    END_IF;
	                END_FOR;
	                IF #nIdx1 = "cNoLines2.2.4" THEN
	                    EXIT; //nach letzter Linie -> Schleife beenden
	                END_IF;
	            END_FOR;
	        END_IF;
	
	        REGION Schreibe Daten
	            IF #nPos > 0 THEN
	                "DB_Storage2.2.4".arLine[#nLine].arCarrier[#nPos].nDestination := INT_TO_USINT(#nDestination);
	                #InOutLocalized.nBarcode := #nBarcode;
	                #InOutLocalized.Storage.Store := #"Store2.2.4";
	                #InOutLocalized.Storage.Line := #nLine;
	                #InOutLocalized.Storage.Pos := #nPos;
	                #InOutLocalized.JamTest := 0;
	                #xOutNewRetrieve := TRUE;
	                #xOutError := FALSE;
	                #nOutStatus := 0;
	                #nOutMissingBarcode := 0;
	                RETURN;
	            END_IF;
	        END_REGION
	    END_REGION
	    REGION Durchsuche Lager 2.3.1
	        IF #nInArea = 0 OR #nInArea = "cDest23100" THEN
	            FOR #nIdx1 := 1 TO "cNoLines2.3.1" DO //Lagerlinien
	                FOR #nIdx2 := 1 TO "cNoPositionsBlock3" DO //Positionen pro Linie
	                    IF #nBarcode = "DB_Storage2.3.1".arLine[#nIdx1].arCarrier[#nIdx2].nBarcode AND
	                        // "DB_Storage2.3.1".arLine[#nIdx1].arCarrier[#nIdx2].nTarget <> INT_TO_USINT(#nTarget) AND
	                        (#nPos = 0 OR #nPos > #nIdx2) THEN
	                        //***********falls gefunden*********
	                        #nLine := #nIdx1;
	                        #nPos := #nIdx2;
	                        // #tempPartFound := TRUE;
	                        EXIT; //Suche unterbrechen wenn Teil gefunden wurde
	                    END_IF;
	                    IF #nIdx2 = "cNoPositionsBlock3" THEN
	                        EXIT; //nach letzter Position -> Schleife beenden
	                    END_IF;
	                END_FOR;
	                IF #nIdx1 = "cNoLines2.3.1" THEN
	                    EXIT; //nach letzter Linie -> Schleife beenden
	                END_IF;
	            END_FOR;
	        END_IF;
	
	        REGION Schreibe Daten
	            IF #nPos > 0 THEN
	                "DB_Storage2.3.1".arLine[#nLine].arCarrier[#nPos].nDestination := INT_TO_USINT(#nDestination);
	                #InOutLocalized.nBarcode := #nBarcode;
	                #InOutLocalized.Storage.Store := #"Store2.3.1";
	                #InOutLocalized.Storage.Line := #nLine;
	                #InOutLocalized.Storage.Pos := #nPos;
	                #InOutLocalized.JamTest := 0;
	                #xOutNewRetrieve := TRUE;
	                #xOutError := FALSE;
	                #nOutStatus := 0;
	                #nOutMissingBarcode := 0;
	                RETURN;
	            END_IF;
	        END_REGION
	    END_REGION
	    REGION Durchsuche Lager 2.3.2
	        IF #nInArea = 0 OR #nInArea = "cDest23200" THEN
	            FOR #nIdx1 := 1 TO "cNoLines2.3.2" DO //Lagerlinien
	                FOR #nIdx2 := 1 TO "cNoPositionsBlock3" DO //Positionen pro Linie
	                    IF #nBarcode = "DB_Storage2.3.2".arLine[#nIdx1].arCarrier[#nIdx2].nBarcode AND
	                        // "DB_Storage2.3.2".arLine[#nIdx1].arCarrier[#nIdx2].nTarget <> INT_TO_USINT(#nTarget) AND
	                        (#nPos = 0 OR #nPos > #nIdx2) THEN
	                        //***********falls gefunden*********
	                        #nLine := #nIdx1;
	                        #nPos := #nIdx2;
	                        // #tempPartFound := TRUE;
	                        EXIT; //Suche unterbrechen wenn Teil gefunden wurde
	                    END_IF;
	                    IF #nIdx2 = "cNoPositionsBlock3" THEN
	                        EXIT; //nach letzter Position -> Schleife beenden
	                    END_IF;
	                END_FOR;
	                IF #nIdx1 = "cNoLines2.3.2" THEN
	                    EXIT; //nach letzter Linie -> Schleife beenden
	                END_IF;
	            END_FOR;
	        END_IF;
	
	        REGION Schreibe Daten
	            IF #nPos > 0 THEN
	                "DB_Storage2.3.2".arLine[#nLine].arCarrier[#nPos].nDestination := INT_TO_USINT(#nDestination);
	                #InOutLocalized.nBarcode := #nBarcode;
	                #InOutLocalized.Storage.Store := #"Store2.3.2";
	                #InOutLocalized.Storage.Line := #nLine;
	                #InOutLocalized.Storage.Pos := #nPos;
	                #InOutLocalized.JamTest := 0;
	                #xOutNewRetrieve := TRUE;
	                #xOutError := FALSE;
	                #nOutStatus := 0;
	                #nOutMissingBarcode := 0;
	                RETURN;
	            END_IF;
	        END_REGION
	    END_REGION
	    REGION Durchsuche Lager 2.3.3
	        IF #nInArea = 0 OR #nInArea = "cDest23300" THEN
	            FOR #nIdx1 := 1 TO "cNoLines2.3.3" DO //Lagerlinien
	                FOR #nIdx2 := 1 TO "cNoPositionsBlock3" DO //Positionen pro Linie
	                    IF #nBarcode = "DB_Storage2.3.3".arLine[#nIdx1].arCarrier[#nIdx2].nBarcode AND
	                        // "DB_Storage2.3.3".arLine[#nIdx1].arCarrier[#nIdx2].nTarget <> INT_TO_USINT(#nTarget) AND
	                        (#nPos = 0 OR #nPos > #nIdx2) THEN
	                        //***********falls gefunden*********
	                        #nLine := #nIdx1;
	                        #nPos := #nIdx2;
	                        // #tempPartFound := TRUE;
	                        EXIT; //Suche unterbrechen wenn Teil gefunden wurde
	                    END_IF;
	                    IF #nIdx2 = "cNoPositionsBlock3" THEN
	                        EXIT; //nach letzter Position -> Schleife beenden
	                    END_IF;
	                END_FOR;
	                IF #nIdx1 = "cNoLines2.3.3" THEN
	                    EXIT; //nach letzter Linie -> Schleife beenden
	                END_IF;
	            END_FOR;
	        END_IF;
	
	        REGION Schreibe Daten
	            IF #nPos > 0 THEN
	                "DB_Storage2.3.3".arLine[#nLine].arCarrier[#nPos].nDestination := INT_TO_USINT(#nDestination);
	                #InOutLocalized.nBarcode := #nBarcode;
	                #InOutLocalized.Storage.Store := #"Store2.3.3";
	                #InOutLocalized.Storage.Line := #nLine;
	                #InOutLocalized.Storage.Pos := #nPos;
	                #InOutLocalized.JamTest := 0;
	                #xOutNewRetrieve := TRUE;
	                #xOutError := FALSE;
	                #nOutStatus := 0;
	                #nOutMissingBarcode := 0;
	                RETURN;
	            END_IF;
	        END_REGION
	    END_REGION
	    REGION Durchsuche Lager 2.3.4
	        IF #nInArea = 0 OR #nInArea = "cDest23400" THEN
	            FOR #nIdx1 := 1 TO "cNoLines2.3.4" DO //Lagerlinien
	                FOR #nIdx2 := 1 TO "cNoPositionsBlock3" DO //Positionen pro Linie
	                    IF #nBarcode = "DB_Storage2.3.4".arLine[#nIdx1].arCarrier[#nIdx2].nBarcode AND
	                        // "DB_Storage2.3.4".arLine[#nIdx1].arCarrier[#nIdx2].nTarget <> INT_TO_USINT(#nTarget) AND
	                        (#nPos = 0 OR #nPos > #nIdx2) THEN
	                        //***********falls gefunden*********
	                        #nLine := #nIdx1;
	                        #nPos := #nIdx2;
	                        // #tempPartFound := TRUE;
	                        EXIT; //Suche unterbrechen wenn Teil gefunden wurde
	                    END_IF;
	                    IF #nIdx2 = "cNoPositionsBlock3" THEN
	                        EXIT; //nach letzter Position -> Schleife beenden
	                    END_IF;
	                END_FOR;
	                IF #nIdx1 = "cNoLines2.3.4" THEN
	                    EXIT; //nach letzter Linie -> Schleife beenden
	                END_IF;
	            END_FOR;
	        END_IF;
	
	        REGION Schreibe Daten
	            IF #nPos > 0 THEN
	                "DB_Storage2.3.4".arLine[#nLine].arCarrier[#nPos].nDestination := INT_TO_USINT(#nDestination);
	                #InOutLocalized.nBarcode := #nBarcode;
	                #InOutLocalized.Storage.Store := #"Store2.3.4";
	                #InOutLocalized.Storage.Line := #nLine;
	                #InOutLocalized.Storage.Pos := #nPos;
	                #InOutLocalized.JamTest := 0;
	                #xOutNewRetrieve := TRUE;
	                #xOutError := FALSE;
	                #nOutStatus := 0;
	                #nOutMissingBarcode := 0;
	            ELSE
	                #xOutError := TRUE;
	                #nOutStatus := #ERR_RETRIEVE_NOT_FOUND;
	                #nOutMissingBarcode := #nBarcode;
	            END_IF;
	        END_REGION
	    END_REGION
	END_IF;
END_FUNCTION

