====== Шаг за шагом: защита конфигурации 1С ======
В общем случае для защиты своей конфигурации 1С понадобится:
* создать продукт в своем личном кабинете;
* определить способ лицензирования продукта - по количеству пользователей или хостов;
* установить на свой компьютер инструмент для выполнения процедуры защиты продукта;
* добавить в продукт интерактивную форму активации продукта и вспомогательные модули системы лицензирования.
Далее рассмотрим всю процедуру по шагам. Создадим простую конфигурацию 1С, а для выдачи лицензий на работу с ней будем использовать демо-доступ к личному кабинету. Адрес, логин и пароль высылаются на электронную почту после регистрации.
Для удобства также существует [[https://www.youtube.com/watch?v=lVnr4Y0RjmE|видеоинструкция на Youtube]]
===== Обзор демонстрационной базы =====
Для примера будем использовать конфигурацию для учета домашних животных.
- Скачайте файл демонстрационной базы "КошкинДом.dt" (ссылка в электронном письме).
- Создайте информационную базу из загрузите в нее копию из скачанного файла.\\ Структура конфигурации имеет следующий вид. {{ :stepbystep:21-10-2016_11-23-09.png?nolink |}} В справочнике "Котики" содержится информацию о животных. При добавлении нового животного в справочник в качестве имени можно выбрать одну из популярных кличек. Клички хранятся в регистре сведений, а код для выборки записей из этого регистра расположен в общем модуле "КотыСервер".
- Откройте модуль формы элемента справочника "Котики". Модуль содержит код для заполнения выпадающего списка "Кличка" известными именами котов. Выборка элементов для списка выполняется в общем модуле "КотыСервер".&НаСервереБезКонтекста
Функция ПолучитьСписокКличек(Пол)
Возврат КотыСервер.ПолучитьКличкиКотов(Пол);
КонецФункции
&НаКлиенте
Процедура ПолПриИзменении(Элемент)
КличкиКотов = ПолучитьСписокКличек(Объект.Пол);
Элементы.Кличка.СписокВыбора.ЗагрузитьЗначения(КличкиКотов);
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КличкиКотов = ПолучитьСписокКличек(Объект.Пол);
Элементы.Кличка.СписокВыбора.ЗагрузитьЗначения(КличкиКотов);
КонецПроцедуры
- Перейдите к модулю "КотыСервер". Выборка кличек выполняется простым запросом с одним параметром. Код этого модуля будет в дальнейшем скрыт, а функция "ПолучитьСписокКличек" будет требовать наличие лицензии на продукт.Функция ПолучитьКличкиКотов(Пол) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КличкиКотов.Кличка
|ИЗ
| РегистрСведений.КличкиКотов КАК КличкиКотов
|ГДЕ
| КличкиКотов.Пол = &Пол";
Запрос.УстановитьПараметр("Пол", Пол);
Результат = Запрос.Выполнить();
МассивКличек = Результат.Выгрузить().ВыгрузитьКолонку("Кличка");
Возврат МассивКличек;
КонецФункции
===== Регистрация продукта в личном кабинете =====
**Фича** - это та функциональная опция программы, которая подлежит лицензированию. Программный модуль, обработка, а также вся конфигурация 1С в целом могут являться фичей. \\
**Продукт** - это минимально допустимый набор функциональных опций, который мы предлагаем клиенту как готовое решение. Продукт может состоять как из одной так и из нескольких фич, в зависимости от сложности лицензируемого решения.
В данном примере не будем выделять отдельные функции конфигурации, поэтому в продукте будет одна фича и лицензирование по количеству пользователей работающих с конфигурацией.
Перейдем к настройке продукта в личном кабинете разработчика.
- Откройте личный кабинет и перейдите на страницу фич.
- Добавьте новую фичу. В качестве названия укажите "Кошкин дом". Идентификатор фичи можно указать произвольный, но позже его нужно будет повторить в коде защищаемой конфигурации (такие данные на изображениях будут обведены синим цветом). {{ :stepbystep:21-10-2016_11-42-58.png?nolink |}}
- Далее перейдите к странице продуктов.
- Добавьте новый продукт. Укажите в нем созданную ранее фичу и ограничение лицензии по количеству пользователей. Для наглядности в названии продукта отразим функционал и способ лицензирования: "Учет котов на 2х пользователей".{{ :stepbystep:21-10-2016_11-44-50.png?nolink |}}Идентификатор продукта присваивается автоматически.
{{ :stepbystep:25-10-2016_11-35-58.png?nolink |}}
===== Встраивание подсистемы лицензирования =====
Настроим **инструмент защиты** конфигураций **МИКО_ЗащитаКонфигураций** (ссылка в электронном письме).
- Создайте новую информационную базу, откройте ее в конфигураторе, загрузите конфигурацию из файла "**МИКО_ЗащитаКонфигураций.cf**", запустите в режиме 1С:Предпритие.
- В разделе "**Настройки**" вставьте ваши "**Код поставщика (vendor code)**" и "**Префикс-ключ**" из личного кабинета. {{ :stepbystep:21-10-2016_11-53-26.png?nolink |}}{{ :stepbystep:dn_arrow.png?nolink&48 |}}{{ :stepbystep:21-10-2016_11-56-52.png?nolink |}}
- Откройте список фич и добавьте новую, с тем же кодом и наименованием, что и в личном кабинете.{{ :stepbystep:21-10-2016_12-03-34.png?nolink |}}
- Перейдите в раздел "**Конфигурации**". Создайте новую конфигурацию. Укажите имя конфигурации 1С и каталог файлов поставки. Сохраните изменения. Идентификатор продукта будет сформирован автоматически и понадобится позже.
{{ :stepbystep:soadanie_konfiguracii.png?nolink |}} \\
Перейдем к защищаемой конфигурации 1С. Сперва нужно перенести в конфигурацию объекты системы лицензирования.
- Откройте в конфигураторе защищаемую конфигурацию, которую вы создали на этапе "Обзор демонстрационной базы". Выполните "**Конфигурация**" -> "**Сравнить и объединить с конфигурацией из файла**", выберите файл "МИКО_ЗащитаКонфигураций.cf".
- Перенесите объекты (общие модули, макеты, формы) подсистемы "МИКО_СистемаЛицензирования" в защищаемую конфигурацию. Для этого в окне основной конфигурации снимите флажок с корневого элемента, затем выполните "**Действия**" -> "**Отметить по подсистемам файла**". Установите флажок только у подсистемы "МИКО_СистемаЛицензирования". Выполните "**Установить**" -> "**Выполнить**". От сохранения настроек объединения конфигураций в xml-файл откажитесь.
{{ :stepbystep:obedinenie_konfigaraciy.png?nolink |}}
- Откройте общий модуль "МИКО_ЛицензированиеПереопределяемый".
- Заполнение тело процедуры "ЛицензируемыеПродукты", указав наименование продукта и идентификаторы, полученные на предыдущих шагах (обведены синим цветом)Процедура ЛицензируемыеПродукты(Продукты) Экспорт
ОписаниеПродукта = Новый Структура;
ОписаниеПродукта.Вставить("Наименование", "Кошкин дом");
ОписаниеПродукта.Вставить("ИдентификаторКонфигурации", "b7ce16d5-e39f-11eb-bb18-005056882bf6");
ОписаниеПродукта.Вставить("ПрефиксКлюч", "DEMO");
ОписаниеПродукта.Вставить("ИдентификаторФичи", "13");
ОписаниеПродукта.Вставить("ИдентификаторТриальногоПродукта", "74");
Продукты.Добавить(ОписаниеПродукта);
КонецПроцедуры
- В этом же модуле нужно указать местоположение макетов внешних компонент. В данном примере компоненты подключаются к демо-серверу лицензирования. Для подключения к собственным серверам требуются персонализированные под разработчика компоненты, получить их можно по запросу у фирмы [[http://protect.miko.ru|"МИКО"]]. В данном демонстрационном примере выполните следующее: в дереве объектов конфигурации в группе "**Общие макеты**" загрузите в макет "**МИКО_КомпонентЗакрытогоМодуля_DEMO**" компонент "**МИКО_КомпонентЗакрытогоМодуля_DEMO.zip**", который выслан вам в письме. Архив не распаковывайте. Процедура ПриИнициализацииЗакрытогоМодуля(ПрефиксКлюч, МестоположениеКомпонента) Экспорт
Если ПрефиксКлюч = "DEMO" Тогда
МестоположениеКомпонента = "ОбщийМакет.МИКО_КомпонентЗакрытогоМодуля_DEMO";
КонецЕсли;
КонецПроцедуры
Процедура ПриИнициализацииФормыРегистрации(ПрефиксКлюч, МестоположениеКомпонента) Экспорт
Если ПрефиксКлюч = "DEMO" Тогда
МестоположениеКомпонента = "ОбщийМакет.МИКО_КомпонентЗакрытогоМодуля_DEMO";
КонецЕсли;
КонецПроцедуры
- Для работы закрытого модуля потребуется лицензионный ключ. Система будет периодически запрашивать ключ, а также может выдать новый при регистрации продукта. В процедурах "ПриЧтенииЛицензионногоКлюча", "ПриЗаписиЛицензионногоКлюча" переменную "ИдентификаторКонфигурации" также поменяйте на ваш идентификатор конфигурации. Процедура ПриЧтенииЛицензионногоКлюча(ИдентификаторКонфигурации, ЛицензионныйКлюч) Экспорт
Если ИдентификаторКонфигурации= "b7ce16d5-e39f-11eb-bb18-005056882bf6" Тогда
ЛицензионныйКлюч = Константы.КотыЛицензионныйКлюч.Получить();
КонецЕсли;
КонецПроцедуры
Процедура ПриЗаписиЛицензионногоКлюча(ИдентификаторКонфигурации, ЛицензионныйКлюч) Экспорт
Если ИдентификаторКонфигурации= "b7ce16d5-e39f-11eb-bb18-005056882bf6" Тогда
Константы.КотыЛицензионныйКлюч.Установить(ЛицензионныйКлюч);
КонецЕсли;
КонецПроцедуры
- Установите пароль на текст общего модуля "КотыСервер" (например: 123) командой главного меню "**Текст**" -> "**Установить пароль**". Вместо установки пароля вы можете использовать [[protect1c:postavka|механизм создания файла поставки]], при помощи которого вы исключите из поставки текст защищаемого модуля. Но это более долгий и трудоемкий процесс.
- Обновите конфигурацию базы данных.
- Сохраните конфигурацию в файл "**КошкинДом.cf**".
===== Дальнейшая настройка в инструменте защиты =====
Вернемся к инструменту защиты конфигураций.
- Создайте новый образ конфигурации. Укажите путь к файлу сохраненной конфигурации "**КошкинДом.cf**" {{ :stepbystep:soadanie_obraza.png?nolink |}}
- Откройте образ конфигурации. В нем будет указан один программный модуль - КотыСервер. {{ :stepbystep:soadanie_obraza_nezashishenniy_modul.png?nolink |}}
- Откройте модуль "КотыСервер" и создайте новую защитную маску. Для функции "ПолучитьКличкиКотов" укажите фичу "Учет котов". {{ :stepbystep:soadanie_zashitnoy_maskil.png?nolink |}}
- Сохраните изменения и вернитесь на начальную страницу.
- В журнале поставок напротив образа конфигурации нажмите на гиперссылку "Установить защиту". После завершения работы системы установки защиты в каталоге поставки появится файл "**КошкинДом.protect.cf**".
===== Проверка результатов =====
После выполнения всех этапов осталось проверить полученные результаты.
- Создайте новую информационную базу и загрузите в нее базу из файла "**КошкинДом.dt**" (изначальная информационная база, поставляемая вам в дистрибутиве).
- Выполните "**Конфигурация**" -> "**Сравнить и объединить с конфигурацией из файла**". Выберите файл конфигурации "**КошкинДом.protect.cf**". Нажмите "Выполнить".
- Убедитесь, что текст модуля "КотыСервер" стал недоступен.
- Запустите информационную базу в режиме предприятия и попробуйте открыть один из элементов справочника "Котики". На экране будет сообщение об ошибке: "Для выполнения операции требуется лицензионный ключ". {{ :stepbystep:18-11-2016_10-36-47.png?nolink |}}
Чтобы пользователь мог получить лицензионный ключ потребуется добавить форму регистрации.
- Откройте модуль управляемого приложения и добавьте в него код следующего содержания:
Процедура ПриНачалеРаботыСистемы()
ИнициализироватьСистемуЛицензирования("Кошкин дом");
КонецПроцедуры
Процедура ПриЗавершенииРаботыСистемы(Отказ, ТекстПредупреждения)
ЗавершитьРаботуСистемыЛицензирования("Кошкин дом");
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
Процедура ИнициализироватьСистемуЛицензирования(НаименованиеКонфигурации)
Попытка
МИКО_Лицензирование.НачатьРаботу(НаименованиеКонфигурации);
Исключение
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("НаименованиеПродукта", НаименованиеКонфигурации);
ПараметрыФормы.Вставить("ОписаниеОшибки", ИнформацияОбОшибке().Описание);
ОткрытьФорму("ОбщаяФорма.МИКО_РегистрацияПродукта", ПараметрыФормы);
КонецПопытки;
КонецПроцедуры
Процедура ЗавершитьРаботуСистемыЛицензирования(НаименованиеКонфигурации)
МИКО_Лицензирование.ЗавершитьРаботу(НаименованиеКонфигурации);
КонецПроцедуры
- Обновите и запустите информационную базу. При первом запуске появится окно регистрации продукта. {{ :stepbystep:18-11-2016_11-33-48.png?nolink |}}
- Нажмите кнопку "Перейти к регистрации клиента..." и заполните анкету нового клиента. {{ :stepbystep:18-11-2016_11-34-07.png?nolink |}}
- Нажмите кнопку "Зарегистрировать". Если данные введены корректно, то система выдаст новый лицензионный ключ, в который будет зашит продукт идентификатором 25 - "Учет котов на 2х пользователей". Все выданные ключи можно увидеть в соответствующем разделе личного кабинета разработчика (фильтр должен быть заполнен). {{ :stepbystep:18-11-2016_13-35-10.png?nolink |}}
- Убедитесь, что элементы справочника "Котики" теперь открываются. При этом будет создана сессия с сервером лицензирования и произведен захват фичи, что можно проверить в разделе "Монитор сессий" личного кабинета разработчика (фильтр должен быть заполнен). {{ :stepbystep:18-11-2016_13-53-45.png?nolink |}}
- Завершите работу с программой 1С. Фича будет освобождена, а сессия завершена.
===== Примечание =====
В ваших конфигурациях модули, которые вы будете защищать должны иметь флажки "**Сервер**", "**Вызов сервера**". Флажок "**Клиент**" должен быть снят.
{{ :stepbystep:flajok_server.png?nolink |}}
В защищаемых вами модулях должны быть какие-либо строковые литералы. Например
{{ :stepbystep:strokovie_literali.png?nolink |}}