Жизненная ситуация:
Вам необходимо хоть как то обезопасить несанкционированное использование своей обработки.
Сделать выгрузку обработки или отчета с закрытой кодовой частью это пол дела, потому как использование все равно возможно даже если код закрыт, но отрабатывается.
1. Качаем последний файл:
* Определение ID Диска (НОВЫЙ).
* Открываем обработку в 1С.
* Вставляем в USB разъем флешку, любую рабочую. Ждем когда система определит ее как устройство.
* Жмем "выполнить".
* Получаем вот такой ответ обработки:
* Из полученного списка выбираем нужный нам ID Код флешки, в моем случае это Диск: Н, с кодом "F24FEA74".
* Далее открываем в конфигураторе наш объект который хотим защитить:
- Открываем Модуль объекта
- В модуле объекта создаем процедуру со следующим кодом:
Процедура КлючЗащиты() Экспорт
Попытка
ScrptCtrl = Новый COMОбъект("MSScriptControl.ScriptControl");
ScrptCtrl.Language = "vbscript";
ScrptCtrl.addcode("
|Function GetComputers()
| Set objWMIService = GetObject(""winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2"")
| Set colDisks = objWMIService.ExecQuery (""Select * from Win32_LogicalDisk"")
| For Each objDisk in colDisks
| disk = disk & objDisk.DeviceId & "";"" & objDisk.DriveType& "";"" & objDisk.VolumeSerialNumber& "";""
| Next
| GetComputers = disk
|End Function
|");
Текст = СокрЛП(ScrptCtrl.Run("GetComputers"));
ScrptCtrl = Неопределено;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Если Найти(Текст,"2") > 0 Тогда
//Далее создаю таблицу для дисков
//и разбираю полученную информацию
ТаблицаДисков = Новый ТаблицаЗначений;
ТаблицаДисков.Колонки.Добавить("ИДДиска");
Пока СтрДлина (Текст) > 0 Цикл
СтрокаТаб = ТаблицаДисков.Добавить();
Если Сред(Текст,4,1) = "2" Тогда
Если Сред(Текст,6,8) = "F24FEA74" Тогда
КлючДоступа = Истина;
Прервать
Иначе
КлючДоступа = Ложь;
КонецЕсли;
КонецЕсли;
Если Сред(Текст,6,1) = ";" Тогда
СтрокаТаб.ИДДиска = "";
Иначе
СтрокаТаб.ИДДиска = Сред(Текст,6,8);
КонецЕсли;
Если СтрокаТаб.ИДДиска = "" Тогда
Текст = Сред(Текст,7,СтрДлина (Текст)-6);
Иначе
Текст = Сред(Текст,15,СтрДлина (Текст)-14);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если КлючДоступа = Истина Тогда
Сообщить("Работа разрешена");
Иначе
Сообщить("Доступ запрещен, НЕОБХОДИМО ВСТАВИТЬ КЛЮЧ");
ЭтотОбъект.ПолучитьФорму("Форма").Закрыть();
КонецЕсли;
КонецПроцедуры
* В модуле формы в процедуре
Процедура ПриОткрытии()
КлючЗащиты();
КонецПроцедуры
* Сохраняем конфигурацию, создаем файл поставки без выгрузки текста модулей.
* Создаем новую конфигурацию, заливаем туда только что созданный файл поставки.
* Сохраняем закодированный отчет/обработку как внешнюю.
ПЕРЕДАЕМ ПОЛУЕННЫЙ РЕЗУЛЬТАТ ВМЕСТЕ С ФЛЕШКОЙ ЗАКАЗЧИКУ.
Теперь отчет будет работать только в том случае, если флешка вставлена в систему. Флешки нет, отчет не откроется...
РЕЗЮМЕ: Данный метод придаст небольшого шарма вашей разработке, а для того что бы ее скомпилировать все равно необходимо время, зато работать 100% будет только одна копия вашего отчета.
При этом приведен самый тривиальный пример, но уверен что каждый из вас может найти более изощренные методы использования данного метода.
Так же возможна привязка к другому оборудованию системы, посредствам 1С.