Однажды я увидел оригинальное решение сохранения файлов в обработках 1С 7х - //infostart.ru/public/14459/
После некоторого изучения у меня были инструменты для решения проблемы с сохранением файлов в конфигурации и обработках 1С 7х, которыми я успешно и пользовался.
А после подарка Альфа //infostart.ru/public/19511/ - и вовсе наступило счастье !!!
Сравнительно недавно увидел статью //infostart.ru/public/64757/, которая несколько меня возмутила. Автор не предложил ничего своего, а просто чужое выдал на гора. Ну нельзя же так !!!
Поэтому вот решил поделится своими инструментами, ну и результатами исследования проблемы.
Вкратце о файлах:
File2BMP.exe - внедряет файл в картинку BMP.
File2BMP.rar - исходники вышестоящего
ExtForms KZK Starter.ert - моя запускалка защищенных обработок.
Test.rar - тестовая база
Protect.rar - закрытая тестовая база
Итак, продолжение…
В оригинальном решении вроде бы все было, но ... надо было помнить некую минимальную информацию, а именно: имя файла и его размер. В ходе дискуссии по решению, предлагались идеи использовать палитру картинки, как FAT (не буду подробно писать что это), благо формат BMP. вроде как, размер под палитру не ограничивает.
В ходе чтения дискуссии родилась первая идея: писать картинки в JPEG! Там в конце можно, что угодно дописывать. И первое НО… 1С картинки хранит и выдает (программно) только в BMP. Ж:?(
Ладно … И вот поковырявшись в спецификации, новые идеи … Для простоты, картинку BMPделать24 бита, и вместо палитры (при этом в спецификации указано, что картинка идет без палитры, но место под нее можно отводить) писать свою информацию. И следующие НО … 1С отводит килобайт под палитру и режет «мусор» в ней… Ж:?(
Ладно, попробуем без палитры… И снова НО... 1С «коверкает» 24-х битную картинку!!! Почему она «оптимизирует» цвета, для меня осталось загадкой …
ОК. Будем пользовать палитру в 256 цветов, а информацию запишем (правда очень мало) в четвертый неиспользуемый бит … И снова НО … 1С «подчищает» неиспользуемые биты. Ж:?( Ну прямо нет на 1С управы …
После очередных раздумий решил оставить палитру в покое, и писать информацию в «тело» картинки (правда не без ньюансов). А вот здесь и «обманули» 1Съ !!! Ж:?)
После исследования картинок пришел черед реализации функций. Как мне не хотелось полностью все сделать на 1С, ничего не вышло. Без VBScript не обойтись ... Ж:?(
Во-первых, 1С затирает "нетекстовые" символы, во-вторых, не пишет длинные строки через объекты. Поэтому можете даже не экперементировать ...
Со «стандартом» формирования «тела» картинки можно ознакомиться в исходниках Delphi. Если что-то еще надо, то допишете… В исходниках 1С все функции опираются на этот «стандарт» (ну типа контроль «внедренного» файла от «настоящей» картинки).
И напоследок еще о некоторых нюансах:
1. Из конфы картинка вытягивается почему-то «корявая» (может только у меня?). В начале файла, почему-то идут 1С-ные размеры картинки (это наверно из стримов МД-шника) … Заложил этот нюанс в функции…
2. Из обработок, специально, картинки «тяну» из (через) MXL. Это дает нам большой запас гибкости и скорости.
3. Чтобы не перегружать чтением из MXL, внедряйте картинки в несколько таблиц. Еще лучше если будут "логические блоки", например таблица с DLL-ками и таблица с ERT-шками. Функция "распаковки" поддерживает смещения, и поэтому читать подряд несколько файлов получится быстрее, чем читать по-одному.
4. Помните что 1С сохраняет картинки последовательно, как их вставляли. Т.е. если вы вставили 10 картинку (файл) в ячейку 1:1, то она и будет 10, а не первой!
5. Идентификаторы картинок в MXL, надо записывать в поле «Расшифровка» в кавычках !!! Это правило убережет от всякого рода ошибок при действительном использовании MXL. Ну и конечно уникальность идентификаторов, на «Вашей» совести.
Решенные неприятности:
Мой любимый Dr.Web ругался на конфу и внешние отчеты из-за скриптов VB (идет работа с записью на диск) предупреждением "Возможно, инфицирован SCRIPT.Virus".
После подачи и проверки в антивирусной лаборатории исходников, присвоили статус ложного срабатывания и накатили в обновления вирусных баз. Так что, кто со свежими базами - проблем быть не должно.
Пользуйтесь на здоровье!
И как всегда, соблюдайте одно правило: не затирайте цопирайты … Ж:?)