Имя: Пароль:
1C
1С v8
Объединение картинок и вывод в СКД
,
0 1c_yeah
 
27.06.14
09:48
Здравствуйте ув. форумчане! Помогите решить следующую задачу.

Конфигурация ERP 2.0.
Отчет (прайс-лист)на СКД.
В поле "Маркеры" необходимо вывести картинку состоящую из нескольких (до 4х) картинок которые находятся в присоединенных файлах номенклатуры. Имена этих картинок Маркер1 Маркер2 и тд.

Вывести одну целую картинку не проблема.

Сама сложность заключается в том что б собрать эти картинки(Маркеры1,2 ...) (до 4х штук) в одну и потом уже вывести в отчет.

Спасибо всем кто уделит немного внимания))
1 1c_yeah
 
27.06.14
12:57
апну
2 1c_yeah
 
27.06.14
16:53
Уточню вопрос.

Есть ОбластьЯчеекТабличногоДокумента,
Есть в документе 4 картинки,

как их расположить в одной области в разных углах?
3 vmv
 
27.06.14
16:58
собрать в коллекцию картинки, а дальше, а дальше не скажу!
4 Dmitry1c
 
27.06.14
16:59
Выводи каждую картинку в каждую ячейку отдельно
5 1c_yeah
 
27.06.14
17:05
(4) Ячейка одна но большая
6 shuhard
 
27.06.14
17:08
(5) что мешает сделать 4 ячейки ?
7 1c_yeah
 
27.06.14
17:21
(6) Эта ячейка - поле в отчете СКД с текстом %картинка%
Как её разбить на 4 ?
8 1c_yeah
 
27.06.14
17:26
Если нельзя разбить ячейку на 4 тогда  другой вопрос.
как можно объеденить картинки программно?
9 mikecool
 
27.06.14
17:28
(8) делай в строке сразу 4 ячейки, по необходимости объединяй, если картинок меньше 4х
10 Dmitry1c
 
27.06.14
17:29
Погугли задачку из спеца по УТ11 - прайс-лист с картинками.
Там как раз на СКД и описано, как выводить картинки при использовании СКД.
11 1c_yeah
 
27.06.14
17:30
(9)Как при компоновке результата сделать что в одной строке отчета в определенной колонке было 2 строки и 2 колонки?
12 1c_yeah
 
27.06.14
17:31
(10) Дмитрий, отчет у меня уже сделан с картинками, мне бы 4 картинки в одну ячейку впихнуть)
13 1c_yeah
 
