05.10.2006, 11:19 | #1 |
Участник
|
Вывод отчета в файл в пакетном режиме
Помогите!
Необходимо в пакетном режиме выводить отчет в один и тот же текстовый файл, т.е. обновлять файл. Когда я просто настроил отчет выполняться в пакетном режиме, а в опциях указал вывод в файл 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 |
Участник
|
Ответ прост Код: report.printJobSettings().warnIfFileExists(false); report.report().interactive(false); report.query().interactive(false); Последний раз редактировалось Delfins; 05.10.2006 в 12:14. |
|
05.10.2006, 13:41 | #3 |
Участник
|
У отчета и запроса стоит interactive(false)
report.printJobSettings().warnIfFileExists(false) - не помогло если класс запускать интерактивно, то никаких вопросов не задает и перезаписывает файл, а если в пакетном режиме, то опять спрашивает про перезапись. |
|
05.10.2006, 14:31 | #4 |
Участник
|
Мне помогло вот это:
Код: winapi::deleteFileClient(_fileName); winapi::deleteFile(_fileName); |
|
05.10.2006, 14:39 | #5 |
Member
|
Меня в свое время так учили делать:
this.printJobSettings().warnIfFileExists(false); Это нужно писать в init() в отчете ниже super(). Больше ничего не нужно.
__________________
С уважением, glibs® |
|
06.10.2006, 14:10 | #6 |
Участник
|
Ничего не помогает:
this.printJobSettings().warnIfFileExists(false); в init() не дает эффекта - при интерактивном запуске отчета работает, в пакетном режиме - не работает. если вставить удаление файла в init(), то это тоже не помогает, дело в том что в пакетном режиме init() не выполняется, т.е. он выполняется один раз, когда я запускаю отчет и устанавливаю режим пакетного выполнения. тоже самое происходит, если вызывать отчет из класса - наследника RunBaseReport. Кто знает последовательность выполнения методов Отчета, когда он выполняется в пакетном режиме с повторениями? |
|
06.10.2006, 14:17 | #7 |
Member
|
Отчет вообще принципиально по-разному запускается, если он запускается через унаследованный от RunBase... класс, и если он запускается напрямую через пункт меню, насколько я помню. У вас какой вариант?
__________________
С уважением, glibs® |
|
06.10.2006, 14:35 | #8 |
Участник
|
Я сделал наследника от RunBaseReport, как предлагается в Tutorial_RunbaseReport, для него сделал MenuItem, который собственно и вызываю для настройки пакета.
Но в принципе мне все равано как делать, лишь бы заставить выводится отчет в пакетном режиме с повторениями в один и тот же файл |
|
06.10.2006, 14:50 | #9 |
Member
|
Я надругался немного над отчетом Телефоны клиентов. Работает как в пакетном, так и не в пакетном режиме (молча трет старый файл).
Хм...
__________________
С уважением, glibs® |
|
06.10.2006, 14:52 | #10 |
Участник
|
работает в пакете с повторениями?
что именно вы с ним сделали, я хочу попробовать у себя, может у меня что-то с Аксаптой? |
|
06.10.2006, 15:09 | #11 |
Member
|
Цитата:
Сообщение от Egor_bl
...
работает в пакете с повторениями? ... Я уже все сломал... но повторил надругательство. Два раза Хм... Работает и с повторением. СП5 без ядерных ролапов. Единственный нюанс, я выбрал .pdf... И в третий раз... Три раза Хм... Работает.
__________________
С уважением, glibs® |
|
06.10.2006, 15:23 | #12 |
Участник
|
Взял отчет 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 |
Member
|
Не знаю.
Я, вообще, не сертифицированный разработчик. Может че не так пишу. Единственное, что могу сказать, у меня одна строчка this.printJobSettings().warnIfFileExists(false); Вечером попробую на СП3.
__________________
С уважением, glibs® |
|
06.10.2006, 17:59 | #14 |
Участник
|
glibs, я тоже так думал, пока не запустил на AOS :P
Помогло только удаление файла (deleteFile() + deleteFileClient()) |
|
|
За это сообщение автора поблагодарили: glibs (1). |
06.10.2006, 18:28 | #15 |
Member
|
Ура! Теперь и у меня не работает.
Только не работает глобально. Не только при пакетной обработке, но и при "печати" прямо в клиенте. Забавно. Спасибо за информацию. Одно не понял. Зачем пакетный сервер через трехзвенку запускать? Я до такого не смог додуматься самостоятельно.
__________________
С уважением, glibs® |
|
09.10.2006, 11:08 | #16 |
Участник
|
Конфигурации системы бывают разные... Может у него выделенный сервер...
|
|
09.10.2006, 19:10 | #17 |
Участник
|
Действительно в двухзвенке все работает, а в трехзвенке нет!
Будем считать, что это фича, хотя и не приятная. Всем спасибо, проблему я решил путем запуска пакетного сервера в двухзвенке. |
|