Имя: Пароль:
1C
1С v8
Как получить файл картинки номенклатуры для вывода его на печать? УТ 11
0 vse_serjezno
 
21.01.14
11:06
Утро доброе!
Ситуация следующая:
У номенклатуры есть реквизит ФайлКартинка с типом СправСсылка.НоменклатураПрисоединенныеФайлы.
Мне нужно получить картинку, которая хранится в номенклатуре и передать ее в макет для последующего вывода печатной формы.
Проблема возникает получении картинки. С хранилищем значений до этого не работала, подскажите, пожалуйста, как решить данную задачу?
Привожу код функции.
1 vse_serjezno
 
21.01.14
11:06
Функция СформироватьПечатнуюФормуСертификаты(МассивОбъектов, ОбъектыПечати, ПараметрыПечати)
    ТабличныйДокумент = Новый ТабличныйДокумент;    
    Макет = УправлениеПечатью.ПолучитьМакет("Обработка.ИПМ_ПечатьДополнительныхФорм.ПФ_MXL_Штрихкоды");
    ОбластьКартинкиСертификата = Макет.ПолучитьОбласть("ИзображениеСертификата");
    
    ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Сертификат");
    СсылкаНаСборку = МассивОбъектов[0];
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ИПМ_СборЗаказовСписаниеНоменклатурыСЯчеек.Номенклатура,
        |    ИПМ_СборЗаказовСписаниеНоменклатурыСЯчеек.Номенклатура.ФайлКартинки КАК ФайлКартинки
        |ИЗ
        |    Документ.ИПМ_СборЗаказов.СписаниеНоменклатурыСЯчеек КАК ИПМ_СборЗаказовСписаниеНоменклатурыСЯчеек
        |ГДЕ
        |    ИПМ_СборЗаказовСписаниеНоменклатурыСЯчеек.Ссылка = &Ссылка
        |    И ИПМ_СборЗаказовСписаниеНоменклатурыСЯчеек.Номенклатура.ВидНоменклатуры = &ВидНоменклатуры";

    Запрос.УстановитьПараметр("ВидНоменклатуры", ВидНоменклатуры);
    Запрос.УстановитьПараметр("Ссылка", СсылкаНаСборку);

    Результат = Запрос.Выполнить();

    ВыборкаКартинки = Результат.Выбрать();

    Пока ВыборкаКартинки.Следующий() Цикл
        //НоменклатураОбъект = ВыборкаКартинки.Номенклатура;
        ИмяФайла = Строка(ВыборкаКартинки.ФайлКартинки);
        РазмещениеФайла = КаталогВременныхФайлов() + ИмяФайла + ".jpg";
        ДвоичныеДанные = ПрисоединенныеФайлы.ПолучитьИмяФайлаСПутемКДвоичнымДанным(ВыборкаКартинки.ФайлКартинки);
        Макет.Рисунки.Сертификат.Картинка = ДвоичныеДанные;
        ТабличныйДокумент.Вывести(ОбластьКартинкиСертификата);
    КонецЦикла;

    Возврат ТабличныйДокумент;
КонецФункции
2 vse_serjezno
 
21.01.14
11:09
Что следует передать в эту строку:
Макет.Рисунки.Сертификат.Картинка = ... ;  ?
Знаю, что ДвоичныеДанные не правильно туда передавать.
3 vse_serjezno
 
21.01.14
11:13
Вот используемая функция
Функция ПолучитьИмяФайлаСПутемКДвоичнымДанным(ФайлСсылка) Экспорт
    
    ИмяФайлаСПутем = "";
    
    Если ФайлСсылка.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
        МенеджерЗаписи = РегистрыСведений.ПрисоединенныеФайлы.СоздатьМенеджерЗаписи();
        МенеджерЗаписи.ПрисоединенныйФайл = ФайлСсылка.Ссылка;
        МенеджерЗаписи.Прочитать();
        Если МенеджерЗаписи.ПрисоединенныйФайл.Пустая() Тогда
            ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                НСтр("ru = 'Ошибка открытия файла - файл не найден в информационной базе. Обратитесь к администратору.
                            | Файл: ""%1.%2""'"),
                            ФайлСсылка.Наименование,
                            ФайлСсылка.Расширение);
        КонецЕсли;
        ДвоичныеДанные = МенеджерЗаписи.ХранимыйФайл.Получить();
        ИмяФайлаСПутем = ПолучитьИмяВременногоФайла(ФайлСсылка.Расширение);
        ДвоичныеДанные.Записать(ИмяФайлаСПутем);
    Иначе
        Если НЕ ФайлСсылка.Том.Пустая() Тогда
            ИмяФайлаСПутем = ФайловыеФункции.ПолныйПутьТома(ФайлСсылка.Том) + ФайлСсылка.ПутьКФайлу;
        КонецЕсли;
    КонецЕсли;
    
    Возврат ИмяФайлаСПутем;
    
