Как решить конфликт разрядности между 1С и Microsoft Excel?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При автоматизации бизнес-процессов разработчики часто сталкиваются с ситуацией, когда на рабочем месте пользователя установлены программы разной разрядности. Например, платформа 1С:Предприятие имеет разрядность x32 (32-бит), а пакет Microsoft Office Excel — x64 (64-бит), или наоборот. При попытке запустить код, использующий технологию OLE/COM для интеграции с Excel, система выдает ошибку: Произошла исключительная ситуация (ASAx.Application): Класс не зарегистрирован или Не удалось создать COM-объект.

В этой статье мы подробно рассмотрим, почему возникает эта проблема, разберем несколько вариантов её решения (от простых организационных до глубоких технических настроек операционной системы Windows), а также изучим современные альтернативные способы работы с файлами Excel, которые вообще не требуют использования COM-технологий.

Выясним причину конфликта. Проблема кроется в механизмах Windows. 32-битное приложение (в данном случае 1С) ищет ключи зарегистрированных COM-объектов в ветке реестра HKEY_CLASSES_ROOT\Wow6432Node\CLSID, в то время как 64-битный Excel регистрирует свои интерфейсы в стандартной 64-битной ветке HKEY_CLASSES_ROOT\CLSID. Из-за этой изоляции прямое создание объекта через привычный конструктор Новый COMОбъект("Excel.Application") становится невозможным.

---

Решение 1. Параллельная установка платформ 1С разной разрядности

Рассмотрим самый простой практический способ, предложенный участниками форума, который не требует изменения кода обработок или переустановки пакета Microsoft Office. Операционная система Windows позволяет устанавливать и использовать на одном компьютере одновременно несколько версий и разрядностей платформы 1С:Предприятие.

Часто бухгалтеры или другие специалисты не могут полностью перейти на 64-битную платформу 1С из-за внешних ограничений — например, из-за конфликтов со сторонними компонентами сдачи электронной отчетности (такими как СБИС, Контур или ЕГАИС), которые жестко привязаны к 32-битной архитектуре. В этом случае мы можем настроить рабочее место следующим образом:

  1. Установите на компьютер пользователя как 32-битный, так и 64-битный клиент 1С:Предприятие.
  2. В списке баз при запуске 1С выделите нужную информационную базу и нажмите кнопку "Изменить".
  3. Перейдите на последнюю страницу настроек, где указываются параметры запуска.
  4. В поле "Разрядность" вы можете явно управлять версией клиента. Для повседневной работы и сдачи отчетности пользователь может запускать базу под управлением 32-битного клиента.
  5. Для выполнения тяжелых обработок, загружающих или выгружающих данные в 64-битный Excel, пользователь может временно запустить эту же базу под 64-битным клиентом 1С.

Таким образом, создав на рабочем столе два ярлыка запуска с разными параметрами разрядности, мы полностью решаем проблему совместимости без переустановки офисного пакета.

---

Решение 2. Тонкая настройка реестра и DCOM в Windows

Если вам необходимо, чтобы 32-битная платформа 1С без проблем общалась с 64-битным Excel напрямую через COM-соединение, мы можем настроить операционную систему так, чтобы она выступала посредником и корректно перенаправляла запросы. Разберем этот процесс по шагам.

Шаг 1. Регистрация идентификатора AppID в системном реестре

Нам необходимо связать исполняемый файл 64-битного Excel с его уникальным GUID в реестре для 32-битного окружения:

  1. Нажмите комбинацию клавиш Win + R, введите regedit и нажмите Enter для запуска Редактора реестра.
  2. Перейдите по пути: HKEY_CLASSES_ROOT\AppID.
  3. Создайте новый раздел с именем EXCEL.EXE.
  4. Внутри этого раздела создайте Строковый параметр (REG_SZ) с именем AppID.
  5. Присвойте созданному параметру значение GUID Microsoft Excel: {00020812-0000-0000-C000-000000000046}.

Шаг 2. Настройка служб компонентов (DCOM)

Теперь настроим параметры безопасности и учетную запись запуска для приложения Excel:

  1. Запустите специальную 32-битную консоль управления DCOM. Для этого нажмите Win + R и выполните команду:
    mmc comexp.msc /32
  2. В открывшемся окне перейдите по дереву: Службы компонентов -> Компьютеры -> Мой компьютер -> Настройка DCOM.
  3. Найдите в списке элемент с именем Microsoft Excel Application (или "Приложение Microsoft Excel"). Кликните по нему правой кнопкой мыши и откройте Свойства.
  4. Перейдите на вкладку Безопасность. В разделах "Разрешения на запуск и активацию" и "Разрешения на доступ" выберите вариант "Настроить" и добавьте пользователя, под которым запускается сессия 1С (это может быть локальный пользователь или доменная служба сервера USR1CV8), предоставив ему полные права.
  5. На вкладке Удостоверение выберите пункт "Запускающий пользователь" или "Интерактивный пользователь". Это позволит системе использовать права текущего активного сеанса для старта процесса Excel.

