设计电子报告格式以对 Excel 中生成的文档进行分页

本文说明系统管理员或电子报告功能顾问角色的用户如何配置电子报告 (ER) 格式以在 Microsoft Excel 中生成出站文档并管理文档分页。

在此示例中,您将修改 Microsoft 提供的电子报告格式,该格式用于在生成内部统计声明时打印控制报表。 此报表可让您观察报告的内部统计交易。 您的修改将让您能够管理生成的控制报表的分页。

本文中的过程可以在 DEMF 公司完成。 无需进行编码。 在开始之前,请下载并保存以下文件。

说明 文件名
报表模板 1 ERIntrastatReportDemo1.xlsx
报表模板 2 ERIntrastatReportDemo2.xlsx

配置 ER 框架

按照配置电子报告框架中的步骤设置最低限度的电子报告参数集。 在开始使用电子报告框架设计标准电子报告格式的自定义版本之前,您必须完成此设置。

导入标准电子报告格式配置

按照导入标准电子报告格式配置中的步骤将标准电子报告配置添加到您当前的 Dynamics 365 Finance 实例。 导入内部统计报表格式配置的 1.9 版本。 基础内部统计模型配置的基础版本 1 会自动从存储库导入。

自定义标准 ER 格式

创建自定义电子报告格式

在此场景中,您是 Litware, Inc. 的代表,该公司当前被选为可用的电子报告配置提供商。 您必须使用内部统计报表配置作为基础来创建新的电子报告格式配置。

  1. 转到组织管理>电子申报>配置
  2. 配置页的左侧窗格的配置树中,展开内部统计模型,选择内部统计报表。 Litware, Inc. 将把此 ER 格式配置的版本 1.9 用作自定义版本的基础。
  3. 选择创建配置,以打开下拉对话框。 可使用此对话框创建自定义付款格式的新配置。
  4. 新建字段组中,选择从以下名称派生: 内部统计报表, Microsoft 选项。
  5. 名称字段中,输入内部统计报表 Litware
  6. 选择创建配置创建新格式。

将创建内部统计报表 Litware 电子报告格式配置的版本 1.9.1。 此版本的状态为草稿,可以编辑。 自定义 ER 格式的当前内容与 Microsoft 提供的格式的内容匹配。

让自定义格式可运行

已创建自定义格式的第一个版本,并且其状态为操作,您可以针对测试用途运行该格式。 若要运行此报表,请使用引用自定义 ER 格式的付款方式处理供应商付款。 默认情况下,从应用程序调用 ER 格式时,仅考虑状态为已完成已共享的版本。 此行为有助于避免使用未完成设计的 ER 格式。 但是,对于测试运行,可以强制应用程序使用状态为草稿的 ER 格式版本。 因此,如果需要进行任何修改,可以调整当前格式版本。 有关详细信息,请参阅适用性

要使用 ER 格式的草稿版本,必须显式标记 ER 格式。

  1. 转到组织管理>电子申报>配置

  2. 配置页操作窗格中配置选项卡的高级设置组中,选择用户参数

  3. 使用参数对话框中,将运行设置选项设置为,然后选择确定

  4. 根据需要,选择编辑以使当前页面可供编辑。

  5. 在左侧窗格的配置树中,选择内部统计报表 Litware

  6. 运行草稿选项设置为,然后选择保存

设置外贸参数使用自定义电子报告格式

按照以下步骤配置外贸参数,以便您可以使用自定义格式。

  1. 转到税务>设置>外贸>外贸参数
  2. 外贸参数页面的电子报告快速选项卡上,在文件格式映射字段中,选择内部统计报表 Litware
  3. 报表格式映射字段中,选择内部统计报表 Litware
  4. 选择保存

配置自定义格式以使用下载的报表模板

查看第一个下载的 Excel 模板

  1. 在 Excel 桌面应用程序中,打开您先前下载的 ERIntrastatReportDemo1.xlsx 模板文件。

  2. 验证模板是否包含命名范围以在生成的文档中创建报表页眉、报表详细信息和报表页脚部分。

    桌面应用程序中 Excel 模板 1 的布局。

替换当前的自定义电子报告格式的 Excel 模板

