Шаг за шагом: защита конфигурации 1С
В общем случае для защиты своей конфигурации 1С понадобится:
создать продукт в своем личном кабинете;
определить способ лицензирования продукта - по количеству пользователей или хостов;
установить на свой компьютер инструмент для выполнения процедуры защиты продукта;
добавить в продукт интерактивную форму активации продукта и вспомогательные модули системы лицензирования.
Далее рассмотрим всю процедуру по шагам. Создадим простую конфигурацию 1С, а для выдачи лицензий на работу с ней будем использовать демо-доступ к личному кабинету. Адрес, логин и пароль высылаются на электронную почту после регистрации.
Обзор демонстрационной базы
Для примера будем использовать конфигурацию для учета домашних животных.
Скачайте файл демонстрационной базы «КошкинДом.dt» (ссылка в электронном письме).
Создайте информационную базу из загрузите в нее копию из скачанного файла.
Структура конфигурации имеет следующий вид.
В справочнике «Котики» содержится информацию о животных. При добавлении нового животного в справочник в качестве имени можно выбрать одну из популярных кличек. Клички хранятся в регистре сведений, а код для выборки записей из этого регистра расположен в общем модуле «КотыСервер».
Откройте модуль формы элемента справочника «Котики». Модуль содержит код для заполнения выпадающего списка «Кличка» известными именами котов. Выборка элементов для списка выполняется в общем модуле «КотыСервер».
&НаСервереБезКонтекста
Функция ПолучитьСписокКличек(Пол)
Возврат КотыСервер.ПолучитьКличкиКотов(Пол);
КонецФункции
&НаКлиенте
Процедура ПолПриИзменении(Элемент)
КличкиКотов = ПолучитьСписокКличек(Объект.Пол);
Элементы.Кличка.СписокВыбора.ЗагрузитьЗначения(КличкиКотов);
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КличкиКотов = ПолучитьСписокКличек(Объект.Пол);
Элементы.Кличка.СписокВыбора.ЗагрузитьЗначения(КличкиКотов);
КонецПроцедуры
Перейдите к модулю «КотыСервер». Выборка кличек выполняется простым запросом с одним параметром. Код этого модуля будет в дальнейшем скрыт, а функция «ПолучитьСписокКличек» будет требовать наличие лицензии на продукт.
Функция ПолучитьКличкиКотов(Пол) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КличкиКотов.Кличка
|ИЗ
| РегистрСведений.КличкиКотов КАК КличкиКотов
|ГДЕ
| КличкиКотов.Пол = &Пол";
Запрос.УстановитьПараметр("Пол", Пол);
Результат = Запрос.Выполнить();
МассивКличек = Результат.Выгрузить().ВыгрузитьКолонку("Кличка");
Возврат МассивКличек;
КонецФункции
Регистрация продукта в личном кабинете
Фича - это та функциональная опция программы, которая подлежит лицензированию. Программный модуль, обработка, а также вся конфигурация 1С в целом могут являться фичей.
Продукт - это минимально допустимый набор функциональных опций, который мы предлагаем клиенту как готовое решение. Продукт может состоять как из одной так и из нескольких фич, в зависимости от сложности лицензируемого решения.
В данном примере не будем выделять отдельные функции конфигурации, поэтому в продукте будет одна фича и лицензирование по количеству пользователей работающих с конфигурацией.
Перейдем к настройке продукта в личном кабинете разработчика.
Откройте личный кабинет и перейдите на страницу фич.
Добавьте новую фичу. В качестве названия укажите «Кошкин дом». Идентификатор фичи можно указать произвольный, но позже его нужно будет повторить в коде защищаемой конфигурации (такие данные на изображениях будут обведены синим цветом).
Далее перейдите к странице продуктов.
Добавьте новый продукт. Укажите в нем созданную ранее фичу и ограничение лицензии по количеству пользователей. Для наглядности в названии продукта отразим функционал и способ лицензирования: «Учет котов на 2х пользователей».
Идентификатор продукта присваивается автоматически.
Встраивание подсистемы лицензирования
Настроим инструмент защиты конфигураций МИКО_ЗащитаКонфигураций (ссылка в электронном письме).
Создайте новую информационную базу, откройте ее в конфигураторе, загрузите конфигурацию из файла «МИКО_ЗащитаКонфигураций.cf», запустите в режиме 1С:Предпритие.
В разделе «
Настройки» вставьте ваши «
Код поставщика (vendor code)» и «
Префикс-ключ» из личного кабинета.
Откройте список фич и добавьте новую, с тем же кодом и наименованием, что и в личном кабинете.
Перейдите в раздел «Конфигурации». Создайте новую конфигурацию. Укажите имя конфигурации 1С и каталог файлов поставки. Сохраните изменения. Идентификатор продукта будет сформирован автоматически и понадобится позже.
Перейдем к защищаемой конфигурации 1С. Сперва нужно перенести в конфигурацию объекты системы лицензирования.
Откройте в конфигураторе защищаемую конфигурацию, которую вы создали на этапе «Обзор демонстрационной базы». Выполните «Конфигурация» → «Сравнить и объединить с конфигурацией из файла», выберите файл «МИКО_ЗащитаКонфигураций.cf».
Перенесите объекты (общие модули, макеты, формы) подсистемы «МИКО_СистемаЛицензирования» в защищаемую конфигурацию. Для этого в окне основной конфигурации снимите флажок с корневого элемента, затем выполните «Действия» → «Отметить по подсистемам файла». Установите флажок только у подсистемы «МИКО_СистемаЛицензирования». Выполните «Установить» → «Выполнить». От сохранения настроек объединения конфигураций в xml-файл откажитесь.
Откройте общий модуль «МИКО_ЛицензированиеПереопределяемый».
Заполнение тело процедуры «ЛицензируемыеПродукты», указав наименование продукта и идентификаторы, полученные на предыдущих шагах (обведены синим цветом)
Процедура ЛицензируемыеПродукты(Продукты) Экспорт
ОписаниеПродукта = Новый Структура;
ОписаниеПродукта.Вставить("Наименование", "Кошкин дом");
ОписаниеПродукта.Вставить("ИдентификаторКонфигурации", "b7ce16d5-e39f-11eb-bb18-005056882bf6");
ОписаниеПродукта.Вставить("ПрефиксКлюч", "DEMO");
ОписаниеПродукта.Вставить("ИдентификаторФичи", "13");
ОписаниеПродукта.Вставить("ИдентификаторТриальногоПродукта", "74");
Продукты.Добавить(ОписаниеПродукта);
КонецПроцедуры
В этом же модуле нужно указать местоположение макетов внешних компонент. В данном примере компоненты подключаются к демо-серверу лицензирования. Для подключения к собственным серверам требуются персонализированные под разработчика компоненты, получить их можно по запросу у фирмы
"МИКО". В данном демонстрационном примере выполните следующее: в дереве объектов конфигурации в группе «
Общие макеты» загрузите в макет «
МИКО_КомпонентЗакрытогоМодуля_DEMO» компонент «
МИКО_КомпонентЗакрытогоМодуля_DEMO.zip», который выслан вам в письме. Архив не распаковывайте.
Процедура ПриИнициализацииЗакрытогоМодуля(ПрефиксКлюч, МестоположениеКомпонента) Экспорт
Если ПрефиксКлюч = "DEMO" Тогда
МестоположениеКомпонента = "ОбщийМакет.МИКО_КомпонентЗакрытогоМодуля_DEMO";
КонецЕсли;
КонецПроцедуры
Процедура ПриИнициализацииФормыРегистрации(ПрефиксКлюч, МестоположениеКомпонента) Экспорт
Если ПрефиксКлюч = "DEMO" Тогда
МестоположениеКомпонента = "ОбщийМакет.МИКО_КомпонентЗакрытогоМодуля_DEMO";
КонецЕсли;
КонецПроцедуры
Для работы закрытого модуля потребуется лицензионный ключ. Система будет периодически запрашивать ключ, а также может выдать новый при регистрации продукта. В процедурах «ПриЧтенииЛицензионногоКлюча», «ПриЗаписиЛицензионногоКлюча» переменную «ИдентификаторКонфигурации» также поменяйте на ваш идентификатор конфигурации.
Процедура ПриЧтенииЛицензионногоКлюча(ИдентификаторКонфигурации, ЛицензионныйКлюч) Экспорт
Если ИдентификаторКонфигурации= "b7ce16d5-e39f-11eb-bb18-005056882bf6" Тогда
ЛицензионныйКлюч = Константы.КотыЛицензионныйКлюч.Получить();
КонецЕсли;
КонецПроцедуры
Процедура ПриЗаписиЛицензионногоКлюча(ИдентификаторКонфигурации, ЛицензионныйКлюч) Экспорт
Если ИдентификаторКонфигурации= "b7ce16d5-e39f-11eb-bb18-005056882bf6" Тогда
Константы.КотыЛицензионныйКлюч.Установить(ЛицензионныйКлюч);
КонецЕсли;
КонецПроцедуры
Установите пароль на текст общего модуля «КотыСервер» (например: 123) командой главного меню «
Текст» → «
Установить пароль». Вместо установки пароля вы можете использовать
механизм создания файла поставки, при помощи которого вы исключите из поставки текст защищаемого модуля. Но это более долгий и трудоемкий процесс.
Обновите конфигурацию базы данных.
Сохраните конфигурацию в файл «КошкинДом.cf».
Дальнейшая настройка в инструменте защиты
Вернемся к инструменту защиты конфигураций.
Создайте новый образ конфигурации. Укажите путь к файлу сохраненной конфигурации «
КошкинДом.cf»
Откройте образ конфигурации. В нем будет указан один программный модуль - КотыСервер.
Откройте модуль «КотыСервер» и создайте новую защитную маску. Для функции «ПолучитьКличкиКотов» укажите фичу «Учет котов».
Сохраните изменения и вернитесь на начальную страницу.
В журнале поставок напротив образа конфигурации нажмите на гиперссылку «Установить защиту». После завершения работы системы установки защиты в каталоге поставки появится файл «КошкинДом.protect.cf».
Проверка результатов
После выполнения всех этапов осталось проверить полученные результаты.
Создайте новую информационную базу и загрузите в нее базу из файла «КошкинДом.dt» (изначальная информационная база, поставляемая вам в дистрибутиве).
Выполните «Конфигурация» → «Сравнить и объединить с конфигурацией из файла». Выберите файл конфигурации «КошкинДом.protect.cf». Нажмите «Выполнить».
Убедитесь, что текст модуля «КотыСервер» стал недоступен.
Запустите информационную базу в режиме предприятия и попробуйте открыть один из элементов справочника «Котики». На экране будет сообщение об ошибке: «Для выполнения операции требуется лицензионный ключ».
Чтобы пользователь мог получить лицензионный ключ потребуется добавить форму регистрации.
Откройте модуль управляемого приложения и добавьте в него код следующего содержания:
Процедура ПриНачалеРаботыСистемы()
ИнициализироватьСистемуЛицензирования("Кошкин дом");
КонецПроцедуры
Процедура ПриЗавершенииРаботыСистемы(Отказ, ТекстПредупреждения)
ЗавершитьРаботуСистемыЛицензирования("Кошкин дом");
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
Процедура ИнициализироватьСистемуЛицензирования(НаименованиеКонфигурации)
Попытка
МИКО_Лицензирование.НачатьРаботу(НаименованиеКонфигурации);
Исключение
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("НаименованиеПродукта", НаименованиеКонфигурации);
ПараметрыФормы.Вставить("ОписаниеОшибки", ИнформацияОбОшибке().Описание);
ОткрытьФорму("ОбщаяФорма.МИКО_РегистрацияПродукта", ПараметрыФормы);
КонецПопытки;
КонецПроцедуры
Процедура ЗавершитьРаботуСистемыЛицензирования(НаименованиеКонфигурации)
МИКО_Лицензирование.ЗавершитьРаботу(НаименованиеКонфигурации);
КонецПроцедуры
Обновите и запустите информационную базу. При первом запуске появится окно регистрации продукта.
Нажмите кнопку «Перейти к регистрации клиента…» и заполните анкету нового клиента.
Нажмите кнопку «Зарегистрировать». Если данные введены корректно, то система выдаст новый лицензионный ключ, в который будет зашит продукт идентификатором 25 - «Учет котов на 2х пользователей». Все выданные ключи можно увидеть в соответствующем разделе личного кабинета разработчика (фильтр должен быть заполнен).
Убедитесь, что элементы справочника «Котики» теперь открываются. При этом будет создана сессия с сервером лицензирования и произведен захват фичи, что можно проверить в разделе «Монитор сессий» личного кабинета разработчика (фильтр должен быть заполнен).
Завершите работу с программой 1С. Фича будет освобождена, а сессия завершена.
Примечание
В ваших конфигурациях модули, которые вы будете защищать должны иметь флажки «Сервер», «Вызов сервера». Флажок «Клиент» должен быть снят.
В защищаемых вами модулях должны быть какие-либо строковые литералы. Например