Как программно сохранить файл в 1С, когда сервер работает под управлением Linux?

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

Приветствуем вас! Сегодня мы с вами разберем одну из частых и порой непростых задач для разработчиков 1С, работающих в гибридных инфраструктурах или полностью перешедших на Linux: программное сохранение файлов. Если ваш сервер 1С:Предприятия работает под управлением операционной системы Linux, то к привычным для Windows-разработчиков методам и подходам добавляются свои особенности. Мы рассмотрим эти нюансы подробно, чтобы вы могли успешно реализовать функционал сохранения файлов в любой среде.

Шаг 1: Определяем операционную систему

Прежде чем формировать путь к файлу или выполнять специфичные для ОС действия, нам необходимо точно определить, на какой платформе сейчас работает 1С:Предприятие. Это ключевой момент, поскольку пути к файлам и некоторые другие аспекты кардинально отличаются в Linux и Windows. Мы используем объект СистемнаяИнформация и его свойство ТипПлатформы. Этот метод позволяет нам надежно определить текущую операционную систему. Рассмотрим пример кода, который поможет нам выяснить тип платформы:


СистемнаяИнформация = Новый СистемнаяИнформация;
ТипПлатформы = СистемнаяИнформация.ТипПлатформы;

Если ТипПлатформы = ТипПлатформы.Linux_x86 ИЛИ ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда
    // Здесь мы будем выполнять код, специфичный для Linux
    Сообщить("Приложение 1С работает на Linux.");
ИначеЕсли ТипПлатформы = ТипПлатформы.Windows Тогда
    // Здесь будет код для Windows
    Сообщить("Приложение 1С работает на Windows.");
ИначеЕсли ТипПлатформы = ТипПлатформы.MacOS_x86_64 Тогда
    // Здесь будет код для macOS
    Сообщить("Приложение 1С работает на macOS.");
Иначе
    // Если платформа не Linux, не Windows и не macOS, возможно, это какая-то другая
    // или неподдерживаемая нами платформа. Важно предусмотреть такую ситуацию.
    Сообщить("Неизвестная или неподдерживаемая платформа: " + Строка(ТипПлатформы));
    Возврат; // Выходим, так как не можем продолжить
КонецЕсли;

Важно: Как вы могли заметить, не стоит полагаться на то, что в ветке Иначе будет только Windows. Существуют и другие платформы, такие как macOS, или даже будущие версии, которые могут быть добавлены. Всегда лучше явно проверять тип платформы, которая нас интересует.

Шаг 2: Формируем пути к файлам в зависимости от ОС

Теперь, когда мы знаем, на какой операционной системе мы работаем, мы можем правильно сформировать путь к файлу для сохранения. Это один из самых значительных аспектов, требующих внимания. Разберем ключевые отличия:

  1. Разделитель каталогов:
    • В Linux и других Unix-подобных системах (включая macOS) используется прямой слеш (/). Например: /home/user/documents/report.txt.
    • В Windows используется обратный слеш (\). Например: C:\Users\User\Documents\Report.txt.
  2. Структура файловой системы:
    • В Linux нет концепции букв дисков (C:, D:). Все устройства и разделы монтируются в единую корневую файловую систему, обозначаемую /. Точки монтирования для съемных носителей или дополнительных дисков часто располагаются в каталогах /mnt или /media, но могут быть настроены в любом другом месте.
    • В Windows мы привыкли к логическим дискам, обозначаемым буквами.

Посмотрим на пример формирования пути:


ПолныйПутьКФайлу = "";
ИмяФайла = "ОтчетПоПродажам.xlsx";
ИмяКаталогаДляСохранения = "";

Если ТипПлатформы = ТипПлатформы.Linux_x86 ИЛИ ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда
    // Для Linux: используем прямой слеш и указываем полный путь от корня
    // Например, можно сохранять во временную директорию /tmp или в подкаталог
    // домашней директории пользователя, от имени которого работает сервер 1С.
    // Важно: убедитесь, что у этого пользователя есть права на запись в указанный каталог.
    ИмяКаталогаДляСохранения = "/var/lib/1c/temp/"; // Пример общедоступного каталога
    // Или, если вы хотите сохранять в домашнюю директорию конкретного пользователя,
    // и если сервер 1С имеет к ней доступ: "/home/user1c/docs/"
    ПолныйПутьКФайлу = ИмяКаталогаДляСохранения + ИмяФайла;
ИначеЕсли ТипПлатформы = ТипПлатформы.Windows Тогда
    // Для Windows: используем обратный слеш и указываем путь с буквой диска
    ИмяКаталогаДляСохранения = "C:\1C_Files\";
    ПолныйПутьКФайлу = ИмяКаталогаДляСохранения + ИмяФайла;
Иначе
    Сообщить("Неподдерживаемая платформа для формирования пути.");
    Возврат;
КонецЕсли;

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

// Далее вы можете использовать ПолныйПутьКФайлу для сохранения объекта.
// Например, для табличного документа:
// ТабличныйДокумент.Записать(ПолныйПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);

Работа с сетевыми путями в Linux

В Linux сетевые ресурсы (например, общие папки SMB/CIFS с Windows-серверов или NFS) обычно монтируются в локальную файловую систему. Это означает, что после монтирования сетевая папка становится доступной как обычный локальный каталог. Например, если сетевая папка //имякомпании/общиедокументы смонтирована в Linux как /mnt/company_share, то для 1С путь к файлу будет выглядеть как /mnt/company_share/документ.txt. Таким образом, программная работа с такими путями не будет отличаться от работы с обычными локальными файлами.

Шаг 3: Учитываем права доступа в Linux

В отличие от Windows, где права доступа часто настраиваются через графический интерфейс и наследуются, в Linux права доступа к файлам и каталогам являются критически важным аспектом и управляются более строго. Если у пользователя, от имени которого работает сервер 1С, нет достаточных прав на запись в целевой каталог, сохранение файла будет невозможно, и вы получите ошибку доступа. * Пользователь 1С: Сервер 1С:Предприятия обычно запускается от имени специального пользователя (например, usr1cv8 или _usr1cv8). Именно этому пользователю должны быть предоставлены права на запись в каталог, куда вы пытаетесь сохранить файл. * Команда chmod: Для изменения прав доступа к файлам и каталогам в Linux используется команда chmod. Например: * sudo chmod 777 /var/lib/1c/temp/ – предоставит полные права (чтение, запись, выполнение) всем пользователям на каталог /var/lib/1c/temp/. Будьте осторожны с 777, так как это снижает безопасность. * sudo chmod 775 /var/lib/1c/temp/ – предоставит полные права владельцу и группе, и только чтение/выполнение всем остальным. * sudo chown usr1cv8:grp1cv8 /var/lib/1c/temp/ – изменит владельца каталога на пользователя usr1cv8 и группу grp1cv8. Мы настоятельно рекомендуем обратиться к системному администратору для корректной настройки прав доступа, чтобы обеспечить безопасность и стабильность работы системы.

Шаг 4: Решаем проблемы с кодировкой и кириллицей

Еще одна распространенная проблема при работе с файлами в Linux – это некорректное отображение или невозможность доступа к файлам, имена которых содержат кириллицу. Это связано с различиями в кодировках. * Кодировка файловой системы: В современных дистрибутивах Linux обычно используется кодировка UTF-8. * Кодировка 1С: 1С:Предприятие также работает с UTF-8. Проблема возникает, если файловая система или настройки локали операционной системы используют другую кодировку (например, KOI8-R или CP1251). В таком случае имена файлов с кириллицей могут отображаться как "кракозябры" или быть недоступными. Решение: Убедитесь, что системная локаль и кодировка файловой системы на сервере Linux настроены на UTF-8. Это можно проверить с помощью команды locale в терминале Linux. Если проблема сохраняется, возможно, потребуется переименовать или создавать файлы, используя только латинские символы, или же обратиться к системному администратору для проверки и корректировки настроек локали сервера.

Заключение

Мы с вами подробно рассмотрели все ключевые аспекты программного сохранения файлов в 1С, когда сервер работает под управлением Linux. Помните, что определение операционной системы, правильное формирование путей, учет прав доступа и контроль кодировок являются фундаментальными шагами к успешной реализации этой задачи. Следуя нашим рекомендациям, вы сможете создать надежный и кроссплатформенный код для работы с файловой системой. Успехов в разработке!

← К списку