必须将新 Excel 模板添加到自定义电子报告格式。

  1. 转到组织管理>电子申报>配置
  2. 配置页的左侧窗格的配置树中,展开内部统计模型>内部统计报表,然后选择内部统计报表 Litware 配置。
  3. 选择设计器
  4. 格式设计器页的操作窗格上,选择显示详细信息
  5. 确保已选择内部统计: Excel 根格式组件,然后,在操作窗格上,在导入选项卡上的导入组中,选择从 Excel 更新
  6. 从 Excel 更新对话框中,选择更新模板
  7. 打开对话框中,浏览到并选择您之前下载的 ERIntrastatReportDemo1.xlsx 文件,然后选择打开
  8. 选择确定
  9. 选择保存

添加新 Excel 模板后电子报告格式设计器中的格式结构。

更改数据绑定以在生成的报表上显示物料描述

  1. 格式设计器页中,选择映射选项卡。
  2. 展开内部统计>报表行,选择商品代码组件。
  3. 选择编辑公式
  4. 将绑定公式从 @.CommodityCode 更改为 CONCATENATE(@.CommodityCode, " ", @.ProductName)
  5. 选择保存

已配置绑定以在电子报告格式设计器中显示物料描述。

生成内部统计申报控制报表

首先,确保您在内部统计页面上有用于报告的内部统计交易。

内部统计页面上的交易。

然后使用自定义电子报告格式生成内部统计申报的控制报表。

  1. 转到纳税>申报>外贸>内部统计

  2. 内部统计页面上的操作窗格上,选择输出>报表

  3. 内部统计报表对话框中,按照以下步骤运行报表:

    1. 设置开始日期结束日期字段以将特定内部统计交易包括到报表中。
    2. 生成文件选项设置为
    3. 生成报表选项设置为
    4. 选择确定
  4. 下载并保存生成的文档。

  5. 在 Excel 中打开文档,进行查看。

    桌面应用程序中生成的 Excel 文档。

配置自定义格式以对生成的文档进行分页

查看第二个下载的 Excel 模板

  1. 在 Excel 中,打开您先前下载的 ERIntrastatReportDemo2.xlsx 模板文件。

  2. 将此模板与 ERIntrastatReportDemo1.xlsx 模板进行比较,验证它是否包含几个新的 Excel 名称以在生成的文档中创建和填充特定于页面的部分:

    • ReportPageHeader 范围已添加以创建页眉。
    • ReportPageFooter 范围已添加以创建页脚。
    • ReportPageFooter_PageLines 单元格已配置为显示每页的交易数。
    • ReportPageFooter_PageAmount 单元格已配置为显示每页的交易总金额。
    • ReportPageFooter_PageWeight 单元格已配置为显示每页的交易总重量。
    • ReportPageFooter_RunningCounterLines 单元格已配置为显示从报表开头一直到当前页面的正在运行的交易计数器。
    • ReportPageFooter_RunningTotalAmount 单元格已配置为显示从报表开头一直到当前页面正在运行的所有交易的金额累计总和。
    • ReportPageFooter_RunningTotalWeight 单元格已配置为显示从报表开头一直到当前页面的交易的重量累计总和。

    桌面应用程序中 Excel 模板 2 的布局。

    此模板的 CommodityCode 单元格已配置为包装单元格文本。 由于交易详细信息行被配置为自动适应行高度,所以当 CommodityCode 单元格中的文本换行时,整行的高度必须自动改变。

    配置为包装单元格文本的 CommerceCode 单元格。

重复替换当前的自定义电子报告格式的 Excel 模板

  1. 按照本文的替换当前的自定义电子报告格式的 Excel 模板一节中的步骤操作。 但是,在步骤 7 中,选择 ERIntrastatReportDemo2.xlsx 文件。

  2. 格式设计器页上,展开内部统计

  3. 命名已添加到可编辑电子报告格式的范围格式组件,以将结构与应用的 Excel 模板的结构同步:

    1. 选择与 Excel 名称 ReportPageHeader 关联的范围组件。
    2. 格式选项卡上,在名称字段中输入报表页面页眉
    3. 选择与 Excel 名称 ReportPageFooter 关联的范围组件。
    4. 格式选项卡上,在名称字段中输入报表页面页脚
  4. 选择保存

替换 Excel 模板后电子报告格式设计器中的格式结构。

