Инструменты пользователя

Инструменты сайта


stepbystep:protect1c

Различия

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

Ссылка на это сравнение

stepbystep:protect1c [2016/11/18 11:05] (текущий)
mcvet создано
Строка 1: Строка 1:
 +====== Шаг за шагом: защита конфигурации 1С ======
  
 +В общем случае для защиты своей конфигурации 1С понадобится:​
 +  * создать продукт в своем личном кабинете;​
 +  * определить способ лицензирования продукта - по количеству пользователей или хостов;​
 +  * установить на свой компьютер инструмент для выполнения процедуры защиты продукта;​
 +  * добавить в продукт интерактивную форму активации продукта и вспомогательные модули системы лицензирования.
 +
 +Далее рассмотрим всю процедуру по шагам. Создадим простую конфигурацию 1С, а для выдачи лицензий на работу с ней ​ будем использовать демо-доступ к личному кабинету. Адрес, логин и пароль высылаются на электронную почту после регистрации.
 +
 +===== Обзор демонстрационной базы =====
 +
 +Для примера будем использовать конфигурацию для учета домашних животных.
 +  - Скачайте файл демонстрационной базы "​КошкинДом.dt"​ (ссылка в электронном письме).
 +  - Создайте информационную базу из загрузите в нее копию из скаченнего файла.\\ Структура конфигурации имеет следующий вид. {{ :​stepbystep:​21-10-2016_11-23-09.png?​nolink |}} В справочнике "​Котики"​ содержится информацию о животных. При добавлении нового животного в справочник в качестве имени можно выбрать одну из популярных кличек. Клички хранятся в регистре сведений,​ а код для выборки записей из этого регистра расположен в общем модуле "​КотыСервер"​.
 +  - Откройте модуль формы элемента справочника "​Котики"​. Модуль содержит код для заполнения выпадающего списка "​Кличка"​ известными именами котов. Выборка элементов для списка выполняется в общем модуле "​КотыСервер"​.<​code>&​НаСервереБезКонтекста
 +Функция ПолучитьСписокКличек(Пол)
 +
 + Возврат КотыСервер.ПолучитьКличкиКотов(Пол);​
 +
 +КонецФункции
 +
 +&​НаКлиенте
 +Процедура ПолПриИзменении(Элемент)
 +
 + КличкиКотов = ПолучитьСписокКличек(Объект.Пол);​
 +
 + Элементы.Кличка.СписокВыбора.ЗагрузитьЗначения(КличкиКотов);​
 +
 +КонецПроцедуры
 +
 +&​НаСервере
 +Процедура ПриСозданииНаСервере(Отказ,​ СтандартнаяОбработка)
 +
 + КличкиКотов = ПолучитьСписокКличек(Объект.Пол);​
 +
 + Элементы.Кличка.СписокВыбора.ЗагрузитьЗначения(КличкиКотов);​
 +
 +КонецПроцедуры</​code>​
 +  - Перейдите к модулю "​КотыСервер"​. Выборка кличек выполняется простым запросом с одним параметром. Код этого модуля будет в дальнейшем скрыт, а функция "​ПолучитьСписокКличек"​ будет требовать наличие лицензии на продукт.<​code>​Функция ПолучитьКличкиКотов(Пол) Экспорт
 +
 + Запрос = Новый Запрос;​
 + Запрос.Текст = 
 + "​ВЫБРАТЬ
 + | КличкиКотов.Кличка
 + |ИЗ
 + | РегистрСведений.КличкиКотов КАК КличкиКотов
 + |ГДЕ
 + | КличкиКотов.Пол = &​Пол";​
 + Запрос.УстановитьПараметр("​Пол",​ Пол);
 +
 + Результат = Запрос.Выполнить();​
 +
 + МассивКличек = Результат.Выгрузить().ВыгрузитьКолонку("​Кличка"​);​
 +
 + Возврат МассивКличек;​
 +  
 +КонецФункции</​code>​
 +
 +===== Регистрация продукта в личном кабинете =====
 +
 +<note tip>​**Фича** - это та функциональная опция программы,​ которая подлежит лицензированию. Программный модуль,​ обработка,​ а также вся конфигурация 1С в целом могут являтся фичей. \\
 +**Продукт** - это минимально допустимый набор функциональных опций, который мы предлагаем клиенту как готовое решение. Продукт может состоять как из одной так и из нескольких фич, в зависимости от сложности лицензируемого решения.</​note>​
 +В данном примере не будем выделять отдельные функции конфигурации,​ поэтому в продукте будет одна фича и лицензирование по количеству пользователей работающих с конфигурацией.
 +Перейдем к настройке продукта в личном кабинете разработчика.
 +  - Откройте личный кабинет и перейдите на страницу фич.
 +  - Добавьте новую фичу. В качестве названия укажите "​Кошкин дом"​. Идентификатор фичи можно указать произвольный,​ но позже его нужно будет повторить в коде защищаемой конфигурации (такие данные на изображениях будут обведены синим цветом). {{ :​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 |}}
 +
 +===== Встраивание подсистемы лицензирования =====
 +
 +Настроим инструмент защиты конфигураций (ссылка в электронном письме).
 +  - Укажите в настройках код поставщика (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С и каталог файлов поставки (например,​ H:​\tmp\КошкинДом\Поставка).{{ :​stepbystep:​21-10-2016_12-07-08.png?​nolink |}}
 +  - Сохраните изменения. Идентификатор продукта будет сформирован автоматически и понадобится позже.
 +Перейдем к защищаемой конфигурации 1С. Сперва нужно перенести в конфигурацию объекты системы лицензирования.
 +  - В конфигураторе защищаемой конфигурации откройте файл МИКО_ЗащитаКонфигураций.cf в режиме сравнения и объединения.
 +  - Перенесите объекты (общие модули,​ макеты,​ формы) подсистемы "​МИКО_СистемаЛицензирования"​ в защищаемую конфигурацию.
 +  - Откройте общий модуль "​МИКО_ЛицензированиеПереопределяемый"​.
 +  - Заполнение тело процедуры "​ЛицензируемыеПродукты",​ указав наименование продукта и идентификаторы,​ полученные на предыдущих шагах (обведены синим цветом)<​code>​Процедура ЛицензируемыеПродукты(Продукты) Экспорт
 +
 + ОписаниеПродукта = Новый Структура;​
 + ОписаниеПродукта.Вставить("​Наименование", ​                   "​Кошкин дом"​);​
 + ОписаниеПродукта.Вставить("​ИдентификаторКонфигурации", ​      "​9cf50201-976d-11e6-810f-0050568123f9"​);​
 + ОписаниеПродукта.Вставить("​ПрефиксКлюч", ​                    "​DEMO"​);​
 + ОписаниеПродукта.Вставить("​ИдентификаторФичи", ​              "​1"​);​
 + ОписаниеПродукта.Вставить("​ИдентификаторТриальногоПродукта",​ "​25"​);​
 +
 + Продукты.Добавить(ОписаниеПродукта);​
 +
 +КонецПроцедуры</​code>​
 +  - В этом же модуле нужно указать местоположение макетов внешних компонент. В данном примере компоненты подключаются к демо-серверу лицензирования. Для подключения к собственным серверам требуются персонализированные под разработчика компоненты,​ получить их можно по запросу. <​code>​
 +Процедура ПриИнициализацииЗакрытогоМодуля(ПрефиксКлюч,​ МестоположениеКомпонента) Экспорт
 +
 + Если ПрефиксКлюч = "​DEMO"​ Тогда
 + МестоположениеКомпонента = "​ОбщийМакет.МИКО_КомпонентЗакрытогоМодуля_DEMO";​
 + КонецЕсли;​
 +
 +КонецПроцедуры
 +
 +Процедура ПриИнициализацииФормыРегистрации(ПрефиксКлюч,​ МестоположениеКомпонента) Экспорт
 +
 + Если ПрефиксКлюч = "​DEMO"​ Тогда
 + МестоположениеКомпонента = "​ОбщийМакет.МИКО_КомпонентРегистрацииПродукта_DEMO";​
 + КонецЕсли;​
 +
 +КонецПроцедуры</​code>​
 +  - Для работы закрытого модуля потребуется лицензионный ключ. Система будет периодически запрашивать ключ, а также может выдать новый при регистрации продукта.<​code>​Процедура ПриЧтенииЛицензионногоКлюча(ИдентификаторКонфигурации,​ ЛицензионныйКлюч) Экспорт
 +
 + Если ИдентификаторКонфигурации= "​9cf50201-976d-11e6-810f-0050568123f9"​ Тогда
 + ЛицензионныйКлюч = Константы.КошкинДомЛицензионныйКлюч.Получить();​
 + КонецЕсли;​
 +
 +КонецПроцедуры
 +
 +Процедура ПриЗаписиЛицензионногоКлюча(ИдентификаторКонфигурации,​ ЛицензионныйКлюч) Экспорт
 +
 + Если ИдентификаторКонфигурации= "​9cf50201-976d-11e6-810f-0050568123f9"​ Тогда
 + Константы.КошкинДомЛицензионныйКлюч.Установить(ЛицензионныйКлюч);​
 + КонецЕсли;​
 +
 +КонецПроцедуры</​code>​
 +  - Обновите конфигурацию базы данных.
 +  - Настройте поставку конфигурации так, чтобы исходный текст модуля "​КотыСервер"​ был исключен из конфигурации.
 +  - Сформируйте файл поставки,​ разместив его по пути "​H:​\tmp\КошкинДом\Поставка\1.0\КошкинДом.cf"​.
 +
 +Вернемся к инструменту защиты конфигураций.
 +  - Создайте новый образ конфигурации. Укажите путь к файлу конфигурации "​H:​\tmp\КошкинДом\Поставка\1.0\КошкинДом.cf"​.
 +  - Откройте образ конфигурации. В нем будет указан один программный модуль - КотыСервер.{{ :​stepbystep:​26-10-2016_22-36-35.png?​nolink |}}
 +  - Откройте модуль "​КотыСервер"​ и создайте новую защитную маску. Для функции "​ПолучитьКличкиКотов"​ укажите фичу "​Учет котов"​.{{ :​stepbystep:​26-10-2016_22-47-43.png?​nolink |}}
 +  - Сохраните изменения и вернитесь на начальную страницу.
 +  - В журнале поставок напротив образа конфигурации нажмите на гиперссылку "​Установить защиту"​. После завершения работы системы установки защиты в каталоге поставки появится файл "​КошкинДом.protect.cf"​.
 +
 +===== Проверка результатов =====
 +
 +После выполнения всех этапов осталось проверить полученные результаты.
 +  - Создайте новую информационную базу и загрузите в нее копию базы "​Кошкин Дом"​ из файла "​КошкинДом.dt"​.
 +  - Обновите конфигурацию информационной базы, загрузив ее из файла "​КошкинДом.protect.cf"​.
 +  - Убедитесь,​ что текст модуля "​КотыСервер"​ стал недоступен.
 +  - Запустите информационную базу в режиме предприятия и попробуйте открыть один из элементов справочника "​Котики"​. На экране будет сообщение об ошибке:​ "​Для выполнения операции требуется лицензионный ключ"​. {{ :​stepbystep:​18-11-2016_10-36-47.png?​nolink |}}
 +
 +Чтобы пользователь мог получить лицензионный ключ потребуется добавить форму регистрации.
 +  - Откройте модуль управляемого приложения и добавьте в него код следующего содержания:​ <​code>​
 +Процедура ПриНачалеРаботыСистемы()
 +
 + ИнициализироватьСистемуЛицензирования("​Кошкин дом"​);​
 +
 +КонецПроцедуры
 +
 +Процедура ПриЗавершенииРаботыСистемы(Отказ,​ ТекстПредупреждения)
 +
 + ЗавершитьРаботуСистемыЛицензирования("​Кошкин дом"​);​
 +
 +КонецПроцедуры
 +
 +
 +////////////////////////////////////////////////////////////////////////////////​
 +
 +Процедура ИнициализироватьСистемуЛицензирования(НаименованиеКонфигурации)
 +
 + Попытка
 +
 + МИКО_Лицензирование.НачатьРаботу(НаименованиеКонфигурации);​
 +
 + Исключение
 +
 + ПараметрыФормы = Новый Структура;​
 + ПараметрыФормы.Вставить("​НаименованиеПродукта",​ НаименованиеКонфигурации);​
 + ПараметрыФормы.Вставить("​ОписаниеОшибки", ​      ​ИнформацияОбОшибке().Описание);​
 +
 + ОткрытьФорму("​ОбщаяФорма.МИКО_РегистрацияПродукта",​ ПараметрыФормы);​
 +
 + КонецПопытки;​
 +
 +КонецПроцедуры
 +
 +Процедура ЗавершитьРаботуСистемыЛицензирования(НаименованиеКонфигурации)
 +
 + МИКО_Лицензирование.ЗавершитьРаботу(НаименованиеКонфигурации);​
 +
 +КонецПроцедуры</​code>​
 +  - Обновите и запустите информационную базу. При первом запуске появится окно регистрации продукта. {{ :​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/protect1c.txt · Последние изменения: 2016/11/18 11:05 — mcvet