Для начала давайте вернемся на 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 нужно учитывать следующие моменты:
- отображение HTML-документа в различных операционных системах может различаться
- при доступе к DOM-модели HTML-документа следует использовать только те свойства и методы, которые доступны во всех веб-браузерах, поддерживаемых системой «1С:Предприятие»
Шрифты: как «играть с шрифтами и не проиграть»
Что касается шрифтов, при разработке прикладных решений рекомендуется всегда использовать стилевые шрифты, без явного указания гарнитуры шрифта. Можно, при необходимости, взять шрифты, входящие в состав Microsoft Core Fonts. Другие шрифты в прикладных решениях использовать не рекомендуется, так как они могут отсутствовать в той или иной операционной системе, и при этом внешний вид прикладного решения может быть искажен.
Контроль пользовательских прав
И последняя самая важная особенность – это работа с правами доступа на уровне ОС.
В Linux не принято работать от имени учетной записи супер-пользователя (root). Обычному пользователю для записи всегда доступен только домашний каталог и, как правило, каталог временных файлов.
Остальная часть файловой системы может быть доступна либо только для чтения, либо быть недоступной вообще. Поэтому при разработке крайне важно сразу учитывать, какой доступ будет иметь пользователь ОС, от лица которого запускается «1С:Предприятие». Если не учитывать права пользователя ОС, 1С может не запуститься вовсе, либо в процессе работы выдавать неожиданные ошибки, либо попадать в трудно-расследуемые ситуации.
Проверить на всякий случай
После детального анализа синтакс-помощника и в ходе использования разнообразных прикладных решений 1С под Linux удалось обнаружить дополнительный перечень методов и объектов, которые либо требуют внимания при работе под этой ОС, либо не работают совсем. Перечисляем ниже.
Объекты и методы, требующие внимания:
- Методы для работы с модулем криптографии используют параметры, которые зависят от ОС. Например:
-
НачатьПолучениеИнформацииМодуляКриптографии
-
ПолучитьИнформациюМодуляКриптографии
-
ПолучитьИнформациюМодуляКриптографииАсинх
-
- Необходимо корректно передавать сертификат клиента в зависимости от ОС:
-
СертификатКлиентаWindows
-
СертификатКлиентаLinux
-
- Необходимо корректно передавать сертификаты удостоверяющих центров в зависимости от ОС:
-
СертификатыУдостоверяющихЦентровWindows
-
СертификатыУдостоверяющихЦентровLinux
-
- При использовании методов СоздатьФайл и СоздатьИндексныйФайл объекта XBase созданный файл будет иметь расширение в верхнем регистре
Неподдерживаемые Linux объекты и методы:
-
Объект ИзвлечениеТекста
-
Объект ИнтернетСоединение
-
Объект МенеджерПанелиЗадачОС
-
Методы УстановитьНевидимость и УстановитьНевидимостьАсинх
-
Методы ПолучитьОтображениеЗаголовкаОС и УстановитьОтображениеЗаголовкаОС
Это была первая статья из цикла по докладу Александра Кириллова «Как найти и устранить платформеннозависимый код менее, чем за 5 лет». В следующих материалах поговорим про способы анализа конфигураций 1С на наличие платформеннозависимого кода, а также затронем темы рефакторинга и тестирования.
Полезные ссылки 1С:ИТС по материалам статьи
- https://its.1c.ru/db/v8std/content/723/hdoc
- https://its.1c.ru/db/v8325doc#bookmark:dev:TI000002706
- https://its.1c.ru/db/v837doc#bookmark:dev:TI000001208
Доклад Александра Кириллова
INFOSTART TECH EVENT 2024