Получение картинки из Хранилища Значений для вывода в печатную форму макета.

1. Stanislav1993 21.04.19 08:19 Сейчас в теме
Здравствуйте, товарищи - специалисты.
У меня возникли трудность с выводом картинки на печатную форму.
На основе ПолучениеКартинки , я попытался решить данную задачу.
Не получилось.
Возможно я чего то упускаю.
Подскажите пож-та. Ниже выкладаю код запроса.

&НаКлиенте
Процедура Печать(Команда)
	ТД = ПечатьПЛ();
КонецПроцедуры

&НаСервере
Функция ПечатьПЛ()
	ТабДок = Новый ТабличныйДокумент;
	Макет = Обработки.ПрайсЛист.ПолучитьМакет("Макет");
	Товары = Макет.ПолучитьОбласть("Данные");
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	Номенклатура.Наименование КАК Наименование,
	|	ВЫБОР
	|		КОГДА ЦенаПродажиСрезПоследних.ТипТорговли = ЗНАЧЕНИЕ(Перечисление.ТипТорговли.Оптовая)
	|			ТОГДА ЦенаПродажиСрезПоследних.ЦенаПродажи
	|		ИНАЧЕ 0
	|	КОНЕЦ КАК ЦенаОптовая,
	|	ВЫБОР
	|		КОГДА ЦенаПродажиСрезПоследних.ТипТорговли = ЗНАЧЕНИЕ(Перечисление.ТипТорговли.Розничная)
	|			ТОГДА ЦенаПродажиСрезПоследних.ЦенаПродажи
	|		ИНАЧЕ 0
	|	КОНЕЦ КАК ЦенаРозничная,
	|	Номенклатура.ТипПродукции.Картинка.Файл КАК ТипПродукцииКартинкаФайл,
	|	Номенклатура.Фирма КАК Фирма,
	|	Номенклатура.ТипПродукции КАК ТипПродукции,
	|	Номенклатура.Размер КАК Размер,
	|	Номенклатура.Артикуль КАК Артикуль
	|ИЗ
	|	РегистрСведений.ЦенаПродажи.СрезПоследних КАК ЦенаПродажиСрезПоследних
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
	|		ПО ЦенаПродажиСрезПоследних.Продукция = Номенклатура.Ссылка";
	
	
	
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		Товары.Параметры.Заполнить(Выборка);
		Данные = Выборка.ТипПродукцииКартинкаФайл.Получить();
		Если ТипЗнч(Данные) = Тип("Картинка") Тогда
			лкКартинка = Данные;
		ИначеЕсли ТипЗнч(Данные) = Тип("ДвоичныеДанные") Тогда
			лкКартинка = Новый Картинка(Данные, Ложь);
		КонецЕсли;
		
		Для каждого ТекРисунок из Товары.Рисунки Цикл
			Если ТекРисунок.Имя = "КартинкаТовара" Тогда
				ТекРисунок.Картинка = лкКартинка;
			КонецЕсли;
		КонецЦикла;    
		
		
		
		ТабДок.Вывести(Товары);	
	КонецЦикла;
	
	Возврат ТабДок;
КонецФункции

Показать
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Stanislav1993 21.04.19 08:49 Сейчас в теме
ошибка несоответствие типов.
Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		Товары.Параметры.Заполнить(Выборка);
		ХЗ = Новый ХранилищеЗначения(Выборка.ТипПродукцииКартинкаФайл);
		Данные = ХЗ.Получить();
		Рисунок = Товары.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
		Рисунок.Картинка = Данные;
		ТабДок.Вывести(Товары);	
	КонецЦикла;

Показать
4. independ 1551 21.04.19 09:03 Сейчас в теме
(3)
Данные
какой тип? Для картинки имеет смысл определить свою область типа и вывод через Присоединить
ОбластьКартинки=Макет.ПолучитьОбласть("Данные|Картинка");
ТабДок.Присоединить(ОбластьКартинки);
5. Stanislav1993 21.04.19 09:19 Сейчас в теме
(4)У меня расположение картинки находится в одной области.
Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		Товары.Параметры.Заполнить(Выборка);
		ХЗ = Новый ХранилищеЗначения(Выборка.ТипПродукцииКартинкаФайл);
		Данные = ХЗ.Получить();
		Если ТипЗнч(Данные) = Тип("Картинка") Тогда
			лкКартинка = Данные;
		ИначеЕсли ТипЗнч(Данные) = Тип("ДвоичныеДанные") Тогда
			лкКартинка = Новый Картинка(Данные, Ложь);
		КонецЕсли;
		Рисунок = Товары.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
		Рисунок.Имя = "КартинкаТовара";
		Рисунок.РазмерКартинки  = РазмерКартинки.Пропорционально;
		Рисунок.Картинка = лкКартинка;
		ТабДок.Вывести(Товары);	
	КонецЦикла;

