Разработка и Конфигурация · 8 мин
Как скрыть текст модуля в 1С: способы защиты кода
Как скрыть текст модуля в 1С: установка пароля на модуль, поставка конфигурации без исходных текстов, ограничения методов защиты и проверка результата.
Текст модуля в 1С скрывается в двух типовых ситуациях: разработчик передаёт доработку заказчику и не хочет раскрывать реализацию, либо фирма защищает собственную конфигурацию от копирования. Штатных средств для этого два — установка пароля на модуль и поставка конфигурации без исходных текстов модулей.
Оба механизма встроены в конфигуратор и не требуют сторонних программ. Однако у каждого есть ограничения: пароль модуля защищает только от просмотра в конфигураторе, а поставка без исходных текстов делает невозможной отладку и часть сервисных операций. Понимание этих границ важно до того, как вы закроете код.
Отдельно стоит различать скрытие кода и скрытие логики. Директивы компиляции (&НаСервере, &НаКлиенте) влияют на место исполнения, но не скрывают текст. Реальную защиту дают только пароль и поставка без исходников.
Что значит «скрыть текст модуля» и когда это нужно
Под скрытием текста модуля понимают защиту исходного кода на встроенном языке 1С от просмотра и изменения. Сам модуль при этом продолжает работать: процедуры и функции исполняются платформой в скомпилированном виде, но открыть исходник в конфигураторе без пароля или вовсе нельзя.
Типовые сценарии: передача обработки или расширения заказчику без раскрытия алгоритмов, продажа тиражного решения, защита ноу-хау в собственной конфигурации, а также выполнение требований, когда код не должен быть доступен администраторам клиента.
Способ 1: установка пароля на модуль
Самый простой метод — поставить пароль непосредственно на текст модуля. Он подходит для отдельных модулей: общих модулей, модулей объектов, модулей форм, модулей менеджеров.
- 1Откройте конфигуратор и нужную конфигурацию.
- 2Откройте текст модуля, который требуется скрыть.
- 3В меню выберите «Текст» → «Установить пароль».
- 4Введите пароль дважды и подтвердите.
- 5Сохраните конфигурацию (F7 или «Конфигурация» → «Сохранить конфигурацию»).
- 6Закройте и заново откройте модуль — должен появиться запрос пароля.
После установки пароля модуль открывается только после ввода пароля. Без него текст недоступен ни для просмотра, ни для редактирования, ни для сравнения конфигураций по тексту модуля.
Ограничения парольной защиты
Пароль защищает только от штатного просмотра в конфигураторе. Скомпилированный образ модуля по-прежнему хранится в базе, и существуют сторонние средства, позволяющие восстановить исходный текст. Пароль модуля — это защита «от честных», а не криптография.
Также учтите: пароль не переносится автоматически при выгрузке конфигурации в файлы и не заменяет лицензионную защиту тиражных решений. Если модуль входит в поставку без исходных текстов, пароль на него ставить не требуется.
Способ 2: поставка конфигурации без исходных текстов
Для передачи решения целиком используется механизм поставки. В настройках поставки (меню «Конфигурация» → «Поставка конфигурации» → «Настройка поставки») можно указать, что конфигурация поставляется без исходных текстов модулей — полностью или для выбранных объектов.
При создании файла поставки платформа включает в него только скомпилированные образы. У получателя конфигурация устанавливается и работает, но тексты закрытых модулей в конфигураторе отображаются как недоступные.
- 1Откройте «Конфигурация» → «Поставка конфигурации» → «Настройка поставки».
- 2Включите вариант поставки без исходных текстов модулей (всех или выборочно).
- 3Отметьте модули, тексты которых нужно исключить, если защищаете не всё.
- 4Создайте файлы поставки и обновления.
- 5Проверьте результат на тестовой базе: установите поставку и попробуйте открыть закрытый модуль.
Что перестаёт работать после поставки без исходников
Закрытые модули нельзя отлаживать: точки останова в них не сработают, поскольку отладчику нужен исходный текст. Сравнение и объединение конфигураций по таким модулям выполняется без детализации кода. Замер производительности покажет вызовы, но без построчной статистики.
Поэтому перед закрытием кода завершите отладку и зафиксируйте версию. Любая ошибка в закрытом модуле будет диагностироваться у клиента значительно сложнее.
Защита внешних обработок и отчётов
Внешние обработки и отчёты (файлы .epf и .erf) защищаются паролем аналогично модулям конфигурации. Откройте обработку в конфигураторе, перейдите в модуль объекта или формы и установите пароль через меню «Текст».
Для тиражных внешних обработок дополнительно применяют привязку к базе: в коде проверяют, например, имя информационной базы или значение константы, и прекращают работу при несовпадении. Это не скрывает текст, но ограничивает несанкционированное использование.
Сравнение способов защиты
Быстро, подходит для отдельных модулей и внешних обработок. Ограничение: защита слабая, существуют средства восстановления текста.
Надёжнее, подходит для передачи конфигурации целиком. Ограничение: невозможна отладка и детальное сравнение закрытых модулей.
Дополняет скрытие, ограничивает запуск на чужих базах. Ограничение: не скрывает текст сам по себе, требует доработки кода.
Проверка результата и типичные ошибки
После установки пароля или создания поставки обязательно проверьте защиту со стороны «получателя». Откройте базу под пользователем без пароля, попробуйте открыть закрытый модуль, выполнить сравнение конфигураций и запустить отладку. Текст не должен отображаться ни в одном из этих сценариев.
Как проверить результат
Запрашивается пароль или текст помечен как недоступный
Модуль открывается и читается без ограничений
Функциональность закрытых модулей исполняется штатно
Ошибки вызова процедур, падение функций
По закрытым модулям детализация текста отсутствует
Текст виден в окне сравнения
Что важно запомнить
Скрыть текст модуля в 1С можно паролем (для отдельных модулей и внешних обработок) или поставкой конфигурации без исходных текстов (для передачи решения целиком). Перед закрытием сохраните исходники, завершите отладку и проверьте защиту на тестовой базе с позиции получателя.
Частые вопросы
Можно ли скрыть только часть процедур в модуле?
Штатно — нет: пароль и поставка без исходников применяются к модулю целиком. Если нужно закрыть только часть логики, выносите её в отдельный общий модуль и защищайте его.
Работает ли защита в расширениях конфигурации?
Да, на модули расширения также можно установить пароль через конфигуратор. Механизм поставки без исходных текстов для расширений применяется с ограничениями — проверяйте поведение на вашей версии платформы.
Виден ли закрытый модуль при выгрузке конфигурации в файлы?
Модуль, поставляемый без исходного текста, не выгружается в файлы как читаемый код. Модуль под паролем выгружается в защищённом виде — открыть его текст без пароля нельзя.
Сможет ли администратор клиента снять защиту?
Штатными средствами конфигуратора — нет, без пароля текст не открывается. Однако полной гарантии не даёт ни один метод: скомпилированный код теоретически восстанавливается специализированными инструментами, поэтому критичные секреты (ключи, пароли доступа) в коде хранить нельзя в любом случае.
Ломается ли обновление конфигурации после закрытия модулей?
Может ломаться, если обновление предполагает изменение закрытых модулей или их детальное сравнение. Поэтому сценарий обновления на поставке без исходных текстов нужно обязательно прогонять на копии базы до передачи клиенту.
Нужно ли скрывать код, если база и так защищена правами доступа?
Права доступа ограничивают работу пользователей, но администратор с доступом к конфигуратору увидит любой незащищённый модуль. Если задача — скрыть реализацию от всех, кто получает базу, пароль или поставка без исходников необходимы независимо от настройки прав.