更改格式结构以实现文档分页

  1. 格式设计器页上,在左窗格中的格式树中,选择内部统计根组件。

  2. 选择添加

  3. 添加对话框中,在组件的 Excel 组中选择页面组件。

  4. 组件属性对话框的名称字段中,输入报表页。 然后选择确定

  5. 要在每个生成的页面上使用报表页面页眉组件作为页眉,请执行以下步骤:

    1. 选择报表页面页眉组件,然后选择剪切
    2. 选择报表页组件,然后选择粘贴
    3. 展开报表页
    4. 要强制页面组件考虑将此范围用于页眉,选择报表页面页眉,然后,在格式选项卡上,在复制方向字段中,选择无复制
  6. 要对生成的文档进行分页以考虑报表行上的内容,请执行以下步骤:

    1. 选择报表行组件,然后选择剪切
    2. 选择报表页组件,然后选择粘贴
  7. 要在报表行之后但在最后一页页脚之前包含报表页脚,请执行以下步骤:

    1. 选择报表页脚组件,然后选择剪切
    2. 选择报表页组件,然后选择粘贴
  8. 要在每个生成的页面上使用报表页面页脚组件作为页脚,请执行以下步骤:

    1. 选择报表页面页脚组件,然后选择剪切
    2. 选择报表页组件,然后选择粘贴
    3. 要强制页面组件考虑将此范围用于页脚,选择报表页面页脚,然后,在格式选项卡上,在复制方向字段中,选择无复制

实现文档分页后电子报告格式设计器中的格式结构。

您必须配置新数据源以计算页面总计、正在运行的计数器和累计总和值,并将它们显示在页脚部分。 为此,我们建议您使用数据集合数据源。

  1. 格式设计器页中,选择映射选项卡。

  2. 选择添加根,然后按照以下步骤操作:

    1. 添加数据源对话框中,在常规部分,选择空容器
    2. “空容器”数据源属性对话框中,在名称字段中输入总计
    3. 选择确定
  3. 选择总计数据源,选择添加,然后按照以下步骤操作:

    1. 添加数据源对话框中,在常规部分,选择空容器
    2. “空容器”数据源属性对话框中,在名称字段中输入页面
    3. 选择确定
  4. 再次选择添加,然后按照以下步骤操作:

    1. 添加数据源对话框中,在常规部分,选择空容器
    2. “空容器”数据源属性对话框中,在名称字段中输入累计
    3. 选择确定
  5. 选择 Total.Page 数据源,选择添加,然后按照以下步骤操作:

    1. 添加数据源对话框中,在功能部分,选择数据收集
    2. “数据集合”数据源属性对话框中,在名称字段中输入金额
    3. 物料类型字段中,选择实际
    4. 收集所有值选项设置为
    5. 选择确定
  6. 再次选择添加,然后按照以下步骤操作:

    1. 添加数据源对话框中,在功能部分,选择数据收集
    2. “数据集合”数据源属性对话框中,在名称字段中输入重量
    3. 物料类型字段中,选择实际
    4. 收集所有值选项设置为
    5. 选择确定
  7. 选择 Total.Running 数据源,选择添加,然后按照以下步骤操作:

    1. 添加数据源对话框中,在功能部分,选择数据收集
    2. “数据集合”数据源属性对话框中,在名称字段中输入金额
    3. 物料类型字段中,选择实际
    4. 收集所有值字段设置为
    5. 选择确定
  8. 再次选择添加,然后按照以下步骤操作:

    1. 添加数据源对话框中,在功能部分,选择数据收集
    2. “数据集合”数据源属性对话框中,在名称字段中输入重量
    3. 物料类型字段中,选择实际
    4. 收集所有值字段设置为
    5. 选择确定
  9. 再次选择添加,然后按照以下步骤操作:

    1. 添加数据源对话框中,在功能部分,选择数据收集
    2. “数据集合”数据源属性对话框中,在名称字段中输入
    3. 物料类型字段中,选择整数
    4. 收集所有值字段设置为
    5. 选择确定
  10. 选择保存

如果您计划控制页脚可见性,且不打算将页脚包含在包含交易的最终页面上,配置一个新数据源来计算所需的运行计数器。

  1. 格式设计器页中,选择映射选项卡。
  2. 选择 Total.Running 数据源,选择添加
  3. 添加数据源对话框中,在功能部分,选择数据收集
  4. “数据集合”数据源属性对话框中,在名称字段中输入行 2
  5. 物料类型字段中,选择整数
  6. 收集所有值选项设置为
  7. 选择确定
  8. 选择保存

在电子报告格式设计器中添加的数据源。

