8.х Вывод картинки что отображается на форме

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем LivingStar, 18 мар 2016.

  1. TopicStarter Overlay
    LivingStar
    Offline

    LivingStar

    Регистрация:
    17 ноя 2015
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    Необходимо вывести в отчет прайс лист на форму картинку элемента номенклатура, ту что отображается на форме. У некоторых элементов номенклатуры загружены несколько картинок. И в прайс лист выводятся, и те и не те картинки. Как выводить только нужную картинку?
    Код:
    |
    Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
     
        ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.ПрайсЛист.Запрос;
        ТекстЗапроса = СтрЗаменить(
            ТекстЗапроса,
            "&ТекстЗапросаКоэффициентУпаковки",
            Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
                "ЦеныНоменклатурыСрезПоследних.Упаковка",
                "ЦеныНоменклатурыСрезПоследних.Номенклатура"));
         
        СхемаКомпоновкиДанных.НаборыДанных.ПрайсЛист.Запрос = ТекстЗапроса;
     
     
        СегментыСервер.ВключитьОтборПоСегментуНоменклатурыВСКД(КомпоновщикНастроек);
     
        АссортиментСервер.ВключитьОтборПоАссортиментуВСКД(КомпоновщикНастроек);
        // LivingStar 2016_02_16 ->
        СтандартнаяОбработка = Ложь;
        ИмяКолонкиИзображения = "Изображение";
        ДокументРезультат.Очистить();
        КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
        ШиринаКолонкиИзображения = ВернутьЗначениеПараметраНастройкиСКД(КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы, "ШиринаКолонкиИзображения", 20);
        ПолеИзображения = СхемаКомпоновкиДанных.НаборыДанных.ПрайсЛист.Поля.Найти(ИмяКолонкиИзображения);
        Если Не ПолеИзображения = Неопределено Тогда
            ОформлениеМинимальнойШириныКолонки = СхемаКомпоновкиДанных.НаборыДанных.ПрайсЛист.Поля.Найти(ИмяКолонкиИзображения).Оформление.Элементы.Найти("МинимальнаяШирина");
            ОформлениеМинимальнойШириныКолонки.Использование = Истина;
            ОформлениеМинимальнойШириныКолонки.Значение = ШиринаКолонкиИзображения;
        КонецЕсли;
        Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
        ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
        ПроцессорКомпоновки.Инициализировать(Макет, , ДанныеРасшифровки);
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
        ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
        ПроцессорВывода.НачатьВывод();
        Пока Истина Цикл
            ЭлементРезультата = ПроцессорКомпоновки.Следующий();
            Если ЭлементРезультата = Неопределено Тогда Прервать;КонецЕсли;
            ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
            Если ЭлементРезультата.ЗначенияПараметров.Количество() = 0 Тогда Продолжить; КонецЕсли;
         
            Для Каждого ЭлементПараметра Из ЭлементРезультата.ЗначенияПараметров Цикл
                Если ТипЗнч(ЭлементПараметра.Значение) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда
                    Поля = ДанныеРасшифровки.Элементы[ЭлементПараметра.Значение].ПолучитьПоля();
                    Для Каждого Поле Из Поля Цикл
                        Если ТипЗнч(Поле.Значение) = Тип("СправочникСсылка.НоменклатураПрисоединенныеФайлы") Тогда
                            Если Поле.Значение.Пустая() Тогда Продолжить; КонецЕсли;
                            //Поиск номера колонки, с нужным именем ИмяКолонкиИзображения, для таки вывода изображения
                            Для НомерКолонки = 1 По ДокументРезультат.ШиринаТаблицы Цикл
                                Расшифровка = ДокументРезультат.Область(ДокументРезультат.ВысотаТаблицы, НомерКолонки, ДокументРезультат.ВысотаТаблицы, НомерКолонки).Расшифровка;
                                Если Расшифровка = Неопределено Тогда Продолжить; КонецЕсли;
                                Поля = ДанныеРасшифровки.Элементы.Получить(Расшифровка).ПолучитьПоля();
                                Если Поля.Найти(ИмяКолонкиИзображения) = Неопределено Тогда Продолжить; КонецЕсли;
                                ОбластьИзображения = ДокументРезультат.Область(ДокументРезультат.ВысотаТаблицы, НомерКолонки);
                                ВывестиИзображениеЭлементаНоменклатуры(ДокументРезультат, Поле.Значение, ОбластьИзображения, ШиринаКолонкиИзображения);
                            КонецЦикла;
                        КонецЕсли;
                    КонецЦикла;
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
        ПроцессорВывода.ЗакончитьВывод();
        // <-
    КонецПроцедуры
    // LivingStar 2016_02_16 ->
    Функция ВывестиИзображениеВОбластиТД(ДанныеКартинки, ТД, Область)
        Изображение = ТД.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
        Изображение.РазмерКартинки = РазмерКартинки.АвтоРазмер;
        Индекс = ТД.Рисунки.Индекс(Изображение);
        ТД.Рисунки[Индекс].Картинка = Новый Картинка(ДанныеКартинки, Истина);
        ТД.Рисунки[Индекс].Расположить(Область);
        Возврат ТД.Рисунки[Индекс];
    КонецФункции
    //
    Процедура ВывестиИзображениеЭлементаНоменклатуры(ТД, ЭлементСправочника, Область, ШиринаКолонкиИзображения)
        УстановитьПривилегированныйРежим(Истина);
        Если ЭлементСправочника.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
            СтуктураРег = РегистрыСведений.ПрисоединенныеФайлы.Получить(Новый Структура("ПрисоединенныйФайл", ЭлементСправочника));
            ДанныеКартинки = СтуктураРег.ХранимыйФайл.Получить();
        Иначе
            ДанныеКартинки = ?(ЗначениеЗаполнено(ЭлементСправочника.Том.ПолныйПутьWindows), ЭлементСправочника.Том.ПолныйПутьWindows, ЭлементСправочника.Том.ПолныйПутьLinux)
                + ЭлементСправочника.ПутьКФайлу;
        КонецЕсли;
        УстановитьПривилегированныйРежим(Ложь); 
        Рисунок = ВывестиИзображениеВОбластиТД(ДанныеКартинки, ТД, Область);
        Область.АвтоВысотаСтроки = Ложь;
        Область.ВысотаСтроки = ШиринаКолонкиИзображения * 1.31 / 0.3759;// Среднее значение пункта 1 пункт = 0.3759 мм (по Wiki)
        Область.Расшифровка = ЭлементСправочника;
        Рисунок.ЦветЛинии = Область.ЦветРамки;
    КонецПроцедуры
    //
    Функция ВернутьЗначениеПараметраНастройкиСКД(КоллекцияЭлементовНастройки, ИмяНастройки, ЗначениеПоУмолчанию = Неопределено)
        Настройка = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ИмяНастройки);
        Если Настройка = Неопределено Тогда Возврат ЗначениеПоУмолчанию; КонецЕсли;
        НастрокаПоИД = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Настройка.ИдентификаторПользовательскойНастройки);
        Если Не ЗначениеЗаполнено(НастрокаПоИД.Значение) Тогда
            Если Не ЗначениеПоУмолчанию = Неопределено Тогда
                НастрокаПоИД.Значение = ЗначениеПоУмолчанию;
            КонецЕсли;
        КонецЕсли;
        Возврат ?(НастрокаПоИД.Использование, НастрокаПоИД.Значение, ЗначениеПоУмолчанию);
    КонецФункции
    // <-
    Последнее редактирование модератором: 18 мар 2016

Поделиться этой страницей