Variable $WAREHOUSE has not been bound to a value error in XSLT code

86 Views Asked by At

There is a XSLT code deployed in our SAP PO system to generate output file from IDoc. Sometimes, SAP PO is throwing the error

Variable $Warehouse has not been bound to a value

Error snap from PO: Error snap from po

and the message fails.

It doesn't happen with all the files. Also, these files rarely get re-sent successfully as well. As per my analysis, the code doesn't expect a value for the "WAREHOUSE" as a mandatory one. But wondering why does the file still fails with this error. Please go through the code and let me know if anything has to be altered in the code to avoid this error.

XSLT code:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:javamap="java:com.pipo.xslt.ZSAP_TO_EXTERNAL">

    <xsl:strip-space elements="*" />

    <xsl:variable name="CONST_WERKS">P249</xsl:variable>

    <xsl:param name="IM_MHDHB" select="expression" />
    <xsl:param name="IM_IPRKZ" select="expression" />
    <xsl:variable name="EX_MHDHB" select="shelf" />
    <xsl:variable name="EX_IPRKZ" select="period" />
    <xsl:variable name="EX_PLANT" select="shelf" />
    <xsl:variable name="EX_STORAGE_TYPE" select="shelf" />
    <xsl:variable name="lang" select="shelf" />
    <xsl:variable name="check" select="" />
    <xsl:variable name="plant" select="" />
    <xsl:variable name="plant_val" select="" />
    <xsl:variable name="range" select="" />
    <xsl:variable name="salesorg" select="shelf" />
    <xsl:variable name="CONST_WERKS1" select="shelf" />
    <xsl:param name="inputparam" />
    <xsl:template match="/">

        <IDOC xmlns="http://www.3rdparty.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.3rdparty.com/IDoc.xsd">
            <HEADER>
                <xsl:attribute name="number">
          <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/DOCNUM" />
        </xsl:attribute>
                <TABNAM>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/TABNAM" />
                </TABNAM>
                <MANDT>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/MANDT" />
                </MANDT>
                <DOCNUM>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/DOCNUM" />
                </DOCNUM>
                <DOCREL>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/DOCREL" />
                </DOCREL>
                <STATUS>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/STATUS" />
                </STATUS>
                <DIRECT>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/DIRECT" />
                </DIRECT>
                <OUTMOD>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/OUTMOD" />
                </OUTMOD>
                <EXPRSS>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/EXPRSS" />
                </EXPRSS>
                <TEST>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/TEST" />
                </TEST>
                <IDOCTYP>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/IDOCTYP" />
                </IDOCTYP>
                <CIMTYP>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/CIMTYP" />
                </CIMTYP>
                <MESTYP>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/MESTYP" />
                </MESTYP>
                <MESCOD>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/MESCOD" />
                </MESCOD>
                <MESFCT>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/MESFCT" />
                </MESFCT>
                <STD>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/STD" />
                </STD>
                <STDVRS>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/STDVRS" />
                </STDVRS>
                <STDMES>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/STDMES" />
                </STDMES>
                <SNDPOR>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/SNDPOR" />
                </SNDPOR>
                <SNDPRT>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/SNDPRT" />
                </SNDPRT>
                <SNDPFC>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/SNDPFC" />
                </SNDPFC>
                <SNDPRN>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/SNDPRN" />
                </SNDPRN>
                <SNDSAD>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/SNDSAD" />
                </SNDSAD>
                <SNDLAD>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/SNDLAD" />
                </SNDLAD>
                <RCVPOR>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/RCVPOR" />
                </RCVPOR>
                <RCVPRT>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/RCVPRT" />
                </RCVPRT>
                <RCVPFC>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/RCVPFC" />
                </RCVPFC>
                <RCVPRN>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/RCVPRN" />
                </RCVPRN>
                <RCVSAD>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/RCVSAD" />
                </RCVSAD>
                <RCVLAD>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/RCVLAD" />
                </RCVLAD>
                <CREDAT>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/CREDAT" />
                </CREDAT>
                <CRETIM>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/CRETIM" />
                </CRETIM>
                <REFINT>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/REFINT" />
                </REFINT>
                <REFGRP>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/REFGRP" />
                </REFGRP>
                <REFMES>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/REFMES" />
                </REFMES>
                <ARCKEY>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/ARCKEY" />
                </ARCKEY>
                <SERIAL>
                    <xsl:value-of select="ZMATMAS3/IDOC/EDI_DC40/SERIAL" />
                </SERIAL>
            </HEADER>
            <MESSAGE>
                <xsl:for-each select="ZMATMAS3/IDOC/E1MARAM">
                    <SEGMENT id="E1MARAM">
                        <xsl:if test="MATNR">
                            <FIELD>
                                <ID>MATNR</ID>
                                <VALUE>
                                    <xsl:value-of select="MATNR" />
                                </VALUE>
                            </FIELD>
                        </xsl:if>
                        <xsl:if test="MTART">
                            <FIELD>
                                <ID>MTART</ID>
                                <VALUE>
                                    <xsl:value-of select="MTART" />
                                </VALUE>
                            </FIELD>
                        </xsl:if>
                        <xsl:if test="MEINS">
                            <FIELD>
                                <ID>MEINS</ID>
                                <VALUE>
                                    <xsl:value-of select="MEINS" />
                                </VALUE>
                            </FIELD>
                        </xsl:if>
                        <xsl:if test="NUMTP = 'UC'">
                            <xsl:if test="EAN11">
                                <FIELD>
                                    <ID>EAN11</ID>
                                    <VALUE>
                                        <xsl:value-of select="format-number(EAN11,'00000000000000')" />
                                    </VALUE>
                                </FIELD>
                            </xsl:if>
                            <xsl:if test="NUMTP">
                                <FIELD>
                                    <ID>NUMTP</ID>
                                    <VALUE>
                                        <xsl:value-of select="NUMTP" />
                                    </VALUE>
                                </FIELD>
                            </xsl:if>
                        </xsl:if>
                        <xsl:if test="TEMPB">
                            <FIELD>
                                <ID>TEMPB</ID>
                                <VALUE>
                                    <xsl:value-of select="TEMPB" />
                                </VALUE>
                            </FIELD>
                        </xsl:if>
                        <FIELD>
                            <ID>XCHPF</ID>
                            <xsl:choose>
                                <xsl:when test="XCHPF">
                                    <VALUE>
                                        <xsl:value-of select="XCHPF" />
                                    </VALUE>
                                </xsl:when>
                                <xsl:otherwise>
                                    <VALUE>
                                        <xsl:text> </xsl:text>
                                    </VALUE>
                                </xsl:otherwise>
                            </xsl:choose>
                        </FIELD>

                        

                        <xsl:param name="IM_MHDHB">
                            <xsl:value-of select="string(MHDHB)" />
                        </xsl:param>
                        <xsl:param name="IM_IPRKZ">
                            <xsl:value-of select="string(IPRKZ)" />
                        </xsl:param>
                        <xsl:param name="plant">
                            <xsl:value-of
                                select="javamap:PTSINT107_ZMATMAS_MHDHB($IM_MHDHB,$IM_IPRKZ, $inputparam)" />
                        </xsl:param>

                        



                        <FIELD>
                            <ID>MHDHB</ID>
                            <VALUE>
                                <xsl:value-of select="normalize-space($plant)" />
                            </VALUE>
                        </FIELD>

                    

                        <xsl:param name="IM_MHDHB">
                            <xsl:value-of select="string(MHDHB)" />
                        </xsl:param>

                        <xsl:variable name="range">
                            <xsl:value-of
                                select="javamap:PTSINT107_ZMATMAS_IPRKZ($IM_MHDHB,$inputparam)" />
                        </xsl:variable>


                        

                        <FIELD>
                            <ID>IPRKZ</ID>
                            <VALUE>
                                <xsl:value-of select="normalize-space($range)" />
                            </VALUE>
                        </FIELD>

                        <FIELD>
                            <ID>MPROF</ID>
                            <VALUE>0000</VALUE>
                        </FIELD>

                        <xsl:for-each select="E1MLGNM">


                            

                            <xsl:param name="IM_WORKSTREAM">
                                PTS
                            </xsl:param>

                            <xsl:param name="IM_OBJTYPE">
                                PLANT_WHSE
                            </xsl:param>
                            <xsl:param name="IM_WERKS">
                                <xsl:value-of select="string($CONST_WERKS)" />
                            </xsl:param>


                            <xsl:variable name="plant_val">
                                <xsl:value-of
                                    select="javamap:PTSINT107_ZMATMAS_WERKS($IM_WORKSTREAM,$IM_OBJTYPE,$IM_WERKS,$inputparam)" />
                            </xsl:variable>

                            




                            <xsl:if test="LGNUM = normalize-space($plant_val)">
                                <FIELD>
                                    <ID>LAGKL</ID>
                                    <VALUE>
                                        <xsl:value-of select="ZE1MLGNM/LAGKL" />
                                    </VALUE>
                                </FIELD>
                            </xsl:if>
                        </xsl:for-each>


                        

                        <xsl:param name="IM_WORKSTREAM">
                            PTS
                        </xsl:param>

                        <xsl:param name="IM_OBJTYPE">
                            MES_LANG
                        </xsl:param>
                        <xsl:param name="IM_WERKS">
                            <xsl:value-of select="string($CONST_WERKS)" />
                        </xsl:param>


                        <xsl:param name="lang">
                            <xsl:value-of
                                select="javamap:PTSINT107_ZMATMAS_MAKTX($IM_WORKSTREAM,$IM_OBJTYPE,$IM_WERKS,$inputparam)" />
                        </xsl:param>



                        


                        <xsl:for-each select="E1MAKTM">
                            <xsl:if test="MAKTX">
                                <xsl:if test="SPRAS_ISO = normalize-space($lang)">
                                    <SEGMENT id="E1MAKTM">
                                        <FIELD>
                                            <ID>MAKTX</ID>
                                            <VALUE>
                                                <xsl:value-of select="MAKTX" />
                                            </VALUE>
                                        </FIELD>
                                    </SEGMENT>
                                </xsl:if>
                            </xsl:if>
                        </xsl:for-each>
                        <xsl:for-each select="E1MARCM">
                            
                            <xsl:if test="position() = 1">
                                <xsl:variable name="CONST_WERKS1" select="WERKS" />
                            </xsl:if>
                            
                            <xsl:if test="WERKS = $CONST_WERKS">
                                <SEGMENT id="E1MARCM">
                                    <FIELD>
                                        <ID>WERKS</ID>
                                        <VALUE>
                                            <xsl:value-of select="WERKS" />
                                        </VALUE>
                                    </FIELD>
                                    <xsl:choose>
                                        <xsl:when test="../MSTAE = '05'">
                                            <FIELD>
                                                <ID>LVORM</ID>
                                                <VALUE>X</VALUE>
                                            </FIELD>
                                        </xsl:when>
                                        <xsl:otherwise>
                                            <FIELD>
                                                <ID>LVORM</ID>
                                                <VALUE>
                                                    <xsl:value-of select="LVORM" />
                                                </VALUE>
                                            </FIELD>
                                        </xsl:otherwise>
                                    </xsl:choose>
                                    <FIELD>
                                        <ID>LGFSB</ID>
                                        <VALUE>
                                            <xsl:value-of select="LGFSB" />
                                        </VALUE>
                                    </FIELD>
                                    <FIELD>
                                        <ID>SERNP</ID>
                                        <VALUE>
                                            <xsl:value-of select="SERNP" />
                                        </VALUE>
                                    </FIELD>
                                    <xsl:if test="KZECH">
                                        <FIELD>
                                            <ID>KZECH</ID>
                                            <VALUE>
                                                <xsl:value-of select="KZECH" />
                                            </VALUE>
                                        </FIELD>
                                    </xsl:if>
                                    <xsl:if test="OTYPE">
                                        <FIELD>
                                            <ID>OTYPE</ID>
                                            <VALUE>
                                                <xsl:value-of select="OTYPE" />
                                            </VALUE>
                                        </FIELD>
                                    </xsl:if>
                                </SEGMENT>
                            </xsl:if>
                        </xsl:for-each>
                        <xsl:for-each select="E1MARMM">
                            <xsl:if test="MEINH">
                                <SEGMENT id="E1MARMM">
                                    <FIELD>
                                        <ID>MEINH</ID>
                                        <VALUE>
                                            <xsl:value-of select="MEINH" />
                                        </VALUE>
                                    </FIELD>
                                    <FIELD>
                                        <ID>UMREZ</ID>
                                        <VALUE>
                                            <xsl:value-of select="format-number(UMREZ,'0')" />
                                        </VALUE>
                                    </FIELD>
                                    <FIELD>
                                        <ID>UMREN</ID>
                                        <VALUE>
                                            <xsl:value-of select="format-number(UMREN,'0')" />
                                        </VALUE>
                                    </FIELD>
                                    
                                    <xsl:if test="NUMTP = 'UC'">
                                        <xsl:if test="EAN11">
                                            <FIELD>
                                                <ID>EAN11</ID>
                                                <VALUE>
                                                    <xsl:value-of select="format-number(EAN11,'00000000000000')" />
                                                </VALUE>
                                            </FIELD>
                                        </xsl:if>
                                        <xsl:if test="NUMTP">
                                            <FIELD>
                                                <ID>NUMTP</ID>
                                                <VALUE>
                                                    <xsl:value-of select="NUMTP" />
                                                </VALUE>
                                            </FIELD>
                                        </xsl:if>
                                    </xsl:if>
                                </SEGMENT>
                            </xsl:if>
                        </xsl:for-each>
                        
                        <xsl:if test="E1MARMM/NUMTP = 'UC'">
                            
                                <xsl:choose>
                                        <xsl:when test="E1MLGNM/LGNUM = '012'">
                                    <xsl:variable name="WAREHOUSE" select="012" />
                                    </xsl:when>
                                </xsl:choose>   
                                    
                            <xsl:for-each select="E1MLGNM">

                                

                                

                                <xsl:param name="IM_TVARV_VAR_NAME">
                                    ZPTS_INT107_LETY
                                </xsl:param>

                                <xsl:param name="IM_STORAGE_TYPE1">
                                    <xsl:value-of select="string(LETY1)" />
                                </xsl:param>
                                <xsl:param name="IM_STORAGE_TYPE2">
                                    <xsl:value-of select="string(LETY2)" />
                                </xsl:param>
                                <xsl:param name="IM_STORAGE_TYPE3">
                                    <xsl:value-of select="string(LETY3)" />
                                </xsl:param>


                                <xsl:param name="STR_TYP">
                                    <xsl:value-of
                                        select="javamap:PTSINT107_GET_TVARVC($IM_TVARV_VAR_NAME,$IM_STORAGE_TYPE1,$IM_STORAGE_TYPE2,$IM_STORAGE_TYPE3,$inputparam)" />
                                </xsl:param>



                                

                                <xsl:if test="LGNUM = $WAREHOUSE and normalize-space($STR_TYP) !='-1'">

                                    <SEGMENT id="E1MARMM">
                                        <FIELD>
                                            <ID>MEINH</ID>
                                            <VALUE>
                                                <xsl:value-of select="normalize-space($STR_TYP)" />
                                            </VALUE>
                                        </FIELD>
                                        <FIELD>
                                            <ID>UMREN</ID>
                                            <VALUE>1</VALUE>
                                        </FIELD>
                                        <FIELD>
                                            <ID>UMREZ</ID>
                                            <VALUE>
                                                <xsl:choose>
                                                    <xsl:when test="$STR_TYP !='-1'">
                                                        <xsl:value-of select="format-number(LHMG1,'0')" />
                                                    </xsl:when>
                                                    <xsl:when test="$STR_TYP !='-1'">
                                                        <xsl:value-of select="format-number(LHMG2,'0')" />
                                                    </xsl:when>
                                                    <xsl:when test="$STR_TYP !='-1'">
                                                        <xsl:value-of select="format-number(LHMG3,'0')" />
                                                    </xsl:when>
                                                </xsl:choose>
                                                
                                            </VALUE>
                                        </FIELD>
                                        <FIELD>
                                            <ID>EAN11</ID>
                                            <VALUE>003555130000000000</VALUE>
                                        </FIELD>
                                        <FIELD>
                                            <ID>NUMTP</ID>
                                            <VALUE>UC</VALUE>
                                        </FIELD>
                                    </SEGMENT>
                                </xsl:if>
                            </xsl:for-each>
                        </xsl:if>
                    

                        <xsl:param name="IM_WORKSTREAM">
                            PTS
                        </xsl:param>

                        <xsl:param name="IM_OBJTYPE">
                            MES_LANG
                        </xsl:param>
                        <xsl:param name="IM_WERKS">
                            <xsl:value-of select="string($CONST_WERKS1)" />
                        </xsl:param>


                        <xsl:param name="salesorg">
                            <xsl:value-of
                                select="javamap:PTSINT107_GET_EXT_VALUE2($IM_WORKSTREAM,$IM_OBJTYPE,$IM_WERKS,$inputparam)" />
                        </xsl:param>





                        <xsl:if test="normalize-space($salesorg) = '-1'">
                            <xsl:if test="E1MVKEM/Z1TXTH0/Z1TXTP0/TDLINE">
                                <xsl:for-each
                                    select="E1MVKEM/Z1TXTH0[LANGUA_ISO=normalize-space($lang)]">
                                    <xsl:if test="position() = 1">
                                        <SEGMENT id="E1MVKEM">
                                            <FIELD>
                                                <ID>SALES_TEXT</ID>
                                                <VALUE>
                                                    <xsl:value-of disable-output-escaping="no"
                                                        select="substring(Z1TXTP0/TDLINE, 1, 60)" />
                                                </VALUE>
                                            </FIELD>
                                        </SEGMENT>
                                        <xsl:variable name="check">
                                            <xsl:value-of select="true()" />
                                        </xsl:variable>
                                    </xsl:if>
                                </xsl:for-each>
                            </xsl:if>
                        </xsl:if>
                        <xsl:if test="normalize-space($salesorg) != '-1'">
                            <xsl:if test="E1MVKEM/Z1TXTH0/Z1TXTP0/TDLINE">
                                <xsl:for-each select="E1MVKEM">
                                    <xsl:if test="VKORG = normalize-space($salesorg)">
                                        <SEGMENT id="E1MVKEM">
                                            <FIELD>
                                                <ID>SALES_TEXT</ID>
                                                <VALUE>
                                                    <xsl:value-of disable-output-escaping="no"
                                                        select="substring(Z1TXTH0/Z1TXTP0/TDLINE, 1, 60)" />
                                                </VALUE>
                                            </FIELD>
                                        </SEGMENT>
                                        <xsl:variable name="check">
                                            <xsl:value-of select="true()" />
                                        </xsl:variable>
                                    </xsl:if>
                                </xsl:for-each>
                            </xsl:if>
                        </xsl:if>
                        <xsl:if test="$check != 'true'">
                            <xsl:if test="E1MVKEM/Z1TXTH0/Z1TXTP0/TDLINE">
                                <xsl:for-each
                                    select="E1MVKEM/Z1TXTH0[LANGUA_ISO=normalize-space($lang)]">
                                    <xsl:if test="position() = 1">
                                        <SEGMENT id="E1MVKEM">
                                            <FIELD>
                                                <ID>SALES_TEXT</ID>
                                                <VALUE>
                                                    <xsl:value-of disable-output-escaping="no"
                                                        select="substring(Z1TXTP0/TDLINE, 1, 60)" />
                                                </VALUE>
                                            </FIELD>
                                        </SEGMENT>
                                    </xsl:if>
                                </xsl:for-each>
                            </xsl:if>
                        </xsl:if>
        

                        <xsl:if test="E1MTXHM/E1MTXLM/TDLINE">
                            <xsl:for-each select="E1MTXHM">
                                <xsl:if
                                    test="TDOBJECT = 'MATERIAL' and TDID = 'GRUN' and SPRAS_ISO = normalize-space($lang)">
                                    <SEGMENT id="E1MTXHM">
                                        <FIELD>
                                            <ID>HANDLING_INSTRUCTIONS</ID>
                                            <VALUE>
                                                <xsl:value-of disable-output-escaping="no"
                                                    select="substring(E1MTXLM/TDLINE, 1, 60)" />
                                            </VALUE>
                                        </FIELD>
                                    </SEGMENT>
                                </xsl:if>
                            </xsl:for-each>
                        </xsl:if>
                    </SEGMENT>
                </xsl:for-each>
            </MESSAGE>
        </IDOC>
    </xsl:template>