配置绑定以收集总计值

  1. 格式设计器页上,在格式树中,展开报表行组件,选择嵌套发票值组件。

  2. 选择编辑公式

  3. 将绑定公式从 NUMBERVALUE(NUMBERFORMAT(@.InvoiceValue, "F"&TEXT(model.Parameters.IntrastatAmountDecimals)), ".", "") 更改为 Total.Page.Amount.Collect(NUMBERVALUE(NUMBERFORMAT(@.InvoiceValue, "F"&TEXT(model.Parameters.IntrastatAmountDecimals)), ".", ""))

    注释

    除了将每个迭代交易的金额值放在 Excel 单元格中外,此绑定还会收集数据集合 Total.Page.Amount 数据源中的值。

  4. 选择嵌套重量组件。

  5. 选择编辑公式

  6. 将绑定公式从 @.'$RoundedWeight' 更改为 Total.Page.Weight.Collect(@.'$RoundedWeight')

    注释

    除了将每个迭代交易的重量值放在 Excel 单元格中外,此绑定还会收集 Total.Page.Weight 数据源中的值。

已配置绑定以在电子报告格式设计器中收集总计值。

  1. 格式设计器页上的格式树中,展开报表页面页脚组件,选择引用 Excel ReportPageFooter_PageAmount 单元格的嵌套范围组件,然后按照以下步骤操作:

    1. 在右侧窗格中的数据源树中,选择 Total.Page.Amount.Sum() 项。
    2. 选择绑定
    3. 选择编辑公式
    4. 将公式更新为 Total.Page.Amount.Sum(false)

    注释

    您必须将此函数的参数指定为 False 以保留当前页面的收集数据,因为需要这些数据来计算金额累计总和、每页总行数以及正在运行的行计数器。

  2. 在格式树中,选择引用 Excel ReportPageFooter_PageWeight 单元格的嵌套范围组件,然后执行以下步骤:

    1. 在右侧窗格中的数据源树中,选择 Total.Page.Weight.Sum() 项。
    2. 选择绑定
    3. 选择编辑公式
    4. 将公式更新为 Total.Page.Weight.Sum(false)

配置绑定以填充页面的累计总和

  1. 格式设计器页上的格式树中,展开报表页面页脚组件,选择引用 Excel ReportPageFooter_RunningTotalAmount 单元格的嵌套范围组件,然后按照以下步骤操作:

    1. 在右侧窗格中的数据源树中,选择 Total.Running.Amount.Collect() 项。
    2. 选择绑定
    3. 选择编辑公式
    4. 将公式更新为 Total.Running.Amount.Sum(false)+Total.Running.Amount.Collect(Total.Page.Amount.Sum(true))

    注释

    Total.Running.Amount.Sum(false) 操作数返回先前收集的金额累计总和。 Total.Running.Amount.Collect(Total.Page.Amount.Sum(true)) 操作数返回当前页面的总金额。 您必须将第二个操作数的嵌套函数的参数指定为 True 以在将此值放入 Total.Running.Amount 累计总和集合时立即重置 Total.Page.Amount 数据集合。 指定的参数必须从 0(零)值开始收集下一页的总计。

    Total.Running.Amount.Sum(false) 函数将被调用以在当前页面的 Excel ReportPageFooter_RunningTotalAmount 单元格中输入金额累计总和。

  2. 在格式树中,选择引用 Excel ReportPageFooter_RunningTotalWeight 单元格的嵌套范围组件,然后执行以下步骤:

    1. 在右侧窗格中的数据源树中,选择 Total.Running.Weight.Collect() 项。
    2. 选择绑定
    3. 选择编辑公式
    4. 将公式更新为 Total.Running.Weight.Sum(false)+Total.Running.Weight.Collect(Total.Page.Weight.Sum(true))

配置绑定以填充页面正在运行的计数器

  1. 格式设计器页上的格式树中,展开报表页面页脚组件,选择引用 Excel ReportPageFooter_RunningCounterLines 单元格的嵌套范围组件。

  2. 选择编辑公式

  3. 添加公式 Total.Running.Lines.Collect(COUNT(Total.Page.Amount.Result))

    注释

    此公式返回整个报表的收集的金额值的数量。 此数字等于当前时刻已经迭代的交易数。 同时,公式将在 Total.Running.Lines 集合中收集返回值。

  1. 格式设计器页上的格式树中,展开报表页面页脚组件,选择引用 Excel ReportPageFooter_PageLines 单元格的嵌套范围组件。

  2. 选择编辑公式

  3. 添加公式 COUNT(Total.Page.Amount.Result)-Total.Running.Lines.Sum(false)

    注释

    此公式将当前页面上的交易数量计算为整个报表的 Total.Page.Amount.Result 中收集的交易数与在此阶段 Total.Running.Lines.Sum 中存储的交易数量之间的差值。 由于当前页面的交易数存储在范围组件绑定中的 Total.Running.Lines 中,该组件引用 Excel ReportPageFooter_RunningCounterLines 单元格,因此当前页面上的交易数尚未包括在内。 因此,此差值等于当前页面上的交易数。

