====== Шаг за шагом: защита конфигурации 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 |}}