Имя: Пароль:
1C
1С v8
СКД. Программный вывод картинок в отчете. Не работают отборы
0 SeiOkami
 
10.03.13
21:56
Здравия!
Сделал отчет в СКД с выводом картинок, но теперь не работают отборы. Не работают в быстром доступе и в настроках, а когда пытаюсь "ИзменитьВариант", то все норм. Как исправить?
1 SeiOkami
 
10.03.13
22:08
+
2 GANR
 
10.03.13
22:11
Как выводишь картинки?
3 GANR
 
10.03.13
22:14
ЭтаФорма.СкомпоноватьРезультат(), а потом по табличному документу пробегаться надо и подставлять картинки в те места, где выведен определенный ключ для этих картинок (скажем, GUID). А ты как делаешь?
4 SeiOkami
 
10.03.13
22:21
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
   
   
   
   
   СтандартнаяОбработка = Ложь;
   
   СхемаКомпоновкиДанных = ПолучитьМакет("СКД");    
   Настройки = КомпоновщикНастроек.Настройки;
   
   Попытка
       ВидЦеныЗакупки = Константы._ВидЦеныЗакупки.Получить();
       Параметр_ВидЦеныЗакупки = Новый ПараметрКомпоновкиДанных("ВидЦеныЗакупки");
       ЗначениеПараметра_ВидЦеныЗакупки = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Параметр_ВидЦеныЗакупки);
       Если ЗначениеПараметра_ВидЦеныЗакупки <> Неопределено Тогда
           ЗначениеПараметра_ВидЦеныЗакупки.Значение = ВидЦеныЗакупки;
           ЗначениеПараметра_ВидЦеныЗакупки.Использование = Истина;
       КонецЕсли;
       
       ВидЦеныПродажи = Константы._ВидЦеныПродажи.Получить();
       Параметр_ВидЦеныПродажи = Новый ПараметрКомпоновкиДанных("ВидЦеныПродажи");
       ЗначениеПараметра_ВидЦеныПродажи = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Параметр_ВидЦеныПродажи);
       Если ЗначениеПараметра_ВидЦеныПродажи <> Неопределено Тогда
           ЗначениеПараметра_ВидЦеныПродажи.Значение = ВидЦеныПродажи;
           ЗначениеПараметра_ВидЦеныПродажи.Использование = Истина;
       КонецЕсли;
   Исключение
   КонецПопытки;
   
   
   
   ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;    
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки, ДанныеРасшифровки);
   
   ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
   
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
   
   ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);    
   
   
   // //Шаманим над картинками
   Если ВыводитьКартинки Тогда
       
       ТабДок = ДокументРезультат;
       ТабДок.ФиксацияСверху = Ложь;
       ТабДок.ФиксацияСлева  = Ложь;
       
       В = ДокументРезультат.ВысотаТаблицы;
       Ш = ДокументРезультат.ШиринаТаблицы;
       
       Для с=1 По В Цикл
           Для к=1 По Ш Цикл
               Область     = ТабДок.ПолучитьОбласть("R"+Формат(с,"ЧГ=0")+"C"+Формат(к,"ЧГ=0"));
               ТекОбласть  = ТабДок.Область("R"+Формат(с,"ЧГ=0")+"C"+Формат(к,"ЧГ=0"));
               Расшифровка = ТекОбласть.Расшифровка;
               Если ТипЗнч(Расшифровка) = Тип("СправочникСсылка.НоменклатураПрисоединенныеФайлы") Тогда
                   
                   //Картинка = Расшифровка.ФайлХранилище.Получить();
                   
                   //УстановитьПривилегированныйРежим(Истина);
                   
                   //Картинка = ПрисоединенныеФайлы.ПолучитьДанныеФайла(Расшифровка).СсылкаНаДвоичныеДанныеФайла;
                   
                   Если Расшифровка.Пустая() тогда
                       Продолжить;
                   КонецЕсли;
                   
                   
                   Картинка = (ПолучитьИзВременногоХранилища(ПрисоединенныеФайлы.ПолучитьДанныеФайла(Расшифровка).СсылкаНаДвоичныеДанныеФайла));
                   
                   
                   //Картинка = ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(Расшифровка);
                   //
                   Картинка = Новый Картинка(Картинка);
                   
                   
                   Если Картинка = Неопределено Тогда
                       Продолжить;
                   КонецЕсли;
                   ТекОбласть.ВысотаСтроки     = ВысотаКартинки;
                   ТекОбласть.ШиринаКолонки = ШиринаКартинки/4;
                   
                   Рисунок     = Область.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
                   Рисунок.Картинка = Картинка;
                   
                   Рисунок.Лево   = 1;
                   Рисунок.Верх   = 1;
                   
                   Рисунок.Высота = ВысотаКартинки;
                   Рисунок.Ширина = ШиринаКартинки/4;
                   
                   Рисунок.ГраницаСверху = Истина;
                   Рисунок.ГраницаСлева  = Истина;
                   Рисунок.ГраницаСнизу  = Истина;
                   Рисунок.ГраницаСправа = Истина;
                   
                   Рисунок.РазмерКартинки = РазмерКартинки.АвтоРазмер;
                   Рисунок.ВыводитьНаПечать = Истина;
                   
                   Рисунок.Расположить(Область.ТекущаяОбласть);
                   
                   ТабДок.ВставитьОбласть(Область.ТекущаяОбласть,ТабДок.Область("R"+Формат(с,"ЧГ=0")+"C"+Формат(к,"ЧГ=0")));
                   
               КонецЕсли;
           КонецЦикла;
       КонецЦикла;
   КонецЕсли;
   ПроцессорВывода.ЗакончитьВывод();
   
   
   
   
