Сохранение файлов в конфигурации и обработках 1С: Предприятие 7.х


Дальнейшее решение проблемы с сохранение файлов в конфигурации и обработках 1С: Предприятие 7.х

Однажды я увидел оригинальное решение сохранения файлов в обработках 1С 7х - http://avprog.ru/public/14459/

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

А после подарка Альфа http://avprog.ru/public/19511/ - и вовсе наступило счастье !!!

Сравнительно недавно увидел статью http://avprog.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".

После подачи и проверки в антивирусной лаборатории исходников, присвоили статус ложного срабатывания и накатили в обновления вирусных баз. Так что, кто со свежими базами - проблем быть не должно.


Пользуйтесь на здоровье!

И как всегда, соблюдайте одно правило: не затирайте цопирайты …  Ж:?)

 

Файлы обработки:

-