Анализ конфигурации 1С на наличие платформеннозависимого кода

31.01.25

Разработка - Рефакторинг и качество кода

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

 

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

Итак, после того, как мы определили критерии, по которым можно найти потенциально проблемные места в коде, кажется, что достаточно выполнить поиск по конфигурации и выявить объекты, требующие рефакторинга. Звучит легко и просто, но только в теории.

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

В первую очередь на ум приходит «Автоматизированная проверка конфигураций» (АПК). Мы не стали изобретать велосипед и просто реализовали для АПК свои правила, ниже приводим полный список.

 

Правила проверки конфигураций на наличие платформеннозависимого кода

  • в зависимости от варианта исполнения внешний компонент может быть COM или Native. При этом, компонент на Native API должен быть рассчитан на работу в Linux
  • в операционной системе Linux метод УстановитьНевидимость не работает
  • в операционной системе Linux метод УстановитьНевидимостьАсинх не работает
  • запускаемое приложение должно быть адаптировано к использованию Linux
  • ИзвлечениеТекста используется только для операционных систем MS Windows NT 4.0, 2000, XP, Vista, 7 и выше
  • Полный список см. Приложение 1

Однако функциональности АПК нам оказалось недостаточно. В процессе анализа выяснилось, что могут случаться ложные срабатывания, либо, по договоренности с заказчиком, не нужно выполнять рефакторинг части подсистем. Поэтому в дополнение к автоматизированному анализу добавили сущность «Рекомендация»; с ее помощью можно конкретизировать место обнаружения ошибки и в дальнейшем выполнять по ней фильтрацию.

 

Доработки АПК: конкретизация найденной проблемы с помощью «Рекомендации»

  • вместо COM-объекта v83.ComConnector следует использовать сервер администрирования (ras) и утилиту администрирования (rac)
  • для работы с буфером обмена использовать механизмы встроенного языка платформы 1С
  • использовать функцию ПолучитьМаскуВсеФайлы()
  • при использовании ЗапуститьПриложение, НачатьЗапускПриложения убедиться, что запускаемое приложение адаптировано под ОС Linux
  • Полный список см. Приложение 2

 

 

Поскольку нам было важно понимать, как выполняется платформеннозависимый код – на клиенте или на сервере, мы добавили директивы компиляции, которые показывают контекст выполнения программного кода:

  • Сервер
  • ВызовСервера
  • КлиентОбычноеПриложение
  • КлиентУправляемоеПриложение

Добавленные поля были выведены в отчет «Найденные ошибки», после чего аудит конфигурации разделился на 2 этапа:

  1. автоматизированная проверка АПК
  2. ручная проверка и простановка рекомендаций разработчиками

Результатом аудита является отчет по конфигурации с проставленными рекомендациями. Пример такого отчета представлен на изображении ниже.

 

 

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

  • необходимость анализировать несколько конфигураций в рамках одного проекта и хранить историю рекомендаций
  • большое количество мест обнаружения в конфигурации (в среднем около 1000), каждое из которых требовало внимания разработчика
  • большая «повторяемость» конфигураций (большинство написано на базе БСП, количество типовых конфигураций невелико)
  • необходимость анализа контекста вызова, т.к. потенциально платформеннозависимый код мог уже находиться в условном блоке с проверкой на ОС
  • необходимость анализа стека вызовов, т.к. условный блок с проверкой на ОС мог находиться выше по стеку вызовов.

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

В связи с этим мы реализовали на базе БСП собственное решение, которое позволяет непосредственно сравнивать между собой модули и переносить уже проставленные рекомендации в новую конфигурацию в случае 100% совпадения места обнаружения. Такой подход позволил бы ускорить процесс аудита и исключить человеческий фактор.

Мы планируем развивать это решение и уже наметили следующие доработки:

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

В следующей статье этого цикла поговорим о рефакторинге платформеннозависимого кода и его подходах.

* * *

