Приветствуем вас! Сегодня мы с вами разберем одну из частых и порой непростых задач для разработчиков 1С, работающих в гибридных инфраструктурах или полностью перешедших на Linux: программное сохранение файлов. Если ваш сервер 1С:Предприятия работает под управлением операционной системы Linux, то к привычным для Windows-разработчиков методам и подходам добавляются свои особенности. Мы рассмотрим эти нюансы подробно, а также упомянем полезные инструменты для работы с файловой системой на сервере в режиме тонкого клиента, чтобы вы могли успешно реализовать функционал сохранения файлов в любой среде.
Прежде чем формировать путь к файлу или выполнять специфичные для ОС действия, нам необходимо точно определить, на какой платформе сейчас работает 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, или даже будущие версии, которые могут быть добавлены. Всегда лучше явно проверять тип платформы, которая нас интересует.
Теперь, когда мы знаем, на какой операционной системе мы работаем, мы можем правильно сформировать путь к файлу для сохранения. Это один из самых значительных аспектов, требующих внимания. Разберем ключевые отличия:
/). Например: /home/user/documents/report.txt.\). Например: C:\Users\User\Documents\Report.txt./. Точки монтирования для съемных носителей или дополнительных дисков часто располагаются в каталогах /mnt или /media, но могут быть настроены в любом другом месте.Посмотрим на пример формирования пути:
ПолныйПутьКФайлу = "";
ИмяФайла = "ОтчетПоПродажам.xlsx";
ИмяКаталогаДляСохранения = "";
Если ТипПлатформы = ТипПлатформы.Linux_x86 ИЛИ ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда
// Для Linux: используем прямой слеш и указываем полный путь от корня
ИмяКаталогаДляСохранения = "/var/lib/1c/temp/"; // Пример общедоступного каталога
ПолныйПутьКФайлу = ИмяКаталогаДляСохранения + ИмяФайла;
ИначеЕсли ТипПлатформы = ТипПлатформы.Windows Тогда
// Для Windows: используем обратный слеш и указываем путь с буквой диска
ИмяКаталогаДляСохранения = "C:\1C_Files\";
ПолныйПутьКФайлу = ИмяКаталогаДляСохранения + ИмяФайла;
Иначе
Сообщить("Неподдерживаемая платформа для формирования пути.");
Возврат;
КонецЕсли;
// Перед сохранением файла убедитесь, что каталог существует.
Попытка
Каталог = Новый Каталог(ИмяКаталогаДляСохранения);
Если НЕ Каталог.Существует() Тогда
Каталог.Создать();
КонецЕсли;
Исключение
Сообщить("Ошибка при создании каталога: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
В процессе разработки часто возникает необходимость перемещения данных, для чего отлично подойдет внешняя обработка для копирования файлов и каталогов между Клиентом и Сервером 1С.
В Linux сетевые ресурсы (например, общие папки SMB/CIFS с Windows-серверов или NFS) обычно монтируются в локальную файловую систему. Это означает, что после монтирования сетевая папка становится доступной как обычный локальный каталог. Например, если сетевая папка //имякомпании/общиедокументы смонтирована в Linux как /mnt/company_share, то для 1С путь к файлу будет выглядеть как /mnt/company_share/документ.txt. Таким образом, программная работа с такими путями не будет отличаться от работы с обычными локальными файлами.
В отличие от Windows, где права доступа часто настраиваются через графический интерфейс и наследуются, в Linux права доступа к файлам и каталогам являются критически важным аспектом и управляются более строго. Если у пользователя, от имени которого работает сервер 1С, нет достаточных прав на запись в целевой каталог, сохранение файла будет невозможно.
* Пользователь 1С: Сервер 1С обычно запускается от имени пользователя (например, usr1cv8). Именно ему должны быть предоставлены права на запись.
* Команда chmod: Для изменения прав используется chmod. Например:
* sudo chmod 775 /var/lib/1c/temp/ – предоставит права на запись владельцу и группе.
* sudo chown usr1cv8:grp1cv8 /var/lib/1c/temp/ – изменит владельца каталога на пользователя 1С.
Мы настоятельно рекомендуем обратиться к системному администратору для корректной настройки прав доступа, чтобы обеспечить безопасность и стабильность работы системы.
Еще одна распространенная проблема при работе с файлами в Linux – это некорректное отображение имен файлов с кириллицей.
* Кодировка файловой системы: В современных дистрибутивах Linux обычно используется UTF-8.
* Кодировка 1С: 1С:Предприятие также работает с UTF-8.
Решение: Убедитесь, что системная локаль и кодировка файловой системы на сервере Linux настроены на UTF-8. Это можно проверить с помощью команды locale в терминале Linux.
Мы подробно рассмотрели все ключевые аспекты программного сохранения файлов в 1С под Linux. Помните, что определение операционной системы, правильное формирование путей и учет прав доступа являются фундаментальными шагами.Следуя нашим рекомендациям, вы сможете создать надежный и кроссплатформенный код для работы с файловой системой. Успехов в разработке!