Решение
Использовать разработку:
Размещение двоичных данных в объектах 1С
Посмотреть на "живой" пример можно скачав
//infostart.ru/public/download.php?file=64469
Способ:
1) Обрабатываем файл precomp.dll обработкой из "Размещение двоичных данных в объектах 1С" и получаем файл картинки. Вставляем этот файл в первую таблицу (если их несколько) в внеш. обработке в любое место. Картинка вставляется как объект картинка. Присваиваем ей имя "precomp"
2) Далее обрабатываем код обработки с помощью КЗК 2 получаемзашифрованный код и блок с вызовом загрузки модуля защиты.Например:// Текст автоматически вставлен при компиляции с помощью "Комплекса защиты конфигурации (версия 2.0)"
Попытка // провека на загруженность компоненты Прекомпилятор, // чтобы избежать зацикливания при окончании срока лицензии Лицензия = СоздатьОбъект("КЗК2.Лицензия");Исключение // загрузка компоненты Прекомпилятор Если ЗагрузитьВнешнююКомпоненту("precomp.dll") = 0 Тогда // при неудаче вывод предупреждения пользователю Предупреждение("Компонента прекомпиляции недоступна!"); Иначе // после удачной загрузки создаем внутренний объект компоненты Лицензия = СоздатьОбъект("КЗК2.Лицензия"); // запускаем служебный метод, который перекомпилирует и перезапустит модуль Лицензия.ПерезапуститьМодуль(); // ВНИМАНИЕ! // Метод ПерезапуститьМодуль() является служебным и предназначен // для вызова только из внешних обработок из стартера скомпилированной обработки. // Самостоятельный вызов этого метода где-нибудь еще может привести к падению 1С:Предприятия КонецЕсли;КонецПопытки;//[BEGIN COMPILED]//Далее идет закодированный текст модуля
3) в самый верх вставляем код извлечения файла precomp.dll из картинки в каталог ИБ. Текст можно копировать.
// выгрузка компонентов защиты "Комплекса защиты конфигурации (версия 2.0)"Попытка глWSH = СоздатьОбъект("WScript.Shell"); ИмяФайла = "precomp.dll"; ИдентификаторФайла = "precomp"; РазмерФайла = "61440"; //- это размер файла-картинки из обработки получения картинки Если ФС.СуществуетФайл(КаталогИБ()+ИмяФайла) = 0 Тогда //РаспаковатьBin(ИмяФайла,ИдентификаторФайла,РазмерФайла) КаталогФормы=""; ИмяФормы=""; РасположениеФайла(КаталогФормы,ИмяФормы); ИмяВременногоФайла=КаталогИБ()+ИмяФайла; ТекстСкрипта=" |Sub Main | Dim FSO,F | Set FSO = CreateObject(""Scripting.FileSystemObject"") | Set F = FSO.OpenTextFile("""+КаталогФормы+ИмяФормы+""",1) | Str = """" | BeginFind = 0 | Do | Char = F.Read(1) | Str = Str & Char | If BeginFind = 0 Then | If Right(Str,"+СокрЛП(СтрДлина(ИдентификаторФайла))+")="""+ИдентификаторФайла+""" Then | BeginFind = 1 | Str = """" | End If | Else | If Right(Str,2) = ""BM"" Then | F.Skip(1076) | Str=F.Read("+СокрЛП(РазмерФайла)+") | F.Close | Set F=FSO.CreateTextFile("""+ИмяВременногоФайла+""") | F.Write(Str) | F.Close | Exit Do | End If | End If | Loop While F.AtEndOfStream=0 |End Sub |"; VBS=СоздатьОбъект("MSScriptControl.ScriptControl"); VBS.Language="vbscript"; VBS.Timeout=-1; VBS.AddCode(ТекстСкрипта); VBS.Run("Main"); КонецЕсли; Исключение глWSH = 0; Сообщить("> Не удалось создать объект ""WScript.Shell"" |Ничего страшного... можно продолжать работу... |Сообщите Программисту 1C!","i");КонецПопытки;
******************************************
Все. Когда пользователь откроет такую обработку с работает начальный код, который выгрузит из картинки библиотеку и поместит в каталог ИБ. Последующий код найдет, существующий уже, файл precomp.dll и загрузит защиту КЗК 2 в 1С. Далее обработка откроется и защищенный код будет успешно скомпилирован.