КонецФункции
4 vse_serjezno
 
21.01.14
11:15
Может нужно что-то типа МенеджерЗаписи.ХранимыйФайл.Получить() ?.. :/
5 vse_serjezno
 
21.01.14
11:17
Я конечно очень рада, что вы все здесь присутствуете и наблюдаете, как я тут сама с собой веду беседу.
Но может посоветуете что-нибудь в тему? О_о
6 НЕА123
 
21.01.14
11:17
ХранилищеЗначения.Получить (ValueStorage.Get)
ХранилищеЗначения (ValueStorage)
Получить (Get)
Синтаксис:

Получить()
Возвращаемое значение:

Тип: Произвольный.
Значение, содержащееся в хранилище.
Описание:

Получает из хранилища сохраненное в нем значение.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

МояКартинка = ХранилищеКартинки.Получить();
7 vse_serjezno
 
21.01.14
18:39
Результат:

//++ tanya 21.01.2014
// Функция возвращает табличный документ с сертификатами, которые следует вложить в заказ
Функция СформироватьПечатнуюФормуСертификаты(МассивОбъектов, ОбъектыПечати, ПараметрыПечати)
    ТабличныйДокумент = Новый ТабличныйДокумент;    
    Макет = УправлениеПечатью.ПолучитьМакет("Обработка.ИПМ_ПечатьДополнительныхФорм.ПФ_MXL_Штрихкоды");
    ОбластьКартинкиСертификата = Макет.ПолучитьОбласть("ИзображениеСертификата");
    Сертификат = ОбластьКартинкиСертификата.Рисунки["Сертификат"];    
    
    ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Сертификат");
    СсылкаНаСборку = МассивОбъектов[0];
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ИПМ_СборЗаказовСписаниеНоменклатурыСЯчеек.Номенклатура,
        |    ИПМ_СборЗаказовСписаниеНоменклатурыСЯчеек.Номенклатура.ФайлКартинки КАК ФайлКартинки
        |ИЗ
        |    Документ.ИПМ_СборЗаказов.СписаниеНоменклатурыСЯчеек КАК ИПМ_СборЗаказовСписаниеНоменклатурыСЯчеек
        |ГДЕ
        |    ИПМ_СборЗаказовСписаниеНоменклатурыСЯчеек.Ссылка = &Ссылка
        |    И ИПМ_СборЗаказовСписаниеНоменклатурыСЯчеек.Номенклатура.ВидНоменклатуры = &ВидНоменклатуры";

    Запрос.УстановитьПараметр("ВидНоменклатуры", ВидНоменклатуры);
    Запрос.УстановитьПараметр("Ссылка", СсылкаНаСборку);

    Результат = Запрос.Выполнить();

    ВыборкаКартинки = Результат.Выбрать();

    Пока ВыборкаКартинки.Следующий() Цикл        
        Если ВыборкаКартинки.ФайлКартинки <> Справочники.НоменклатураПрисоединенныеФайлы.ПустаяСсылка() Тогда
            
            Сертификат.Картинка = Новый Картинка;
            СтруктураКартинки = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ВыборкаКартинки.ФайлКартинки);
            ЗнКартинки = ПолучитьИзВременногоХранилища(СтруктураКартинки.СсылкаНаДвоичныеДАнныеФайла);
            Если ТипЗнч(ЗнКартинки) = Тип("Картинка") Тогда
                Сертификат.Картинка = ЗнКартинки;
            Иначе
                Сертификат.Картинка = Новый Картинка(ЗнКартинки);
            КонецЕсли;            
        Иначе
            Сообщить("У номенклатуры: "+ВыборкаКартинки.Номенклатура + " нет изображения!");                        
        КонецЕсли;        
        
        ТабличныйДокумент.Вывести(ОбластьКартинкиСертификата);
        ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЦикла;

    Возврат ТабличныйДокумент;
КонецФункции    
//-- tanya 21.01.2014
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn