gifts2017

Пример вывода всех изображений номенклатуры в отчет СКД, 1С 8,2 УПП

Опубликовал Андрей С (savv67) в раздел Программирование - Практика программирования

Доброго время суток, потребовалось вывести все изображения номенклатуры, посмотрел публикацию http://infostart.ru/public/95442/, поискал в интернете ничего подходящего (готового) не нашел и слепил из того что было. Сыровата, но у меня работает. Не смог программно установить ширину колонки для основного изображения, но для других работает (выведено в параметры).

Позволяет выводить все изображения имеющиеся у номенклатуры.

Текст модуля:

перем РисТекст;
перем Номенклатура;
перем НетФото;
перем НомерКартинки;
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    ДокументРезультат.Очистить();
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(Макет, , ДанныеРасшифровки);
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    
    
    ВысотаКартинкиПарамент = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(Новый ПараметрКомпоновкиДанных("ВысотаКартинки"));
    ВысотаКартинкиПарамент.Использование = ИСТИНА;
    ВысотаКартинки = ВысотаКартинкиПарамент.Значение;
    
    ШиринаКартинкиПарамент = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(Новый ПараметрКомпоновкиДанных("ШиринаКартинки"));
    ШиринаКартинкиПарамент.Использование = ИСТИНА;
    ШиринаКартинки = ШиринаКартинкиПарамент.Значение;
    
    ВыводитьКартинкуПараметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(Новый ПараметрКомпоновкиДанных("ВыводитьКартинку"));
    ВыводитьКартинку = ВыводитьКартинкуПараметр.Использование;
    
    ВыводитьВсеКартинкиПараметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(Новый ПараметрКомпоновкиДанных("ВыводитьВсеКартинки"));
    ВыводитьВсеКартинки = ВыводитьВсеКартинкиПараметр.Использование;
    
    ВсегоПолейОтчета = КомпоновщикНастроек.Настройки.Выбор.Элементы.Получить(ИСТИНА);
    
    ИспПоля = КомпоновщикНастроек.Настройки.Выбор.Элементы.Количество();
    КолонокВОтчете = ИспПоля;
    
    
    
    
    
     ПолеПоКоторомуНеобходимоПолучитьЗначение = "Номенклатура";
    ПроцессорВывода.НачатьВывод();
    Пока истина Цикл
        ЭлементРезультата = ПроцессорКомпоновки.Следующий();
        ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение;
        Если ЭлементРезультата = Неопределено Тогда
            прервать;
        КонецЕсли;    
        ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
        Если ЭлементРезультата.ЗначенияПараметров.Количество() > 0 Тогда
            ЗначениеВыводимыхДанных = Неопределено;
            Для каждого ЗначениеПараметра из ЭлементРезультата.ЗначенияПараметров Цикл
                Если ТипЗнч(ЗначениеПараметра.Значение) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда
                    ПоляРасшифровки = ДанныеРасшифровки.Элементы[ЗначениеПараметра.Значение].ПолучитьПоля();
                    Для Каждого ПолеРасшифровки из ПоляРасшифровки Цикл
                        Если ПолеРасшифровки.Поле = ПолеПоКоторомуНеобходимоПолучитьЗначение Тогда
                            ЗначениеВыводимыхДанных = ПолеРасшифровки.Значение;
                            Прервать;
                        КонецЕсли;    
                    КонецЦикла;    
                КонецЕсли;    
            КонецЦикла;
            
            Если ВыводитьКартинку тогда    
                Номенклатура = ЗначениеВыводимыхДанных.Ссылка;
                ДокументРезультат.Область(2,3).ШиринаКолонки = ШиринаКартинки;

            Если ЗначениеЗаполнено(ЗначениеВыводимыхДанных) И НЕ ЗначениеВыводимыхДанных.ЭтоГруппа Тогда
                ТекущаяСтрока = Строка(ДокументРезультат.ВысотаТаблицы);                
                Рис = ДокументРезультат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
                Рис.Гиперссылка = Истина;                
                //Рис.ЦветФона =  ЦветаСтиля.ЦветЛинииОтчета;
                Рис.ЦветЛинии = ЦветаСтиля.ЦветЛинииОтчета;
                //Рис.РазмерКартинки = РазмерКартинки.РеальныйРазмер;
                //Рис.ГраницаСверху = Ложь;
                //Рис.ГраницаСлева = Ложь;
                //Рис.ГраницаСправа = Ложь;
                //Рис.ГраницаСнизу = Ложь;
                //Рис.Верх = 10;
                //Рис.Высота = ВысотаКартинки/2;
                //Рис.Ширина = ВысотаКартинки/3;
                //Рис.Лево = 10;
                Рис.РазмерКартинки = РазмерКартинки.Пропорционально;                
                Индекс = ДокументРезультат.Рисунки.Индекс(Рис);                 
                Если ЗначениеВыводимыхДанных.ЭтоГруппа Тогда                    
                    Продолжить;
                Иначе
                    Попытка
                    Рис.Расшифровка = Номенклатура.ОсновноеИзображение.Хранилище.Получить();
                    НетФото = 2;
                    ДокументРезультат.Рисунки[Индекс].Картинка = ЗначениеВыводимыхДанных.ОсновноеИзображение.Хранилище.Получить();                                    
                                        
                Исключение Сообщить("нет картинки у артикула " + Строка(ЗначениеВыводимыхДанных.Артикул));
                    ДокументРезультат.Рисунки[Индекс].Картинка = БиблиотекаКартинок.Важно;                    
                    НетФото = 1;
                КонецПопытки;
            КонецЕсли;
            
            ОбластьДляКартинки = ДокументРезультат.НайтиТекст("%Фото%");
                        Если ОбластьДляКартинки <> Неопределено  Тогда
        
                КоличествоКолонок = ДокументРезультат.ШиринаТаблицы;                
                КолонкаКартинка = Сред(ОбластьДляКартинки.Имя, Найти(ОбластьДляКартинки.Имя, "C")  + 1, СтрДлина(ОбластьДляКартинки.Имя) - Найти(ОбластьДляКартинки.Имя, "C"));
                НомерКартинки = 0;
        //Картинки        
                
    Если  ВыводитьВсеКартинки    тогда
    ПоследняяКолонка = Строка(ЭлементРезультата.ЗначенияПараметров.Количество());        
    ОсновноеИзображение =  ЗначениеВыводимыхДанных.ОсновноеИзображение;
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ХранилищеДополнительнойИнформации.Хранилище
        |ИЗ
        |    Справочник.ХранилищеДополнительнойИнформации КАК ХранилищеДополнительнойИнформации
        |ГДЕ
        |    ХранилищеДополнительнойИнформации.Объект.Ссылка = &Номенклатура
        |    И ХранилищеДополнительнойИнформации.ВидДанных = &ВидДанных
        |    И ХранилищеДополнительнойИнформации.Ссылка <> &ОсновноеИзображение";

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

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

    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    КоличествоКартинок = ВыборкаДетальныеЗаписи.Количество();    
    Сообщить(Строка(ЭлементРезультата.ЗначенияПараметров.Количество()/2)+ " - активных поля(ей) в отчете, у артикула - "+Номенклатура.Артикул+"-"+КоличествоКартинок+ "-картинок(а,и)");
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл         
        Попытка
        Если  ВыборкаДетальныеЗаписи.Хранилище <> Неопределено   тогда             
            НомерКартинки = НомерКартинки+1;
            ОбластьВсехКартинок = ДокументРезультат.Область(ТекущаяСтрока,ЭлементРезультата.ЗначенияПараметров.Количество()/2-1+НомерКартинки);
            РисДоп = ДокументРезультат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
            РисДоп.Гиперссылка = Истина;
            РисДоп.Расшифровка = ВыборкаДетальныеЗаписи.Хранилище.Получить();
            РисДоп.ЦветЛинии = ЦветаСтиля.ЦветЛинииОтчета;
            РисДоп.РазмерКартинки = РазмерКартинки.Пропорционально;                
            ИндексДоп = ДокументРезультат.Рисунки.Индекс(РисДоп);
            ДокументРезультат.Область(ТекущаяСтрока,ЭлементРезультата.ЗначенияПараметров.Количество()/2-1+НомерКартинки).ШиринаКолонки = ШиринаКартинки;            
            ДокументРезультат.Рисунки[ИндексДоп].Картинка = ВыборкаДетальныеЗаписи.Хранилище.Получить();
            ДокументРезультат.Рисунки[ИндексДоп].Расположить(ОбластьВсехКартинок);
        КонецЕсли;
       Исключение
       КонецПопытки;     
    КонецЦикла;        
