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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.04.2008, 17:09   #1  
rkorchagin is offline
rkorchagin
Участник
 
81 / 69 (3) ++++
Регистрация: 26.09.2006
? Как получить указатель на отчёт когда пользователь выбрал Печать на принтер в просмотрщике, в форму SysPrintForm?
Добрый день!

Задача такая: есть таблица и отчёт (report) который делается по одной записи. В таблице есть поле printed означающее, что отчёт по этой записи был отпечатан.


Я пытаюсь в форме SysPrintForm как-нибудь получить хандлер на отчёт если пользователь нажал Печать в просмотрщике отчётов, а потом в этой же форме на CloseOk - если был выбран принтер - то проапдейтить поле printed. Но проблема в том - что args.caller() - в данном случае - это просто PrintJobSettings и я никак не могу получить никакой завязки на сам отчёт....


В случае если пользователь не просматривает отчёт, а сразу выбирает печать на принтер - то всё ОК - args.caller().runbase() - это класс диалога отчёта, но если печатает из просмотрщика - не могу получить хоть какую завязку на отчёт...



AX30
Старый 09.04.2008, 15:00   #2  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Цитата:
Сообщение от rkorchagin Посмотреть сообщение
Добрый день!
и я никак не могу получить никакой завязки на сам отчёт....
Не понял вашего вопроса. Зачем вам "завязка на отчёт"? Отчёт служит только для вывода информации! Вам наверное нужно получать позицию курсора на таблице?
Старый 09.04.2008, 15:25   #3  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Цитата:
Отчёт служит только для вывода информации
Просто человеку надо не только распечатать строку, но и промаркировать её.

В таком случае класс SysPrintOptions кромсать надо (запоминать RecId соответствующей таблицы и только для этого отчёта), а это не есть карошо.

Всё сказанное imo
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 09.04.2008, 17:25   #4  
rkorchagin is offline
rkorchagin
Участник
 
81 / 69 (3) ++++
Регистрация: 26.09.2006
Цитата:
Сообщение от Russland Посмотреть сообщение
надо не только распечатать строку, но и промаркировать её.
именно!
А что можно добавить в SysPrintOptions ?
этот вроде только апдейтит PrintJobSettings...

кстати у printJobSettings - есть метод ReportRun() - но в моём примере - он всегда null когда printjobsettings в sysprintforme.


возможное решение - это использовать print archive. прописать этому репорту чтоб автоматически копию в архив и потом смотртеть таблицу printJobHeader - был ли распечатан или нет....
Старый 09.04.2008, 17:51   #5  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Цитата:
что можно добавить в SysPrintOptions ?
я имел в виду следующее: раз форма SysPrintForm тесно общается с SysPrintOptions добавить ещё пару своих переменных (имя отчёта и RecId строки) и уже в SysPrintForm проверять этот ли отчёт, и если этот - маркировать необходимую строку.

Решение, правда, кривовастое какое-то выходит.
Все эти городушки только из-за того, что после того, как мы отчёт отобразили на экране, связь с report'oм теряется (а теряется ли или нет? кто-нибудь может подтвердить или опровергнуть?)

Может ещё у кого-нибудь есть какие-нибудь идеи?
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 09.04.2008, 18:07   #6  
rkorchagin is offline
rkorchagin
Участник
 
81 / 69 (3) ++++
Регистрация: 26.09.2006
В том то и дело что это всё вызывает системный класс ReportViewer автоматически, и вмешаться в процесс возможно только уже в SysPrintForm, когда в него поступил PrintJobsettings.... А SysPrintOptions?

в какой момент возможно ему подать ReCid - ведь в SysPrintForm - он инициализируется через new только для апдейта полученного PrintJobsettings.
Старый 09.04.2008, 18:21   #7  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Мне видится так:
в первый раз, когда отчёт оправляется на экран мы ещё можем достучаться к отчёту и вытянуть этот 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  
rkorchagin is offline
rkorchagin
Участник
 
81 / 69 (3) ++++
Регистрация: 26.09.2006
Цитата:
Сообщение от Russland Посмотреть сообщение
Это (запихивание RecId) можно сделать в init() SysPrintForm.
так в SysPrintForm уже нету RecID! SysPrintForm сам не знает какой отчёт он печатает! Он только модифицирует PrintJobSettings!
Старый 10.04.2008, 15:12   #9  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Цитата:
так в 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());
        }
..........
В этом случае я терзал отчёт ArtPrice.
В этом отчёте организовал метод itemId()
X++:
ItemId itemId()
{
    return 'blah_blah';
}
На самом деле itemId() должен возвращать желанный RecId
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 16.04.2008, 18:49   #10  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
Цитата:
Сообщение от rkorchagin Посмотреть сообщение
Добрый день!
Я пытаюсь в форме SysPrintForm как-нибудь получить хандлер на отчёт если пользователь нажал Печать в просмотрщике отчётов, а потом в этой же форме на CloseOk - если был выбран принтер - то проапдейтить поле printed. Но проблема в том - что args.caller() - в данном случае - это просто PrintJobSettings и я никак не могу получить никакой завязки на сам отчёт....
AX30
вы можете в отчете заполнить какиенибудь данные в PrintJobSettings например
printJobSettings.mailSubject("любые текстовые данные");
а потом в форме SysPrintForm их получить типа
X++:
Object object = args.caller();

if (SysDictClass::isEqualOrSuperclass(classIdGet(object), classNum(PrintJobSettings)))
        {
            my_printJobSettings = object;
        }
а потом на скажем на closeok()
проверить
если my_printJobSettings.mailSubject() = "чемуто" ставить галку

зы. имхо это криво но работать должно
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy
Старый 17.04.2008, 11:59   #11  
rkorchagin is offline
rkorchagin
Участник
 
81 / 69 (3) ++++
Регистрация: 26.09.2006
Цитата:
вы можете в отчете заполнить какиенибудь данные в PrintJobSettings например
printJobSettings.mailSubject("любые текстовые данные");
а потом в форме SysPrintForm их получить
Кстати да! Я тоже думал как добавить чтото своё в PrintJobSettings - но не догадался использовать существующие методы.

А в общем всё решилось тем что на самом деле клиенту всё равно печатал ли кто отчёт или нет - а просто распечатать через диалог за конкретную дату все репорты и вот уже тем записям, по которым отчёты что печатались через диалог, обновить printed.

Спасибо всем!
Теги
ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как получить указатель на объект? ivas DAX: Программирование 14 28.04.2006 14:02
Отчет. Печать итоговых сумм. ATimTim DAX: Программирование 5 25.11.2004 12:51
Печать нескольких отгрузочных накладных через форму Регистрация отгрузочных накладных Pegiy DAX: Функционал 1 22.09.2004 10:17
Как получить ссылку на активную форму? Alks DAX: Программирование 2 06.08.2004 14:18
Уже существующий query подложить под форму или отчет? somebody DAX: База знаний и проекты 6 27.05.2003 15:13
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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