Анализ конфигурации 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 конфигурация СУБД платформа импортозамещение миграция кластер

См. также

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

Пошаговая инструкция для обновления платформы 1С на сервере Linux Debian.

28.03.2025    508    California_Dreaming    2    

5

Рефакторинг и качество кода Программист Платформа 1С v8.3 Россия Бесплатно (free)

Диалог "Вопрос" использовался очень интенсивно в старых версиях кода и также его используют в УФ довольно часто. Иногда очень неудобно использовать рефакторинг через асинхронные вызовы ПоказатьВопрос и ВопросАсинх по разным причинам. Есть ещё одно решение, как избежать больших переделок кода, когда Вы не планируете его использовать где-то на других платформах и Веб-клиентах.

26.03.2025    304    ksuman    6    

3

HighLoad оптимизация Рефакторинг и качество кода Технологический журнал Программист Платформа 1С v8.3 Россия Бесплатно (free)

Технологии бегут вперёд, но боль производительности 1С остаётся вечной: инфраструктура, код или настройки? Пока ИИ не научился чинить всё «на лету», мы автоматизировали ключевое — диагностику. Читайте статью — показываем, как превратить хаос диагностики в понятные графики и цифры. Спойлер: это работает даже если ваша 1С — «чёрный ящик» на старом железе.

19.03.2025    2545    EFSOL_oblako    4    

7

Рефакторинг и качество кода Программист Стажер Платформа 1С v8.3 Бесплатно (free)

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

17.03.2025    2325    Bukaska    5    

7

Нейросети Рефакторинг и качество кода Тестирование QA Программист Платформа 1С v8.3 Бесплатно (free)

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

11.03.2025    4620    mrXoxot    52    

51

Рефакторинг и качество кода Тестирование QA Программист Платформа 1С v8.3 Бесплатно (free)

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

11.03.2025    494    it-expertise    0    

3

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

В очередной раз решая проблему с доступом к файлу программной лицензии - решил сделать памятку на будущее для себя и коллег.

10.03.2025    903    unichkin    10    

11

Инструментарий разработчика Рефакторинг и качество кода Программист Платформа 1С v8.3 Бесплатно (free)

Расширяемый форматтер структуры модулей 1С. Умеет автоматически расставлять стандартные области и раскидывать по ним процедуры и функции модуля, оформлять стандартные комментарии к методам с помощью ИИ. Также умеет анализировать модуль - извлекать структуру вызовов, используемые поля и т.д. Реализован в виде расширения (.cfe). Можно использовать как платформу для обработки кода в своих задачах автоматизации разработки.

12.02.2025    7041    448    wonderboy    44    

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