КонецЕсли;
    
         // Картинки
               Если  НетФото = 2  тогда
                //ДокументРезультат.Область(ТекущаяСтрока,КолонкаКартинка).ШиринаКолонки = ШиринаКартинки; // не работает
                ДокументРезультат.Область(ТекущаяСтрока,КолонкаКартинка).ВысотаСтроки    = ВысотаКартинки;
            иначе
                ДокументРезультат.Область(ТекущаяСтрока,КолонкаКартинка).ВысотаСтроки    = 15;
                КонецЕсли;
                ДокументРезультат.Рисунки[Индекс].Расположить(ОбластьДляКартинки);                
                //ОбластьДляКартинки.Текст = РисТекст;
                ОбластьДляКартинки.Текст = Номенклатура.Комментарий;
                КонецЕсли;
            
            КонецЕсли;    
        КонецЕсли;
      КонецЕсли;
    КонецЦикла;
    ПроцессорВывода.ЗакончитьВывод();
    
КонецПроцедуры 

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

Наименование Файл Версия Размер
Пример отчета 76
.erf 26,41Kb
06.08.12
76
.erf 26,41Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
0. Андрей С (savv67) 06.08.12 11:51
Доброго время суток, потребовалось вывести все изображения номенклатуры, посмотрел публикацию http://infostart.ru/public/95442/, поискал в интернете ничего подходящего (готового) не нашел и слепил из того что было. Сыровата, но у меня работает. Не смог программно установить ширину колонки для основного изображения, но для других работает (выведено в параметры).

Перейти к публикации

1. Василий Антонов (khaoos) 10.08.12 05:07
Код не очень аккуратный: есть неиспользуемые переменные и условия, в которые никогда не попадаем. Но идея в принципе понятна, вполне возможно придется воспользоваться наработкой.
2. Dimon (klel) 16.08.12 22:20
Огромное спасибо на досуге нужно будет посмотреть =) хорошая штучка =)
3. Константин Куликов (Светлый ум) 20.09.16 22:03
Молодец автор, пригодилось +1