8.х Ошибка при добавлении варианта отчета.

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

  1. TopicStarter Overlay
    Nigelist
    Offline

    Nigelist Опытный в 1С

    Регистрация:
    18 янв 2011
    Сообщения:
    131
    Симпатии:
    0
    Баллы:
    26
    1С:Розница 2.2. Отчет "Ведомость по товарам на складах". Хотел переделать отчет, чтобы выводил номенклатуру с картинками. Переделал - заработало. Но потом решил добавить как вариант отчета ибо с картинками на порядки дольше формируется отчет. И отчет перестал работать.

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