</xsl:stylesheet>

Input XML (Idoc):

    <ZMATMAS3>
    <IDOC BEGIN="1">
    <EDI_DC40 SEGMENT="1">
    <TABNAM>EDI_DC40</TABNAM>
    <MANDT>010</MANDT>
    <DOCNUM>0000000159128565</DOCNUM>
    <DOCREL>750</DOCREL>
    <STATUS>30</STATUS>
    <DIRECT>1</DIRECT>
    <OUTMOD>2</OUTMOD>
    <IDOCTYP>MATMAS03</IDOCTYP>
    <CIMTYP>ZMATMAS3</CIMTYP>
    <MESTYP>ZMATMAS</MESTYP>
    <SNDPOR>SAPRQ1</SNDPOR>
    <SNDPRT>LS</SNDPRT>
    <SNDPRN>RQ1CLNT010</SNDPRN>
    <RCVPOR>POJPORT</RCVPOR>
    <RCVPRT>LS</RCVPRT>
    <RCVPRN>POJIDOC</RCVPRN>
    <CREDAT>20230323</CREDAT>
    <CRETIM>072809</CRETIM>
    <SERIAL>20230323072809</SERIAL>
    </EDI_DC40>
    <E1MARAM SEGMENT="1">
    <MSGFN>018</MSGFN>
    <MATNR>9006654</MATNR>
    <ERSDA>20180729</ERSDA>
    <ERNAM>RCORBIN</ERNAM>
    <LAEDA>20230323</LAEDA>
    <AENAM>TMUTHUSA</AENAM>
    <PSTAT>KCVBLSDQEAG</PSTAT>
    <MTART>ZFE1</MTART>
    <MBRSH>P</MBRSH>
    <MATKL>145</MATKL>
    <MEINS>PK</MEINS>
    <BLANZ>000</BLANZ>
    <EKWSL>2</EKWSL>
    <BRGEW>118.000</BRGEW>
    <NTGEW>2.086</NTGEW>
    <GEWEI>GRM</GEWEI>
    <VOLUM>0.000</VOLUM>
    <BEHVO>02</BEHVO>
    <RAUBE>03</RAUBE>
    <TEMPB>25</TEMPB>
    <TRAGR>0003</TRAGR>
    <SPART>10</SPART>
    <WESCH>0.000</WESCH>
    <ETIAR>M7</ETIAR>
    <ETIFO>E1</ETIFO>
    <EAN11>00372511760026</EAN11>
    <NUMTP>UC</NUMTP>
    <LAENG>0.000</LAENG>
    <BREIT>0.000</BREIT>
    <HOEHE>0.000</HOEHE>
    <ERGEW>0.000</ERGEW>
    <ERVOL>0.000</ERVOL>
    <GEWTO>0.0</GEWTO>
    <VOLTO>0.0</VOLTO>
    <VABME>1</VABME>
    <XCHPF>X</XCHPF>
    <FUELG>0</FUELG>
    <STFAK>0</STFAK>
    <MAGRV>REP</MAGRV>
    <BEGRU>FIN</BEGRU>
    <MHDRZ>1</MHDRZ>
    <MHDHB>36</MHDHB>
    <MHDLP>0</MHDLP>
    <VPSTA>KCVBXLSDQEZAG</VPSTA>
    <MSTAE>03</MSTAE>
    <MSTDE>00000000</MSTDE>
    <MSTDV>00000000</MSTDV>
    <COMPL>00</COMPL>
    <RDMHD>+</RDMHD>
    <IPRKZ>2</IPRKZ>
    <MTPOS_MARA>NORM</MTPOS_MARA>
    <GEWTO_NEW>0.0</GEWTO_NEW>
    <VOLTO_NEW>0.0</VOLTO_NEW>
    <MATFI>X</MATFI>
    <SLED_BBD>B</SLED_BBD>
    <ANP>000000000</ANP>
    <ZE1MARAM SEGMENT="1">
    <ZZREG_LVL>COM</ZZREG_LVL>
    <ZZPROD_FAM>FP145</ZZPROD_FAM>
    <ZZMODALITY>MA</ZZMODALITY>
    <ZZCONC_TRGT>140</ZZCONC_TRGT>
    <ZZCONC_UOM>MG/ML</ZZCONC_UOM>
    <ZZDOSAGE>140</ZZDOSAGE>
    <ZZDOS_UOM>MGM</ZZDOS_UOM>
    <ZZDOS_FORM>LVP</ZZDOS_FORM>
    <ZZMANU_STG>FDP</ZZMANU_STG>
    <ZZMANU_BUILD>PRJU:APR1</ZZMANU_BUILD>
    <ZZMANU_SUITE>319/4137</ZZMANU_SUITE>
    <ZZFRANCHISE>100</ZZFRANCHISE>
    <ZZTRADE_NAME>REPATHA</ZZTRADE_NAME>
    <ZZLDN>72511-0760-02</ZZLDN>
    <ZZLDNC>NDC</ZZLDNC>
    <ZZDESI_CODE>2</ZZDESI_CODE>
    <ZZCOST_CRIT>1</ZZCOST_CRIT>
    <ZZSS_PLN_DAYS>000</ZZSS_PLN_DAYS>
    <ZZGENERIC>evolocumab</ZZGENERIC>
    <ZZACQUISITION>00000000</ZZACQUISITION>
    <MTSTB>Unrestricted</MTSTB>
    <ZZDOS_FORM_DESC>Low Volume Pre-Filled Pen</ZZDOS_FORM_DESC>
    <ZZMANU_STG_DESC>Finished Drug Product</ZZMANU_STG_DESC>
    <WGBEZ60>Fully Human Anti-PCSK9 Antibody</WGBEZ60>
    <ZZPROD_FAM_DESC>AMG 145 Family</ZZPROD_FAM_DESC>
    <ZZMODALITY_DESC>Monoclonal Antibody</ZZMODALITY_DESC>
    <ZZPRIORITY>00</ZZPRIORITY>
    <ZZPHARM_FORM>SOINJ</ZZPHARM_FORM>
    <ZZPACK_TYPE>BX</ZZPACK_TYPE>
    <ZZMTBEZ_DESC>AMG Comm Fin Product</ZZMTBEZ_DESC>
    <ZZPHARM_FORM_DES_EN>Solution for injection</ZZPHARM_FORM_DES_EN>
    <ZZPACK_TYPE_EN>Box</ZZPACK_TYPE_EN>
    <ZZMAGRV_EN>Repatha</ZZMAGRV_EN>
    <ZZMATKL_DES_S>AMG 145</ZZMATKL_DES_S>
    </ZE1MARAM>
    <E1MARCM SEGMENT="1">
    <MSGFN>018</MSGFN>
    <WERKS>P001</WERKS>
    <PSTAT>BDQAVLSG</PSTAT>
    <EKGRP>D02</EKGRP>
    <DISMM>X0</DISMM>
    <DISPO>MTS</DISPO>
    <PLIFZ>2</PLIFZ>
    <WEBAZ>5</WEBAZ>
    <PERKZ>M</PERKZ>
    <AUSSS>0.00</AUSSS>
    <DISLS>EX</DISLS>
    <BESKZ>E</BESKZ>
    <MINBE>0.000</MINBE>
    <EISBE>0.000</EISBE>
    <BSTMI>0.000</BSTMI>
    <BSTMA>100000000.000</BSTMA>
    <BSTFE>0.000</BSTFE>
    <BSTRF>1.000</BSTRF>
    <MABST>0.000</MABST>
    <LOSFX>0</LOSFX>
    <SBDKZ>1</SBDKZ>
    <ALTSL>3</ALTSL>
    <AUSDT>00000000</AUSDT>
    <NFMAT>Amgen Europe BV</NFMAT>
    <FHORI>001</FHORI>
    <BEARZ>0.00</BEARZ>
    <RUEZT>0.00</RUEZT>
    <TRANZ>0.00</TRANZ>
    <BASMG>0.000</BASMG>
    <DZEIT>0</DZEIT>
    <MAXLZ>0</MAXLZ>
    <UEETO>0.0</UEETO>
    <UEETK>X</UEETK>
    <UNETO>0.0</UNETO>
    <WZEIT>0</WZEIT>
    <VZUSL>0.00</VZUSL>
    <KZDKZ>X</KZDKZ>
    <UMLMC>0.000</UMLMC>
    <LADGR>0003</LADGR>
    <XCHPF>X</XCHPF>
    <LGRAD>0.0</LGRAD>
    <OBJID>00000000</OBJID>
    <MTVFP>Z2</MTVFP>
    <VRVEZ>0.00</VRVEZ>
    <VBAMG>0.000</VBAMG>
    <VBEAZ>0.00</VBEAZ>
    <STAWN>3002150000</STAWN>
    <HERKL>US</HERKL>
    <MTVER>0001</MTVER>
    <PRCTR>0000005193</PRCTR>
    <TRAME>0.000</TRAME>
    <FXHOR>000</FXHOR>
    <VRMOD>1</VRMOD>
    <VINT1>031</VINT1>
    <VINT2>000</VINT2>
    <LOSGR>6000.000</LOSGR>
    <LGPRO>L001</LGPRO>
    <DISGR>0001</DISGR>
    <KAUSF>0.00</KAUSF>
    <TAKZT>0</TAKZT>
    <ABCIN>A</ABCIN>
    <AWSLS>000001</AWSLS>
    <VRBDT>00000000</VRBDT>
    <VRBFK>0.00</VRBFK>
    <PREND>00000000</PREND>
    <PRENG>00000000</PRENG>
    <PRFRQ>0</PRFRQ>
    <STRGR>40</STRGR>
    <CCFIX>X</CCFIX>
    <QMATA>000050</QMATA>
    <MMSTA>03</MMSTA>
    <SFCPF>ZI12</SFCPF>
    <SHZET>00</SHZET>
    <MMSTD>00000000</MMSTD>
    <DPLHO>0</DPLHO>
    <MINLS>0.000</MINLS>
    <MAXLS>0.000</MAXLS>
    <FIXLS>0.000</FIXLS>
    <LTINC>0.000</LTINC>
    <COMPL>00</COMPL>
    <EISLO>0.000</EISLO>
    <PPS_PEG_STRATEGY>00</PPS_PEG_STRATEGY>
    <PPS_GIPRT>0</PPS_GIPRT>
    <PPS_CONHAP>0.000</PPS_CONHAP>
    <PPS_CONHAP_OUT>0.000</PPS_CONHAP_OUT>
    <ZE1QMATM SEGMENT="1">
    <ART>01</ART>
    <MPDAU> 8</MPDAU>
    <INSMK>X</INSMK>
    <KURZTEXT>Goods Receipt Insp. for Purchase Order</KURZTEXT>
    <AKTIV>X</AKTIV>
    </ZE1QMATM>
    <ZE1QMATM SEGMENT="1">
    <ART>04</ART>
    <MPDAU> 5</MPDAU>
    <INSMK>X</INSMK>
    <KURZTEXT>Goods receipt inspection from production</KURZTEXT>
    <AKTIV>X</AKTIV>
    </ZE1QMATM>
    <ZE1QMATM SEGMENT="1">
    <ART>05</ART>
    <MPDAU> 30</MPDAU>
    <INSMK>X</INSMK>
    <KURZTEXT>Inspection for other goods receipt</KURZTEXT>
    <AKTIV>X</AKTIV>
    </ZE1QMATM>
    <ZE1QMATM SEGMENT="1">
    <ART>08</ART>
    <MPDAU> 10</MPDAU>
    <INSMK>X</INSMK>
    <KURZTEXT>Stock transfer inspection</KURZTEXT>
    <AKTIV>X</AKTIV>
    </ZE1QMATM>
    <ZE1QMATM SEGMENT="1">
    <ART>09</ART>
    <MPDAU> 60</MPDAU>
    <KURZTEXT>Recurring inspection of batches</KURZTEXT>
    <AKTIV>X</AKTIV>
    </ZE1QMATM>
    </E1MARCM>
    <E1MARCM SEGMENT="1">
    <MSGFN>018</MSGFN>
    <WERKS>P249</WERKS>
    <PSTAT>BVDAQELSG</PSTAT>
    <EKGRP>D02</EKGRP>
    <DISMM>X0</DISMM>
    <DISPO>MTS</DISPO>
    <PLIFZ>0</PLIFZ>
    <WEBAZ>7</WEBAZ>
    <PERKZ>M</PERKZ>
    <AUSSS>0.00</AUSSS>
    <DISLS>EX</DISLS>
    <BESKZ>E</BESKZ>
    <MINBE>0.000</MINBE>
    <EISBE>0.000</EISBE>
    <BSTMI>22000.000</BSTMI>
    <BSTMA>22000.000</BSTMA>
    <BSTFE>0.000</BSTFE>
    <BSTRF>0.000</BSTRF>
    <MABST>0.000</MABST>
    <LOSFX>0</LOSFX>
    <ALTSL>3</ALTSL>
    <AUSDT>00000000</AUSDT>
    <NFMAT>Amgen Ohio (AOH)</NFMAT>
    <FHORI>004</FHORI>
    <BEARZ>0.00</BEARZ>
    <RUEZT>0.00</RUEZT>
    <TRANZ>0.00</TRANZ>
    <BASMG>0.000</BASMG>
    <DZEIT>0</DZEIT>
    <MAXLZ>0</MAXLZ>
    <UEETO>0.0</UEETO>
    <UEETK>X</UEETK>
    <UNETO>0.0</UNETO>
    <WZEIT>0</WZEIT>
    <VZUSL>0.00</VZUSL>
    <KZDKZ>X</KZDKZ>
    <UMLMC>0.000</UMLMC>
    <LADGR>0003</LADGR>
    <XCHPF>X</XCHPF>
    <LGRAD>0.0</LGRAD>
    <OBJID>00000000</OBJID>
    <MTVFP>CH</MTVFP>
    <VRVEZ>0.00</VRVEZ>
    <VBAMG>0.000</VBAMG>
    <VBEAZ>0.00</VBEAZ>
    <PRCTR>0000005193</PRCTR>
    <TRAME>0.000</TRAME>
    <FXHOR>124</FXHOR>
    <VRMOD>1</VRMOD>
    <VINT1>030</VINT1>
    <VINT2>000</VINT2>
    <LOSGR>1.000</LOSGR>
    <LGPRO>L001</LGPRO>
    <DISGR>0001</DISGR>
    <KAUSF>0.00</KAUSF>
    <TAKZT>0</TAKZT>
    <ABCIN>A</ABCIN>
    <AWSLS>000001</AWSLS>
    <VRBDT>00000000</VRBDT>
    <VRBFK>0.00</VRBFK>
    <PREND>00000000</PREND>
    <PRENG>00000000</PRENG>
    <PRFRQ>0</PRFRQ>
    <STRGR>40</STRGR>
    <CCFIX>X</CCFIX>
    <QMATA>000050</QMATA>
    <MMSTA>02</MMSTA>
    <SFCPF>PI01</SFCPF>
    <SHZET>00</SHZET>
    <MMSTD>00000000</MMSTD>
    <DPLHO>0</DPLHO>
    <MINLS>0.000</MINLS>
    <MAXLS>0.000</MAXLS>
    <FIXLS>0.000</FIXLS>
    <LTINC>0.000</LTINC>
    <COMPL>00</COMPL>
    <EISLO>0.000</EISLO>
    <PPS_PEG_STRATEGY>00</PPS_PEG_STRATEGY>
    <PPS_GIPRT>0</PPS_GIPRT>
    <PPS_CONHAP>0.000</PPS_CONHAP>
    <PPS_CONHAP_OUT>0.000</PPS_CONHAP_OUT>
    <ZE1QMATM SEGMENT="1">
    <ART>01</ART>
    <MPDAU> 7</MPDAU>
    <INSMK>X</INSMK>
    <KURZTEXT>Goods Receipt Insp. for Purchase Order</KURZTEXT>
    <AKTIV>X</AKTIV>
    </ZE1QMATM>
    <ZE1QMATM SEGMENT="1">
    <ART>04</ART>
    <MPDAU> 10</MPDAU>
    <INSMK>X</INSMK>
    <KURZTEXT>Goods receipt inspection from production</KURZTEXT>
    <AKTIV>X</AKTIV>
    </ZE1QMATM>
    <ZE1QMATM SEGMENT="1">
    <ART>05</ART>
    <MPDAU> 30</MPDAU>
    <INSMK>X</INSMK>
    <KURZTEXT>Inspection for other goods receipt</KURZTEXT>
    <AKTIV>X</AKTIV>
    </ZE1QMATM>
    <ZE1QMATM SEGMENT="1">
    <ART>08</ART>
    <MPDAU> 7</MPDAU>
    <INSMK>X</INSMK>
    <KURZTEXT>Stock transfer inspection</KURZTEXT>
    <AKTIV>X</AKTIV>
    </ZE1QMATM>
    <ZE1QMATM SEGMENT="1">
    <ART>09</ART>
    <MPDAU> 0</MPDAU>
    <KURZTEXT>Recurring inspection of batches</KURZTEXT>
    </ZE1QMATM>
    <E1MARDM SEGMENT="1">
    <MSGFN>018</MSGFN>
    <LGORT>L001</LGORT>
    <PSTAT>DL</PSTAT>
    <LMINB>0.000</LMINB>
    <LBSTF>0.000</LBSTF>
    <BSKRF>0.0000000000000000E+00</BSKRF>
    </E1MARDM>
    </E1MARCM>
    <E1MARMM SEGMENT="1">
    <MSGFN>018</MSGFN>
    <MEINH>EA</MEINH>
    <UMREZ>1</UMREZ>
    <UMREN>2</UMREN>
    <LAENG>0.000</LAENG>
    <BREIT>0.000</BREIT>
    <HOEHE>0.000</HOEHE>
    <VOLUM>0.000</VOLUM>
    <BRGEW>0.000</BRGEW>
    <NEST_FTR>0</NEST_FTR>
    <MAX_STACK>0</MAX_STACK>
    <CAPAUSE>0.000</CAPAUSE>
    </E1MARMM>
    <E1MARMM SEGMENT="1">
    <MSGFN>018</MSGFN>
    <MEINH>PK</MEINH>
    <UMREZ>1</UMREZ>
    <UMREN>1</UMREN>
    <EAN11>00372511760026</EAN11>
    <NUMTP>UC</NUMTP>
    <LAENG>0.000</LAENG>
    <BREIT>0.000</BREIT>
    <HOEHE>0.000</HOEHE>
    <VOLUM>0.000</VOLUM>
    <BRGEW>118.000</BRGEW>
    <GEWEI>GRM</GEWEI>
    <NEST_FTR>0</NEST_FTR>
    <MAX_STACK>0</MAX_STACK>
    <CAPAUSE>0.000</CAPAUSE>
    </E1MARMM>
    <E1MLGNM SEGMENT="1">
    <MSGFN>018</MSGFN>
    <LGNUM>002</LGNUM>
    <LGBKZ>001</LGBKZ>
    <LTKZE>307</LTKZE>
    <LTKZA>307</LTKZA>
    <LHMG1>0.000</LHMG1>
    <LHMG2>0.000</LHMG2>
    <LHMG3>0.000</LHMG3>
    <MKAPV>0.000</MKAPV>
    </E1MLGNM>
    <E1MLGNM SEGMENT="1">
    <MSGFN>018</MSGFN>
    <LGNUM>006</LGNUM>
    <LGBKZ>001</LGBKZ>
    <LTKZE>001</LTKZE>
    <LTKZA>001</LTKZA>
    <LHMG1>3136.000</LHMG1>
    <LHMG2>1568.000</LHMG2>
    <LHMG3>0.000</LHMG3>
    <LHME1>PK</LHME1>
    <LHME2>PK</LHME2>
    <LETY1>E2</LETY1>
    <LETY2>E1</LETY2>
    <MKAPV>0.000</MKAPV>
    </E1MLGNM>
    <E1MLGNM SEGMENT="1">
    <MSGFN>018</MSGFN>
    <LGNUM>007</LGNUM>
    <LGBKZ>024</LGBKZ>
    <LTKZE>300</LTKZE>
    <LTKZA>300</LTKZA>
    <LHMG1>1568.000</LHMG1>
    <LHMG2>0.000</LHMG2>
    <LHMG3>0.000</LHMG3>
    <LHME1>PK</LHME1>
    <LETY1>E1</LETY1>
    <MKAPV>0.000</MKAPV>
    </E1MLGNM>
    <E1MLGNM SEGMENT="1">
    <MSGFN>018</MSGFN>
    <LGNUM>008</LGNUM>
    <LGBKZ>003</LGBKZ>
    <LTKZE>300</LTKZE>
    <LTKZA>300</LTKZA>
    <LHMG1>1344.000</LHMG1>
    <LHMG2>336.000</LHMG2>
    <LHMG3>0.000</LHMG3>
    <LHME1>PK</LHME1>
    <LHME2>PK</LHME2>
    <LETY1>FP</LETY1>
    <LETY2>HP</LETY2>
    <MKAPV>714.280</MKAPV>
    </E1MLGNM>
    </E1MARAM>
    </IDOC>
    </ZMATMAS3>
1

There are 1 best solutions below

5
Conal Tuohy On

I've searched in the XSLT and found a variable whose name is $WAREHOUSE which is referred to in the expression below but is not bound to a value at that point.

<xsl:if test="LGNUM = $WAREHOUSE and normalize-space($STR_TYP) !='-1'">

That's obviously an error.

Presumably the XSLT processor doesn't detect the error when it's processing certain XML source files because those files don't meet the conditions in which the erroneous expression is evaluated. e.g. that erroneous expression is nested inside this if statement:

<xsl:if test="E1MARMM/NUMTP = 'UC'">

... so if that expression is false then the erroneous expression with the unbound variable will never be evaluated.

There is a point in the stylesheet in which the variable $WAREHOUSE is bound to a value, but the scope of that variable binding is ineffectual:

<xsl:choose>
    <xsl:when test="E1MLGNM/LGNUM = '012'">
        <xsl:variable name="WAREHOUSE" select="012" />
    </xsl:when>
</xsl:choose>   

It's important to understand that the scope of a variable binding in XSLT is defined lexically by the parent element in which the <xsl:variable/> element appears. The variable is visible to any element within that parent element which follows the <xsl:variable> element itself; in other words the variable is usable only by following sibling elements and their descendants. It follows from this that any <xsl:variable> element that has no following siblings is totally ineffectual.

In this case, the variable binding exists only for nodes which are also children of that xsl:when element, and which follow the xsl:variable element, but there are none.

By the way, a variable called $WAREHOUSE is not the same as $Warehouse because variable names in XSLT are case sensitive.