存档

2009年3月 的存档

Navision的维值记录存储

2009年3月26日 没有评论

Item Ledger Entry 非常重要的物料交易记录数据,其表记录将会非常大,非常重要
下面介绍一系列与Dimension维值记录相关联的系列表,维值记录包括5种类型
      交易分录/记账/各类型订单/工单/已过帐历史文档.
355 Ledger Entry Dimension 记录物料交易记录的维值信息,如果发现维值未带上,可以在这里发现少一条记录
包括表  17 G/L Entry 的记录,Entry代表Item Ledger Entry等表的Entry No信息
  21 Cust.Ledger Entry
  25 Vendor Ledger Entry
  32 Item Ledger Entry
  203 Res. Ledger Entry
  271 Bank Account Ledger Entry
  5601 FA Ledger Entry
  5625 Maintenance Ledger Entry
  5629 Ins. Coverage Ledger Entry
  5802 Value Entry
  5907 Service Ledger Entry
356 Journal Line Dimension 记录各类型日记账的维值信息,如果发现维值未带上,可以在这里发现少一条记录
包括表 81  Gen.Journal Line 普通日记账行  包括凭证信息
  751 Standard General Journal 标准日记账行 包括凭证信息
  753 Standard Item Journal Line 标准物料日记账行 包括物料调整信息
357 Document Dimension  记录各类型(Quote,Order,Invoice,Credit Memo,Blanket Order,Return Order)文档上的维值信息, 行编号0表示订单头,其他编号为各类文档上的行记录维值信息.
包括表 36 Sales Header 通过Order No.与各类型订单文档进行关联
  37 Sales Line
  38 Purchase Header
  39 Purchase Line
  174 Standard Purchase Line
  5900 Service Header
  5901 Service Item Line
  5902 Service Line
358 Production Document Dimension 记录各类型(Simulated,Planned,Firm Planned,Released,Finished)生产工单类文档上的维值信息,行编号0表示工单头,其他编号为工单上的行记录维值信息.
         (模拟的,计划的,确定计划的,已释放的,完成的)
包括表 5406 Prod.Order Header
  5407 Prod.Order Line
359 Posted Document Dimension 记录各过账文档上的维值信息,行编号0表示文档头,其他编号为文档行记录上的维值信息
包括表 110  Sales Shipment Header 通过Document No.与各类型已过账文档进行管理
  111  Sales Shipment Line
  112  Sales Invoice Header
  113  Sales Invoice Line
  114  Sales Cr.Memo Header
  115  Sales Cr.Memo Line
  120  Purch. Rcpt. Header
  121  Purch. Rcpt. Line
  122  Purch. Inv. Header
  123  Purch. Inv. Line
  124  Purch. Cr. Memo Hdr.
  125  Purch. Cr. Memo Line
  6650 Return Shipment Header
  6651 Return Shipment Line
  6660 Return Receipt Header
  6661 Return Receipt Line
  包括 销售的出货-/发票-/贷项+ 采购的收货+/发票+/借项- 以及 退销售发货+/退采购收货-

修改xslt,格式化输出数据到Excel

2009年3月24日 没有评论

修改XSLT可以实现,将Navision的表格导出到Navision时进行格式化,实现数据可以进行计算操作。

主要更改以下2个方面:

1. 从Navision导出数据时,如果出现当前窗口标题包含非法字符,如/[]等. 将使用XSLT函数进行字符删除。

2. 通过对Navision数据类型进行识别,将Decimal/Integer/BigInteger类型数据进行数字化格式。

 

