Как 1С:Предприятие 8 работает с Excel и Word из MS Office 2010 и что для этого подготовить

· 11 мин

Содержание

Под «расширением MS Office 2010 для 1С:Предприятие 8» обычно понимают не отдельную программу, а связку: установленный Office 2010 регистрирует в Windows COM-объекты Excel.Application и Word.Application, и 1С управляет через них таблицами и документами. Отдельно ставить ничего не нужно — достаточно Office на том компьютере, где выполняется код. Для обычной выгрузки отчёта в Excel Office не нужен вовсе: платформа 8.3 сама сохраняет табличный документ в .xlsx.

Связка нужна там, где 1С должна именно управлять Office: открыть чужую книгу и прочитать ячейки, заполнить шаблон Word с закладками, построить в Excel сводную таблицу или диаграмму. Ниже — как это устроено, что настроить на клиенте и на сервере, какие ошибки встречаются и чем заменить COM.

Как 1С обращается к Excel и Word: механизм COM

COM — стандартный механизм Windows, через который одна программа запускает другую и вызывает её методы. В языке 1С за это отвечает конструктор Новый COMОбъект("…"). Строка в скобках — имя класса, которое Office записал в реестр при установке.

Основные классы, которые используют в 1С:

  • 📗 Excel.Application — сам Excel: книги, листы, ячейки, формулы, сохранение в нужном формате;
  • 📘 Word.Application — Word: открыть шаблон, подставить текст в закладки, сохранить как .docx или .pdf;
  • 🗄 ADODB.Connection — не часть Office, а компонент Windows; вместе с провайдером Microsoft.ACE.OLEDB.12.0 читает лист Excel как таблицу базы данных;
  • 📧 Outlook.Application — отправка писем через почтовый профиль пользователя.

Excel и Word запускаются отдельными процессами. Если открыть Диспетчер задач во время выгрузки, вы увидите EXCEL.EXE даже при невидимом окне. Отсюда главное правило: процесс нужно закрывать явно, иначе после каждого запуска обработки он остаётся висеть в памяти.

Минимальный пример — открыть книгу и прочитать значение ячейки A2:

Excel = Новый COMОбъект("Excel.Application");
Excel.Visible = Ложь;
Excel.DisplayAlerts = Ложь;

Книга = Excel.Workbooks.Open("C:\Обмен\Прайс.xlsx");
Лист = Книга.Worksheets(1);
Значение = Лист.Cells(2, 1).Value;

Книга.Close(Ложь);   // закрыть без сохранения
Excel.Quit();        // завершить процесс EXCEL.EXE
Excel = Неопределено;

Свойство DisplayAlerts = Ложь отключает диалоги Excel вроде «Сохранить изменения?». Без него невидимый Excel ждёт ответа, а 1С «зависает» на вызове.

Где выполняется код: клиент или сервер

COM-объект создаётся на том компьютере, где работает конкретная процедура. От этого зависит, где должен стоять Office.

РежимГде создаётся объектГде нужен Office
Процедура &НаКлиенте, тонкий клиент WindowsНа компьютере пользователяУ пользователя
Процедура &НаСервере, файловая базаНа компьютере пользователя (сервер — тот же процесс)У пользователя
Процедура &НаСервере, клиент-серверная базаНа сервере 1С, под учётной записью службыНа сервере 1С
Веб-клиент, клиент на Linux или macOSCOM недоступен—

Последняя строка частая причина сюрпризов: обработка работает в файловой базе, а после перевода на сервер падает. Код не менялся, просто COM-объект теперь создаётся на сервере, где Office нет.

Подготовка рабочего места: Office, разрядность, проверка

