运行报表,传递要打印的页数和一些值



我在Microsoft Dynamics中有一个用于打印自定义标签的报告。

报表本身具有"项"表中的一个数据项。如果运行报表,则可以键入项目编号,它将在选定的热敏打印机上打印标签。

现在,我要存档的是,如果我有一个采购订单,我想轻舔 somwhere,navision 应该做这样的事情:

运行带有项目"10001"的报告"50070"6份标签副本;运行带有项目"10020"的报告"50070",标签的 3 份副本;

等等。

我没有找到太多关于这个话题的信息。我尝试使用一些帖子中提到的复制循环来做到这一点,但这并没有完全按照我想要的方式工作。

概述

报表数据项:

"项目" -> 记录::项目

以下代码来自 Item - OnAfterGetRecord() - Trigger

RecordNo := RecordNo + 1;
ColumnNo := ColumnNo + 1;
ItData[ColumnNo][1] := FORMAT("No.");
ItData[ColumnNo][2] := FORMAT(Description);
ItData[ColumnNo][3] := FORMAT(Var1);
ItData[ColumnNo][4] := FORMAT(Var2);
ItData[ColumnNo][5] := FORMAT("Unit Price");
ItData[ColumnNo][5] := FORMAT("Unit Price" * 1.19);

// finding own barcode first, if no own barcode found, take 
// the one you can get
barcodeStr := '';
recBarcode.SETFILTER("Item No.", "No.");
recBarcode.SETFILTER("Barcode No.", '99916*');
IF recBarcode.FINDFIRST THEN BEGIN
  barcodeStr := recBarcode."Barcode No.";
END ELSE BEGIN
  recBarcode.RESET;
  recBarcode.SETRANGE("Item No.", "No.");
  IF recBarcode.FINDFIRST THEN BEGIN
    barcodeStr := recBarcode."Barcode No.";
  END;
END;

// ask user, if to printing barcode is not a company own
// barcode, and let him decide if he whishes to print anyway
IF STRLEN(barcodeStr) = 13 THEN BEGIN
  IF (COPYSTR(barcodeStr, 1, 5) <> '99916') THEN BEGIN
    IF NOT CONFIRM('This item has NO company own barcode. Do you whish to print it anyway?', FALSE) THEN
      EXIT;
  END;
  // format the barcode-string to a format, that the barcode font
  // can understand and printing it properly for reading with a scanner
  EAN13 := DADA.GetPrintTextEAN13(barcodeStr);
END;
COMPRESSARRAY(ItData[ColumnNo]);
IF RecordNo = NoOfRecords THEN BEGIN
  FOR i := ColumnNo + 1 TO NoOfColumns DO
    CLEAR(Addr[i]);
  ColumnNo := 0;
END ELSE BEGIN
  IF ColumnNo = NoOfColumns THEN
    ColumnNo := 0;
END;

// finding a suiting logo for the barcode, user can choose between none, dd or ex
IF intLogoOption = 2 THEN BEGIN
  IF EXISTS ('N:Labelprintingdd75x75sw_for75x75.bmp') THEN
    TT.BLOBImport(BLOBRef, 'N:Labelprintingdd75x75sw_for75x75.bmp', FALSE);
END ELSE IF intLogoOption = 3 THEN BEGIN
  IF EXISTS ('N:Labelprintingex75x75sw_for75x75.png') THEN
    TT.BLOBImport(BLOBRef, 'N:Labelprintingex75x75sw_for75x75.png', FALSE);
END;
CALCFIELDS(Item.Picture);

我的目标是,用户可以单击一次并选择打印机一次,并且所有标签都能正确打印

应使用以下数据项创建报表副本:

Sales Header
--Sales Line
----Integer
------Item  

将您的代码打印一个贴纸到Integer数据项中。它将被执行多次。用您的订单号过滤Sales HeaderSales Line链接到销售标题,因此报告将贯穿您的所有项目。

将以下代码放在Sales line - OnAfterGetRecord上:

Integer.setrange("Number",1,"Sales Line"."Quantity");

将项目筛选放入Integer - OnPreDataItem

Item.setrange("No.", "Sales Line"."Item No.");

它将启动贴纸打印,其数量是您订单中每行商品数量的次数。这也将允许您为一堆订单打印贴纸。

最新更新