Двоичные данные внешнего отчета

1. SPID 18.10.17 09:38 Сейчас в теме
Платформа 8.3.10, Конфигурация своя.
Необходимо получить из запускаемого отчета двоичные данные этого самого отчета. Если отчет запускается через Файл-Открыть, то в свойстве ИспользуемоеИмяФайла объекта отчета хранится полный путь к открытому файлу отчета и получить двоичные данные не составляет труда. Но, если отчет подключен как внешний отчет, то при открытии в свойстве ИспользуемоеИмяФайла объекта отчета хранится ссылка на на временное хранилище вида e1cib\tempstorage\... При попытке получения данных из временного хранилища по этой ссылке возникает ошибка:
Ошибка получения значения из временного хранилища
по причине:
Неправильный путь к файлу 'e1cib\tempstorage\...

Как получить двоичные данные самого отчета при открытии его как подключенного внешнего отчета?
По теме из базы знаний
Найденные решения
26. SPID 18.10.17 11:44 Сейчас в теме
(25)
Да, видимо это как раз и приходит тут путь который использовался при подключении, но по нему уже ничего не хранится.

Пока я вижу два варианта:
1. Определять имя подключенного отчета / обработки и далее создавать объект не из двоичных данных, а с использование ВнешниеОбработки.Создать(ИмяОбработки);
2. Добавить передачу в параметрах ссылку на элемент справочника внешних обработок при открытии и далее уже получать двоичные данные из хранилища.
В обоих случаях придется дописать конфигурацию. Пока не решил каким путем пойти.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Boneman 298 18.10.17 09:45 Сейчас в теме
вы бы лучше код свой показали. Как именно получаете двоичные данные макета.
3. SPID 18.10.17 09:49 Сейчас в теме
Вот код. То есть мне нужны двоичные данные в хранилище самого отчета/обработки.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	ИспользуемоеИмяФайла = РеквизитФормыВЗначение("Отчет").ИспользуемоеИмяФайла;

КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	Если СтрНачинаетсяС(ИспользуемоеИмяФайла, "e1cib") Тогда 
		АдресХранилищаДвоичныхДанныхОбработки = ИспользуемоеИмяФайла; // Тут ошибка получения данных!
	Иначе	
		АдресХранилищаДвоичныхДанныхОбработки = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИспользуемоеИмяФайла), УникальныйИдентификатор);
	КонецЕсли;	
			
КонецПроцедуры
Показать
4. SPID 18.10.17 09:51 Сейчас в теме
Вернее ошибка не там где комментарий указан, а далее когда использую
ПолучитьИзВременногоХранилища(АдресХранилищаДвоичныхДанныхОбработки)
5. Boneman 298 18.10.17 09:57 Сейчас в теме
странное у вас получение какое то.
Лично я вот таким образом получал двоичные данные из макета этой же самой обработки.
Нажимаем кнопку, получаем из макета ДД, у меня они там сериализованы. Но главное принцип. И все работает уже сто лет
&НаКлиенте
Процедура ПолучитьОписанияИзХранилища(Команда)
	// Вставить содержимое обработчика.
	ПолучимОписаниеИзХранилищаОбработки();
КонецПроцедуры

&НаСервере
Процедура ПолучимОписаниеИзХранилищаОбработки()
	ДвоичныеДанные = РеквизитФормыВЗначение("Объект").ПолучитьМакет("ХранилищеОписаний");
	ПутьНаСервере = ПолучитьИмяВременногоФайла(".hbz");
	ДвоичныеДанные.Записать(ПутьНаСервере);
	попытка
	СтруктураХранения = ЗначениеИзФайла(ПутьНаСервере);
	
	ЗначениеВРеквизитФормы(СтруктураХранения, "СтруктураТаблиц");
	исключение
	конецпопытки;
	//и подчистим за собой
	УдалитьФайлы(ПутьНаСервере);
