Как программно сохранить файл в 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: используем прямой слеш и указываем полный путь от корня
    ИмяКаталогаДляСохранения = "/var/lib/1c/temp/"; // Пример общедоступного каталога
    ПолныйПутьКФайлу = ИмяКаталогаДляСохранения + ИмяФайла;
ИначеЕсли ТипПлатформы = ТипПлатформы.Windows Тогда
    // Для Windows: используем обратный слеш и указываем путь с буквой диска
    ИмяКаталогаДляСохранения = "C:\1C_Files\";
    ПолныйПутьКФайлу = ИмяКаталогаДляСохранения + ИмяФайла;
Иначе
    Сообщить("Неподдерживаемая платформа для формирования пути.");
    Возврат;
КонецЕсли;

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

В процессе разработки часто возникает необходимость перемещения данных, для чего отлично подойдет внешняя обработка для копирования файлов и каталогов между Клиентом и Сервером 1С.

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

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

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

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

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

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

Заключение

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

← На главную