Пароль на модуль 1С 8.3: защита исходного кода обработки и конфигурации

· 9 мин

Содержание

Запаролить модуль в 1С 8.3 можно прямо в Конфигураторе: откройте нужный модуль, в главном меню Текст найдите подменю Пароли и выберите установку пароля. Дважды введите пароль, сохраните конфигурацию или внешнюю обработку . После этого текст модуля откроется только тому, кто знает пароль, а код продолжит выполняться как обычно.

Защита паролем работает на уровне одного модуля. Она скрывает исходный код от любопытных глаз, но не делает его неуязвимым. Для коммерческой защиты разработки у платформы есть способ надёжнее — поставка без исходных текстов.

Зачем закрывать код модуля паролем

Пароль на модуль ставят не ради тайны как таковой. Обычно цель практичная.

  • 🔒 Защитить авторскую разработку. Внешняя обработка, проданная клиенту, не должна разойтись копиями с вашим алгоритмом.
  • 🛠 Не дать «поправить» код. Пользователь с доступом в Конфигуратор не сломает расчёт, который он не видит.
  • 🔑 Спрятать служебные данные. Например, адрес и параметры подключения к своему сервису (хотя хранить пароли в коде вообще плохая идея — об этом ниже).
  • 📦 Отделить зону ответственности. Если клиент не может менять модуль, спор «кто сломал» решается быстрее.

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

Какие модули в 1С можно запаролить

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

МодульГде находитсяКогда защищают
Модуль объекта внешней обработки или отчётаФайл .epf / .erfПродажа и передача обработок клиентам
Модуль формыФорма объекта или внешней обработкиЛогика интерфейса и клиентских вызовов
Общий модульВетка «Общие → Общие модули»Библиотека функций собственной разработки
Модуль объекта, менеджера, набора записейДокументы, справочники, регистрыДоработки типовой конфигурации
Модуль приложения, сеанса, внешнего соединенияКорень конфигурацииРедко: туда лучше не прятать логику

Каждый модуль защищается отдельно и своим паролем. Если в обработке есть модуль объекта и три формы, а вы закрыли только модуль объекта, код форм останется открытым. Это частая причина «утечки» алгоритма: основную логику перенесли в форму и забыли про неё.

Перед защитой перенесите ценный код в один-два модуля — например, в модуль объекта обработки, а из форм вызывайте его экспортные методы. Тогда защищать придётся меньше, а риск забыть что-то снижается.

Как подготовить код к защите паролем

Пароль закрывает модуль целиком, поэтому до его установки стоит навести порядок в структуре. Цель простая: вся ценная логика — в одном модуле, остальные модули только вызывают её.

Схема для внешней обработки:

  1. Расчёт и обработку данных перенесите в экспортные функции модуля объекта.
  2. В модуле формы оставьте обработчики команд и серверную обёртку, которая получает объект обработки и вызывает его функцию.
  3. Пароль ставьте на модуль объекта. Модуль формы можно оставить открытым — в нём нет ничего ценного.

Модуль объекта (закрывается паролем). Предполагается, что у обработки есть табличная часть Товары с колонкой Сумма:

Функция ВыполнитьРасчет(Наценка) Экспорт
    // Здесь ваш авторский алгоритм
    Возврат Окр(Товары.Итог("Сумма") * (1 + Наценка / 100), 2);
КонецФункции

Модуль формы (может оставаться открытым). Наценка — реквизит обработки:

&НаСервере
Функция РассчитатьНаСервере()
    Обработка = РеквизитФормыВЗначение("Объект");
    Возврат Обработка.ВыполнитьРасчет(Объект.Наценка);
КонецФункции

&НаКлиенте
Процедура Рассчитать(Команда)
    Результат = РассчитатьНаСервере();
    Сообщить(СтрШаблон("Итог с наценкой: %1", Формат(Результат, "ЧДЦ=2")));
КонецПроцедуры

Например, при сумме товаров 10 000 и наценке 15 функция вернёт 11 500. Клиент видит, что форма вызывает ВыполнитьРасчет, но не видит, как устроен расчёт.

Не оставляйте в открытых модулях комментарии с описанием алгоритма. Комментарий в форме вида «считаем по формуле…» сводит защиту к нулю.

