| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Добрый день! 
		
		
		
		
		
		
		
	Задача такая: есть таблица и отчёт (report) который делается по одной записи. В таблице есть поле printed означающее, что отчёт по этой записи был отпечатан. Я пытаюсь в форме SysPrintForm как-нибудь получить хандлер на отчёт если пользователь нажал Печать в просмотрщике отчётов, а потом в этой же форме на CloseOk - если был выбран принтер - то проапдейтить поле printed. Но проблема в том - что args.caller() - в данном случае - это просто PrintJobSettings и я никак не могу получить никакой завязки на сам отчёт.... В случае если пользователь не просматривает отчёт, а сразу выбирает печать на принтер - то всё ОК - args.caller().runbase() - это класс диалога отчёта, но если печатает из просмотрщика - не могу получить хоть какую завязку на отчёт... ![]() AX30  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не понял вашего вопроса. Зачем вам "завязка на отчёт"? Отчёт служит только для вывода информации! Вам наверное нужно получать позицию курсора на таблице?
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда.  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Отчёт служит только для вывода информации
		
	 
В таком случае класс SysPrintOptions кромсать надо (запоминать RecId соответствующей таблицы и только для этого отчёта), а это не есть карошо. Всё сказанное imo 
				__________________ 
		
		
		
		
	![]() В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			именно!   
		
		
		
		
		
		
		
	А что можно добавить в SysPrintOptions ? этот вроде только апдейтит PrintJobSettings... кстати у printJobSettings - есть метод ReportRun() - но в моём примере - он всегда null когда printjobsettings в sysprintforme. возможное решение - это использовать print archive. прописать этому репорту чтоб автоматически копию в архив и потом смотртеть таблицу printJobHeader - был ли распечатан или нет....  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			что можно добавить в SysPrintOptions ?
		
	 
Решение, правда, кривовастое какое-то выходит. Все эти городушки только из-за того, что после того, как мы отчёт отобразили на экране, связь с report'oм теряется (а теряется ли или нет? кто-нибудь может подтвердить или опровергнуть?) Может ещё у кого-нибудь есть какие-нибудь идеи? 
				__________________ 
		
		
		
		
	![]() В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В том то и дело что это всё вызывает системный класс ReportViewer автоматически, и вмешаться в процесс возможно только уже в SysPrintForm, когда в него поступил PrintJobsettings.... А SysPrintOptions?  
		
		
		
		
		
		
		
	в какой момент возможно ему подать ReCid - ведь в SysPrintForm - он инициализируется через new только для апдейта полученного PrintJobsettings.  | 
| 
	
 | 
| 
			
			 | 
		#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;
.........Примерно так. 
				__________________ 
		
		
		
		
	![]() В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#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';
}
				__________________ 
		
		
		
		
	![]() В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню  | 
| 
	
 | 
| 
			
			 | 
		#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  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			вы можете в отчете заполнить какиенибудь данные в PrintJobSettings например  
printJobSettings.mailSubject("любые текстовые данные"); а потом в форме SysPrintForm их получить А в общем всё решилось тем что на самом деле клиенту всё равно печатал ли кто отчёт или нет - а просто распечатать через диалог за конкретную дату все репорты и вот уже тем записям, по которым отчёты что печатались через диалог, обновить printed. Спасибо всем!  | 
| 
	
 |