При переходе рабочих мест на macOS разработчики 1С часто сталкиваются с техническим барьером: привычные механизмы интеграции с Microsoft Excel, годами работавшие под управлением Windows, перестают функционировать. Попытка инициализировать приложение через привычный синтаксис приводит к критической ошибке.
Разберем природу возникающих ограничений, проанализируем поведение системы и рассмотрим надежные кроссплатформенные альтернативы для создания таблиц с комплексным форматированием.
Основная сложность заключается в фундаментальных архитектурных различиях между операционными системами. Разберем ключевые факторы, влияющие на работу с файлами электронных таблиц:
Новый COMОбъект("Excel.Application") в среде Mac не поддерживается в принципе.ТипФайлаТабличногоДокумента.XLSX). Однако объект ТабличныйДокумент имеет функциональные рамки: он не умеет создавать многостраничные книги с несколькими листами, не поддерживает сводные таблицы (Pivot Tables), макросы VBA, списки проверки данных и сложные динамические графики.Таким образом, когда от разработчика требуется создать не просто линейную плоскую ведомость, а сложный интерактивный отчет с формулами и разметкой, стандартного экспорта становится недостаточно. Рассмотрим практические решения этой задачи.
Современный формат электронных таблиц .xlsx представляет собой упакованный ZIP-архив с XML-документами и служебными файлами связей. Этот метод является полностью кроссплатформенным, не требует внешних библиотек, компиляции бинарных файлов и установки пакета Microsoft Office на устройство пользователя.
Разберем алгоритм по шагам:
.xlsx в Excel, настроив визуальное оформление, шапки, формулы и связи между листами. В ячейках, куда необходимо передать динамические показатели из базы, укажем уникальные текстовые метки (например, [НомерСчета], [СуммаИтог]).ЧтениеZipФайла.xl/sharedStrings.xml, а разметка листов — в каталоге xl/worksheets/ (файлы sheet1.xml, sheet2.xml). Для изменения структуры применим объекты ЧтениеXML и ЗаписьXML либо выполним направленную строковую замену методами работы со строками.ЗаписьZipФайла, и сохраним с расширением .xlsx.Посмотрим на пример распаковки и упаковки шаблона средствами встроенного языка 1С:
// Распаковываем исходный шаблон отчета
АрхивЧтение = Новый ЧтениеZipФайла(ПутьКШаблону);
АрхивЧтение.ИзвлечьВсе(КаталогРаспаковки, РежимВосстановленияПутейФайловZIP.Восстанавливать);
АрхивЧтение.Закрыть();
// ... На этом шаге считываем sheet1.xml или sharedStrings.xml,
// модифицируем узлы через ЗаписьXML или строковую подстановку ...
// Упаковываем структуру обратно в итоговый документ XLSX
АрхивЗапись = Новый ЗаписьZipФайла(ПутьКИтоговомуФайлу, , , СжатиеZIP.Максимальное);
АрхивЗапись.Добавить(КаталогРаспаковки + "/*", РежимСохраненияПутейZIP.СохранятьОтносительныеПути);
АрхивЗапись.Записать();
Преимущество метода: сформированный файл сохраняет все сложные элементы оформления, формулы, правила условного форматирования и макросы оригинального шаблона без единой внешней зависимости.
Проанализируем архитектуру клиент-серверного взаимодействия. Рабочее место бухгалтера или аналитика может функционировать под управлением macOS, но сам сервер 1С:Предприятия зачастую развернут на платформе Windows Server. В таком случае нет необходимости адаптировать алгоритм выгрузки под Mac.
Разделим выполнение программного кода:
НаСервере. Если сервер развернут под Windows, там доступны привычные системные механизмы и установленные библиотеки.ДвоичныеДанные и передается обратно клиенту на macOS.ДвоичныеДанные.Записать() или запускает просмотр средствами операционной системы.Если на Mac установлен пакет Microsoft Office (например, Office 2016 или актуальные версии Microsoft 365 для Mac), мы можем взаимодействовать с ним напрямую. Вместо недоступного механизма COM на macOS применяется встроенная система автоматизации AppleScript / JXA (JavaScript for Automation).
Вызов скриптов из 1С выполняется через запуск системной консольной утилиты osascript:
.scpt либо передаем его через параметры запуска.ЗапуститьПриложение() или НачатьЗапускПриложения() для запуска утилиты osascript.Посмотрим на пример вызова системной утилиты для выполнения сценария управления Excel:
КоманднаяСтрока = "osascript -e 'tell application ""Microsoft Excel"" to open POSIX file """ + ПутьКФайлу + """'";
ЗапуститьПриложение(КоманднаяСтрока, , Истина);
Этот метод позволяет полностью использовать мощь настольного Excel под управлением macOS, если офисный пакет установлен на машине пользователя.
Если требуется полностью изолировать процесс выгрузки от офисного пакета, но при этом необходимо формировать таблицы на клиенте с нуля динамическим кодом, эффективным подходом выступает интеграция с CLI-утилитами или создание внешних компонент:
ЗапуститьПриложение() можно передавать структурированные данные (в формате JSON или CSV) локальному скрипту (например, на Python с модулями обработки таблиц). Скрипт компонует файл по правилам и складывает готовый документ в рабочий каталог пользователя.Выбор конкретного пути зависит от архитектуры вашей базы. Если используется клиент-серверный вариант — перенесите генерацию в контекст НаСервере. Если клиент файловый или работает автономно на Mac — наиболее надежным и быстрым решением остается непосредственная шаблонизация OpenXML через встроенные объекты ЗаписьZipФайла и ЗаписьXML.