Перевод пользователей с операционной системы Windows на отечественные дистрибутивы Linux, такие как РЕД ОС 8, часто сопровождается техническими сложностями в работе устаревших конфигураций. Одной из самых распространенных проблем в 1С:Управление производственным предприятием (УПП) 1.3 является невозможность открытия прикрепленных файлов (договоров в PDF, спецификаций в DOCX или отчетов в XLSX). При нажатии на кнопку «Открыть» система не выдает ошибок, но и ничего не происходит. Рассмотрим подробно, почему так случается и как адаптировать конфигурацию (включая хранение файлов в томах на диске) для корректной работы в Linux-среде.
Проанализируем архитектуру решения. Конфигурация УПП 1.3 разрабатывалась в эпоху доминирования Windows и использует обычные формы. Основная часть функционала по работе с внешними файлами была написана с использованием технологии COM (Component Object Model). Когда вы пытаетесь открыть файл Word, 1С обращается к объекту Word.Application. Однако в РЕД ОС и других Linux-системах технология COM отсутствует в принципе. В то же время более современные конфигурации, такие как Документооборот 2.1, работают исправно, так как они изначально проектировались как кроссплатформенные на управляемых формах.
Второй критический момент — это жесткая привязка к символам разделителей путей. В Windows используется обратный слеш \, а в Linux — прямой /. Если в коде программно формируется путь к временному файлу путем конкатенации строк, приложение просто не сможет найти этот путь в файловой системе Linux.
Разберем, как изменить механизм открытия файлов. Вместо попыток создать COM-объект, мы должны использовать встроенную команду 1С ЗапуститьПриложение(). В Linux эта команда инициирует вызов системного обработчика (обычно это xdg-open), который определяет программу по умолчанию для конкретного расширения файла (например, Р7-Офис или LibreOffice).
Найдем в коде процедуру, отвечающую за открытие файла. Скорее всего, она находится в общем модуле или в модуле формы работы с присоединенными файлами. Проанализируем типичный пример исправления кода:
// Старый вариант (только для Windows)
// Объект = Новый COMОбъект("Word.Application");
// Объект.Documents.Open(ПолноеИмяФайла);
// Новый кроссплатформенный вариант
Если ИмяТипаЗнч(Платформа) <> "Windows" Тогда
// Для Linux используем системный запуск
ЗапуститьПриложение(ПолноеИмяФайла);
Иначе
// Для Windows можно оставить старый механизм или также перейти на ЗапуститьПриложение
ЗапуститьПриложение(ПолноеИмяФайла);
КонецЕсли;
Рассмотрим ситуацию, когда файл сохраняется во временный каталог, но не открывается из-за ошибки в пути. Файловая система Linux (обычно ext4) является регистрозависимой. Это значит, что файл Document.pdf и document.PDF — это разные объекты. Проанализируем, как формируется имя файла в коде.
Важно исключить использование конструкций типа Путь + "\" + Имя. Вместо этого необходимо использовать системную переменную ПолучитьРазделительПути() или стандартные функции платформы для работы с путями. Посмотрим на правильный пример формирования пути:
Разделитель = ПолучитьРазделительПути();
ПутьКФайлу = КаталогВременныхФайлов() + ИмяФайла;
// Платформа 8.3 сама подставит нужный слеш в зависимости от ОС
Выясним ситуацию с правами доступа. В РЕД ОС 8 безопасность настроена строже, чем в Windows. Если 1С сохраняет файл в папку, на которую у пользователя нет прав «выполнения» или «чтения» сторонними приложениями, то Р7-Офис не сможет его открыть.
Проанализируем следующие моменты:
/tmp не примонтирован с флагом noexec.Иногда проблема кроется не в коде 1С, а в отсутствии необходимых библиотек в самой РЕД ОС 8 для корректной работы 64-битного клиента 1С. Проанализируем список необходимых пакетов. Для того чтобы механизмы взаимодействия с рабочим столом (включая открытие файлов) работали стабильно, в системе должны присутствовать библиотеки совместимости.
Рекомендуем проверить наличие следующих пакетов через терминал:
libxcrypt-compat — необходима для работы механизмов аутентификации и некоторых вызовов платформы.webkit2gtk3 — требуется для рендеринга форм и корректной работы диалоговых окон.Если код кажется верным, но файл все равно не открывается, проверим ассоциации файлов вручную. Это поможет нам понять, на чьей стороне проблема: 1С или операционной системы. Зайдите в терминал РЕД ОС под тем же пользователем, под которым запущен клиент 1С, и выполните команду:
xdg-open /путь/к/вашему/файлу.docx
Если файл открылся в офисном редакторе — значит, проблема в логике 1С (например, некорректно передается путь в метод ЗапуститьПриложение). Если файл не открылся и в терминале — необходимо настраивать ассоциации файлов в настройках рабочего стола РЕД ОС (Мате/Cinnamon).
Для восстановления работы открытия файлов в УПП на РЕД ОС необходимо:
COMОбъект, связанных с офисными приложениями.ЗапуститьПриложение()..pdf вместо .PDF), чтобы избежать проблем с регистрозависимостью Linux.Выполнение этих шагов позволит полноценно использовать 1С:УПП 1.3 на современных российских операционных системах, обеспечивая бесшовную работу пользователей с прикрепленными документами.