康虎云报表根据表中字段动态打印份数

admin 2020-12-22 30458

今天有一个用户提出一个需求:

根据产品入库单打印产品标签,以粘贴在产品上。由于入库的产品数量、包装情况都不相同,所以需要打印多少个标签也不是确定的,需要操作员根据实际情况录入打印份数,然后再打印出来。


这个需求要打印的产品标签格式不复杂,难点在于如何根据表中一个字段值来设置动态打印多份。

产品标签如下:

预览效果如下:



用脚本来实现动态打印份数的问题:

第一步:

选中明细表 DetailData1 ,在左侧事件框中找到 OnAfterPrint事件,双击生成事件函数:


第二步:

选中页脚 PageFooter1,在OnAfterPrint事件中双击生成事件函数



第三步:

在代码编辑窗口中,输入代码如下:



最后,预览一下效果:



完整的代码如下:

var
  _count : Integer = -1;     //用以记录剩余应打份数的计数器

procedure DetailData1OnAfterPrint(Sender: TfrxComponent);
begin
  if _count = -1 then _count := <stock_move_line."printcopies"> - 1;  //把打印份数字段中的值赋给计数器
end;

procedure ColumnFooter1OnAfterPrint(Sender: TfrxComponent);
begin
  _count := _count - 1;               //每打印一页,计数器减一
  if _count >= 0 then                 //如果计数器值大于1,则表示还需要打印当前产品的记录
  begin
    if MasterData1.DataSet.Eof then   //如果主表已经到记录尾,则表示主表已打印完,报表引擎不会再打印内容,则需要手工设置显示
    begin
      Engine.NewPage();                                             
      DetailData1.StartNewPage := False;  //设置从表不开始新页,否则从表记录会与表头分在两页
      Engine.Showband(GroupHeader1);      //以下是手工显示报表各部分
      Engine.Showband(MasterData1);
      Engine.Showband(Header1);
      Engine.Showband(DetailData1);
    end
    else
    begin
      DetailData1.DataSet.Prior();      //如果不是记录尾,则只需把从表记录指针前移一下即可实现重复打印
    end;
  end;  
end;

//以下三行不可少!!!
begin

end.


完整的模板在附件中


上传的附件:
最新回复 (2)
  • qxwo 2022-11-12
    引用 2
    怎么改成出库的呢,出库是空白,入库可以打出来
  • qxwo 2022-11-13
    引用 3

    入库只有已完成状态的可以打印,

    就绪状态,打印时空白

    出库就绪状态和已完成状态打印都是空白

    如果需要出库就绪状态能打印出待出库的商品,应该修改哪里呢?

    打印这里面的

    数据表不是调拨?

返回