27.06.14
17:34
(10) Нашел я решение этой задачки, у меня все также почти. но там проще случай чем у меня((
14 mikecool
 
27.06.14
17:38
(11) для этого наверняка придется рисовать макет для вывода области
15 1c_yeah
 
27.06.14
17:40
(14) О это идея!!я и забыл про макеты. спасибо!
16 1c_yeah
 
01.07.14
17:30
Может кому пригодится.. выкрутился следующим образом:

В процедуре при компоновке результата

    //_Добавление_маркеров+
    Если МассивНоменклатуры.Количество() > 0 Тогда
        Запрос = Новый Запрос("ВЫБРАТЬ
        |    ВЫРАЗИТЬ(ПрисоединенныеФайлы.ПрисоединенныйФайл КАК Справочник.НоменклатураПрисоединенныеФайлы).ВладелецФайла КАК Номенклатура,
        |    ВЫРАЗИТЬ(ПрисоединенныеФайлы.ПрисоединенныйФайл КАК Справочник.НоменклатураПрисоединенныеФайлы).ВладелецФайла.Артикул КАК Артикул,
        |    ПрисоединенныеФайлы.ХранимыйФайл
        |ИЗ
        |    РегистрСведений.ПрисоединенныеФайлы КАК ПрисоединенныеФайлы
        |ГДЕ
        |    ВЫРАЗИТЬ(ПрисоединенныеФайлы.ПрисоединенныйФайл КАК Справочник.НоменклатураПрисоединенныеФайлы).ВладелецФайла В (&СписокНоменклатуры)
        |    И ВЫРАЗИТЬ(ПрисоединенныеФайлы.ПрисоединенныйФайл КАК Справочник.НоменклатураПрисоединенныеФайлы).Наименование ПОДОБНО ""Маркер%""
        |
        |УПОРЯДОЧИТЬ ПО
        |    Артикул,
        |    ВЫРАЗИТЬ(ПрисоединенныеФайлы.ПрисоединенныйФайл КАК Справочник.НоменклатураПрисоединенныеФайлы).Наименование");
        Запрос.УстановитьПараметр("СписокНоменклатуры", МассивНоменклатуры);
        ВыборкаМаркеры = Запрос.Выполнить().Выбрать();
        Счетчик = 0;
        ПредыдущаяНоменклатура = Справочники.Номенклатура.ПустаяСсылка();
        Пока ВыборкаМаркеры.Следующий() Цикл
            НоваяНоменклатура = (ПредыдущаяНоменклатура<>ВыборкаМаркеры.Номенклатура);
            
            Если НоваяНоменклатура Тогда
                Счетчик = 1;
            Иначе
                Счетчик = Счетчик+1;
            КонецЕсли;
            
            Если Счетчик > 4 Тогда
                продолжить;
            КонецЕсли;
            
            
            ФотоМаркера = Новый Картинка(ВыборкаМаркеры.ХранимыйФайл.Получить());
            Рис = ДокументРезультат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
            Рис.РазмерКартинки = РазмерКартинки.Пропорционально;//.АвтоРазмер;//РеальныйРазмер;
            Рис.Картинка = ФотоМаркера;
            Рис.Имя = ВыборкаМаркеры.Артикул+"***"+Строка(Счетчик);
            
            ПредыдущаяНоменклатура = ВыборкаМаркеры.Номенклатура;
        КонецЦикла
        
    КонецЕсли;
    //_Добавление_маркеров-
17 1c_yeah
 
01.07.14
17:31
И в модуле формы:
18 1c_yeah
 
01.07.14
17:31
&НаКлиенте
Процедура СформироватьПрайс(Команда)
    Перем КолонкаАртикул;
    
    СкомпоноватьРезультат(РежимКомпоновкиРезультата.Авто);
    
    //_Добавление_маркеров+
    Попытка
        ОбработкаИзображений = Новый ComОбъект("ImageMagickObject.MagickImage.1");
    Исключение
        Сообщить("Не удалось инициализировать Image Magick по причине:", СтатусСообщения.Важное);
        Сообщить(ОписаниеОшибки(), СтатусСообщения.БезСтатуса);
        Возврат;
    КонецПопытки;
    
    КолКолонок = Результат.ШиринаТаблицы;
    КолСтрок =   Результат.ВысотаТаблицы;
    
    Для Кол = 1 По КолКолонок Цикл
        Для Стр = 1 По КолСтрок Цикл
            ТекЯчейка = Результат.Область(Стр, Кол);
            Если Результат.Область(Стр, Кол).Текст = "Артикул"
                ИЛИ   Результат.Область(Стр, Кол).Текст = "Article"
                Тогда
                КолонкаАртикул = Кол;
            ИначеЕсли Результат.Область(Стр, Кол).Текст = "Маркеры"
                ИЛИ   Результат.Область(Стр, Кол).Текст = "Markers"
                Тогда
                КолонкаМаркер = Кол;
                СтрокаШапки = Стр;
                Прервать;
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    
    Для Стр = (СтрокаШапки+1) По КолСтрок Цикл
        Если Результат.Область(Стр, КолонкаМаркер).Текст = "%КартинкаМаркер%" Тогда
            Артикул = Результат.Область(Стр, КолонкаАртикул).Текст;
            
            СтруктураМаркеров = Новый Структура("Маркер1,Маркер2,Маркер3,Маркер4");
            
            Для Сч = 1 ПО 4 Цикл
            Попытка    
                РисунокМаркер = Результат.Рисунки[Артикул+"***"+Строка(Сч)];
                ИмяФайлаМаркер = КаталогВременныхФайлов()+"Image"+Строка(Сч)+".JPEG";
                РисунокМаркер.Картинка.Записать(ИмяФайлаМаркер);
                Результат.Рисунки.Удалить(РисунокМаркер);
                СтруктураМаркеров.Вставить("Маркер"+Строка(Сч),ИмяФайлаМаркер);
            Исключение
                СтруктураМаркеров.Вставить("Маркер"+Строка(Сч),Неопределено);
            КонецПопытки
            КонецЦикла;
                        
            ОбработкаИзображений.Montage(СтруктураМаркеров.Маркер1,СтруктураМаркеров.Маркер2,СтруктураМаркеров.Маркер3,СтруктураМаркеров.Маркер4,"-geometry", "+2+2",СтруктураМаркеров.Маркер1);
            
            Рис = Результат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
            Рис.Картинка = Новый Картинка(СтруктураМаркеров.Маркер1);
            Рис.РазмерКартинки = РазмерКартинки.АвтоРазмер;
            Рис.Расположить(Результат.Область(Стр, КолонкаМаркер));
        КонецЕсли;
    КонецЦикла;
    
    //_Установка_изображений_Маркеров-    
КонецПроцедуры
Ошибка? Это не ошибка, это системная функция.