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

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Инструментарий разработчика Рефакторинг и качество кода Программист Руководитель проекта 1С:Предприятие 8 Абонемент ($m)

MetaVision for 1C PRO — профессиональная версия статического анализатора и визуализатора кода. Загружает выгрузки конфигураций, расширения и внешние файлы, за секунды строит графы функций, находит уязвимости безопасности и подсвечивает проблемы производительности. В арсенале: визуализация логики в виде графов условий, циклов, транзакций и вызовов, статический аудит безопасности с поиском RCE, SSRF, COM-инъекций и паролей в коде, выявление запросов в циклах и вложенных блокировок, полнотекстовый поиск по всем модулям, встроенный редактор с конвертером запросов и автоформатированием, а также честная статистика по объектам и функциям. Главное новшество PRO — до пяти конфигураций одновременно с мгновенным переключением, наложение до пяти расширений как в конфигураторе, анализ внешних файлов в единой связке с основной конфигурацией и пять тем оформления. Инструмент для тех, кто ведёт несколько проектов параллельно и хочет видеть полную картину в одном окне — быстро, наглядно и безопасно.

7 стартмани

19.05.2026    2786    27    KHoroshulinAV    7    

13

Запросы Рефакторинг и качество кода Программист Стажер 1С:Предприятие 8 Бесплатно (free)

Есть запросы, которые сразу вызывают подозрение: десятки соединений, множество временных таблиц, объединения, группировки и длинный список условий. Но чаще проблемы прячутся в другом месте — в запросах, которые выглядят вполне приемлемо. Пара обращений через точку, отбор после виртуальной таблицы, РАЗЛИЧНЫЕ «чтобы убрать дубли», большой список в параметре, реквизит регистратора через составной тип — и вот уже на тестовой базе все летает, а в рабочей базе отчет открывается минуту. Разберу такие случаи из практики: не синтаксические ошибки, а именно запросы, которые формально нормальные, но на больших данных начинают вести себя плохо.

04.05.2026    1737    YA_2060655612    11    

9

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

Код в 1С редко начинает тормозить сразу. Намного чаще он долго выглядит нормальным, а проблемы проявляются позже — когда растут данные, пользователи и количество доработок. В статье разбираю типичные причины такой деградации: запросы в цикле, лишние ПолучитьОбъект(), тяжёлые формы и обработку “по одному”. Статья практическая: с примерами, типичными ошибками и понятными признаками того, что код уже плохо масштабируется.

21.04.2026    1960    YA_2060655612    6    

11

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

Инструмент для тех, кто устал читать модули по 50 тысяч строк и искать ошибки глазами. MetaVision загружает выгруженные файлы конфигурации и за секунды строит графы функций, находит уязвимости и подсвечивает проблемы производительности. Ключевые возможности: Визуализация логики функций (графы условий, циклов, транзакций и вызовов). Статический аудит безопасности (RCE, SSRF, COM-инъекции, пароли в коде). Поиск проблем производительности (запросы в циклах, вложенные блокировки). Полнотекстовый поиск по всем модулям конфигурации. Статистика по объектам и функциям. Безопасность: Программа работает строго локально. Код вашей конфигурации не отправляется в интернет и не анализируется на сторонних серверах. Попробуйте MetaVision сегодня — узнайте, что скрывает ваш код.

20.04.2026    11452    1212    KHoroshulinAV    56    

89

Нейросети Рефакторинг и качество кода Программист Бесплатно (free)

ИИ действительно помогает команде ускориться: быстрее разбирать код, быстрее входить в сложные участки, быстрее запускать доработки. Проблема в том, что вместе со скоростью он может ускорять и другое — накопление скрытой сложности, рост цены изменений и потерю управляемости. В статье разбираю, почему первые успехи с ИИ так легко опьяняют, когда система начинает выставлять счёт и что нужно сделать, чтобы ускорение не превратилось в новый виток технического долга.

17.03.2026    2237    IgorVasilyev    54    

27

Нейросети Рефакторинг и качество кода Программист Бесплатно (free)

В статье рассказываю, как писать код 1С в VS Code с помощью бесплатных AI-моделей 🤖 Используем GLM-4.7 через Roocode + Cerebras (до 1 миллион токенов в день). Подключаем бесплатные MCP. Генерируем новый код и смотрим, как AI справляется с задачами.

06.02.2026    19032    Ibrogim    83    

52

Нейросети Рефакторинг и качество кода Программист Бесплатно (free)

Некоторые задачи можно и нужно делегировать ИИ, а простые задачи можно отдавать бесплатным моделям. В статье коротко рассказываю про расширение roocode для vscode, инструмент openrouter и реальную задачу по рефакторингу кода.

02.02.2026    15210    Ibrogim    58    

50

Рефакторинг и качество кода Программист Бесплатно (free)

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

19.12.2025    3079    GarriSoft    14    

17
Для отправки сообщения требуется регистрация/авторизация