gifts2017

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

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

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

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

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

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

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

См. также

Подписаться Добавить вознаграждение

Комментарии

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

От оценки воздержусь.
4. Виталий Михайлов (010280) 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 09.02.12 18:04
(4) а если перед
ЗапуститьПриложение()
вставить строчку: Сообщить("<"+ПапкаИзвлечения+">");
что выводится в строке сообщений? (желательно скопипастить сюда, может, дело в наименовании темп-папки)

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

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

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

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

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

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