КонецПроцедуры
5 GANR
 
10.03.13
22:35
(4) А если сделать так:

1. Процедуру ПриКомпоновкеРезультата - убрать!
2. СКД - основной СКД отчета назначить
3. В форме отчета
&НаКлиенте
Процедура Сформировать()
  // ВНИМАНИЕ!!! Формировать НЕ в фоне!
  ЭтаФорма.СкомпоноватьРезультат();
  Если ВыводитьКартинки Тогда
     ...
  КонецЕсли;
КонецПроцедуры
6 SeiOkami
 
10.03.13
22:37
А почему так?
7 SeiOkami
 
10.03.13
22:37
Нельзя в ПриКомпоновкеРезультата ?
8 SeiOkami
 
10.03.13
22:37
СКД - и есть основная
9 GANR
 
10.03.13
22:39
(7) Потому что можно подпортить стандартный алгоритм платформы  при формировании результата, да и кода убавится. (8) Ну и хорошо, п.2 для профилактики сказал.
10 SeiOkami
 
10.03.13
22:42
Блин, как я не хотел в форме кнопку свою делать(
11 GANR
 
10.03.13
22:42
А если то, что после ВыводитьКартиинки закомментировать работает?
12 SeiOkami
 
10.03.13
22:45
В смысле?
ПроцессорВывода.ЗакончитьВывод()
13 kiruha
 
10.03.13
22:45
Почему бы просто схеме не подсунуть свой макет с картинками для группировки ?
14 GANR
 
10.03.13
22:46
(12) Нет. Всю ветку Если ВыводитьКартинки...
15 SeiOkami
 
10.03.13
22:46
Не помогает
16 SeiOkami
 
10.03.13
22:47
(15) - (14)
17 SeiOkami
 
10.03.13
22:47
А что значит:

  // ВНИМАНИЕ!!! Формировать НЕ в фоне!
18 zladenuw
 
10.03.13
22:49
19 GANR
 
10.03.13
22:50
(15) Так значит дело не в алгоритме вывода картинок, а в том, что происходит ДО него. Логично?
(17) СкомпоноватьРезультат можно выполнить фоново, но в нашем случае прежде чем выводить картинки надо дождаться пока отчет сформирует результат. почитай про расширение форм отчета СкомпоноватьРезультат в СП.
20 SeiOkami
 
10.03.13
22:51
(19), я тоже так подумал, однако, ведь я отменил стандартную процедуру... Может то, что должно было сделать отбор находится позже...
21 GANR
 
10.03.13
22:53
(20) Вот-вот.
22 SeiOkami
 
10.03.13
22:57
(21), спасибо, буду делать в форме)
Основная теорема систематики: Новые системы плодят новые проблемы.