|  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 | 
| Участник | 
			
			Действительно в двухзвенке все работает, а в трехзвенке нет!  Будем считать, что это фича, хотя и не приятная. Всем спасибо, проблему я решил путем запуска пакетного сервера в двухзвенке. | 
|  |