Перед тем как запускать обработку, проверьте окружение. Это займёт несколько минут и снимет большую часть «необъяснимых» ошибок.

  1. Убедитесь, что установлен полный Office или хотя бы Excel. Бесплатный просмотрщик Excel Viewer и веб-версия Office COM-объектов не регистрируют.
  2. Запустите Excel вручную один раз под тем пользователем, под которым работает 1С. Первый запуск показывает окно активации и настройки — пока его не закрыть, автоматизация может не стартовать.
  3. Проверьте активацию. Неактивированный Office в режиме ограниченной функциональности открывает файлы только для чтения, и сохранение из 1С завершится ошибкой.
  4. Выясните разрядность. Office 2010 — первая версия, у которой есть 64-разрядный выпуск. Посмотреть можно в Excel: Файл → Справка, справа указано «32-разрядная» или «64-разрядная».
  5. Проверьте класс без 1С. Создайте файл test.vbs с одной строкой и запустите двойным щелчком:
Set x = CreateObject("Excel.Application") : MsgBox x.Version : x.Quit

Если появится окно с числом 14.0 — Excel 2010 зарегистрирован и откликается. Ошибка в этой проверке значит, что проблема в Office, а не в 1С.

Когда разрядность важна, а когда нет

Excel.Application и Word.Application работают как отдельный процесс. Поэтому 32-разрядный клиент 1С спокойно управляет 64-разрядным Excel, и наоборот.

С провайдером Microsoft.ACE.OLEDB.12.0 иначе: он загружается внутрь процесса 1С. Разрядность провайдера должна совпадать с разрядностью клиента или сервера 1С. Провайдер ставится вместе с Office или отдельным пакетом Microsoft Access Database Engine 2010 Redistributable нужной разрядности. Поставить рядом 32- и 64-битный пакет штатно не получится — установщик откажет, если разрядность не совпадает с уже установленным Office.

Если на компьютере 32-битный Office, а 1С 64-битная и нужно ADO-чтение Excel, проще перевести чтение на COM Excel.Application или на встроенный ТабличныйДокумент.Прочитать, чем переустанавливать Office.

Ошибки при выгрузке в Excel и как их читать

Сообщения COM 1С показывает с шестнадцатеричным кодом. По коду причина находится быстрее, чем по тексту.

Диагностика: выберите симптом

Висящие процессы EXCEL.EXE

Самая массовая проблема — десятки процессов EXCEL.EXE в Диспетчере задач через неделю работы. Причина почти всегда в коде: при ошибке выполнение прервалось до строки Excel.Quit().

Решение — обернуть работу в Попытка … Исключение, а закрытие вынести и в ветку исключения:

Excel = Новый COMОбъект("Excel.Application");
Попытка
    Книга = Excel.Workbooks.Open(ПутьКФайлу);
    // ... чтение или заполнение
    Книга.Close(Ложь);
Исключение
    Excel.Quit();
    Excel = Неопределено;
    ВызватьИсключение;
КонецПопытки;
Excel.Quit();
Excel = Неопределено;

Завершать «лишние» EXCEL.EXE через Диспетчер задач на сервере 1С или терминальном сервере можно только когда выгрузки не идут. Иначе вы оборвёте чужую обработку и пользователь получит ошибку RPC.

Медленная выгрузка

Запись ячеек по одной через COM — это тысячи межпроцессных вызовов. Таблица на 10 000 строк и 10 колонок даёт 100 000 обращений и может выгружаться несколько минут.

Что ускоряет в разы:

  • 🚀 сформировать данные в табличном документе 1С и сохранить его в .xlsx встроенным методом, а Excel открыть уже для оформления;
  • 🚀 отключить пересчёт и обновление экрана: Excel.ScreenUpdating = Ложь, Excel.Calculation = -4135 (ручной пересчёт), в конце вернуть -4105;
  • 🚀 читать диапазон целиком через Лист.UsedRange.Value и разбирать полученный массив, а не обращаться к каждой ячейке.

Выгрузка в Excel без COM и без установленного Office

Для большинства задач Office на компьютере вообще не обязателен. Платформа 8.3 умеет записывать и читать файлы Excel сама.

Ручное сохранение отчёта

