Настройка DCOM компоненты "Excel.Application" на 64-битном сервере приложений 1С

Опубликовал vet7777 в раздел Администрирование - Защита, права, пароли

Описание настройки на 64-битном сервере приложений 1С, позволяющие создавать и использовать COMОбъект "Excel.Application" на сервере 1С.
Это поможет обработать большие файлы excel на сервере, в том числе через фоновые задания.
Все описанные действия родились по мотивам прочтения тысячи форумов и было опробовано сначала на разработческом сервере,  затем на боевом.
Поэтому решил выложить это сюда, наверняка спасет вам хотя бы 1 день жизни.
  1. Заходим на сервер приложений 1С под локальным админом
  2. Запускаем DCOMCNFG  (Консоль настроек "Component  Services")
    1. Открываем ветку Console Root -> Component Services ->  Computers ->  My computer ->  DCOM Config
    2. Ищем "Microsoft Excel Application"
    3. Если нашли, то переходим к пункту 4 (Настраиваем свойства DCOM компонента "Microsoft Excel Application")
    4. Закрываем "Component  Services"
  3. Настройка реестра
    1. Запускаем REGEDIT
    2. Открываем ветку Computer\HKEY_CLASSES_ROOT\AppID\EXCEL.EXE, если ее нет, то создаем
    3. Создаем в ней строковый параметр AppID  = {00020812-0000-0000-C000-000000000046}
    4. Выполняем команду "mmc comexp.msc /32", которая делает то же что и DCOMCONFIG, но позволяет видеть  32 битные компоненты.
    5. После этого в Component Services должен появиться "Microsoft Excel Application"
  4. Настраиваем свойства DCOM компонента "Microsoft Excel Application"
    1. Закладка "Security"
      1. "Launch and Activation Permissions" - Customize - Edit
        1. Добавляем пользователя, под которым запускается  агент сервера 1С
        2. Назначем ему только следующие права  (allow):
          1. Local Launch
          2. Local Activation
      2. "Access  Permissions" - Customize - Edit
        1. Добавляем пользователя, под которым запускается  агент сервера 1С
        2. Назначаем ему только следующие права  (allow):
          1. Local Access
    2. Закладка "Identity"
      1. Должно быть выбрано "The launching user"
  5. Системные папки
    1. Папка "C:\Windows\SysWOW64\config\systemprofile\Desktop\"
      1. Проверяем наличие папки , если нет -то создаем.
      2. Заходим в свойства этой папки.
      3. Закладка Security
      4. Добавляем, если нет, пользователя, под которым запускается агент сервера 1С
      5. Добавляем право "Read" и "Write"
    2. Папка "C:\Windows\System32\config\systemprofile\Desktop\"
      1. Проверяем наличие папки , если нет -то создаем.
      2. Заходим в свойства этой папки.
      3. Закладка Security
      4. Добавляем, если нет, пользователя, под которым запускается агент сервера 1С
      5. Добавляем право "Read" и "Write"

PS: по просьбе yukon добавляю следующий дисклаймер:

Вопросы серверной автоматизации Office https://support.microsoft.com/kb/257757

Корпорация Microsoft на сегодняшний день не рекомендует производить и не поддерживает автоматизацию программ из пакета Microsoft Office с помощью автоматических, неинтерактивных клиентских приложений или компонентов (включая ASP, DCOM и службы NT), поскольку при запуске в этом окружении программы пакета Office могут работать нестабильно или зависать.
 

 

См. также

PowerTools от 1 000 руб.
XDTO - часть 3 от 500 руб.

Лучшие комментарии

5. Gureev 28.01.2015 09:30
(2) theshadowco, (4) Yashazz,