代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">
    <xsl:output method="xml" encoding="UTF-8" standalone="yes" />
    <xsl:template match="/">
        <xsl:processing-instruction name="mso-application">
            <xsl:text>progid="Excel.Sheet"</xsl:text>
        </xsl:processing-instruction>
        <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">
            <xsl:call-template name="output-ExcelWorkbook"/>
            <xsl:call-template name="output-Styles"/>
            <xsl:call-template name="output-Worksheet"/>
            <Author>yeats</Author>
        </Workbook>
    </xsl:template>
  <xsl:variable name="DecimalSeparator" select="Object/DecimalSeparator"/>
  <xsl:variable name="nbsp">&#160;</xsl:variable>
    <xsl:template name="output-ExcelWorkbook">
        <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
            <WindowHeight>9300</WindowHeight>
            <WindowWidth>15135</WindowWidth>
            <WindowTopX>120</WindowTopX>
            <WindowTopY>120</WindowTopY>
            <AcceptLabelsInFormulas/>
            <ProtectStructure>False</ProtectStructure>
            <ProtectWindows>False</ProtectWindows>
        </ExcelWorkbook>
    </xsl:template>
    <xsl:template name="output-Styles">
        <Styles xmlns="urn:schemas-microsoft-com:office:spreadsheet">
            <Style ss:ID="Default" ss:Name="Normal">
                <Alignment ss:Vertical="Bottom"/>
                <Borders/>
                <Font/>
                <Interior/>
                <NumberFormat/>
                <Protection/>
            </Style>
            <Style ss:ID="normalSheet" ss:Name="Normal_Sheet1">
                <Interior/>
                <NumberFormat ss:Format="#,##0_);[Red](#,##0)"/>
            </Style>
            <Style ss:ID="formCaption">
                <Font x:Family="Swiss" ss:Size="12" ss:Bold="1"/>    
            </Style>
            <Style ss:ID="tabCaption">
                <Font x:Family="Swiss" ss:Size="11" ss:Color="#333399" ss:Bold="1"/>
            </Style>
            <Style ss:ID="Label">
                <Alignment ss:Horizontal="Left" ss:Vertical="Bottom" ss:WrapText="1"/>
                <Font ss:FontName="Verdana" x:Family="Swiss" ss:Size="8" ss:Bold="1"/>
                <Interior ss:Color="#C0C0C0" ss:Pattern="Solid"/>
            </Style>
            <Style ss:ID="TextBox">
                <Alignment ss:Horizontal="Left" ss:Vertical="Bottom"/>
                <Font ss:FontName="Verdana" x:Family="Swiss"/>
            </Style>
            <Style ss:ID="TextBoxNumber">
                <Alignment ss:Horizontal="Right" ss:Vertical="Bottom"/>
                <Font ss:FontName="Verdana" x:Family="Swiss"/>
                <NumberFormat ss:Format="#,##0.00_);[Red](-#,##0.00);0"/>
            </Style>
            <Style ss:ID="TextBoxDate">
                <Alignment ss:Horizontal="Right" ss:Vertical="Bottom"/>
                <Font ss:FontName="Verdana" x:Family="Swiss"/>
                <NumberFormat ss:Format="yyyy-mm-dd"/>
            </Style>
            <Style ss:ID="CheckBox">
                <Alignment ss:Horizontal="Left" ss:Vertical="Bottom"/>
                <Font ss:FontName="Verdana" x:Family="Swiss"/>
            </Style>
            <Style ss:ID="rowheading">
                <Font x:Family="Swiss" ss:Bold="1"/>
                <Interior ss:Color="#C0C0C0" ss:Pattern="Solid"/>
            </Style>
        </Styles>
    </xsl:template>
    <xsl:template name="output-Worksheet">
        <xsl:apply-templates select="Object/Control"/>
    </xsl:template>
    <xsl:template match="Control[@type='TabControl']">
        <xsl:apply-templates select="./Control"/>
    </xsl:template>
    <xsl:template match="Control[@type='TabPage']">
        <Worksheet xmlns="urn:schemas-microsoft-com:office:spreadsheet">
            <xsl:attribute name="ss:Name">
                <xsl:value-of select="@caption"/>
            </xsl:attribute>
            <Table>
                <xsl:attribute name="ss:ExpandedColumnCount">100</xsl:attribute>
                <xsl:attribute name="ss:ExpandedRowCount">100</xsl:attribute>
                <Column ss:AutoFitWidth="0" ss:Width="123.75" ss:Span="1"/>
                <Column ss:Index="3" ss:AutoFitWidth="0" ss:Width="111.75"/>
                <Column ss:AutoFitWidth="0" ss:Width="98.25"/>
                <Row>
                    <Cell ss:StyleID="formCaption">
                        <!--<xsl:attribute name="ss:HRef">
                            <xsl:value-of select="//Object/@url"/>
                        </xsl:attribute>-->
                        <Data ss:Type="String">
                            <xsl:value-of select="//Object/@caption"/>
                        </Data>
                    </Cell>
                </Row>
                <Row>
                    <Cell ss:StyleID="tabCaption">
                        <Data ss:Type="String">
                            <xsl:value-of select="@caption"/>
                        </Data>
                    </Cell>
                </Row>
                <xsl:apply-templates select="Row" mode="TabPage"/>
            </Table>
            <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
                <Selected/>
                <Panes>
                    <Pane>
                        <Number>3</Number>
                        <ActiveRow>6</ActiveRow>
                        <ActiveCol>1</ActiveCol>
                    </Pane>
                </Panes>
                <ProtectObjects>False</ProtectObjects>
                <ProtectScenarios>False</ProtectScenarios>
            </WorksheetOptions>
        </Worksheet>
    </xsl:template>
    <xsl:template match="Control[@type='TableBox']">
        <Worksheet xmlns="urn:schemas-microsoft-com:office:spreadsheet">
            <xsl:attribute name="ss:Name">
                <xsl:variable name="TableBoxCaption">
                    <xsl:value-of select="//Object/@caption"/>    
                </xsl:variable>
                <xsl:value-of select="concat(substring(translate($TableBoxCaption,'[/?*:]',''),1,27),string(position()))"/>
            </xsl:attribute>
            <Table>
                <xsl:attribute name="ss:ExpandedColumnCount"><xsl:value-of select="count(Row[1]/Control)"/></xsl:attribute>
                <xsl:attribute name="ss:ExpandedRowCount"><xsl:value-of select="count(Row) + 2"/></xsl:attribute> 

                <xsl:for-each select="Row[1]/Control">
                    <Column ss:AutoFitWidth="1">
                        <xsl:attribute name="ss:Width">
                            <xsl:value-of select="@width * 0.02857"/>
                        </xsl:attribute>
                    </Column>
                </xsl:for-each>
                <Row>
                    <Cell ss:StyleID="formCaption">
                        <Data ss:Type="String">
                            <xsl:value-of select="//Object/@caption"/>
                        </Data>
                    </Cell>
                </Row>
                <xsl:apply-templates select="Row" mode="TableBox"/>
            </Table>
            <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
                <Selected/>
                <Panes>
                    <Pane>
                        <Number>3</Number>
                        <ActiveRow>6</ActiveRow>
                        <ActiveCol>1</ActiveCol>
                    </Pane>
                </Panes>
                <ProtectObjects>False</ProtectObjects>
                <ProtectScenarios>False</ProtectScenarios>
            </WorksheetOptions>
        </Worksheet>
    </xsl:template>
    <xsl:template match="Control[@type='Frame']">
        <Worksheet xmlns="urn:schemas-microsoft-com:office:spreadsheet">
            <xsl:attribute name="ss:Name">
                <xsl:value-of select="@caption"/>
                <xsl:if test="@caption = ''">
                    <xsl:variable name="TableBoxCaption">
                        <xsl:value-of select="//Object/@caption"/>
                    </xsl:variable>
                    <xsl:value-of select="substring(translate($TableBoxCaption,'[/?*:]',''),1,27)"/><xsl:value-of select="position()"/>
                </xsl:if>
            </xsl:attribute>
            <Table>
                <xsl:attribute name="ss:ExpandedColumnCount">100</xsl:attribute>
                <xsl:attribute name="ss:ExpandedRowCount">100</xsl:attribute> 

                <xsl:for-each select="Row[1]/Control">
                    <Column ss:AutoFitWidth="0">
                        <xsl:attribute name="ss:Width">
                            <xsl:value-of select="@width * 0.02857"/>
                        </xsl:attribute>
                    </Column>
                </xsl:for-each>
                <Row>
                    <Cell ss:StyleID="formCaption">
                        <Data ss:Type="String">
                            <xsl:value-of select="//Object/@caption"/>
                        </Data>
                    </Cell>
                </Row>
                <xsl:apply-templates select="Row" mode="Frame"/>
            </Table>
            <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
                <Selected/>
                <Panes>
                    <Pane>
                        <Number>3</Number>
                        <ActiveRow>6</ActiveRow>
                        <ActiveCol>1</ActiveCol>
                    </Pane>
                </Panes>
                <ProtectObjects>False</ProtectObjects>
                <ProtectScenarios>False</ProtectScenarios>
            </WorksheetOptions>
        </Worksheet>
    </xsl:template>
    <xsl:template match="Row" mode="TabPage">
        <Row xmlns="urn:schemas-microsoft-com:office:spreadsheet">
            <xsl:apply-templates select="Control"/>
        </Row>
        <xsl:if test="position()!=last()">
            <Row xmlns="urn:schemas-microsoft-com:office:spreadsheet">
                <xsl:for-each select="./Control">
                    <Cell>
                        <xsl:attribute name="ss:StyleID">
                            <xsl:value-of select="@type"/>
                        </xsl:attribute>
                    </Cell>
                </xsl:for-each>
            </Row>
        </xsl:if>
    </xsl:template>
    <xsl:template match="Row" mode="TableBox">
        <Row xmlns="urn:schemas-microsoft-com:office:spreadsheet">
            <xsl:apply-templates select="Control"/>
        </Row>
    </xsl:template>
    <xsl:template match="Row" mode="Frame">
        <Row xmlns="urn:schemas-microsoft-com:office:spreadsheet">
            <xsl:apply-templates select="Control"/>
        </Row>
    </xsl:template>
    <xsl:template match="Control[@type='Label']">
        <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet">
            <xsl:attribute name="ss:StyleID">Label</xsl:attribute>
            <Data>
                <xsl:attribute name="ss:Type">String</xsl:attribute>
                <xsl:value-of select="@value"/>
            </Data>
        </Cell>
    </xsl:template>
    <xsl:template match="Control[@type='TextBox']">
        <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet">
            <xsl:choose>
                <xsl:when test="@datatype = 'Decimal'">
                    <xsl:attribute name="ss:StyleID">TextBoxNumber</xsl:attribute>
                </xsl:when>
                <xsl:when test="@datatype = 'Date'">
                    <xsl:attribute name="ss:StyleID">TextBoxDate</xsl:attribute>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:attribute name="ss:StyleID">TextBox</xsl:attribute>
                </xsl:otherwise>
            </xsl:choose>
            <Data>
                <xsl:choose>
                    <xsl:when test="(@datatype = 'Decimal') or (@datatype = 'Integer') or (@datatype = 'BigInteger')">
                        <xsl:attribute name="ss:Type">Number</xsl:attribute>
                        <xsl:value-of select="@value"/>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:attribute name="ss:Type">String</xsl:attribute>
                        <xsl:value-of select="@value"/>
                    </xsl:otherwise>
                </xsl:choose>
            </Data>
        </Cell>
    </xsl:template>
    <xsl:template match="Control[@type='CheckBox']">
        <Cell xmlns="urn:schemas-microsoft-com:office:spreadsheet">
            <xsl:attribute name="ss:StyleID">CheckBox</xsl:attribute>
            <Data>
                <xsl:attribute name="ss:Type">String</xsl:attribute>
                <xsl:value-of select="@value"/>
            </Data>
        </Cell>
    </xsl:template>
</xsl:stylesheet>
分类: Development 标签: ,