Размещение произвольных файлов с данными в файлах .mxl и .ert

Опубликовал andrewks в раздел Администрирование - Системное

Добавляем произвольные файлы с данными (архивы, исполняемые файлы, dll, и прочее) прямо в нашу внешнюю обработку, по принципу "всё с собой", в итоге в передаваемом на сторону ert-файле с обработкой всё необходимое для её функционирования (например, архив с данными, или используемая внешняя dll-библиотека) уже есть внутри.

Данная проблема давно бередит умы одинэсников, и уже есть несколько очень неплохих разработок на эту тему. Из встреченных мной:
//infostart.ru/public/14459/
//infostart.ru/public/69202/
//infostart.ru/public/70304/

Однако во всех этих разработках есть одна общая деталь: исходный файл нужно специально кодировать, преобразовывать, и т.п., чтобы потом его можно было засунуть в лист Moxcel. Потом, после того, как извлекли новую сущность из листа Moxcel, производится обратное преобразование, и вуаля - перед нами исходный файл! Это, конечно, весьма интересный подход, но у меня, почему-то, возникло желание чего-то более простого и юзабельного, желательно, чтобы вот прямо в 1С, штатно, щёлкнул на файл, и чтобы он тут же в лист Moxcel и просочился, безо всяких хитромудрых упаковок в картинку и т.п.
И что вы думаете, я нашёл такую фичу! В контексте редактируемого листа Moxcel, в меню Таблица\Вставить рисунок\Объект я нашёл весьма любопытную возможность: опция "Создать из файла", где и можно, совершенно штатно, прямо из 1С, указав любой файл, поместить его в контейнер на листе. Тут же есть и мини-редактор этого контейнера (Объект: Пакет\Изменить пакет), где можно изменить имя вложенного файла (Правка\Метка), извлечь файл (Файл\Сохранение содержимого), перезалить в пакет другой файл (Файл\Импорт), и кое-что ещё, по мелочам.
Однако, довольно быстро пришло разочарование, ведь 1С не предоставляет этот замечательный контейнер в виде объекта, и в Таб.ТекущийОбъект - шиш с маслом. Но мы не сдадимся так просто, ведь правда?
Посмотрев в содержимое файла .ert, я увидел - ну вот же оно, содержимое моего файла, нужно только его ДОСТАТЬ. А достать, надо сказать, оказалось непросто: ведь содержимое файла вложено в Ole10Native, Ole10Native - в Compound, Compound - в объект 1С Moxcel, Moxcel - в, опять-таки, Compound. Но разве мифические трудности остановят настоящего программера? Вооружившись Гуглем, Конфигуратором, своей обработкой по низкоуровневому чтению Compound-файлов ( //infostart.ru/public/115207/ ), и напильником, я приступил к поиску и извлечению этой Кащеевой иглы. И вы знаете, не безуспешно! Результат своих изысканий и предоставляю на суд общественности.

Скачать файлы

Наименование Файл Версия Размер
InstallEx.zip
.zip 105,55Kb
07.02.12
53
.zip 105,55Kb 53 Скачать

См. также

Комментарии
1. Виталий Михайлов (010280) 86 08.02.12 22:55 Сейчас в теме
Почему то не срабатывает приложение: ЗапуститьПриложение(""""+ПапкаИзвлечения+"7z.exe"" e -y ""-o"+ПапкаИзвлечения+""" """+ПапкаИзвлечения+"gpl3.7z"" gpl3.txt");
Может не те ключи?
7z.exe-есть, Gpl3.7z- тоже выгружен. Командной строкой тоже не получается.
2. andrewks 1184 09.02.12 08:09 Сейчас в теме
(1) ключи точно те, проверено.
а что пишет, если набирать из командной строки? может, антивирус блокирует?
и что, если из командной строки перейти в темп-папку, куда были извлечены файлы, и просто набрать 7z.exe? выводится информация о ключах и опциях запуска, или нет?
3. Виктор Левченко (lvictor58) 124 09.02.12 15:50 Сейчас в теме
Посмотрел я на тот код, что в модуле демо-обработке прописан, и почему-от подумалось мне, что через эмуляцию картинки гораздо проже и понятней.
И без каких-то не понятно из чего высосаных ограничений.
Одним словом: Хотели как лучше, а получилось - как всегда!

От оценки воздержусь.
4. Виталий Михайлов (010280) 86 09.02.12 17:48 Сейчас в теме
(2) andrewks,
1) 7z.exe ? дает сообщение:
7-Zip 9.20 Copyringht <c> 1999-2010 Igor Pavlov 2010-11-18
Error:
Incorrect command line

2) 7z.exe? дает сообщение:
"7z.exe?" не является внутренней или внешней командой, исполняемой или покетной
5. andrewks 1184 09.02.12 18:04 Сейчас в теме
(4) а если перед
ЗапуститьПриложение()
вставить строчку: Сообщить("<"+ПапкаИзвлечения+">");
что выводится в строке сообщений? (желательно скопипастить сюда, может, дело в наименовании темп-папки)

или ещё так можно попробовать:

СтрокаЗапуска=""""+ПапкаИзвлечения+"7z.exe"" e -y ""-o"+ПапкаИзвлечения+""" """+ПапкаИзвлечения+"gpl3.7z"" gpl3.txt";
Сообщить("<"+СтрокаЗапуска+">");
ЗапуститьПриложение(СтрокаЗапуска);
желательно тоже скопипастить текст из окна сообщений
6. andrewks 1184 09.02.12 18:07 Сейчас в теме
(3)
"через эмуляцию картинки гораздо проже и понятней" проще? ну да. при той реализации, как там - конечно проще. поиск нужной строки-метки по тексту "в лоб", я тоже мог бы сделать поиск потоков ole10native так, уместилось бы всё про всё в 200 строк, но специально не стал так делать. потому как неправильно это. это называется "алгоритм, неустойчивый ко входным данным"
"И без каких-то не понятно из чего высосаных ограничений. " это про что? не совсем понял
"Одним словом: Хотели как лучше, а получилось - как всегда!" - ну, вы имеете право на своё мнение
7. Il Il (Il) 37 10.02.12 02:19 Сейчас в теме
На самом деле весьма оригинально!
8. Виктор Левченко (lvictor58) 124 10.02.12 12:42 Сейчас в теме
(6) "И без каких-то не понятно из чего высосаных ограничений. " - это я про надпись перед скачиванием:

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

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

3. При возникновении необходимости иного использования полученных материалов Пользователь обязан обратиться к Правообладателю для заключения договора на передачу имущественных прав на использование материалов.

В случае обнаружения нарушения, пользователь будет незамедлительно заблокирован.
9. Виктор Левченко (lvictor58) 124 10.02.12 12:58 Сейчас в теме
(6) а п. №2 этого ограничения меня ва-а-ще в ступор вводит. Получается я сам не могу все это использовать, при изготовлении каких-либо отчетов-обработок для обслуживаемых мной клиентов, но вот если для этого найму батраков, то они смогут этм воспользоваться. Но при условии, что получат эти материалы от меня, а не (Боже упаси) проявят инициативу и скачают их с сайта. Только вот факт передачи надо ли будет заверять нотариально или моего честного слова для Вас будет достаточно?
10. andrewks 1184 10.02.12 13:56 Сейчас в теме
(8) ну, так это не ко мне вопрос. я не являюсь ни автором этих надписей, ни хозяином этого ресурса.
моя мини-лицензия помещена в двух строчках внутри обработки
11. soba (soba) 12.02.12 14:41 Сейчас в теме
ну вот и пришла пора вирусов в 1с
12. andrewks 1184 12.02.12 16:41 Сейчас в теме
(11) я бы сказал, что эта пора уже давно, как ушла. тема не взлетела. а метод инкапсуляции бинарных файлов в макеты имеет другое, довольно прикладное значение - файл с данными (например, классификатор), нужная для функционирования обработки dll-ка, и т.п.
13. Андрей (Rio3000) 17.02.12 05:55 Сейчас в теме