AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.08.2006, 11:08   #1  
MaxAR is offline
MaxAR
Участник
 
22 / 10 (1) +
Регистрация: 23.03.2006
Подскажите, как получить из таблицы Printer имя принтера, который выбран для печати документов. Документы печатаются из Navision.
Старый 17.08.2006, 11:41   #2  
randrews is offline
randrews
Участник
Аватар для randrews
 
312 / 10 (1) +
Регистрация: 06.12.2004
Если пользователь вручную выбрал принтер, то внутри отчета никак (я тоже задавался этим вопросом на разных форумах - никто не ответил).

Если же имеется ввиду имя принтера, который полагается для отчета, с учетом таблицы "Выбор Принтера" (Printer Selections), то примерно

PrName := ApplicationManagement.FindPrinter(50173);
IF Printer.GET(PrName) THEN
RESULT := Printer.Name
ELSE
{В этом месте интересно самому - как определить принтер по умолчанию. Мои методы работают, но кривые, стыдно показывать - например через automation Word выяснить ActivePrinter}
Старый 17.08.2006, 12:05   #3  
MaxAR is offline
MaxAR
Участник
 
22 / 10 (1) +
Регистрация: 23.03.2006
Функцию FindPrinter я использовал. Но проблема следующая: у нас много пользователей, которые сидят системе через терминальный сервер. В таблице Printer Selection необходимо указать имя и очередь спула для конкретного юзера, причем настройка выполняется удаленно. В этом случае у каждого пользователя на один и тот же сетевой принтер установлена своя очередь спула, поэтому при запуске на печать нужно для каждого пользователя программно определять имя принтера и установленную для него очередь спула.
Старый 29.08.2007, 16:50   #4  
TAM is offline
TAM
Участник
 
30 / 10 (1) +
Регистрация: 15.06.2007
Привет!
А может кто знает?
Как программно отправить отчет на печать на желаемый принтер, указав имя принтера, к примеру?
Старый 16.06.2009, 12:43   #5  
Ros is offline
Ros
Участник
 
36 / 10 (1) +
Регистрация: 05.10.2007
Цитата:
Сообщение от TAM Посмотреть сообщение
Привет!
А может кто знает?
Как программно отправить отчет на печать на желаемый принтер, указав имя принтера, к примеру?
Присоединюсь к вопросу.
Старый 16.06.2009, 15:38   #6  
VProk is offline
VProk
Участник
 
25 / 10 (1) +
Регистрация: 07.03.2007
"Таблица Выбор Принтера
Список полей в таблице


При печати счетов, кредит нот и т.д. важно правильно выбрать принтер. Для управления этим процессом используйте таблицу Выбор Принтера. В этой таблице определённые принтеры назначены определённым пользователям и/или отчётам, так что, например, отчёт Счёт всегда печатается на принтере X. Можно также определить, что, например, только пользователь Y всегда печатает кредит ноты на принтере X.

После установки связей между пользователями, принтерами и отчётами программа будет автоматически использовать эту информацию для направления будущих распечаток.

Для того, чтобы войти в таблицу Выбор Принтера, выберите Главное Меню, затем Финансы, Настройка, Выбор Принтера."


А вообще поиск принтера осуществляется в FindPrinter() CU 1 при запуске отчета, если ProcessingOnly = Да. В качестве параметра передается ReportID. При желании можно передавать еще и имя принтера, но не вижу смысла. Достаточно в табл. Printer Selection прописать номер отчета и имя принтера, о чем и шла речь выше.
Старый 17.06.2009, 10:33   #7  
Ros is offline
Ros
Участник
 
36 / 10 (1) +
Регистрация: 05.10.2007
Цитата:
Сообщение от VProk Посмотреть сообщение
А вообще поиск принтера осуществляется в FindPrinter() CU 1 при запуске отчета, если ProcessingOnly = Да. В качестве параметра передается ReportID. При желании можно передавать еще и имя принтера, но не вижу смысла. Достаточно в табл. Printer Selection прописать номер отчета и имя принтера, о чем и шла речь выше.
Спасибо за ответ. Я хотел при разных параметрах вызова отчета, использовать разные принтеры. Видимо придется дорабатывать функцию, ибо дублировать отчеты дорого.
Старый 17.06.2009, 16:53   #8  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
есть 2 варианта: первый и второй

первый:
1. перед печатью подменяем принтер в 78-й таблице
2. печатаем
3. восстанавливаем настройку

выглядит так
1.
IF _PrinterSelection.GET(USERID,0) THEN BEGIN
_OldPrinter := _PrinterSelection."Printer Name";
_PrinterSelection."Printer Name" := Васья;
_PrinterSelection.MODIFY();
END ELSE BEGIN
_PrinterSelection.INIT();
_PrinterSelection."User ID" := USERID;
_PrinterSelection."Report ID" := 0;
_PrinterSelection."Printer Name" := Васья;
_PrinterSelection.INSERT();
END;

2. Report.print!!!

3.
_PrinterSelection.GET(USERID,0);
IF _OldPrinter <> '' THEN BEGIN
_PrinterSelection."Printer Name" := _OldPrinter;
_PrinterSelection.MODIFY();
END ELSE
_PrinterSelection.DELETE();
_____________________________________________________________

второй:
создаем юнит NewCU со свойством SingleInstanse Трю:
там пишем:
SetPrinter(_PrinterName : Text[250])
PrinterName := _PrinterName;
и
GetPrinter() : Text[250]
EXIT(PrinterName);


дорабатываем 1 кю FindPrinter

IF NewCU.GetPrinter <> '' THEN
EXIT(NewCU.GetPrinter);

при запуске отчета из любой ф-ции делаем так:
1. NewCU.SetPrinter(Васья)
2. Report.print!!!
3. NewCU.SetPrinter('')
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:20.