如何获得打印报告的打印机

How to get printer where report was printed

如果在报告中使用 PROMPT calsue

REPORT FORM xxx to PRINT PROMPT

用户可以select打印机打印报告。 如何获取此打印机名称以进行记录?

https://support.microsoft.com/en-us/help/162798/how-to-use-the-set-printer-to-name-command-to-print-to-a-specified-printer-in-visual-foxpro

为此使用 GetPrinter() 很热门。这需要从 REPORT

中删除 PROMPT 子句

如何使用 PROMPT 子句获取打印报告的打印机: 报告表格 xxx 打印提示

如果可能的话,也许有一些 sys() 函数或其他函数,或者是否有可能在报告打印期间获取打印机名称?

或者该命令是否应该重构为不使用 PROMPT 子句,例如:

cPrinter = getprinter()
set printer to name (cPrinter)
REPORT FORM xxx TO PRINT
insert into logfile (PrinterUsedForPrinting) values (cPrinter)

我建议使用您在 运行 生成报告之前调用 GETPRINTER 的解决方案(没有 PROMPT 子句)。在我使用 FoxPro/VFP 的长期经验中,我不认为我遇到过通过 REPORT FORM...PROMPT 确定打印机的方法。

这是一个您可能会觉得有用的包装函数示例。我通常会在 运行 报告之前致电 "PickPrinter"。如果 PickPrinter returns 为空字符串,我将中止报告 运行。

FUNCTION PickPrinter
    IF APRINTERS(a_printers) < 1
        MESSAGEBOX("No printers defined.")
        RETURN ""
    ELSE
        lcPrnChoice = ""
        lcPrnChoice = GETPRINTER()
        IF EMPTY(lcPrnChoice)
            RETURN ""
        ELSE
            *** Include quotes around the printer name
            *** in case there are spaces in the name
            lcPrnChoice = "NAME [" + lcPrnChoice + "]"
            SET PRINTER TO &lcPrnChoice

            RETURN lcPrnChoice
        ENDIF
    ENDIF
ENDFUNC