Каждый из Вас сам решает, где ставить запятую. Те, кто ставит запятую после первого слова, могут посмотреть и оставить свои комментарии. Те же, кому приходилось сталкиваться с "хитрым" заказчиком, могут воспользоваться этим расширением.
Расширение для защиты внешних обработок. Несмотря на свой столь малый размер и количество кода, решает часть вопросов исполнения и защиты внешних обработок:
- Обработка, передаваемая заказчику, закодирована;
- Кодер/Декодер закодирован (обфусцирован, байт код защищен, тексты удалены);
- Исходный текст обработки при выполнении не изменен (что позволяет быстро идентифицировать ошибки);
Теперь коротко о том, как это работает:
- Необходимо установить обработку в любую конфигурацию в режиме управляемого приложения, интерфейс управляемых форм (если проект будет развиваться, будут и обычные формы);
- Если считаете необходимым, настройте безопасный режим и защиту от опасных действий (если такой необходимости нет, отключите их);
- Используя обработку «МиниБлок» включенную расширение закодируйте Вашу обработку (в архиве есть тестовая обработка);
- Используя обработку «МиниБлок» включенную расширение откройте Вашу закодированную обработку;
Логика открытия кодированной обработки:
- Загружается кодированный файл обработки в виде двоичных данных;
- В модуле обработки файл декодируется и сразу же подключается к менеджеру внешних обработок;
- Далее Вы можете открыть форму зарегистрированной обработки или получить новый объект обработки;
Модуль формы обработки открыт. Ниже приводится только фрагмент позволяющий понять как происходит работа с закодированной обработкой:
&НаКлиенте
Процедура ОткрытьКодированныйФайл(Команда)
НачатьПомещениеФайла(Новый ОписаниеОповещения("ВыполнитьЗагрузку",ЭтаФорма),,Объект.ФайлРезультат,Ложь,УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьЗагрузку(Результат,Адрес,ВыбранноеИмяФайла,ДополнительныеПараметры) Экспорт
Если Не Результат Тогда
Возврат;
КонецЕсли;
воИмя = ЗагрузитьНаСервере(Адрес); // Загружаем кодированную обработку
ОткрытьФорму("ВнешняяОбработка."+воИмя+".Форма"); // Открываем форму внешней обработки
Сообщить("Форма внешнего объекта <"+воИмя+"> открыта.");
КонецПроцедуры
&НаСервере
Функция ЗагрузитьНаСервере(Знач Адрес)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
Защита = Новый ОписаниеЗащитыОтОпасныхДействий;
Защита.ПредупреждатьОбОпасныхДействиях = Ложь;
// Это пример варианта создания объекта внешней обработки для дальнейшего использования
воОбъект = Обработки.мБлок_МиниБлок.СоздатьОбъектЗащищеннойОбработки(ДвоичныеДанные, "Тест", Защита, Ложь);
Сообщить("Объект создан: <"+Строка(воОбъект)+">");
// Это пример варианта подключения внешней обработки для дальнейшего использования
воИмя = Обработки.мБлок_МиниБлок.ПодключитьЗащищеннуюОбработку(ДвоичныеДанные, "Тест", Защита, Ложь);
Сообщить("Объект подключен: <"+Строка(воИмя)+">");
Возврат воИмя;
КонецФункции
Модуль менеджера объекта закодирован. Листинг этого модуля без алгоритма кодирования/декодирования предоставлен в полном объеме ниже:
// Функция - Создать объект защищенной обработки
//
// Параметры:
// ДвоичныеДанные - ДвоичныеДанные - Двоичные данные закодированной внешней обработки
// Имя - Строка - Имя внешней обработки, с которым она будет зарегистрирована в системе.
// ЗащитаОтОпасныхДействий - ОписаниеЗащитыОтОпасныхДействий - Структура, описывающая параметры защиты от опасных действий для подключаемого модуля.
// БезопасныйРежим - Булево - Признак подключения внешней обработки в безопасном режиме.По умолчанию Ложь
//
// Возвращаемое значение:
// - ВнешняяОбработка - объект внешней обработки.
//
Функция СоздатьОбъектЗащищеннойОбработки(ДвоичныеДанные, Имя, ЗащитаОтОпасныхДействий, БезопасныйРежим=Ложь) Экспорт
ИмяПодключения = ПодключитьЗащищеннуюОбработку(ДвоичныеДанные, Имя, ЗащитаОтОпасныхДействий, БезопасныйРежим);
ОбъектОбработки = ВнешниеОбработки.Создать(ИмяПодключения);
Возврат ОбъектОбработки;
КонецФункции
// Функция - Подключить защищенную обработку
//
// Параметры:
// ДвоичныеДанные - ДвоичныеДанные - Двоичные данные закодированной внешней обработки
// Имя - Строка - Имя внешней обработки, с которым она будет зарегистрирована в системе.
// ЗащитаОтОпасныхДействий - ОписаниеЗащитыОтОпасныхДействий - Структура, описывающая параметры защиты от опасных действий для подключаемого модуля.
// БезопасныйРежим - Булево - Признак подключения внешней обработки в безопасном режиме.По умолчанию Ложь
//
// Возвращаемое значение:
// - Строка - Возвращает имя подключенной внешней обработки.
//
Функция ПодключитьЗащищеннуюОбработку(ДвоичныеДанные, Имя, ЗащитаОтОпасныхДействий, БезопасныйРежим=Ложь) Экспорт
БуферДекодирования = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ДвоичныеДанные);
// [Skip] - Старт -
// Алгоритм декодирования
// [Skip] - Финиш -
ДвоичнаяОбработка = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(БуферДекодирования);
Путь = ПоместитьВоВременноеХранилище(ДвоичнаяОбработка);
Обработка = ВнешниеОбработки.Подключить(Путь, Имя, БезопасныйРежим, ЗащитаОтОпасныхДействий);
Возврат Обработка;
КонецФункции
Функция КодироватьДвоичныеДанные(ДвоичныеДанные) Экспорт
Если ТекущаяДата() > Дата("20190101") Тогда
Сообщить("Срок тестирования завершен.");
Возврат ДвоичныеДанные;
КонецЕсли;
БуферКодирования = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ДвоичныеДанные);
// [Skip] - Старт -
// Алгоритм кодирования
// [Skip] - Финиш -
Результат = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(БуферКодирования);
Возврат Результат;
КонецФункции
Модуль объекта пустой, но так как поставка не разделяет типы модулей, он оказался тоже без текста.
Механизм защиты реализован в модуле обработки в связи с тем, что некоторые приложения работают в режиме совместимости версии 8.3.8 в котором нет возможности расширениями добавлять свои общие модули. Тестировалось на версии 8.3.10.2252 в обычном режиме работы и в режиме совместимости 8.3.8.
В данном расширении реализован только функционал работы с внешними обработками.
Востребована ли эта тема и нужно ли ее развивать?
Если тема будет интересна, то легким движением руки функционал расширяется для отчетов. А как максимальное развитие – расширение БСП для работы с кодированными обработками и отчетами.
Как вы видите функционирование кодера в данном расширении ограничено датой 31.12.2018.