Содержание
Шаг за шагом: защита конфигурации 1С
В общем случае для защиты своей конфигурации 1С понадобится:
- создать продукт в своем личном кабинете;
- определить способ лицензирования продукта - по количеству пользователей или хостов;
- установить на свой компьютер инструмент для выполнения процедуры защиты продукта;
- добавить в продукт интерактивную форму активации продукта и вспомогательные модули системы лицензирования.
Далее рассмотрим всю процедуру по шагам. Создадим простую конфигурацию 1С, а для выдачи лицензий на работу с ней будем использовать демо-доступ к личному кабинету. Адрес, логин и пароль высылаются на электронную почту после регистрации.
Обзор демонстрационной базы
Для примера будем использовать конфигурацию для учета домашних животных.
- Скачайте файл демонстрационной базы «КошкинДом.dt» (ссылка в электронном письме).
- Создайте информационную базу из загрузите в нее копию из скачанного файла.
Структура конфигурации имеет следующий вид. В справочнике «Котики» содержится информацию о животных. При добавлении нового животного в справочник в качестве имени можно выбрать одну из популярных кличек. Клички хранятся в регистре сведений, а код для выборки записей из этого регистра расположен в общем модуле «КотыСервер». - Откройте модуль формы элемента справочника «Котики». Модуль содержит код для заполнения выпадающего списка «Кличка» известными именами котов. Выборка элементов для списка выполняется в общем модуле «КотыСервер».
&НаСервереБезКонтекста Функция ПолучитьСписокКличек(Пол) Возврат КотыСервер.ПолучитьКличкиКотов(Пол); КонецФункции &НаКлиенте Процедура ПолПриИзменении(Элемент) КличкиКотов = ПолучитьСписокКличек(Объект.Пол); Элементы.Кличка.СписокВыбора.ЗагрузитьЗначения(КличкиКотов); КонецПроцедуры &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) КличкиКотов = ПолучитьСписокКличек(Объект.Пол); Элементы.Кличка.СписокВыбора.ЗагрузитьЗначения(КличкиКотов); КонецПроцедуры
- Перейдите к модулю «КотыСервер». Выборка кличек выполняется простым запросом с одним параметром. Код этого модуля будет в дальнейшем скрыт, а функция «ПолучитьСписокКличек» будет требовать наличие лицензии на продукт.
Функция ПолучитьКличкиКотов(Пол) Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КличкиКотов.Кличка |ИЗ | РегистрСведений.КличкиКотов КАК КличкиКотов |ГДЕ | КличкиКотов.Пол = &Пол"; Запрос.УстановитьПараметр("Пол", Пол); Результат = Запрос.Выполнить(); МассивКличек = Результат.Выгрузить().ВыгрузитьКолонку("Кличка"); Возврат МассивКличек; КонецФункции
Регистрация продукта в личном кабинете
Продукт - это минимально допустимый набор функциональных опций, который мы предлагаем клиенту как готовое решение. Продукт может состоять как из одной так и из нескольких фич, в зависимости от сложности лицензируемого решения.
В данном примере не будем выделять отдельные функции конфигурации, поэтому в продукте будет одна фича и лицензирование по количеству пользователей работающих с конфигурацией. Перейдем к настройке продукта в личном кабинете разработчика.
- Откройте личный кабинет и перейдите на страницу фич.
- Добавьте новую фичу. В качестве названия укажите «Кошкин дом». Идентификатор фичи можно указать произвольный, но позже его нужно будет повторить в коде защищаемой конфигурации (такие данные на изображениях будут обведены синим цветом).
- Далее перейдите к странице продуктов.
- Добавьте новый продукт. Укажите в нем созданную ранее фичу и ограничение лицензии по количеству пользователей. Для наглядности в названии продукта отразим функционал и способ лицензирования: «Учет котов на 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С. Фича будет освобождена, а сессия завершена.
Примечание
В ваших конфигурациях модули, которые вы будете защищать должны иметь флажки «Сервер», «Вызов сервера». Флажок «Клиент» должен быть снят.
В защищаемых вами модулях должны быть какие-либо строковые литералы. Например