Любой отчёт или печатную форму можно сохранить в Excel без программирования. В открытом табличном документе нажмите кнопку сохранения (значок дискеты на панели формы или команду Сохранить как в главном меню программы) и выберите тип файла «Лист Microsoft Excel 2007-…» (.xlsx) или «Лист Microsoft Excel 97» (.xls).

Для списков документов и справочников есть Ещё → Вывести список…: список выводится в табличный документ, который сохраняется тем же способом.

Программная запись и чтение

Записать табличный документ в файл — одна строка:

ТабДок.Записать("C:\Выгрузка\Отчет.xlsx", ТипФайлаТабличногоДокумента.XLSX);

Метод работает и на клиенте, и на сервере, в том числе на сервере 1С под Linux. Office ему не нужен.

Прочитать готовую книгу в табличный документ можно методом ТабличныйДокумент.Прочитать(ПутьКФайлу), после чего значения берутся через ТабДок.Область(Строка, Колонка, Строка, Колонка).Текст.

Сравнение способов

СпособНужен OfficeКогда подходитОграничения
ТабличныйДокумент.ЗаписатьНетВыгрузка отчётов, реестров, прайсовНет формул Excel, сводных, макросов
ТабличныйДокумент.ПрочитатьНетЗагрузка простых таблицСложное форматирование теряется
COM Excel.ApplicationДа, на месте выполнения кодаШаблоны с формулами, диаграммы, сводныеТолько Windows, процессы надо закрывать
ADO + ACE OLEDBПровайдер ACE нужной разрядностиБыстрое чтение больших листовКапризен к типам данных в колонках
COM LibreOffice (com.sun.star.ServiceManager)Нет, нужен LibreOfficeЗамена Office без покупки лицензийДругая объектная модель, код пишется заново
Типовая загрузка из файлаНетЗагрузка строк в документы БП, УТТолько там, где команда предусмотрена

В типовых конфигурациях многие табличные части документов (например, товары в поступлении) заполняются командой загрузки из файла прямо в форме документа. Если такой команды нет, есть внешняя обработка «Загрузка данных из табличного документа», которая распространяется для подписчиков ИТС.

Для печатных форм в Word типовые конфигурации на БСП умеют использовать макеты формата Office Open XML (.docx): документ собирается без запуска Word, и такие формы работают на любом сервере.

Права доступа и безопасность при работе с Office

Связка 1С и Office затрагивает права в трёх местах: в самой 1С, в Windows и в настройках сервера 1С.

Права в 1С

  • 🔐 Пользователю, который запускает внешнюю обработку с COM-вызовами, нужно право на интерактивное открытие внешних обработок. В типовых конфигурациях оно выдаётся через профиль групп доступа.
  • 🛡 С платформы 8.3.10 у пользователя есть свойство «Защита от опасных действий». При открытии внешней обработки система предупреждает о возможной угрозе, и запуск нужно подтвердить.
  • 🧱 Внешние обработки, подключённые в безопасном режиме, не могут создавать COM-объекты. Это сделано намеренно: COM даёт коду полный доступ к компьютеру.

Права на сервере 1С

В клиент-серверной базе COM-объект на сервере создаётся под учётной записью службы агента сервера, по умолчанию USR1CV8. Чтобы Excel запустился под ней, настраивают DCOM:

  1. Запустите dcomcnfg от имени администратора.
  2. Откройте Службы компонентов → Компьютеры → Мой компьютер → Настройка DCOM.
  3. Найдите «Microsoft Excel Application», откройте свойства.
  4. На вкладке «Безопасность» в разделах разрешений на запуск и доступ добавьте учётную запись службы 1С с разрешением локального запуска и локальной активации.
  5. На вкладке «Удостоверение» выберите запуск от имени конкретного пользователя, если Excel под системной учётной записью не стартует.

Есть ещё один приём, о котором знают практики. Office под служебной учётной записью ищет папку рабочего стола профиля и без неё не открывает книги. Создайте пустые папки:

