Запуск отчета с передачей количества страниц для печати и некоторых значений

У меня есть отчет в Microsoft Dynamics для печати настроенных этикеток.

Сам отчет имеет один DataItem из таблицы элементов. Если вы запускаете отчет, вы можете ввести номер позиции, и он напечатает этикетку на выбранном термопринтере.

Теперь я хочу заархивировать, если у меня есть заказ на покупку, я хочу щелкнуть где-нибудь, и navision должна сделать что-то вроде этого:

запустить отчет "50070" с позицией "10001" 6 копий этикетки; запустить отчет "50070" с позиции "10020" 3 копии этикетки;

и так далее.

Я не нашел много об этой теме. Я пытался сделать это с помощью цикла копирования, как упоминалось в некоторых постах, но это не совсем так, как я хотел.

обзор

DataItems отчета:

"Item" -> Запись::Item

Следующий код из Item - OnAfterGetRecord() - Триггер

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:\Labelprinting\dd\75x75\sw_for75x75.bmp') THEN
    TT.BLOBImport(BLOBRef, 'N:\Labelprinting\dd\75x75\sw_for75x75.bmp', FALSE);
END ELSE IF intLogoOption = 3 THEN BEGIN
  IF EXISTS ('N:\Labelprinting\ex\75x75\sw_for75x75.png') THEN
    TT.BLOBImport(BLOBRef, 'N:\Labelprinting\ex\75x75\sw_for75x75.png', FALSE);
END;

CALCFIELDS(Item.Picture);

Моя цель состоит в том, чтобы пользователь мог щелкнуть один раз и выбрать принтер один раз, и все этикетки были напечатаны правильно

1 ответ

Решение

Вы должны сделать копию своего отчета со следующими данными:

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

Введите код, чтобы распечатать одну наклейку в Integer DataItem. Это будет выполнено несколько раз. Фильтр Sales Header с номером вашего заказа. Ссылка на сайт Sales Line в заголовок продаж, поэтому отчет будет проходить через все ваши товары.

Поместите следующий код на Sales line - OnAfterGetRecord:

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

Поместите элемент фильтрации в Integer - OnPreDataItem

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

Он запустит наклейку для печати столько раз, сколько у вас есть в вашем заказе для каждой строки. Это также позволит вам печатать стикеры для множества заказов.

Другие вопросы по тегам