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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.10.2006, 11:19   #1  
Egor_bl is offline
Egor_bl
Участник
 
10 / 10 (1) +
Регистрация: 05.10.2006
Вывод отчета в файл в пакетном режиме
Помогите!

Необходимо в пакетном режиме выводить отчет в один и тот же текстовый файл, т.е. обновлять файл.

Когда я просто настроил отчет выполняться в пакетном режиме, а в опциях указал вывод в файл ASCII, то при выполнении пакета выскакивает диалог с впросом "Файл существует. Перезаписать?", соответсвенно пакетный сервер стоит и ждет ответа.

Когда в отчете в методе print() перед super() поставил WinAPI::deleteFile(_fileName), то при ручном запуске отчета файл удаляется и отчет создает новый файл, а в пакетном режиме все равно задает впрос о перезаписи файла.

На форуме были рекмендации запускать отчет из класса и с помощью printJobSettings задавать имя файла. Я сделал класс наследник от RunBaseBatch, который выполняет код:
Код:
    ReportRun       report;
    Args            _args;
    FileName        _fileName;
;
   _fileName = strfmt('%1%2.txt',WinAPI::getTempPath(),timeNow());
// _fileName = 'c:\\temp\\test.txt';
 
    _args  = new Args(ReportStr(MyPriceListTXT));
    report = ClassFactory.reportRunClass(_args);
 
    report.printJobSettings().setTarget(PrintMedium::File);
    report.printJobSettings().format(PrintFormat::ASCII);
    report.printJobSettings().fileName(_fileName);
 
    report.run();
В этом случае совсем "шайтан" получается:
если файл существует, то в пакетном режиме отчет все равно спрашивает о перезаписи, а если не существует (имя файла формируется автоматически), то в пакетном режиме выдается ошибка "Ошибка открытия файла ... . Файл не найден" ... бред какой-то.

Чего я не так делаю?
Может кто посоветует как мне решить проблему периодического обновления файла-отчета?

(Ax3.0 SP4)
Старый 05.10.2006, 12:02   #2  
Delfins is offline
Delfins
Участник
 
320 / 39 (2) +++
Регистрация: 20.09.2005
Адрес: Riga, Latvia
Лень проверять, может отчёту поставить Interactive=false?

Ответ прост
Код:
    report.printJobSettings().warnIfFileExists(false);
    report.report().interactive(false);
    report.query().interactive(false);

Последний раз редактировалось Delfins; 05.10.2006 в 12:14.
Старый 05.10.2006, 13:41   #3  
Egor_bl is offline
Egor_bl
Участник
 
10 / 10 (1) +
Регистрация: 05.10.2006
У отчета и запроса стоит interactive(false)

report.printJobSettings().warnIfFileExists(false) - не помогло
если класс запускать интерактивно, то никаких вопросов не задает и перезаписывает файл, а если в пакетном режиме, то опять спрашивает про перезапись.
Старый 05.10.2006, 14:31   #4  
Delfins is offline
Delfins
Участник
 
320 / 39 (2) +++
Регистрация: 20.09.2005
Адрес: Riga, Latvia
Мне помогло вот это:

Код:
    winapi::deleteFileClient(_fileName);
    winapi::deleteFile(_fileName);
PS: это перед запуском отчёта
Старый 05.10.2006, 14:39   #5  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Меня в свое время так учили делать:

this.printJobSettings().warnIfFileExists(false);

Это нужно писать в init() в отчете ниже super().

Больше ничего не нужно.
__________________
С уважением,
glibs®
Старый 06.10.2006, 14:10   #6  
Egor_bl is offline
Egor_bl
Участник
 
10 / 10 (1) +
Регистрация: 05.10.2006
Ничего не помогает:

this.printJobSettings().warnIfFileExists(false); в init() не дает эффекта - при интерактивном запуске отчета работает, в пакетном режиме - не работает.

если вставить удаление файла в init(), то это тоже не помогает, дело в том что в пакетном режиме init() не выполняется, т.е. он выполняется один раз, когда я запускаю отчет и устанавливаю режим пакетного выполнения.

тоже самое происходит, если вызывать отчет из класса - наследника RunBaseReport.

Кто знает последовательность выполнения методов Отчета, когда он выполняется в пакетном режиме с повторениями?
Старый 06.10.2006, 14:17   #7  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Отчет вообще принципиально по-разному запускается, если он запускается через унаследованный от RunBase... класс, и если он запускается напрямую через пункт меню, насколько я помню. У вас какой вариант?
__________________
С уважением,
glibs®
Старый 06.10.2006, 14:35   #8  
Egor_bl is offline
Egor_bl
Участник
 
10 / 10 (1) +
Регистрация: 05.10.2006
Я сделал наследника от RunBaseReport, как предлагается в Tutorial_RunbaseReport, для него сделал MenuItem, который собственно и вызываю для настройки пакета.

Но в принципе мне все равано как делать, лишь бы заставить выводится отчет в пакетном режиме с повторениями в один и тот же файл
Старый 06.10.2006, 14:50   #9  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Я надругался немного над отчетом Телефоны клиентов. Работает как в пакетном, так и не в пакетном режиме (молча трет старый файл).

Хм...
__________________
С уважением,
glibs®
Старый 06.10.2006, 14:52   #10  
Egor_bl is offline
Egor_bl
Участник
 
10 / 10 (1) +
Регистрация: 05.10.2006
работает в пакете с повторениями?

что именно вы с ним сделали, я хочу попробовать у себя, может у меня что-то с Аксаптой?
Старый 06.10.2006, 15:09   #11  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Цитата:
Сообщение от Egor_bl
...
работает в пакете с повторениями?
...
Слона то я и не заметил...

Я уже все сломал... но повторил надругательство.

Два раза Хм...

Работает и с повторением. СП5 без ядерных ролапов.

Единственный нюанс, я выбрал .pdf...

И в третий раз...

Три раза Хм...

Работает.
__________________
С уважением,
glibs®
Старый 06.10.2006, 15:23   #12  
Egor_bl is offline
Egor_bl
Участник
 
10 / 10 (1) +
Регистрация: 05.10.2006
Взял отчет CustPhoneList, добавил метод
public void init()
{
FileName fileName;
;
super();
fileName = 'c:\\temp\\test.pdf';
this.printJobSettings().warnIfFileExists(false);

this.printJobSettings().setTarget(PrintMedium::File);
this.printJobSettings().format(PrintFormat::PDF);
this.printJobSettings().fileName(fileName);
info('Init report');
}

Запускаю отчет из меню (без пакетов), а он спрашивает "Перезаписать test.pdf"

Это что получается - проблема с Аксапты которая решается SP5?
(у меня стоит SP4 )
Старый 06.10.2006, 16:38   #13  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Не знаю.

Я, вообще, не сертифицированный разработчик. Может че не так пишу.

Единственное, что могу сказать, у меня одна строчка

this.printJobSettings().warnIfFileExists(false);

Вечером попробую на СП3.
__________________
С уважением,
glibs®
Старый 06.10.2006, 17:59   #14  
Delfins is offline
Delfins
Участник
 
320 / 39 (2) +++
Регистрация: 20.09.2005
Адрес: Riga, Latvia
glibs, я тоже так думал, пока не запустил на AOS :P
Помогло только удаление файла (deleteFile() + deleteFileClient())
За это сообщение автора поблагодарили: glibs (1).
Старый 06.10.2006, 18:28   #15  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Ура! Теперь и у меня не работает.

Только не работает глобально. Не только при пакетной обработке, но и при "печати" прямо в клиенте.

Забавно. Спасибо за информацию.

Одно не понял. Зачем пакетный сервер через трехзвенку запускать? Я до такого не смог додуматься самостоятельно.
__________________
С уважением,
glibs®
Старый 09.10.2006, 11:08   #16  
Delfins is offline
Delfins
Участник
 
320 / 39 (2) +++
Регистрация: 20.09.2005
Адрес: Riga, Latvia
Конфигурации системы бывают разные... Может у него выделенный сервер...
Старый 09.10.2006, 19:10   #17  
Egor_bl is offline
Egor_bl
Участник
 
10 / 10 (1) +
Регистрация: 05.10.2006
Действительно в двухзвенке все работает, а в трехзвенке нет!
Будем считать, что это фича, хотя и не приятная.

Всем спасибо, проблему я решил путем запуска пакетного сервера в двухзвенке.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
клиент аксапты в пакетном режиме как кластерное приложение Almar DAX: Администрирование 5 27.03.2008 07:24
Экспорт / сохранение отчета в ASCII файл valentino DAX: Программирование 7 18.02.2008 11:57
Вывод отчета в WORD ea DAX: Программирование 15 10.01.2008 13:19
Проблема с записью отчета в файл st_msav DAX: Программирование 2 19.01.2006 13:02
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

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