Приложение 1. Полный список правил проверки конфигураций на наличие платформеннозависимого кода

  • в зависимости от варианта исполнения внешний компонент может быть COM или Native. При этом, компонент на Native API должен быть рассчитан на работу в Linux

  • в операционной системе Linux метод УстановитьНевидимость не работает

  • в операционной системе Linux метод УстановитьНевидимостьАсинх не работает

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

  • ИзвлечениеТекста используется только для операционных систем MS Windows NT 4.0, 2000, XP, Vista, 7 и выше

  • использование COMОбъекта должно быть с учетом используемой ОС

  • использование Почта должно быть с учетом используемой ОС

  • использование СертификатКлиентаMacOS

  • использование СертификатКлиентаWindows

  • использование СертификатыУдостоверяющихЦентровMacOS

  • использование СертификатыУдостоверяющихЦентровWindows

  • КаталогВременныхФайлов

  • КаталогДокументов

  • КаталогПрограммы

  • маска всех файлов указана вручную (необходимо использовать метод «ПолучитьМаскуВсеФайлы()»)

  • метод ИнтернетСоединение доступен только на компьютерах с установленным Internet Explorer версии 5.0 или выше

  • методы модуля криптографии используют параметры, которые зависят от ОС

  • не поддерживается работа с Xbase в 64-разрядной операционной системе Linux

  • ПолучитьОтображениеЗаголовкаОС для Windows возвращает, отображается ли заголовок ОС в главном окне. Для остальных возвращает Неопределено

  • при использовании «СоздатьФайл», «СоздатьИндексныйФайл» объекта XBase под ОС Linux могут быть проблемы с регистром пути к файлу

  • при использовании свойства ПолеHTMLДокумента.Документ следует использовать только те свойства и методы, которые доступны во всех веб-браузерах

  • РабочийКаталогДанныхПользователя

  • Разделитель пути файла указан вручную (необходимо использовать метод «ПолучитьРазделительПути()»)

  • УстановитьОтображениеЗаголовкаОС для Windows устанавливает отображение заголовка ОС в главном окне. Для остальных вызов метода игнорируется

  • функциональность МенеджерПанелиЗадачОС работает под ОС Windows 7 и выше, и Ubuntu Unity. Под неподдерживаемыми операционными системами не производит никаких действий

  • это расширение исполняемого файла Windows. В зависимости от ОС нужно использовать валидные файлы для данной ОС

* * *

 