Показать
6. Stanislav1993 21.04.19 09:24 Сейчас в теме
(4) В отладчике я просмотрел, у меня данные - "Двоичные".
7. independ 1551 21.04.19 09:27 Сейчас в теме
(6)
Если ТипЗнч(лкКартинка) = Тип("ДвоичныеДанные") Тогда
        лкКартинка = Новый Картинка(лкКартинка);
КонецЕсли;
8. Stanislav1993 21.04.19 09:34 Сейчас в теме
(7)
Если ТипЗнч(лкКартинка) = Тип("ДвоичныеДанные") Тогда
лкКартинка = Новый Картинка(лкКартинка);
КонецЕсли;


Никак..не получается..эта ошибка типов..
9. Stanislav1993 21.04.19 09:50 Сейчас в теме
(7)
Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		ХЗ = Новый ХранилищеЗначения(Выборка.ТипПродукцииКартинкаФайл);
		Данные = ХЗ.Получить();
		
		Если ТипЗнч(Данные) = Тип("Картинка") Тогда
			лкКартинка = Новый Картинка(Данные, Ложь);
		КонецЕсли;
		
		Если ТипЗнч(Данные) = Тип("ХранилищеЗначения") Тогда
			лкКартинка1 = Новый Картинка(лкКартинка);
		КонецЕсли;
		//мРис = Товары.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
		//мРис.Картинка = лкКартинка1;
		//мРис.РазмерКартинки = РазмерКартинки.Пропорционально;
		Для Каждого ТекРисунок Из Товары.Рисунки Цикл
			Если ТекРисунок.Имя = "КартинкаТовара" Тогда
				ТекРисунок.Картинка = лкКартинка1;
				ТекРисунок.РазмерКартинки=РазмерКартинки.Пропорционально;
			КонецЕсли;
			
		КонецЦикла;
		Товары.Параметры.Заполнить(Выборка);

	КонецЦикла;
	
	Возврат ТабДок;

Показать

Сделал так, ошибок нет, но результат печати - пустой.
10. independ 1551 21.04.19 11:04 Сейчас в теме
(9) После
Товары.Параметры.Заполнить(Выборка);

ТабДок.Вывести(Товары); 
11. Stanislav1993 21.04.19 12:29 Сейчас в теме
(10)Да, я так и сделал. Не заметил ошибку. Но картинки не отображаются.
12. Stanislav1993 21.04.19 14:15 Сейчас в теме
(7)
Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		Товары.Параметры.Заполнить(Выборка);
		
		
		ХЗ = Новый ХранилищеЗначения(Выборка.ТипПродукцииКартинкаФайл);
		Данные = ХЗ.Получить();
		
		Если ТипЗнч(Данные) = Тип("Картинка") Тогда
			лкКартинка = Новый Картинка(Данные);
		Иначе
			лКартинка  = Данные
		КонецЕсли;
		
		Если НЕ  лКартинка = Неопределено Тогда    
			Для Каждого ТекКартинка Из Товары.Рисунки Цикл
				Если ТекКартинка.Имя = "КартинкаТовара" Тогда
					Попытка
						ТекКартинка.Картинка = лКартинка;
						
					Исключение
						Сообщить(ОписаниеОшибки());
					КонецПопытки;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
		
		ТабДок.Вывести(Товары);
	КонецЦикла;

Показать


{Обработка.ПрайсЛист.Форма.Форма.Форма(56)}: Ошибка при установке значения атрибута контекста (Картинка): Несоответствие типов
13. independ 1551 21.04.19 14:22 Сейчас в теме
(12)
Если ТипЗнч(Данные) = Тип("Картинка") Тогда
            лкКартинка = Новый Картинка(Данные);
        Иначе
            лКартинка  = Данные
        КонецЕсли;


Нужно так

Если ТипЗнч(Данные) = Тип("ДвоичныеДанные) Тогда
            лкКартинка = Новый Картинка(Данные);
Иначе
лКартинка  = Данные;
КонецЕсли;
14. Stanislav1993 21.04.19 14:40 Сейчас в теме
(13)
Если ТипЗнч(Данные) = Тип("ДвоичныеДанные) Тогда
лкКартинка = Новый Картинка(Данные);
Иначе
лКартинка = Данные;
КонецЕсли;

(13)
Прикрепленные файлы:
15. independ 1551 21.04.19 15:59 Сейчас в теме
16. Stanislav1993 23.04.19 14:06 Сейчас в теме
(15)Спасибо, но тут идет работа с библиотекой картинок, а не с хранилищем значений.
17. independ 1551 23.04.19 14:17 Сейчас в теме
(16) суть одна и та же, главное тип - Картинка, и в примере вывод картинок осуществляется в свою область
19. Stanislav1993 23.04.19 14:26 Сейчас в теме
(17)Я создал табличную часть и запрос хочу для начала вывести данные в табличной части, а потому уже заняться печатью.
У меня проблема в том, что я не могу получить картинку из хранилища.
18. Boneman 302 23.04.19 14:25 Сейчас в теме
(12)
ХЗ = Новый ХранилищеЗначения(Выборка.ТипПродукцииКартинкаФайл);
Данные = ХЗ.Получить();


Какой тип данных у вас в результате запроса Выборка.ТипПродукцииКартинкаФайл ?
P.S.
Меня терзают смутные сомнения, вы нечто-помещаете в хранилище, и тут же из него это нечто получаете.
20. Stanislav1993 23.04.19 14:26 Сейчас в теме
(18)

&НаСервере
Функция ПолучитьДанные();
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Номенклатура.Ссылка КАК Номенклатура,
		|	Номенклатура.Фирма КАК Фирма,
		|	Номенклатура.ТипПродукции КАК ТипПродукции,
		|	Номенклатура.Размер КАК Размер,
		|	Номенклатура.Артикуль КАК Артикуль,
		|	ЦенаПродажиСрезПоследних.ТипТорговли КАК ТипТорговли,
		|	ЦенаПродажиСрезПоследних.Валюта КАК Валюта,
		|	ЦенаПродажиСрезПоследних.ЦенаПродажи КАК Цена,
		|	Номенклатура.ТипПродукции.Картинка КАК Картинка
		|ИЗ
		|	РегистрСведений.ЦенаПродажи.СрезПоследних КАК ЦенаПродажиСрезПоследних
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
		|		ПО ЦенаПродажиСрезПоследних.Продукция = Номенклатура.Ссылка
		|ГДЕ
		|	Номенклатура.Ссылка <> &Ссылка
		|	И ЦенаПродажиСрезПоследних.ТипТорговли <> &ТипТорговли
		|	И ЦенаПродажиСрезПоследних.Валюта <> &Валюта
		|	И ЦенаПродажиСрезПоследних.ЦенаПродажи <> &ЦенаПродажи
		|	И Номенклатура.Фирма = &Фирма
		|
		|СГРУППИРОВАТЬ ПО
		|	Номенклатура.Ссылка,
		|	Номенклатура.Фирма,
		|	Номенклатура.ТипПродукции,
		|	Номенклатура.Размер,
		|	Номенклатура.Артикуль,
		|	ЦенаПродажиСрезПоследних.ТипТорговли,
		|	ЦенаПродажиСрезПоследних.Валюта,
		|	ЦенаПродажиСрезПоследних.ЦенаПродажи
		|
		|УПОРЯДОЧИТЬ ПО
		|	Номенклатура";
	
	Запрос.УстановитьПараметр("Ссылка", Справочники.Номенклатура.ПустаяСсылка());
	Запрос.УстановитьПараметр("ТипТорговли", Перечисления.ТипТорговли.ПустаяСсылка());
	Запрос.УстановитьПараметр("Валюта", Перечисления.Валюты.ПустаяСсылка());
	Запрос.УстановитьПараметр("ЦенаПродажи", 0);
	Запрос.УстановитьПараметр("Фирма",Фирма);
	РезультатЗапроса = Запрос.Выполнить();
	
	РезультатЗапроса = Запрос.Выполнить();
	Таблица.Загрузить(РезультатЗапроса.Выгрузить());
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		Для Каждого Стр Из Таблица Цикл
			ХЗ = Новый ХранилищеЗначения(ВыборкаДетальныеЗаписи.Картинка,Новый СжатиеДанных(6));
			Данные = ХЗ.Получить();
			Если ТипЗнч(Данные) = Тип("ДвоичныеДанные") Тогда лКартинка = Новый Картинка(Данные);
			Иначе лКартинка = Данные;
			КонецЕсли;
			Стр.Картинка = лКартинка;
			
		КонецЦикла;
		
	КонецЦикла;
КонецФункции

&НаКлиенте
Процедура Данные(Команда)
	ПолучитьДанные();
КонецПроцедуры

Показать
34. Touch_Of_Soul 30 05.07.22 10:10 Сейчас в теме
21. Stanislav1993 23.04.19 14:29 Сейчас в теме
(18) Я запрос переделал. Сейчас в отладчике тип данных - <>
22. Boneman 302 23.04.19 14:32 Сейчас в теме
(21)
но ты же понимаешь что делает код ?
			ХЗ = Новый ХранилищеЗначения(ВыборкаДетальныеЗаписи.Картинка,Новый СжатиеДанных(6));
			Данные = ХЗ.Получить();

Он бессмысленный.
он равнозначен
Данные = ВыборкаДетальныеЗаписи.Картинка;
24. Stanislav1993 23.04.19 14:34 Сейчас в теме
23. Boneman 302 23.04.19 14:34 Сейчас в теме
(21) отладчиком посмотри
какой тип значения у тебя в ВыборкаДетальныеЗаписи.Картинка ? Это уже тип картинка ? Или это хранилище ?
25. Stanislav1993 23.04.19 14:36 Сейчас в теме
(23)
Прикрепленные файлы:
26. Boneman 302 23.04.19 14:39 Сейчас в теме
(25) ну, - это вообще у тебя ссылка на справочник.
Судя по всему, в этом справочнике, есть реквизит "файл", с типом хранилище значения.
Вот именно оттуда тебе надо получить двоичные данные, и сделать из них картинку
ДД = ВыборкаДетальныеЗаписи.Картинка.Файл.Получить();
Картинка = Новый Картинка(ДД);

P.S.
Причем не факт, что картинка именно там расположена...в типовых, там еще много вариаций может быть в зависимости от настроек, и в регистре сведений, и вообще в томах на диске.
27. Stanislav1993 23.04.19 14:41 Сейчас в теме
(26)
ДД = ВыборкаДетальныеЗаписи.Картинка.Файл.Получить();
Картинка = Новый Картинка(ДД);


Я так тоже делал, но не отображаются данные в ТЗ
28. Boneman 302 23.04.19 14:43 Сейчас в теме
(27)
Я так тоже делал, но не отображаются данные в ТЗ

так у тебя даже в отладчике, ссылка пустая..откуда картинке материализоваться то.
ну и прочитай мой постскриптум...
ты должен быть уверен, что в твоих выгребаемых данных вообще картинка присутствует. Она может хранится в другом месте.
29. Stanislav1993 23.04.19 14:45 Сейчас в теме
(28)Я получил уже картинку. Сейчас нужно как то ее поместить в тз
30. Boneman 302 23.04.19 14:53 Сейчас в теме
(29) ты уверен что ты получил картинку ?
как ты это проверил ?
лКартинка = Новый Картинка(Данные);

у тебя этот код, да сделает картинку,
но при отсутствии данных это будет просто тип картинка, с пустой картинкой.

попробуй ее записать в файл, и просто его в винде просмотрщиком посмотреть...там действительно картинка откроется ?
nКартинка.Записать("C:\My Documents\My Pictures\home.bmp");
31. Stanislav1993 23.04.19 15:03 Сейчас в теме
(30)Да ты прав. Так и есть. Что делать то?
32. Boneman 302 23.04.19 15:17 Сейчас в теме
(31)
Да ты прав. Так и есть. Что делать то?

разобраться со структурой хранения вашей базы,
найти - где именно хранятся картинки.
33. Stanislav1993 23.04.19 19:56 Сейчас в теме
(32) Получить добиться результата)
35. SBVoshod 11.01.23 14:54 Сейчас в теме
Если вдруг кому интересно решение:
При условии, что у Вас в реквизите с типом "ХранилищеЗначения" точно записана картинка, то примерный код у меня вышел вот такой:

// Проверям наличие данных в реквизите с типом ХранилищеЗначения
// Если данных нет, берем из макета область без картинки, если есть, берем область с расположенной на ней пустой картинкой.
        ЕстьШапкаДокумента = ЛОЖЬ; 
	Если НЕ ДанныеДокументов.Организация.ФайлШапкаДокументов.Получить() = Неопределено Тогда
			Область_Шапка 			= Макет.ПолучитьОбласть("Шапка_ШапкаДокумента");   
			ЕстьШапкаДокумента 		= ИСТИНА;
		Иначе
			Область_Шапка 			= Макет.ПолучитьОбласть("Шапка");	
	КонецЕсли;

// Если картинка была, то выводим ее из двоичных данных в макет в объект картинки с именем "ШапкаДокумента"
        Если ЕстьШапкаДокумента Тогда  
			ВремКартинка = Новый Картинка(ДанныеДокументов.Организация.ФайлШапкаДокументов.Получить() ,ИСТИНА);
			Область_Шапка.Рисунки.ШапкаДокумента.Картинка = ВремКартинка;
	КонецЕсли;
Показать
Оставьте свое сообщение

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