已配置绑定以填充电子报告格式设计器中的页脚计数器。

配置组件可见性

您可以在生成的文档的特定页面上更改页眉和页脚的可见性以隐藏以下元素:

  • 第一个页面的页眉,因为报表页眉已经包含列标题
  • 没有最后一页可能发生的交易的任何页面的页眉
  • 没有最后一页可能发生的交易的任何页面的页脚

要更改可见性,更新报表页面页眉报表页面页脚组件的已启用属性。

  1. 格式设计器页上,在格式树中,展开报表页面组件,选择嵌套报表页面页眉组件,然后按照以下步骤操作:

    1. 已启用字段选择编辑

    2. 公式设计器页面的公式字段中,输入以下表达式:

      AND(
      COUNT(Total.Page.Amount.Result)<>0,
      COUNT(Total.Page.Amount.Result)<>COUNT(model.CommodityRecord)
      )

  2. 在格式树中,选择嵌套报表页面页脚组件,然后按照以下步骤操作:

    1. 已启用字段选择编辑

    2. 公式设计器页面的公式字段中,输入以下表达式:

      (
      COUNT(Total.Page.Amount.Result)-Total.Running.Lines2.Sum(false)+
      0*Total.Running.Lines2.Collect(COUNT(Total.Page.Amount.Result))
      )<>0

    注释

    COUNT(Total.Page.Amount.Result)-Total.Running.Lines2.Sum(false) 结构用于计算当前页面上的交易数量。 0*Total.Running.Lines2.Collect(COUNT(Total.Page.Amount.Result) 结构用于将当前页面上的交易数添加到集合中,以正确处理下一个页面页脚的可见性。

    Total.Running.Lines 集合不能在这里重用,因为基础组件的已启用属性在处理嵌套组件的绑定处理。 当处理已启用属性时,Total.Running.Lines 集合已经增加了当前页面上的交易数。

  3. 选择保存

生成内部统计申报控制报表(已更新)

  1. 请确保您在内部统计页面上有 24 个交易。 重复本文生成内部统计申报控制报表一节中的步骤生成和查看控制报表。

    所有交易都显示在第一个页面上。 页面总计和计数器等于报表总计和计数器。 页面页眉范围将在第一个页面上隐藏,因为报表页眉已经包含列标题。 页面页眉和页脚将在第二个页面上隐藏,因为该页面不包含任何交易。

    桌面应用程序中生成的 Excel 文档。

  2. 通过将物料编号代码从 D00006 更改为 L0010,更新内部统计页面上的两个交易。 请注意,新商品的产品名称有源立体声扬声器对比原始商品的产品名称标准扬声器长。 这种情况会强制在生成的文档的相应单元格中自动换行。 现在必须更新文档分页以及与页面相关的合计和盘点。 重复生成内部统计申报控制报表一节中的步骤生成和查看控制报表。

    现在,交易显示在两个页面上,已正确计算了页面总计和计数器。 页面页眉范围已在第一个页面上正确隐藏,在第二个页面上可见。 页面页脚在两个页面上都可见,因为它们包含交易。

    已更新桌面应用程序中生成的 Excel 文档。

常见问题解答

有什么方法可以识别页面格式组件何时处理最终页面?

页面组件不公开有关已处理页面数和生成的文档中的总页数的信息。 不过,您可以配置电子报告公式来识别最终页面。 下面是一个示例:

  • 使用报表页面组件计算已处理的交易总数。 您可以使用公式 COUNT(Total.Page.Amount.Result) 进行此计算。
  • 根据为报表行组件配置的 model.CommodityRecord 绑定计算必须处理的交易总数。 您可以使用公式 COUNT(model.CommodityRecord) 进行此计算。
  • 比较两个数字来识别最后一个页面。 当两个值相等时,将生成最后一个页面。

注释

我们建议您仅在这一情况下使用此方法:报表行组件的已启用属性不包含可能在运行时为绑定记录列表的一些迭代记录返回 False 的公式。

其他资源