0

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>
Sandra Rossi
  • 11,934
  • 5
  • 22
  • 48

1 Answers1

0

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.

Conal Tuohy
  • 2,561
  • 1
  • 8
  • 15
  • Hello Conal, Thanks. I have edited the question. Also, Please the below code where WAREHOUSE is being assigned to a value from the IDoc. – kuzhali.stp Mar 28 '23 at 11:45
  • I'll edit my answer – Conal Tuohy Mar 28 '23 at 11:57
  • The code's logic isn't clear to me: what is the value of `$WAREHOUSE` supposed to be if `E1MLGNM/LGNUM` is _not_ = '012'? – Conal Tuohy Mar 28 '23 at 12:07
  • Thanks Conal. we have kept E1MLGNM/LGNUM is = '012' as this is the only warehouse number for this particular plant and it needs to fetch the corresponding value and populate the output structure. My question is that the if statement here makes the WAREHOUSE a mandatory field? Can we alter the code so that even if the E1MLGNM/LGNUM is not = '012', the code still works (ignoring this particular loop) – kuzhali.stp Mar 28 '23 at 15:59
  • Are you saying that E1MLGNM/LGNUM is always either '012' or it's missing altogether? – Conal Tuohy Mar 29 '23 at 02:44