Как запаролить модуль: пошаговая инструкция

Ниже порядок для внешней обработки. Для модуля конфигурации всё то же самое, только объект открывают в дереве конфигурации.

Шаг 1. Сделайте открытую копию

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

Пароль модуля нельзя восстановить штатными средствами. Потеряли пароль и открытую копию — потеряли возможность править код.

Шаг 2. Откройте модуль

  1. Запустите базу в режиме Конфигуратор.
  2. Для внешней обработки: Файл → Открыть, выберите файл .epf.
  3. В окне обработки нажмите «Действия → Открыть модуль объекта» или откройте нужную форму и перейдите на вкладку «Модуль».
  4. Для общего модуля конфигурации: откройте дерево конфигурации и дважды щёлкните модуль в ветке «Общие модули».

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

Шаг 3. Установите пароль

  1. Поставьте курсор в текст модуля, чтобы окно редактора было активным.
  2. В главном меню выберите Текст → Пароли → Установить пароль. Если пункта нет, проверьте, что активно именно окно модуля, а не дерево объектов.
  3. Введите пароль и подтверждение.
  4. Нажмите «ОК».

Шаг 4. Сохраните и проверьте

  1. Сохраните файл обработки (Ctrl+S) или конфигурацию.
  2. Закройте модуль и откройте его снова. Конфигуратор должен запросить пароль.
  3. Нажмите «Отмена» — текст модуля не должен отображаться.
  4. Запустите обработку в режиме 1С:Предприятие и проверьте, что она работает как раньше.

Для модулей конфигурации после сохранения выполните Конфигурация → Обновить конфигурацию базы данных (F7), иначе пользователи продолжат работать со старой версией.

Перед передачей запароленной обработки клиенту
Выполнено: 0 / 6

Как снять пароль с модуля в 1С

Если пароль известен, снять его так же просто, как поставить.

  1. Откройте модуль и введите пароль в появившемся окне.
  2. В главном меню выберите Текст → Пароли и команду удаления пароля.
  3. Сохраните обработку или конфигурацию. Для конфигурации — обновите конфигурацию базы данных.

Сменить пароль можно через ту же связку: снять старый и сразу установить новый.

Если пароль потерян

Штатного способа «сбросить» пароль модуля нет. Варианты, которые остаются:

  • 📁 найти открытую копию: архив разработчика, старую выгрузку .cf, хранилище конфигурации, резервную копию базы до установки пароля;
  • 📨 запросить исходный код у автора, если обработку писали не вы;
  • 🔄 переписать модуль, если копий нет, а автор недоступен.

В сети есть утилиты, которые «вскрывают» запароленные модули. Использовать их на чужой разработке — нарушение исключительных прав автора: программа для ЭВМ охраняется как литературное произведение. Декомпиляция разрешена законом лишь в узких случаях — для достижения совместимости, и только если нужные сведения нельзя получить иначе. Если обработка куплена, правильный путь — запросить исходники у продавца.

Что учитывать при работе с защищёнными модулями

Пароль закрывает текст, и это бьёт по всем инструментам, которым нужен текст.

  • 🐞 Отладка. Точку останова в закрытом модуле не поставить, пошагово по его коду не пройти. Если ошибка возникает внутри, вы увидите только её текст и место вызова.
  • 🔍 Поиск по конфигурации. Глобальный поиск не найдёт вхождения в закрытых модулях. Переименовали реквизит — а ссылку на него в защищённом общем модуле поиск не покажет.
  • 🔀 Сравнение и объединение. При обновлении типовой конфигурации изменения в закрытом модуле не получится разобрать построчно. Поэтому не ставьте пароль на модули типовых объектов, если базу собираются обновлять.
  • 👥 Командная разработка. Если модуль под паролем лежит в хранилище, каждому разработчику нужен пароль. На практике пароль ставят только на итоговую сборку, а в хранилище держат открытый код.
  • 📄 Выгрузка в файлы. Защищённый модуль не выгружается как читаемый текст .bsl, поэтому системы контроля версий и анализаторы кода его не увидят.

Отдельный момент — проверка конфигурации. Синтаксический контроль (Конфигурация → Проверка конфигурации) запароленные модули проверяет, но если найдена ошибка, исправить её без пароля не выйдет.