может вы тогда сделаете статейку, как сформировать через ADO красиво оформленный Excel файл?
+ 2 [ Dziden; Sirruf; ]
# Ответить
12. vet7777 29.01.2015 13:48
(2) theshadowco, потому что в моей задаче нужно было перезаписывать файлы для того, чтобы они потом открывались на мобильных устройствах, если стояла задача только читать, то не спорю - ADO было бы правильнее использовать.
+ 1 [ theshadowco; ]
# Ответить
17. vet7777 29.01.2015 14:13
(15) bubnov-pi, просто клиенты финансовой компании, которым рассылается отчетность, имеют установленный офис на своих девайсах. думаю теперь тперь понятно зачем такой формат нужен.
+ 1 [ Diego_Iv; ]
# Ответить

Комментарии

1. yukon 27.01.2015 11:29
Обстоятельно разобрано. Но к такому тексту обязательно нужен дисклаймер:

Вопросы серверной автоматизации Office
https://support.microsoft.com/kb/257757

Корпорация Microsoft на сегодняшний день не рекомендует производить и не поддерживает автоматизацию программ из пакета Microsoft Office с помощью автоматических, неинтерактивных клиентских приложений или компонентов (включая ASP, DCOM и службы NT), поскольку при запуске в этом окружении программы пакета Office могут работать нестабильно или зависать.
Ответили: (3) (11) (26)
+ 1 [ AlX0id; ]
# Ответить
2. theshadowco 27.01.2015 15:41
(0)
Это поможет обработать большие файлы excel на сервере, в том числе через фоновые задания.

А почему не использовать ADO?
Ответили: (4) (5) (6) (12)
# Ответить
3. maxis33 27.01.2015 18:37
(1) yukon, хорошая статья, тоже приходилось эту информацию по крупицам собирать..
# Ответить
4. Yashazz 27.01.2015 20:14
(2) theshadowco, а не все такое знают. Проще, вишь, через com таскать, чем накатать нормальный запрос ADO, на большие-то объёмы...
Ответили: (5)
# Ответить
5. Gureev 28.01.2015 09:30
(2) theshadowco, (4) Yashazz,

может вы тогда сделаете статейку, как сформировать через ADO красиво оформленный Excel файл?
+ 2 [ Dziden; Sirruf; ]
# Ответить
6. Sirruf 28.01.2015 09:41
(2) Что через ADO таскать? А если требуется например регламентное задание по формированию и рассылке отчетов в формате Excel ?
Ответили: (7) (9) (26)
# Ответить
7. DoctorRoza 28.01.2015 12:59
(6) Sirruf, а что тут такого? создайте отчет и в коде его вызовите на заполнение! результат сохраните в ДвоичныеДанные. ВСЕ! И никакого COM'a не нужно, СКД отрабатывает!
# Ответить
8. kostyaomsk 28.01.2015 13:48
Автору за то что поделились админскими "премудростями" большой плюс.
Теперь сразу вопрос нарисовался. Как раз была настройка сервера 1С. Решили все-таки поставить офис. Началось все с ответа фирмы майкрософт по поводу "Excel.Application":
Корпорация Microsoft на сегодняшний день не рекомендует производить и не поддерживает автоматизацию программ из пакета Microsoft Office с помощью автоматических, неинтерактивных клиентских приложений или компонентов (включая ASP, DCOM и службы NT), поскольку при запуске в этом окружении программы пакета Office могут работать нестабильно или зависать.

В чем преимущество в данном случае у технологии ADO кроме как не надо ставить офисный пакет на сервер?
Чтоб не повторяться более подробно изложение начал здесь в комментариях статьи про SBS: Загрузка из EXCEL в 1С. Чтение файла XLSX средствами 1С. ЧтениеXML
Прикрепляю саму обработку с методикой чтения ADO из БП 3.0. В принципе из любой конфы должна в ексель начинать читать. В целом про методику и чтоб понять ошибки при разных настройках серверов и локальных ПК. Хотелось поначалу сделать универсальной.

Прикрепленные файлы:

Скриншот обработки чтения из xls методами ADO без установки Excel на ПК база БП 3.0.35.28 тонкий клиент.jpg
ЗагрузкаВБухгалтерию3.epf
# Ответить
9. bzmax 28.01.2015 23:44
(6) Sirruf,

Глупости! Рассылку отправлять в Ехеле, Ворде и других офисных форматах. Всегда найдется кто то, кто скажет что у него не открылось, или приложения нет.

Я все авто рассылки из 1С делаю в HTML (начиная с 7.7, с 2000 года).
И не дай бог! Какая нить зараза напишет что полученную рассылку открыть не смогли!
:)
Ответили: (13)
+ 1 [ kostyaomsk; ]
# Ответить
10. dock 29.01.2015 09:53
Системные папки

Папка "C:\Windows\SysWOW64\config\systemprofile\Desktop\"
1. Проверяем наличие папки , если нет -то создаем.
2. Заходим в свойства этой папки.
3. Закладка Security
4. Добавляем, если нет, пользователя, под которым запускается агент сервера 1С

Вот тут мне напомнили, что пользователя USR1CV8 (при установке сервера, установщик 1С предлагает его создать) вы не сможете добавить в Security. Под этим пользователем невозможно зайти в систему, и, соответственно, нельзя назначить права доступа к папке.
Выход - либо использовать настройку доступа "Все пользователи" (что не очень правильно), либо запускать Агента сервера под другим пользователем, отличным от USR1CV8.
Ответили: (14)
# Ответить
11. vet7777 29.01.2015 13:46
(1) yukon, согласен с дисклаймером, видел его конечно же, добавлю
Ответили: (26)
# Ответить
12. vet7777 29.01.2015 13:48
(2) theshadowco, потому что в моей задаче нужно было перезаписывать файлы для того, чтобы они потом открывались на мобильных устройствах, если стояла задача только читать, то не спорю - ADO было бы правильнее использовать.
+ 1 [ theshadowco; ]
# Ответить
13. vet7777 29.01.2015 13:50
(9) bzmax, требования диктует заказчик, а ему нужно именно в формате xlsx и чтобы открывалось на всех мобильных устройствах.
Ответили: (15) (16) (26)
# Ответить
14. vet7777 29.01.2015 13:52
(10) dock, в моем случае как раз агент и запущен "под другим пользователем, отличным от USR1CV8"
Ответили: (19)
# Ответить
15. bubnov-pi 29.01.2015 14:03
(13) vet7777, Вижу явное противоречие в паре "именно в формате xlsx" и "чтобы открывалось на всех мобильных устройствах". У меня на двух из трёх мобильных устройств никакой xls/xlsx не откроется. На "третьем" устройстве откроется любой xls[x] с вероятностью близкой к 100% исключительно благодаря вручную установленному пакету, отсутствующему в штатной конфигурации. Да и на некоторых стационарных компах до сих пор можно встретить офис 2003, и да - без конвертера (из личного опыта - крупные производственные предприятия, работающие не первый десяток лет, часто таким парком "грешат").
Что-то заказчик, НЯМС, хочет как минимум странного, если не невозможного. Реально, html, с точки зрения совместимости - куда логичнее.
Ответили: (17)
# Ответить
16. bzmax 29.01.2015 14:08
(13) vet7777,
И что??? В вашу задачу входит еще и на всех мобильных устройствах ставить читалку Екселя?
Я бы убедил заказчика в универсальном формате.
Ответили: (18)
# Ответить
17. vet7777 29.01.2015 14:13
(15) bubnov-pi, просто клиенты финансовой компании, которым рассылается отчетность, имеют установленный офис на своих девайсах. думаю теперь тперь понятно зачем такой формат нужен.
+ 1 [ Diego_Iv; ]
# Ответить
18. vet7777 29.01.2015 14:16
(16) bzmax, конечно же не входит )
# Ответить
19. dock 29.01.2015 20:00
(14) vet7777, об этом в статье явно не указано. Или я не нашел данного указания.
# Ответить
20. kostyaomsk 30.01.2015 08:39
Никто все-таки не сравнит функциональность ADO и Excel.Application по производительности и надежности чтения?
Ответили: (21)
# Ответить
21. vet7777 30.01.2015 15:00
(20) kostyaomsk, без тестов по опыту могу сказать, что по скорости чтения победит ADO,
по функциональности - excel.application.
а что такое "надежность чтения"?
Кстати, если отчетность в виде не одной плоской таблицы, а нескольких - то через ADO начинаются заморочки, потому что он видит один лист как единую таблицу. В моем случае, как раз такие отчеты.
PS: Я вообще не очень понимаю зачем мы обсуждаем другие решения, я не спорю, что они есть
Ответили: (23)
+ 1 [ kostyaomsk; ]
# Ответить
22. kostyaomsk 30.01.2015 20:00
В данном случае вопрос все-таки такой - что надежнее для постоянной работы на сервере и как это дело использовать.
# Ответить
23. kostyaomsk 01.02.2015 21:04
(21) vet7777, вот-вот. Про функциональность "Excel.Application" в чем она больше чем ADO? Только встроенными методами? При ADO можно же запрос делать и сразу отобрать из каких колонок что?
Ответили: (26)
# Ответить
24. Diego_Iv 09.04.2015 11:07
Спасибо, статья очень помогла.
Тоже рассылаем отчеты 1С руководству
# Ответить
25. Sirruf 27.08.2015 14:05
Возникла проблема при работе с excel.application на сервере. После сохранения файла слетают картинки (если изначально они там были). Может кто сталкивался с такой проблемой?
Excel 2010
# Ответить
26. Sirruf 27.08.2015 14:08
(23) kostyaomsk, Ок, есть такой код:

excel = Новый COMОбъект("Excel.Application");
	
	excel.DisplayAlerts = 0;
	excel.EnableEvents = 0;
	Книга = excel.WorkBooks.Open(ПутьКотчету);
	
	List = Книга.Sheets(1);
	List.columns(6).Delete(-4159);
	List.Cells(14,6).Select();
	excel.ActiveWindow.FreezePanes = 1;
	ВсегоКолонок = List.Cells(1,1).SpecialCells(11).Column;
	Для i=6 по ВсегоКолонок цикл
		List.columns(i).ColumnWidth = 100;
		List.columns(i).AutoFit();
	КонецЦикла;
	
	ВсегоСтрок = List.Cells(1,1).SpecialCells(11).Row;
	Для i=1 по ВсегоСтрок цикл
		
		
		List.rows(i).AutoFit();
	КонецЦикла;
	
	старт = List.columns(13);
	финиш = List.columns(ВсегоКолонок);
	List.Range(старт, финиш).Group();
	
	Книга.SaveAs(ПутьКотчету);
	excel.Application.Quit();
...Показать Скрыть


Как его реализовать через ADO?
# Ответить
27. ollega 15.01.2016 11:47
Твоя статья - моё спасение! СПАААААААААААААААСИБО!
# Ответить
28. Darkwoolf 16.02.2016 11:41
Здравствуйте. Такая проблема Система 64 битная сервер 1С 64 битный M.Excel 64 а вот сама 1С 32 битная пытался сделать внешнюю обработку для работы с Excel файлом выдавало ошибку. Пришел к тому что 1С 32 битный а Excel 64 битный. Нашел вашу тему. Проделал процедуру описаную выше. фаил начал открывать но повисает и висит часов 10 больше терпения у меня не хватало. подскажите что можно сделать.
# Ответить
29. Darkwoolf 19.02.2016 19:23
Все больше не актуально основная стать помогла!!! У меня еще была ошибка в обработке.
# Ответить
30. 4Shikari 09.03.2016 13:33
Спасибо. Статья помогла, четко и понятно, все взлетело с первого раза.
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл