Содержание

Шаг за шагом: защита конфигурации 1С

В общем случае для защиты своей конфигурации 1С понадобится:

Далее рассмотрим всю процедуру по шагам. Создадим простую конфигурацию 1С, а для выдачи лицензий на работу с ней будем использовать демо-доступ к личному кабинету. Адрес, логин и пароль высылаются на электронную почту после регистрации.

Для удобства также существует видеоинструкция на Youtube

Обзор демонстрационной базы

Для примера будем использовать конфигурацию для учета домашних животных.

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

Регистрация продукта в личном кабинете

Фича - это та функциональная опция программы, которая подлежит лицензированию. Программный модуль, обработка, а также вся конфигурация 1С в целом могут являться фичей.
Продукт - это минимально допустимый набор функциональных опций, который мы предлагаем клиенту как готовое решение. Продукт может состоять как из одной так и из нескольких фич, в зависимости от сложности лицензируемого решения.

В данном примере не будем выделять отдельные функции конфигурации, поэтому в продукте будет одна фича и лицензирование по количеству пользователей работающих с конфигурацией. Перейдем к настройке продукта в личном кабинете разработчика.

  1. Откройте личный кабинет и перейдите на страницу фич.
  2. Добавьте новую фичу. В качестве названия укажите «Кошкин дом». Идентификатор фичи можно указать произвольный, но позже его нужно будет повторить в коде защищаемой конфигурации (такие данные на изображениях будут обведены синим цветом).
  3. Далее перейдите к странице продуктов.
  4. Добавьте новый продукт. Укажите в нем созданную ранее фичу и ограничение лицензии по количеству пользователей. Для наглядности в названии продукта отразим функционал и способ лицензирования: «Учет котов на 2х пользователей».Идентификатор продукта присваивается автоматически.

Встраивание подсистемы лицензирования

Настроим инструмент защиты конфигураций МИКО_ЗащитаКонфигураций (ссылка в электронном письме).

  1. Создайте новую информационную базу, откройте ее в конфигураторе, загрузите конфигурацию из файла «МИКО_ЗащитаКонфигураций.cf», запустите в режиме 1С:Предпритие.
  2. В разделе «Настройки» вставьте ваши «Код поставщика (vendor code)» и «Префикс-ключ» из личного кабинета.
  3. Откройте список фич и добавьте новую, с тем же кодом и наименованием, что и в личном кабинете.
  4. Перейдите в раздел «Конфигурации». Создайте новую конфигурацию. Укажите имя конфигурации 1С и каталог файлов поставки. Сохраните изменения. Идентификатор продукта будет сформирован автоматически и понадобится позже.


Перейдем к защищаемой конфигурации 1С. Сперва нужно перенести в конфигурацию объекты системы лицензирования.

  1. Откройте в конфигураторе защищаемую конфигурацию, которую вы создали на этапе «Обзор демонстрационной базы». Выполните «Конфигурация» → «Сравнить и объединить с конфигурацией из файла», выберите файл «МИКО_ЗащитаКонфигураций.cf».
  2. Перенесите объекты (общие модули, макеты, формы) подсистемы «МИКО_СистемаЛицензирования» в защищаемую конфигурацию. Для этого в окне основной конфигурации снимите флажок с корневого элемента, затем выполните «Действия» → «Отметить по подсистемам файла». Установите флажок только у подсистемы «МИКО_СистемаЛицензирования». Выполните «Установить» → «Выполнить». От сохранения настроек объединения конфигураций в xml-файл откажитесь.

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

Дальнейшая настройка в инструменте защиты

Вернемся к инструменту защиты конфигураций.

  1. Создайте новый образ конфигурации. Укажите путь к файлу сохраненной конфигурации «КошкинДом.cf»
  2. Откройте образ конфигурации. В нем будет указан один программный модуль - КотыСервер.
  3. Откройте модуль «КотыСервер» и создайте новую защитную маску. Для функции «ПолучитьКличкиКотов» укажите фичу «Учет котов».
  4. Сохраните изменения и вернитесь на начальную страницу.
  5. В журнале поставок напротив образа конфигурации нажмите на гиперссылку «Установить защиту». После завершения работы системы установки защиты в каталоге поставки появится файл «КошкинДом.protect.cf».

Проверка результатов

После выполнения всех этапов осталось проверить полученные результаты.

  1. Создайте новую информационную базу и загрузите в нее базу из файла «КошкинДом.dt» (изначальная информационная база, поставляемая вам в дистрибутиве).
  2. Выполните «Конфигурация» → «Сравнить и объединить с конфигурацией из файла». Выберите файл конфигурации «КошкинДом.protect.cf». Нажмите «Выполнить».
  3. Убедитесь, что текст модуля «КотыСервер» стал недоступен.
  4. Запустите информационную базу в режиме предприятия и попробуйте открыть один из элементов справочника «Котики». На экране будет сообщение об ошибке: «Для выполнения операции требуется лицензионный ключ».

Чтобы пользователь мог получить лицензионный ключ потребуется добавить форму регистрации.

  1. Откройте модуль управляемого приложения и добавьте в него код следующего содержания:
    Процедура ПриНачалеРаботыСистемы()
    	
    	ИнициализироватьСистемуЛицензирования("Кошкин дом");
    	
    КонецПроцедуры
    
    Процедура ПриЗавершенииРаботыСистемы(Отказ, ТекстПредупреждения)
    	
    	ЗавершитьРаботуСистемыЛицензирования("Кошкин дом");
    	
    КонецПроцедуры
    
    
    ////////////////////////////////////////////////////////////////////////////////
    
    Процедура ИнициализироватьСистемуЛицензирования(НаименованиеКонфигурации)
    	
    	Попытка
    		
    		МИКО_Лицензирование.НачатьРаботу(НаименованиеКонфигурации);
    		
    	Исключение
    		
    		ПараметрыФормы = Новый Структура;
    		ПараметрыФормы.Вставить("НаименованиеПродукта", НаименованиеКонфигурации);
    		ПараметрыФормы.Вставить("ОписаниеОшибки",       ИнформацияОбОшибке().Описание);
    		
    		ОткрытьФорму("ОбщаяФорма.МИКО_РегистрацияПродукта", ПараметрыФормы);
    		
    	КонецПопытки;
    	
    КонецПроцедуры
    
    Процедура ЗавершитьРаботуСистемыЛицензирования(НаименованиеКонфигурации)
    	
    	МИКО_Лицензирование.ЗавершитьРаботу(НаименованиеКонфигурации);
    	
    КонецПроцедуры
  2. Обновите и запустите информационную базу. При первом запуске появится окно регистрации продукта.
  3. Нажмите кнопку «Перейти к регистрации клиента…» и заполните анкету нового клиента.
  4. Нажмите кнопку «Зарегистрировать». Если данные введены корректно, то система выдаст новый лицензионный ключ, в который будет зашит продукт идентификатором 25 - «Учет котов на 2х пользователей». Все выданные ключи можно увидеть в соответствующем разделе личного кабинета разработчика (фильтр должен быть заполнен).
  5. Убедитесь, что элементы справочника «Котики» теперь открываются. При этом будет создана сессия с сервером лицензирования и произведен захват фичи, что можно проверить в разделе «Монитор сессий» личного кабинета разработчика (фильтр должен быть заполнен).
  6. Завершите работу с программой 1С. Фича будет освобождена, а сессия завершена.

Примечание

В ваших конфигурациях модули, которые вы будете защищать должны иметь флажки «Сервер», «Вызов сервера». Флажок «Клиент» должен быть снят.

В защищаемых вами модулях должны быть какие-либо строковые литералы. Например