Диагностика: выберите симптом

Альтернативные способы защиты кода в 1С

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

СпособЧто даётОграничения
Пароль на модульТекст не виден в КонфигуратореВскрывается сторонними утилитами, мешает отладке
Поставка без исходных текстовВ файл поставки попадает скомпилированный код без текстаРаботает для конфигураций, не для отдельных внешних обработок
Перенос логики на свой серверАлгоритм вообще не попадает к клиенту, 1С вызывает HTTP-сервисНужен сервер и интернет у клиента
Внешняя компонентаКлючевой расчёт в скомпилированной библиотекеТребует разработки на C++ или другом языке
Система лицензирования (СЛК)Привязка к ключу защиты, работа только с лицензиейПлатная, усложняет поставку

Поставка без исходных текстов

Это штатный механизм для разработчиков тиражных решений. Настраивается в Конфигураторе: Конфигурация → Поставка конфигурации → Настройка поставки. Для выбранных объектов указывают поставку без исходных текстов, затем создают файлы поставки командой Конфигурация → Поставка конфигурации → Создать файлы поставки и обновления конфигурации.

Клиент получает .cf, в котором модули есть только в скомпилированном виде. Восстановить из него исходный текст в редакторе нельзя — там просто нечего показывать.

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

Вынос алгоритма на сервер разработчика

Самый надёжный вариант для ценной логики: расчёт выполняется у вас, а в 1С клиента остаётся только вызов. Код обработки при этом может быть открытым — в нём нет ничего, кроме запроса к сервису и разбора ответа.

Технически это выглядит так: на своей стороне вы публикуете HTTP-сервис (в 1С или на любом другом стеке), а обработка клиента отправляет туда исходные данные через HTTPСоединение и получает готовый результат. Доступ к сервису выдаётся по персональному ключу. Если клиент перестал платить или передал обработку третьим лицам, ключ отзывается, и расчёт перестаёт работать. Минус один: без интернета обработка бесполезна, это нужно оговорить с клиентом заранее.

Не прячьте в модуль логины, пароли и токены доступа к своим сервисам, даже под паролем. Модуль может быть вскрыт. Храните такие данные в защищённом хранилище или выдавайте каждому клиенту свой ключ, который можно отозвать.

Частые ошибки и как их избежать

  • ❌ Пароль поставили на единственную копию. Через полгода он забыт, а доработка нужна. Рабочую версию всегда храните открытой.
  • ❌ Закрыли модуль типового объекта. Следующее обновление конфигурации превращается в ручную работу: объединение не может показать различия в тексте.
  • ❌ Один простой пароль на всё. Пароль вида 123 или название фирмы подбирается за минуты. Используйте длинную случайную строку и менеджер паролей.
  • ❌ Защитили модуль объекта, забыли формы. Логика расчёта лежала в обработчике кнопки — и осталась на виду.
  • ❌ Считали пароль полной защитой. Для продаваемых решений рассчитывайте на поставку без исходников, лицензирование или серверную часть.

Частые вопросы

Можно ли поставить один пароль сразу на все модули конфигурации?
Пароль задаётся для каждого модуля отдельно. Если нужно закрыть код целой конфигурации, удобнее использовать поставку без исходных текстов.
Замедляет ли пароль работу модуля?
Нет. Пароль защищает только исходный текст. Скомпилированный код выполняется с той же скоростью.
Будет ли запароленная обработка работать в веб-клиенте и тонком клиенте?
Да, режим запуска на защиту не влияет. Проверьте только, что обработка изначально написана с учётом клиент-серверных директив.
Видит ли пароль администратор базы?
Нет. Права администратора в 1С не дают доступа к тексту запароленного модуля. Пароль модуля не связан с пользователями информационной базы.
Законно ли закрывать код обработки, которую я продаю?
Да. Автор вправе распоряжаться своей программой и защищать её. Условия использования и передачи исходников лучше прописать в договоре с клиентом.

Источники

  • Гражданский кодекс РФ, часть четвёртая, ст. 1261 «Программы для ЭВМ»
  • Гражданский кодекс РФ, часть четвёртая, ст. 1280 «Свободное воспроизведение программ для ЭВМ и баз данных. Декомпилирование программ для ЭВМ»