Особенности работы информационных систем 1С под управлением Linux

06.12.24

Администрирование - Linux

Александр Кириллов, руководитель группы разработки компании «ИТ-Экспертиза», на конференции INFOSTART TECH EVENT 2024 выступил с докладом на тему «Как найти и устранить платформеннозависимый код менее, чем за 5 лет». Материал получился интересным и объемным, поэтому мы решили сделать на базе выступления Александра цикл статей. В первой части начнем с особенностей работы информационных систем 1С под управлением ОС Linux.

 

Для начала давайте вернемся на 10 лет назад и вспомним, с чего начиналось импортозамещение в России. В далеком 2014-м, когда впервые было заявлено про «импортозамещение» – большинство не восприняло это всерьез. И мало кто допускал, что мы на самом деле можем лишиться ключевых западных технологий и уж тем более – создать свои конкурентные продукты.

Однако уже в 2022 году, после ухода большей части иностранных компаний, рынок столкнулся с необходимостью поиска собственных решений. И особенно это коснулось ИТ, где исторически сложилось доминирование ведущих мировых вендоров.

Времени на подготовку не было вообще, а огромная нагрузка свалилась не только на головы разработчиков, но и на пользователей программного обеспечения.

Казалось бы, продуктов 1С это не должно было коснуться, так как, во-первых – это отечественное решение, которое не нужно замещать. А во-вторых, системы 1С уже давно функционируют и в ОС MS Windows, и в ОС Linux. И СУБД тоже поддерживаются в достаточном разнообразии.

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

Тем не менее, реальность как говорится, намного разнообразней. В силу «открытости» типовых решений 1С для кастомизации (доработки), накопился огромный парк систем, адаптированных под конкретные потребности заказчиков. А эти доработки вносили специалисты совершенно разного уровня квалификации.

При этом, подавляющее количество рабочих станций и серверов под 1С до недавнего времени функционировало в технологическом стеке Microsoft: MS Windows + MS SQL Server. С возникновением потребности в импортозамещении, иными словами – миграции в стек Linux + Postgres, возникла и потребность в проверке всех этих решений на работоспособность в новой для них среде.

В результате чего появился список механизмов ОС и платформы 1С, к которым придется внимательно присмотреться накануне миграции «из Windows в Linux». Об этом дальше и поговорим.

 

 

1С под управлением Linux: «Новичок идет в Гугл, а эксперт – на 1С:ИТС»

Предположим, что нам нужно адаптировать решение 1С к работе под Linux. С чего начать? 

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

  • особенности файловой системы
  • отсутствие механизмов COM, OLE, ActiveDocument
  • работа с внешними устройствами
  • отдельные объекты технологической платформы 1С:
    • ИнтернетПочта
    • ПолеHTMLДокумента
  • шрифты
  • ограниченность в правах

Рассмотрим подробнее каждое из направлений и начнем с особенностей файловой системы. В отличие от Windows, в Linux файлы с одинаковыми именами, но написанными в разном регистре, являются разными и могут располагаться в одном каталоге. Например, «file.txt» и «File.txt». Поэтому во всех местах кода, который работает с конкретным файлом, его имя и путь к нему должны быть указаны в одном регистре.

 

 

Помимо этого, в Linux отсутствует понятие дисков; в этой ОС существует корневая файловая система («/»), в любое место которой (в общем случае) может быть вмонтирована (встроена) файловая система внешнего носителя. Что, в свою очередь, может привести к проблемам там, где код писался только под Windows.

Например, если в прикладном решении используются жестко заданные пути, которые ориентированы на Windows (например, «C:\Temp»), то в Linux это скорее всего не заработает.

При указании пути, начинающегося с корневого каталога (например, «\temp\file.txt»), следует помнить, что в Linux это абсолютный путь, начинающийся с корня, а в Windows это путь относительно текущего диска, который может быть разным при разных запусках клиентского приложения.

Но и это еще не все: особенностью Linux является то, что в нем нет возможности обращаться к сетевым ресурсам, используя UNC-нотацию. При необходимости задействовать какой-либо внешний сетевой ресурс, его необходимо предварительно смонтировать (подключить) в корневую файловую систему.

На что еще нужно обратить внимание

При разработке прикладных решений следует помнить, что в Windows и Linux используются разные разделители пути: в Windows это обратный слэш (символ «\»), а в Linux – прямой слэш (символ «/»).

И если при работе с методами встроенного языка такую разницу можно не учитывать, т. к. они корректно работают с любым разделителем, то в случае, если требуется передавать путь во внешнее приложение, следует указывать разделители пути, которые используются в той ОС, под управлением которой работает 1С.

Для получения корректных разделителей пути предназначены функции:

  • ПолучитьРазделительПути()
  • ПолучитьРазделительПутиКлиента()
  • ПолучитьРазделительПутиСервера()

Кроме этого, Windows и Linux по-разному обрабатывают файловые маски.

Например, маска «*.*» в Windows означает выборку всех файлов (все имена + все расширения). А в Linux для поиска всех файлов используется просто «звездочка» (символ «*»).

Такое различие может приводить к неожиданному поведению методов встроенного языка  НайтиФайлы(), УдалитьФайлы() и ДиалогВыбораФайла. Для обхода этой проблемы и получения корректной файловой маски, описывающей все файлы, предназначены функции:

  • ПолучитьМаскуВсеФайлы()
  • ПолучитьМаскуВсеФайлыКлиента()
  • ПолучитьМаскуВсеФайлыСервера()

 

 

Важно помнить: в Linux механизмы COM, OLE, ActiveDocument отсутствуют. По этому поводу фирма 1С дает следующие рекомендации:

  • для интеграции необходимо использовать другие средства:
    • файловый обмен в формате XML
    • web-сервисы или http-сервисы
    • шина данных
    • и подобные
  • для администрирования кластера серверов «1С:Предприятия» использовать сервер администрирования (ras), утилиту администрирования (rac) и объект АдминистрированиеСервера. Можно использовать наш ПУСК – он бесплатен!
  • для получения путей к рабочим каталогам следует использовать методы платформы 1С:
    • РабочийКаталогДанныхПользователя
    • КаталогДокументов
    • КаталогВременныхФайлов
  • переработать внешние компоненты с использованием технологии NativeAPI

 

Работа с внешними устройствами

При работе с внешними устройствами важно помнить, что их имена и доступ к ним по-разному выполняются в различных операционных системах:

  • Windows: COM1, COM2, …
  • Linux: /dev/ttyS0, /dev/ttyS1, … или /dev/ttyUSB0, /dev/ttyUSB1, …

Эту особенность следует учитывать как при разработке внешних компонентов, работающих с оборудованием, так и при создании диалогов настройки внешних компонентов.

Например, перечень портов, которые можно указать в обработке, следует получать непосредственно из настраиваемой внешней компоненты с помощью специального метода.

 

 

Отдельные объекты технологической платформы «1С:Предприятие»

 

Не поддерживается работа с объектом Почта

Что касается особенностей взаимодействия с отдельными объектами платформы под Linux, обратите внимание, что работа с объектом Почта не поддерживается. Здесь необходимо рассмотреть альтернативные варианты, например:

  • перевод функциональности на объект ИнтернетПочта
  • использование почтового приложения по умолчанию с помощью функции ЗапуститьПриложение()
  • разработку внешних компонентов для Linux, которые поддерживают работу с нужными информационной системе заказчика установленными почтовыми клиентами

Особенности при работе с объектом ПолеHTMLДокумента

Для работы с HTML в «1С:Предприятии» под операционной системой Linux используется WebKit, а под Windows – Internet Explorer (в старых версиях текущая версия) и WebKit (в более свежих версиях). В связи с этим, при работе с HTML нужно учитывать следующие моменты:

Шрифты: как «играть с шрифтами и не проиграть»
 

Что касается шрифтов, при разработке прикладных решений рекомендуется всегда использовать стилевые шрифты, без явного указания гарнитуры шрифта. Можно, при необходимости, взять шрифты, входящие в состав Microsoft Core Fonts. Другие шрифты в прикладных решениях использовать не рекомендуется, так как они могут отсутствовать в той или иной операционной системе, и при этом внешний вид прикладного решения может быть искажен.

Контроль пользовательских прав

 

И последняя самая важная особенность – это работа с правами доступа на уровне ОС.

В Linux не принято работать от имени учетной записи супер-пользователя (root). Обычному пользователю для записи всегда доступен только домашний каталог и, как правило, каталог временных файлов.

Остальная часть файловой системы может быть доступна либо только для чтения, либо быть недоступной вообще. Поэтому при разработке крайне важно сразу учитывать, какой доступ будет иметь пользователь ОС, от лица которого запускается «1С:Предприятие». Если не учитывать права пользователя ОС, 1С может не запуститься вовсе, либо в процессе работы выдавать неожиданные ошибки, либо попадать в трудно-расследуемые ситуации.

Проверить на всякий случай

После детального анализа синтакс-помощника и в ходе использования разнообразных прикладных решений 1С под Linux удалось обнаружить дополнительный перечень методов и объектов, которые либо требуют внимания при работе под этой ОС, либо не работают совсем. Перечисляем ниже.

Объекты и методы, требующие внимания:

  • Методы для работы с модулем криптографии используют параметры, которые зависят от ОС. Например:
    • НачатьПолучениеИнформацииМодуляКриптографии
    • ПолучитьИнформациюМодуляКриптографии
    • ПолучитьИнформациюМодуляКриптографииАсинх
  • Необходимо корректно передавать сертификат клиента в зависимости от ОС: 
    • СертификатКлиентаWindows
    • СертификатКлиентаLinux
  • Необходимо корректно передавать сертификаты удостоверяющих центров в зависимости от ОС:
    • СертификатыУдостоверяющихЦентровWindows
    • СертификатыУдостоверяющихЦентровLinux
  • При использовании методов СоздатьФайл и СоздатьИндексныйФайл объекта XBase созданный файл будет иметь расширение в верхнем регистре

Неподдерживаемые Linux объекты и методы:

  • Объект ИзвлечениеТекста
  • Объект ИнтернетСоединение
  • Объект МенеджерПанелиЗадачОС
  • Методы УстановитьНевидимость и УстановитьНевидимостьАсинх
  • Методы ПолучитьОтображениеЗаголовкаОС и УстановитьОтображениеЗаголовкаОС

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

Полезные ссылки 1С:ИТС по материалам статьи

Доклад Александра Кириллова
 INFOSTART TECH EVENT 2024

Linux конфигурация СУБД платформа импортозамещение миграция кластер

См. также

Linux Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Задача разработки перед выполнением проходит пять стадий принятия: отрицание, гнев, поиск в интернете, депрессия и чтение документации. Некоторым темы, затронутые в публикации, будут знакомы, некоторым покажутся банальными, но, надеюсь, некоторым они сэкономят немного времени и нервов. По сути это шпаргалка самому себе по тем вещам, которые потребовали более часа поисков.

23.12.2024    2135    capitan    7    

15

Linux Системный администратор Программист Бесплатно (free)

Проект перевода 10+ систем 1С на 2000+ пользователей в Авито завершен успешно, преодолев технические трудности и «черных лебедей» в виде неопределенности, демотивации, потерь производительности и нереалистичных требований руководства. Расскажем об опыте проекта, в котором было «очень страшно», но в итоге всё получилось.

29.11.2024    1566    kirill.skoromykin    1    

7

Linux Программист Бесплатно (free)

При многолетней эксплуатации 1С на Windows и MS SQL в базе накапливаются не самые оптимальные запросы, COM-объекты и скрипты, зависящие от ОС. Из-за этого процесс перехода на PostgreSQL и переноса сервера 1С на Linux неизбежно осложняется длительным исправлением кода и оптимизацией запросов. Расскажем о том, как с задачей такого рефакторинга справились в компании Avito.

13.11.2024    6196    klimat12    17    

28

Облачные сервисы, хостинг Linux Тестирование QA Сервера Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Завершающая публикация цикла "В облако на работу:.. Рецепты от Капитана", в ходе которых был собран полнофункциональный рабочий контур 1С в сети на отечественной Ред ОС. С веб-серверами, доменной авторизацией, архивированием, отказоустойчивостью и прочая, прочая... В этой статье мы определяемся с быстродействием системы, проводим нагрузочное тестирование и отпускаем ее в свободное плавание (зачеркнуто) выпускаем ее в продуктовый контур, где, конечно же, придется отлавливать ошибки, мониторить состояние и т.п.

31.10.2024    1656    capitan    0    

0

Облачные сервисы, хостинг Linux Сервера Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Одна из завершающих публикаций цикла "В облако на работу:.. Рецепты от Капитана", в ходе которых был собран полнофункциональный рабочий контур 1С в сети на отечественной Ред ОС. С веб-серверами, доменной авторизацией, архивированием и прочая, прочая... На закуску разбираемся с отказоустойчивостью. В этой публикации для серверов 1С заодно попробуем подобно сериалу «Разрушители легенд» подтвердить или опровергнуть пару устойчивых мифов о требованиях назначения функциональности.

18.10.2024    2221    capitan    5    

13

Linux Системный администратор Программист Стажер Платформа 1С v8.3 Россия Бесплатно (free)

1C > Postgres > (Linux) > мы (=проблемы в 2024). Информация будет полезна начинающим 1С программистам (и сисадминам). Без ИТС. Часть 1.

01.07.2024    6644    AlOkt    30    

20

Сканер штрих-кода Linux Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

Драйвер сканера штрих-кодов в 1С выполнен по технологии NativeAPI, следовательно, поддерживается возможность работы в Linux, но сама настройка оказалось не такой простой, как в Windows, понадобились навыки администрирования linux. В данной публикации представлен опыт установки сканера Mercury CL-2200 P2D BT в ALT Linux.

18.06.2024    1827    MOleg82    1    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. partizand 139 06.12.24 18:37 Сейчас в теме
По правам непонятно.
Получается в Windows принято 1с под админом запускать?
Стандартный подход Linux в фирмой 1с к сожалению не используется.
Когда создается служебный пользователь и ему даются права на каталог в /var/lib. Заодно он изолируется по максимуму через systemd.
Когда последний раз смотрел, установленный сервер хранил все в home. Это прям ужас.
4. oldcopy 174 09.12.24 00:21 Сейчас в теме
(1) В чем ужас? Это нормальный Linux подход.
6. partizand 139 09.12.24 18:33 Сейчас в теме
(4) Это не нормальный подход
Системные сервисы не хранят данные в home.
Думаю и в виндe примерно так же.
Postgres же не хранит данные в home.
2. SerVer1C 839 06.12.24 20:49 Сейчас в теме
Было бы удобно в видео формате посмотреть доклад.
3. support 4453 08.12.24 11:40 Сейчас в теме
5. AndreyShitov 09.12.24 07:40 Сейчас в теме
Позанудствую.

В отличие от Windows, в Linux файлы с одинаковыми именами, но написанными в разном регистре, являются разными

Не совсем правда. Ни кто не запрещает смонтировать ntfs раздел регистронезависемым или создать регистронезависимый ext4 раздел.
Это файловые системы в Linux, в основном, регистрозависимы. Поэтому чтобы "Документы" открывались по "ДОКУМЕНТЫ" и "документы", надо явно указать параметры монтирования.

Помимо этого, в Linux отсутствует понятие дисков;

Существует. Отсутствуют псевдонимы для них (A:, B:, C:,D: и т. п.).
В Windows отсутствует возможность посмотреть / (который тоже есть, но спрятан в юзерспейсе), но назначить каталог в файловой системе одного раздела точкой монтирования другого раздела можно и в Windows, причем из коробки.

если в прикладном решении используются жестко заданные пути

то не факт, что они существуют (и их можно создать) на другом сервере и под Windows. Хадкодишь пути — ССЗБ и ходи проверяй их корректность.

(например, «\temp\file.txt»), следует помнить, что в Linux это абсолютный путь

В Linux это не абсолютный путь, а просто строка. В Linux обратные слеши — символы экранирования. Корректный путь /tmp/file.txt. Вы же ниже об этом же сами пишете.

а в Windows это путь относительно текущего диска

Раздела. На диске их может быть много. И даже не раздела, а псевдонима (ибо c:\users\user\ может быть на одном диске, а c:\users\user\documents уже на другом).

Например, маска «*.*» в Windows означает выборку всех файлов (все имена + все расширения). А в Linux для поиска всех файлов используется просто «звездочка» (символ «*»).

Возможно, стоило пояснить, что связано это с отсутствием искусственного ограничения в имени "файл.расишение".
И как из-за старой ошибки в обработке имён одной утилитой, все решили что это фича и "скрытые" файлы теперь называют с первой точки.

При необходимости задействовать какой-либо внешний сетевой ресурс, его необходимо предварительно смонтировать (подключить) в корневую файловую систему.

Подключать его приходится и в Windows. Это происходит прозрачно. Один набор локальных "дисков" и один протокол для доступа по сети (smb), это легко прячется под c:\ или \\server\.
В линуксе же доступно больше протоколов, поэтому файловые менеджеры требуют явно указывать по какому из них ты доступ получать хочешь (smb://server/, nfs://server, sshfs://server и т.п.).
И файловые менеджеры это делают тоже прозрачно, как и в Windows. Но под капотом это, да, монтирование в локальный каталог. Кстати, оно тоже автоматизируется.
Но программа, таки, сама должна позаботиться об этом.
Dragonim; nameless2987; zqzq; +3 Ответить
Оставьте свое сообщение