2013-10-24 8 views
1

У меня есть отчет в Microsoft Dynamics для печати настраиваемых меток.Запуск отчета с передачей количества страниц для печати и некоторых значений

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

Теперь, что я хочу архив, если у меня есть заказ на покупку, я хочу Klick Somwhere и Navision должны сделать что-то вроде этого:

отчет беги «50070» с пунктом «10001» 6 копий наклейка; запустите отчет «50070» с номером «10020» 3 копии этикетки;

и так далее.

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

Обзор DataItems

Доклад:

"Пункт" -> Record :: Пункт

Следующий код из пункта - 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:\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); 

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

ответ

2

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

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

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

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

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^