Имя: Пароль:
1C
1С v8
Создание многостраничного файла Excel фоновым заданием
0 lalex23
 
23.12.15
16:58
Задача: формировать отчёты по расписанию и рассылать юзерам, отчётов несколько - требуется собрать в один файл, каждый отчёт отдельным листом.
Среда: ОС Win 2012 R2 Std, Excel 2007 12.0.6611.1000 x32, Сервер 1С-х64 8.2.19.76 стартует от выделеного пользователя Usr1Cv82
Что работает: регламентное задание формирует отчёты, сохраняет табличные документы в формате xlsx, COM объект Excel на сервере создаётся, свободно открывает все эти файлы (проверял)
Что не работает: как только наступает момент Excel.WorkBooks.Add() - получаю ошибку:
Ошибка при вызове метода контекста (Add): Произошла исключительная ситуация (Microsoft Office Excel): Microsoft Office Excel не может открыть или сохранить документы из-за нехватки памяти или места на диске.
• Чтобы освободить память, закройте ненужные программы или книги.
• Чтобы освободить место на диске, удалите с этого диска ненужные файлы.

Код рабочий - на клиенте отрабатывает без проблем.
            Excel = Новый COMОбъект("Excel.Application");
            Excel.DisplayAlerts = False;
            Excel.Visible = False;
            NewBook = Excel.WorkBooks.Add();
            
            Для Сч = 0 По МассивФайлов.Количество() - 1 Цикл
                CurrentFile = Excel.WorkBooks.Open(МассивФайлов[Сч].Файл);
                CurrentFile.Sheets(1).Name = МассивФайлов[Сч].Наименование;
                CurrentFile.Sheets(1).Copy(NewBook.Sheets(1));
                CurrentFile.Close();
            КонецЦикла;
            
            NewBook.Sheets(МассивФайлов.Количество() + 1).Delete();
            NewBook.Sheets(МассивФайлов.Количество() + 1).Delete();
            NewBook.Sheets(МассивФайлов.Количество() + 1).Delete();
            
            ИмяФайлаXLS = ПолучитьИмяВременногоФайла("xls");
            NewBook.SaveAs(ИмяФайлаXLS,-4143);
            NewBook.Close();
            Excel.Quit();
            Excel = Неопределено;
1 lalex23
 
23.12.15
17:06
C:\Windows\System32\config\systemprofile\Desktop
C:\Windows\SysWOW64\config\systemprofile\Desktop
каталоги существуют и у пользователя на них прав вроде хватает и на чтение и на запись

Собственно вопрос: что я делаю не так?
Возможно существуют более эффективные способы создания многостраничного xls?
Про Ёксель слышал, готов попробовать, но есть вопросы: отработает ли он на сервере и сохранит ли отчёт в исходном виде как он выглядит для пользователя - это мегакритичное условие, юзеры с тонкой душевной организацией, от изменения оттенков фона или ширины колонок начинают нервничать и паниковать.
2 Garykom
 
гуру
23.12.15
17:11
3 Necessitudo
 
23.12.15
17:26
Кривой дорогой вы идете, товагисч.
4 avb
 
23.12.15
17:36
5 lalex23
 
23.12.15
21:27
(2) уточню: отчётов что надо рассылать - около десятка, одни на СКД, другие на построителе, третьи кодом, все их переписать на вывод по этой технологии в принципе можно... когда-нибудь, но я не уверен что удастся сохранить визуальное сходство на 100%, а это одно из основных условий - отчёты должны быть те же.

(3) дык я и прошу махнуть в правильную сторону

(4) повторяю: у меня нет проблемы прочитать ексель на сервере COM объект успешно открывает файлы, для чтения я бы вовсе воспользовалcя ADODB, проблема - записать  новую книгу и впихнуть туда данные из многих разрозненных отчётов, ошибка возникает на строке

NewBook = Excel.WorkBooks.Add();
6 Garykom
 
гуру
23.12.15
21:40
vbs скрипт запущенный из 1С с аналогичным кодом (добавления книг/листов) отрабатывает?

если да то разделите задачи
7 lalex23
 
23.12.15
22:31
уточню ещё раз: код на клиенте работает нормально - итоговый файл генерится в том виде что и требуется, проблема именно при исполнении кода на сервере - фоновым заданием
не уверен что vbs скрипт что-то изменит, но попробовать конечно могу..
8 Garykom
 
гуру
23.12.15
22:39
(7) так про это и речь, про попытку запустить vbs фоновым заданием и посмотреть что будет
еще туда запись файла лога добавить
9 Repey
 
24.12.15
08:01
Логи сервера смотрел?
Ексель на сервере от имени 1С запускал?
В запущенном от имени 1С екселе книгу добавлял?
В запущенном от имени 1С екселе этот макрос выполнял?
10 lalex23
 
24.12.15
10:20
проблема явно в том что при создании новой книги ексель где-то пытается создать временный файл, где он это хочет сделать - я так и не понял, потому как на все места куда мне пришло в голову права были выданы, в общем плюнул - создаю из табличного документа новый файл во временном каталоге и вставляю туда листы - кривовато конечно, но сохраняется нормально