mkdir C:\Windows\System32\config\systemprofile\Desktop
mkdir C:\Windows\SysWOW64\config\systemprofile\Desktop

Вторая нужна для 32-разрядного Office на 64-разрядной Windows.

Изменения DCOM и учётной записи службы 1С применяются после перезапуска службы агента сервера. Перезапуск обрывает сеансы всех пользователей — делайте его вне рабочего времени.

Microsoft официально не поддерживает автоматизацию Office в серверных службах без интерактивного пользователя. Схема работает, но при нагрузке нескольких одновременных выгрузок начинаются сбои. Для серверной выгрузки надёжнее использовать встроенную запись в xlsx, а COM оставить на клиенте.

Если в кластере включены профили безопасности, для информационной базы может быть запрещено создание COM-объектов. Тогда код на сервере упадёт даже при правильно настроенном DCOM — проверьте профиль базы в консоли администрирования кластера.

Безопасность самих файлов

  • 📎 Книги с макросами (.xlsm) при открытии через COM запускают макросы по настройкам центра управления безопасностью Office. Не открывайте из 1С файлы, полученные от контрагентов, без проверки.
  • 📁 Папку обмена с Excel-файлами размещайте там, куда у учётной записи службы есть права на запись. Сетевой путь \\server\share для службы работает только при правах доступа к ресурсу у этой учётной записи.

Какая версия Office подходит для задач 1С

Объектная модель Excel почти не менялась с 2007 года. Код для Office 2010 без правок работает в 2013, 2016, 2019, 2021 и Microsoft 365. Разница — в форматах, разрядности и поддержке.

ВерсияНомер в VersionФорматы по умолчанию64-битный выпускЧто учесть
Office 200712.0xlsx, docxНетПоддержка давно завершена
Office 201014.0xlsx, docxЕсть, впервыеПоддержка Microsoft завершена в октябре 2020 года
Office 201315.0xlsx, docxЕстьПоддержка завершена
Office 2016–202116.0xlsx, docxЕстьОдинаковый номер версии у всех трёх
Microsoft 36516.0xlsx, docxЕсть, ставится по умолчаниюОбновляется сам, нужна действующая подписка

Ограничения листа одинаковы с 2007 года: 1 048 576 строк и 16 384 столбца в .xlsx. В старом формате .xls — 65 536 строк и 256 столбцов. Если выгружаете в .xls реестр больше 65 536 строк, хвост будет отрезан.

Практический вывод для 1С:

  • ✅ Office 2010 по-прежнему работает со связкой, но не получает исправлений безопасности. Для новых рабочих мест его не ставят.
  • ✅ Если код проверяет версию, сравнивайте число из Excel.Version: «номер не ниже 12» значит, что формат .xlsx доступен.
  • ✅ На терминальном сервере держите одну разрядность Office у всех пользователей, иначе ADO-загрузка будет работать у одних и падать у других.

Частые вопросы

Нужно ли покупать отдельное расширение Office для 1С?
Нет. Связка использует COM-объекты, которые регистрирует обычный Office при установке. Для простой выгрузки отчётов в xlsx Office не нужен совсем.
Почему выгрузка работает у меня, но не у коллеги?
Чаще всего у коллеги Office не активирован, не запускался под его пользователем или установлен без Excel. Проверьте файлом test.vbs на его компьютере.
Можно ли работать с Excel из 1С в веб-клиенте?
Через COM — нет. В веб-клиенте сохраняйте табличный документ в xlsx встроенной командой, файл скачается браузером.
Подойдёт ли LibreOffice вместо MS Office?
Для открытия выгруженных из 1С файлов — да. Для программного управления через COM код придётся переписать: у LibreOffice своя объектная модель.
Почему из 1С в Excel числа приходят как текст?
В табличном документе ячейка заполнена строкой, а не числом. Выводите в ячейки значения числового типа и задавайте формат в самом макете, а не готовую строку с пробелами-разделителями.