Приложение 2. Полный список доработок АПК

  • вместо COM-объекта v83.ComConnector следует использовать сервер администрирования (ras) и утилиту администрирования (rac)

  • для работы с буфером обмена использовать механизмы встроенного языка платформы 1С

  • использовать функцию ПолучитьМаскуВсеФайлы()

  • при использовании «ЗапуститьПриложение», «НачатьЗапускПриложения» убедиться, что запускаемое приложение адаптировано под ОС Linux

  • ложное срабатывание

  • не используется

  • вместо Файл.НачатьИнициализацию() рекомендуется использование конструктора объекта «Файл» по имени файла (начиная с версии платформы 8.3.6.2076)

  • для задержки при выполнении кода рекомендуется использовать внешний компонент «Корпоративный инструментальный пакет» или процедуру «Пауза» общего модуля «ОбщегоНазначенияБТС»

  • формирование таблиц реализовать с помощью объекта ТабличныйДокумент и методов встроенного языка. Для записи книги Excel, состоящей из нескольких листов, рассмотреть возможность использования объекта ПакетОтображаемыхДокументов (доступен начиная с версии платформы 8.3.3)

  • для изменения имени каталога необходимо воспользоваться процедурой «ПеренестиСодержимоеРабочегоКаталога» общего модуля «РаботаСФайламиСлужебныйКлиент» вместо работы с COMОбъект(«Scripting.FileSystemObject»)

  • для изменения имени каталога необходимо воспользоваться командой системы ОС Linux «mv старое_имя новое_имя» вместо работы с COMОбъект(«Scripting.FileSystemObject»)

  • для корректной работы внешний компонент на Native API должен быть рассчитан на работу в ОС Linux. Компоненты можно подключать не только в клиентских приложениях, но и на сервере приложений «1С:Предприятия»

  • для получения текста из файла TXT необходимо воспользоваться объектом «ЧтениеТекста»

  • для работы с электронными таблицами рекомендуется инициализировать табличный документ и воспользоваться методом «Прочитать()», который доступен начиная с версии платформы 8.0. Затем для работы с табличным документом использовать методы встроенного языка 1С

  • для ОС Linux добавить условный оператор с проверкой на тип платформы (функции БСП «ОбщийМодуль.ОбщегоНазначения.ЭтоLinuxСервер()», «ОбщийМодуль.ОбщегоНазначенияКлиент.ЭтоLinuxКлиент()»). Создать и заполнить табличный документ необходимыми данными. Если есть макет для заполнения, то необходимо программно заполнить табличный документ на основании макета. После заполнения табличного документа вызвать платформенную процедуру табличного документа «Записать» с типом файла таблицы «xlsx». Полученный файл «*.xlsx» необходимо разархивировать в файлы «xml» и подменять текст ячейки на необходимую формулу

  • для ОС Linux добавить условный оператор с проверкой на тип платформы (функции БСП «ОбщийМодуль.ОбщегоНазначения.ЭтоLinuxСервер()», «ОбщийМодуль.ОбщегоНазначенияКлиент.ЭтоLinuxКлиент()»). Создать и заполнить табличный документ необходимыми данными. Если есть макет для заполнения, то необходимо программно заполнить табличный документ на основании макета. После заполнения табличного документа вызвать платформенную процедуру табличного документа «Записать». Для записи книги Excel, состоящей из нескольких листов, рассмотреть возможность использования объекта ПакетОтображаемыхДокументов (доступен начиная с версии платформы 8.3.3)

  • для ОС Linux добавить условный оператор с проверкой на тип платформы (функции БСП «ОбщийМодуль.ОбщегоНазначения.ЭтоLinuxСервер()», «ОбщийМодуль.ОбщегоНазначенияКлиент.ЭтоLinuxКлиент()»). Создавать или редактировать файл формата «xlsx» используя механизмы Office Open XML

  • добавить условный оператор с проверкой на тип платформы (функции БСП «ОбщийМодуль.ОбщегоНазначения.ЭтоLinuxСервер()», «ОбщийМодуль.ОбщегоНазначенияКлиент.ЭтоLinuxКлиент()»). Для печати файлов под ОС Linux необходимо вызвать процедуру БСП «НапечататьФайлы» общего модуля «РаботаСФайламиКлиент»

  • добавить условный оператор с проверкой на тип платформы (функции БСП «ОбщийМодуль.ОбщегоНазначения.ЭтоLinuxСервер()», «ОбщийМодуль.ОбщегоНазначенияКлиент.ЭтоLinuxКлиент()»). Для работы с «КриптоПРО» под ОС Linux использовать команды системы

  • добавить условный оператор с проверкой на тип платформы (функции БСП «ОбщийМодуль.ОбщегоНазначения.ЭтоLinuxСервер()», «ОбщийМодуль.ОбщегоНазначенияКлиент.ЭтоLinuxКлиент()»). Использовать сертификаты клиентов и удостоверяющих центров ОС Linux.

  • При использовании «ЗащищенноеСоединениеOpenSSL» для ОС Linux необходимо:

1. В качестве сертификата клиента, начиная с версии платформы 8.3.21, необходимо передавать одноименный объект клиентского сертификата OpenSSL «СертификатКлиентаLinux»
2. В качестве сертификата удостоверяющих центров, начиная с версии платформы 8.3.8, необходимо передавать одноименный объект сертификатов удостоверяющих центров OpenSSL «СертификатыУдостоверяющихЦентровLinux»

  • произвести ограничение использования файлов формата *.doc в случае работы под управлением ОС Linux с выводом соответствующего уведомления пользователю и регистрацией факта обращения к файлу формата *.doc в журнале регистраций. Рекомендация аналитику: для работы в ОС Linux необходимо использовать файлы с расширением *.docx (и возможно *.odt), вместо *.doc. Требуется произвести анализ используемых шаблонов и конвертировать файлы формата *.doc в *.docx. Функционал автозаполнения при работе с форматами *.docx и *.odt адаптирован для работы с ОС Linux и не требует корректировки

  • для корректной работы внешний компонент на Native API должен быть рассчитан на работу в ОС Linux. Компоненты можно подключать не только в клиентских приложениях, но и на сервере приложений «1С:Предприятия»

  • для получения идентификатора текущего процесса необходимо с помощью процедуры «КомандыСистемы» выполнить следующие действия:

1. Создать фоновый процесс из платформы
2. Получить PID нового фонового процесса
3. Получить родителя запущенного процесса, это и будет идентификатор текущего процесса
4. Завершить фоновый процесс

Пример команды:
#!/bin/bash
sleep 30 &
process_id=$!
wait process_id
ps -o ppid= -p process_id
kill -STOP process_id
  • для работы с документом DOM, рекомендуется инициализировать «ДокументDOM» и использовать функционал встроенного языка. Объект «ДокументDOM» доступен, начиная с версии платформы 8.1

  • при работе с внешними источниками необходимо создавать и использовать объект конфигурации «Внешний источник данных»

  • программное обеспечение, совместимое только с ОС семейства Windows, необходимо запускать на клиенте под этой ОС

  • для работы с регулярными выражениями необходимо выполнить один из вариантов доработок:

1. Для доработок использовать методы встроенного языка, доступные, начиная с версии 8.3.23 (данный вариант проще, чем второй)
2. Использовать внешний компонент Native API для выполнения регулярных выражений на платформе 1С:Предприятие 8 «RegEx1CAddin»

  • не следует указывать разделитель пути файла вручную (например, «/»); для этого необходимо использовать в зависимости от контекста:
    • функцию БСП ДобавитьКонечныйРазделительПути() общего модуля ОбщегоНазначенияКлиентСервер
    • функцию БСП ПолучитьПолноеИмяФайла() общего модуля ОбщегоНазначенияКлиентСервер
    • функции ПолучитьРазделительПути()ПолучитьРазделительПутиКлиента() или ПолучитьРазделительПутиСервера()
  • следует использовать функцию БСП РазложитьПолноеИмяФайла() общего модуля ОбщегоНазначенияКлиентСервер для получения имени файла или пути к нему

  • не следует указывать маску всех файлов вручную (например, «*.*»); для этого необходимо использовать функцию ПолучитьМаскуВсеФайлы()

  • для работы с электронными таблицами рекомендуется инициализировать табличный документ и воспользоваться методом «Прочитать()», который доступен, начиная с версии платформы 8.0. Затем для работы с табличным документом использовать методы встроенного языка 1С

  • для программной конвертации документа в pdf для ОС Linux рекомендуется воспользоваться LibreOffice и консольной командой «soffice --headless --convert-to pdf file_name»

  • реализована поддержка работы с объектом XBase при функционировании под управлением 64-разрядной ОС Linux в версии 8.3.3;

  • не рекомендуется использовать строковые константы для путей к файлам. По возможности, следует выносить такие данные в константы (объект конфигурации), хранилища настроек, использовать стандартные каталоги (например, КаталогВременныхФайлов(), КаталогДокументов()...) и т. п.

  • для преобразования xls в csv для ОС Linux необходимо воспользоваться одним из вариантов решения:

1. Из данных xls или табличного документа, путем построчного считывания данных и добавления разделителя между строками, создать текстовую переменную, которую в дальнейшем записать в файл формата «csv» с помощью объекта «ЗаписьТекста»
2. Добавить условный оператор с проверкой на тип платформы (функции БСП «ОбщийМодуль.ОбщегоНазначения.ЭтоLinuxСервер()», «ОбщийМодуль.ОбщегоНазначенияКлиент.ЭтоLinuxКлиент()») и выводить предупреждение о том, что загрузка из файла ««.XLS»« недоступна при работе в Linux

  • при использовании процедуры «ЗапуститьПриложение», «НачатьЗапускПриложения», необходимо:

1. Для запускаемого приложения убедиться, что оно адаптировано под ОС Linux
2. Для файла – проконтролировать наличие ассоциированного с файлом приложения
3. В случае неудачного запуска приложения / файла необходимо зафиксировать ошибку в журнал регистрации

  • при использовании процедуры «НачатьПолучениеИнформацииМодуляКриптографии» менеджера средства криптографии под ОС Linux, необходимо передавать параметр «ПутьМодуляКриптографии»

  • файл, созданный методами «СоздатьФайл» или «СоздатьИндексныйФайл», будет иметь расширение «DBF» (в верхнем регистре), независимо от используемой операционной системы. Так как ОС Linux чувствительна к регистру, необходимо в переданном пути также указывать расширение в верхнем регистре.

 

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

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

См. также

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

Как устроить зависание системы (Ubuntu) из 1С (толстый клиент) с помощью буфера обмена и что с этим делать.

29.01.2025    439    Klok22    1    

10

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

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

23.12.2024    2250    capitan    7    

15

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

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

06.12.2024    1578    it-expertise    6    

22

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

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

29.11.2024    1695    kirill.skoromykin    1    

7

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

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

13.11.2024    6426    klimat12    17    

28

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

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

31.10.2024    1736    capitan    0    

0

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

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

18.10.2024    2356    capitan    5    

13
Оставьте свое сообщение