КонецПроцедуры
Показать
10. SPID 18.10.17 10:03 Сейчас в теме
(5) То есть сам файл отчета/обработки хранится в макете. Как вариант конечно, хотя может и не совсем удобный - при каждом сохранении отчета/обработки необходимо еще перезагружать файл в макете..
Может есть какие то более удобные способы....
12. herfis 499 18.10.17 10:05 Сейчас в теме
(10) "То есть сам файл отчета/обработки хранится в макете" - нет.
15. SPID 18.10.17 10:09 Сейчас в теме
(12) У меня пока нет, это я так понял предложение (5)
17. herfis 499 18.10.17 10:13 Сейчас в теме
(15) Я решил, что ты на мой пост отвечаешь. Звиняй, косоглазие какое-то с утра.
6. herfis 499 18.10.17 09:57 Сейчас в теме
Тю! Находишь свою обработку в справочнике "ДополнительныеОтчетыИОбработки" и достаешь двоичные данные из хранилища.
8. SPID 18.10.17 10:00 Сейчас в теме
(6) А как найти не передавая параметров при открытии?
11. herfis 499 18.10.17 10:04 Сейчас в теме
(8) Имя можно "выпарсить" из того самого "ИспользуемоеИмяФайла" и найти по нему.
14. SPID 18.10.17 10:08 Сейчас в теме
(11)
Как, если там хранится ссылка на временное хранилище?
16. herfis 499 18.10.17 10:12 Сейчас в теме
(14) Извини. Ввел в заблуждение. Я не придумал ничего лучше, чем доставать имя из свойства формы "ИмяФормы".
ИмяОбработки = СтрПолучитьСтроку(СтрЗаменить(ИмяФормы, ".", Символы.ПС), 2);
19. SPID 18.10.17 10:29 Сейчас в теме
(16)
Так, получу я имя отчета, а что дальше то я не соображу. Через ВнешниеОтчеты могу создать этот отчет, но как сохранить его в файл или получить двоичные данные?
20. herfis 499 18.10.17 10:32 Сейчас в теме
(19) В смысле, не сообразишь? Под этим именем отчет хранится в справочнике "ДополнительныеОтчетыИОбработки". Находишь нужный элемент справочника. А у него прямо в реквизите хранилища значений лежат двоичные данные отчета.
22. SPID 18.10.17 10:37 Сейчас в теме
(20) Да в том то и дело что имя элемента справочника может отличаться :(
Мне больше интересно, что за адрес временного хранилища приходит в ИспользуемоеИмяФайла и почему его нельзя получить из хранилища.
23. herfis 499 18.10.17 10:42 Сейчас в теме
(22) Это не совсем адрес временного хранилища. Насколько я понимаю, это навигационная ссылка на реквизит справочника внешних отчетов с двоичными данными отчета и она была использована при подключении отчета через менеджер внешних отчетов. Как используя только ее можно добраться до двоичных данных - я не знаю.
24. SPID 18.10.17 10:56 Сейчас в теме
Скорее всего это адрес во временном хранилище из которого был создан отчет, но после создания оно было удалено, а адрес то остался...
25. herfis 499 18.10.17 11:35 Сейчас в теме
(24)
ВнешниеОбработкиМенеджер (ExternalDataProcessorsManager)
Подключить (Connect)
Синтаксис:
Подключить(<Путь>, <Имя>, <БезопасныйРежим>)
Параметры:
<Путь> (обязательный)
Тип: Строка.
Ссылка на реквизит объекта конфигурации, который содержит данные внешней обработки. Ссылка может быть получена методом ПолучитьНавигационнуюСсылку.
26. SPID 18.10.17 11:44 Сейчас в теме
(25)
Да, видимо это как раз и приходит тут путь который использовался при подключении, но по нему уже ничего не хранится.

Пока я вижу два варианта:
1. Определять имя подключенного отчета / обработки и далее создавать объект не из двоичных данных, а с использование ВнешниеОбработки.Создать(ИмяОбработки);
2. Добавить передачу в параметрах ссылку на элемент справочника внешних обработок при открытии и далее уже получать двоичные данные из хранилища.
В обоих случаях придется дописать конфигурацию. Пока не решил каким путем пойти.
7. HanterVol 8 18.10.17 09:57 Сейчас в теме
Ну кроме ссылки во временном хранилище у внешних отчетов есть ещё и постоянная ссылка в справочнике.. Кто мешает тянуть из него?
9. herfis 499 18.10.17 10:00 Сейчас в теме
Если ты рожаешь фоновое выполнение процедуры из обработки, то их уже есть у нас :)
13. SPID 18.10.17 10:07 Сейчас в теме
(9) В БСП то все проще, там при вызове подключенного отчета или обработки передается ссылка на справочник ВнешниеОтчетыИОбработки. У меня нет, и так не хочется дописывать :)
18. herfis 499 18.10.17 10:27 Сейчас в теме
(13) Не. Там я решал такую же проблему. До двоичных данных добирался через справочник доп. отчетов и обработок. Находил там по имени, которое получал как в (16). И мне интересно - как это у тебя нет БСП, если используются подключаемые внешние отчеты? Или ты альтернативную подсистему нарисовал? :)
21. SPID 18.10.17 10:35 Сейчас в теме
(18) Ну нарисовал не я, а до меня :) и без БСП, а я вот дорисовываю. Заменять на БСП надо бы, но пока нет время (
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот