|  08.04.2008, 17:09 | #1 | 
| Участник |  Как получить указатель на отчёт когда пользователь выбрал Печать на принтер в просмотрщике, в форму SysPrintForm? 
			
			Добрый день! Задача такая: есть таблица и отчёт (report) который делается по одной записи. В таблице есть поле printed означающее, что отчёт по этой записи был отпечатан. Я пытаюсь в форме SysPrintForm как-нибудь получить хандлер на отчёт если пользователь нажал Печать в просмотрщике отчётов, а потом в этой же форме на CloseOk - если был выбран принтер - то проапдейтить поле printed. Но проблема в том - что args.caller() - в данном случае - это просто PrintJobSettings и я никак не могу получить никакой завязки на сам отчёт.... В случае если пользователь не просматривает отчёт, а сразу выбирает печать на принтер - то всё ОК - args.caller().runbase() - это класс диалога отчёта, но если печатает из просмотрщика - не могу получить хоть какую завязку на отчёт...  AX30 | 
|  | 
|  09.04.2008, 15:00 | #2 | 
| Участник | 
			
			Не понял вашего вопроса. Зачем вам "завязка на отчёт"? Отчёт служит только для вывода информации! Вам наверное нужно получать позицию курсора на таблице?
		 
				__________________ PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда. | 
|  | 
|  09.04.2008, 15:25 | #3 | 
| MCTS | Цитата: 
		
			Отчёт служит только для вывода информации
		
	 В таком случае класс SysPrintOptions кромсать надо (запоминать RecId соответствующей таблицы и только для этого отчёта), а это не есть карошо. Всё сказанное imo 
				__________________  В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню | 
|  | 
|  09.04.2008, 17:25 | #4 | 
| Участник | 
			
			именно!   А что можно добавить в SysPrintOptions ? этот вроде только апдейтит PrintJobSettings... кстати у printJobSettings - есть метод ReportRun() - но в моём примере - он всегда null когда printjobsettings в sysprintforme. возможное решение - это использовать print archive. прописать этому репорту чтоб автоматически копию в архив и потом смотртеть таблицу printJobHeader - был ли распечатан или нет.... | 
|  | 
|  09.04.2008, 17:51 | #5 | 
| MCTS | Цитата: 
		
			что можно добавить в SysPrintOptions ?
		
	 Решение, правда, кривовастое какое-то выходит. Все эти городушки только из-за того, что после того, как мы отчёт отобразили на экране, связь с report'oм теряется (а теряется ли или нет? кто-нибудь может подтвердить или опровергнуть?) Может ещё у кого-нибудь есть какие-нибудь идеи? 
				__________________  В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню | 
|  | 
|  09.04.2008, 18:07 | #6 | 
| Участник | 
			
			В том то и дело что это всё вызывает системный класс ReportViewer автоматически, и вмешаться в процесс возможно только уже в SysPrintForm, когда в него поступил PrintJobsettings.... А SysPrintOptions?  в какой момент возможно ему подать ReCid - ведь в SysPrintForm - он инициализируется через new только для апдейта полученного PrintJobsettings. | 
|  | 
|  09.04.2008, 18:21 | #7 | 
| MCTS | 
			
			Мне видится так: в первый раз, когда отчёт оправляется на экран мы ещё можем достучаться к отчёту и вытянуть этот RecId. Далее запихиваем RecId в нашу новую переменную printedRecId, например, класса SysPrintOptions. Для этого в классе SysPrintOptions должна быть заведена эта новая переменная, быть прописана в localmacro и должен быть организован parmPrintedRecId() метод. Это (запихивание RecId) можно сделать в init() SysPrintForm. А когда уже печатаем отчёт, то в методе closeOk() X++: .........
    switch (clientSysPrintOptions.parmTarget())
    {
        case PrintMedium::Printer::
              // printedRecId = clientSysPrintOptions.parmPrintedRecId();
              // if(printedRecId) 
              //      markRecId();
        break;
.........Примерно так. 
				__________________  В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню | 
|  | 
|  09.04.2008, 19:13 | #8 | 
| Участник | |
|  | 
|  10.04.2008, 15:12 | #9 | 
| MCTS | Цитата: 
		
			так в SysPrintForm уже нету RecID! SysPrintForm сам не знает какой отчёт он печатает! Он только модифицирует PrintJobSettings!
		
	  Пиханье из init() SysPrintForm переносим в initReportRun() класса sysPrintOptions X++: void initReportRun(ReportRun _reportRun) { container pack; object obj; ; if (_reportRun) { if(_reportRun.report().name() == 'ArtPrice') { obj = _reportRun; info(obj.itemId()); } .......... В этом отчёте организовал метод itemId() X++: ItemId itemId()
{
    return 'blah_blah';
}
				__________________  В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню | 
|  | 
|  16.04.2008, 18:49 | #10 | 
| Участник | Цитата: 
		
			Сообщение от rkorchagin
			   Добрый день! Я пытаюсь в форме SysPrintForm как-нибудь получить хандлер на отчёт если пользователь нажал Печать в просмотрщике отчётов, а потом в этой же форме на CloseOk - если был выбран принтер - то проапдейтить поле printed. Но проблема в том - что args.caller() - в данном случае - это просто PrintJobSettings и я никак не могу получить никакой завязки на сам отчёт.... AX30 printJobSettings.mailSubject("любые текстовые данные"); а потом в форме SysPrintForm их получить типа X++: Object object = args.caller(); if (SysDictClass::isEqualOrSuperclass(classIdGet(object), classNum(PrintJobSettings))) { my_printJobSettings = object; } проверить если my_printJobSettings.mailSubject() = "чемуто" ставить галку зы. имхо это криво но работать должно   
				__________________ aLL woRk aNd nO JoY MAKes jAck a dULL Boy | 
|  | 
|  17.04.2008, 11:59 | #11 | 
| Участник | Цитата: 
		
			вы можете в отчете заполнить какиенибудь данные в PrintJobSettings например  printJobSettings.mailSubject("любые текстовые данные"); а потом в форме SysPrintForm их получить А в общем всё решилось тем что на самом деле клиенту всё равно печатал ли кто отчёт или нет - а просто распечатать через диалог за конкретную дату все репорты и вот уже тем записям, по которым отчёты что печатались через диалог, обновить printed. Спасибо всем! | 
|  |