Шаг 3. Создание системных папок Desktop (Критически важный шаг!)

При межразрядном взаимодействии через COM-интерфейс Windows часто перенаправляет запросы в профиль системной службы. Если Excel не обнаружит папок рабочего стола в системном профиле, он просто аварийно завершится без вывода ошибок. Чтобы этого избежать, обязательно создайте вручную две папки на диске:

После выполнения этих настроек перезагрузите компьютер. Теперь связка Новый COMОбъект("Excel.Application") будет успешно отрабатывать в 32-битном приложении 1С.

---

Решение 3. Полный отказ от COM (Рекомендуемый современный подход)

Использование COM-соединений для работы с офисными файлами постепенно уходит в прошлое. Сама корпорация Microsoft официально не рекомендует использовать автоматизацию пакета MS Office на стороне серверов или в фоновых заданиях из-за проблем со стабильностью, скоростью работы и утечками памяти.

Современные версии платформы 1С:Предприятие 8.3 обладают мощным встроенным функционалом, который позволяет читать, анализировать и записывать файлы форматов XLS и XLSX напрямую, без установленного MS Excel на компьютере. Это полностью снимает проблему разрядности и отлично работает как под управлением Windows, так и на Linux-серверах.

Пример 1. Чтение данных из файла Excel с помощью объекта ТабличныйДокумент

Рассмотрим пример кода, в котором мы загружаем файл Excel в объект ТабличныйДокумент и обходим его ячейки:


&НаСервере
Процедура ПрочитатьФайлExcelНативно(ПутьКФайлу)
    
    ТабДок = Новый ТабличныйДокумент;
    
    Попытка
        // Чтение файла выполняется платформой самостоятельно
        ТабДок.Прочитать(ПутьКФайлу);
    Исключение
        ВызватьИсключение "Не удалось прочитать файл! Ошибка: " + ОписаниеОшибки();
    КонецПопытки;
    
    КоличествоСтрок = ТабДок.ВысотаТаблицы;
    КоличествоКолонок = ТабДок.ШиринаТаблицы;
    
    // Обходим строки табличного документа
    Для НомерСтроки = 1 По КоличествоСтрок Цикл
        
        // Получаем значение из первой колонки
        ЗначениеКолонки1 = ТабДок.Область(НомерСтроки, 1).Текст;
        
        // Получаем значение из второй колонки
        ЗначениеКолонки2 = ТабДок.Область(НомерСтроки, 2).Текст;
        
        // Здесь выполняем обработку полученных данных...
        
    КонецЦикла;
    
КонецПроцедуры

Пример 2. Быстрая загрузка таблицы с помощью Построителя Запроса

Если структура файла Excel представляет собой классическую "плоскую" таблицу (где первая строка содержит заголовки, а последующие — данные), мы можем мгновенно загрузить её в готовую ТаблицуЗначений в обход построчного чтения:


&НаСервере
Функция ЗагрузитьExcelВТаблицуЗначений(ПутьКФайлу)
    
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Прочитать(ПутьКФайлу);
    
    // Используем ПостроительЗапроса для автоматического анализа областей таблицы
    Построитель = Новый ПостроительЗапроса;
    Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область());
    Построитель.ЗаполнитьНастройки();
    Построитель.Выполнить();
    
    // Результат выгружаем в стандартную Таблицу Значений
    Возврат Построитель.Результат.Выгрузить();
    
КонецФункции

Пример 3. Нативная выгрузка данных из 1С в Excel

Для создания отчетов в формате Excel нам также не требуется COM. Мы можем программно сформировать табличный документ в 1С и сохранить его в нужном формате одной строчкой кода:


&НаСервере
Процедура ВыгрузитьДанныеВExcel(ПутьКФайлу)
    
    ТабДок = Новый ТабличныйДокумент;
    
    // Заполняем макет или ячейки табличного документа программно
    ОбластьЯчейки = ТабДок.Область(1, 1);
    ОбластьЯчейки.Текст = "Отчет по продажам";
    ОбластьЯчейки.Шрифт = Новый Шрифт(,,Истина); // Жирный шрифт
    
    ТабДок.Область(2, 1).Текст = "Товар";
    ТабДок.Область(2, 2).Текст = "Количество";
    
    // Записываем файл на диск в формате XLSX
    ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);
    
КонецПроцедуры

---

Решение 4. Альтернативные методы интеграции

Если нативная работа с ТабличныйДокумент вам не подходит по причине сложного форматирования исходных файлов, рассмотрите еще два альтернативных варианта:

Мы проанализировали различные варианты решения проблемы несовместимости разрядностей 1С и Excel. Для быстрого исправления ситуации "здесь и сейчас" отлично подойдет вариант с параллельной установкой платформ 1С или настройка DCOM. Однако в качестве долгосрочной стратегии развития систем автоматизации настоятельно рекомендуем переводить все обработки на нативное чтение файлов силами платформы 1С — это гарантирует стабильную работу вашей конфигурации в любых инфраструктурных условиях.

← На главную