Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: v7: Получить картинки из файла Excel

Кто знает несложный способ вытащить картинки и далее сохранить их в заданный каталог?
Ответ: ()

Там был макрос vba который работает c IPicture. возможно удастся адаптировать
Вопрос: Вывод картинки на печатную форму

Всем привет!

Я только начинаю программировать на 1С.
Помогите с выводом картинки из хранилища значения на печатную форму.

После прочтения мануалов, создал такой код:

Код 1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
&НаКлиенте
Процедура КартинкаПоФизЛицу(Команда)
    
    ТабДок = Новый ТабличныйДокумент;
        Макет = ПолучитьМакетНаСервере();
        Область1 = Макет.ПолучитьОбласть("Заголовок");
    Область2 = Макет.ПолучитьОбласть("Шапка");
 
        // Тут получаю ссылку на картинку, которая хранится в реквизитах справочника.
    СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(Объект.Ссылка,"ДанныеКартинки");
    
    //Тут создаю область на печатной форме под картинку (как я понял)
    Рисунок = Область2.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
    
        // Тут я устанавливаю значение области на макете, но получаю ошибку несоответствие типов
        Рисунок.Картинка = СсылкаНаКартинку;
 
      // Тут выполняю команду отобразить картинку на печатной форме (как я понял)
    Рисунок.Расположить(Область2.Области.Изо);
    
    
        ТабДок.Вывести(Область1);
    ТабДок.Вывести(Область2);
        ТабДок.Показать()
                    
КонецПроцедуры
 
 &НаСервере
 Функция ПолучитьМакетНаСервере()
     
    Объект1 = РеквизитФормыВЗначение("объект");
    Макет = Объект1.ПолучитьМакет("ПечатьКартинки"); 
    Возврат Макет;
         
КонецФункции
На толстом клиенте получаю ошибку "Несоответствие типов".

Подскажите алгоритм/механизм отображения картинки на печатной форме.

Заранее спасибо!

Добавлено через 1 час 17 минут
Please, help me
Ответ: ...
Не выходит
...
Чтото = Объект.Ссылка.ДанныеКартинки.Получить(); // - тут я получаю двоичные данные
(выглядят как 16-ричный код)
,
СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(Объект.Ссылка,"ДанныеКартинки"); // тут я получаю ссылку на картинку
(выглядит как то так e1cib/data/Справочник.Люди.ДанныеКартинки?ref=a5fa001bfc1d1b9311e0078de46a1140 )

Но при присвоении значения
Рисунок.Картинка = Чтото (тип - Двоичные данные) - Несоответствие типов
и
Рисунок.Картинка = СсылкаНаКартинку (ссылка на данные по картинки) - Тоже несоответствие типов

Как же все таки вывести картинку на макет ???

Добавлено через 29 минут
При чем если сделать через файл на диске:
Код 1C
1
2
3
Картинка1 = Новый Картинка("c:\temp\mario.jpg");
Рисунок.Картинка = Картинка1;
Рисунок.Расположить(ОбластьШапка.Область("R1C1:R4C4"));  
То печатает (выводит на форму)

Добавлено через 3 минуты
Урааа , получилось

Надо было вместо пути на диске - подсунуть переменную Чтото
Полученную через
Объект.Ссылка.ДанныеКартинки.Получить();
Вопрос: Выгрузка картинок номенклатуры

Добрый день!
Нужно выгрузить основную картинку каждой номенклатуры из каталога в базе в каталог на диске.

Код:
&НаКлиенте
Процедура ВыгрузитьКартинкиНоменклатуры(Команда)
    Если НЕ ЗначениеЗаполнено(КаталогФайла) Тогда
        Сообщить("Каталог файла не заполнен!");
        Возврат;
    КонецЕсли;
    Если НЕ ЗначениеЗаполнено(КаталогВБазе) Тогда
        Сообщить("Каталог в базе не заполнен!");
        Возврат;
    КонецЕсли;
    ТаблицаЗначений = ВыгрузитьКартинкиНоменклатурыНаСервере();
   
    Для каждого Стр Из ТаблицаЗначений Цикл
        Если Не ЗначениеЗаполнено(Стр.ФайлКартинки) Тогда
            Продолжить;
        КонецЕсли;
        Картинка = Стр.ФайлКартинки.ФайлХранилище.Получить();
        Если ТипЗнч(Картинка) = Тип("Картинка") Тогда
            Картинка.Записать(КаталогФайла + "\" + Стр.Артикул + "_" + Стр.Наименование + ".jpg");
        КонецЕсли;       
    КонецЦикла;
КонецПроцедуры

&НаСервереБезКонтекста
Функция  ВыгрузитьКартинкиНоменклатурыНаСервере()
    Запрос = Новый Запрос; //Вот так
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Номенклатура.Код,
        |    Номенклатура.Наименование,
        |    Номенклатура.Артикул,
        |    Номенклатура.ФайлКартинки
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура";

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

    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    ПеременнаяНаВозврат = "";
   
    ТаблицаЗначений = Новый ТаблицаЗначений;
    ТаблицаЗначений.Колонки.Добавить("Код");
    ТаблицаЗначений.Колонки.Добавить("Наименование");
    ТаблицаЗначений.Колонки.Добавить("Артикул");
    ТаблицаЗначений.Колонки.Добавить("ФайлКартинки");
   
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
               
        Стр = ТаблицаЗначений.Добавить();
        Стр.Код = ВыборкаДетальныеЗаписи.Код;
        Стр.Наименование = ВыборкаДетальныеЗаписи.Наименование;
        Стр.Артикул = ВыборкаДетальныеЗаписи.Артикул;
        Стр.ФайлКартинки = ВыборкаДетальныеЗаписи.ФайлКартинки;
       
    КонецЦикла;
   
    Возврат ТаблицаЗначений;
КонецФункции

&НаКлиенте
Процедура УстановитьКаталогФайла(Команда)
    Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.Заголовок = "Выберите каталог";
    Если ДиалогОткрытияФайла.Выбрать() Тогда
        Каталог = ДиалогОткрытияФайла.Каталог;
    Иначе
    Предупреждение(НСтр("ru = 'Каталог не выбран!'"));
    КонецЕсли;
    КаталогФайла = Каталог;
КонецПроцедуры
Вот тут в Картинка не получаются данные из базы хотя основная картинка у номенклатуры есть:
Делаю все как указано в С-П когда получаю картинку из ХранилищеЗначения. Может картинки вообще не тут храняться? Посмотрел в отладчике, там вроде все корректно получается и обращаюсь к нужному реквизиту, где хранится картинка:
Ответ:
Хорошо подправлю код, меньше ошибок будет
Вчера уже сам решил вопрос, обратился к функции общего модуля:
Код:
Картинка =  ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(Номенклатура);
Спасибо за помощь!
--- Объединение сообщений, 13 янв 2017 ---
Не пойму каким образом "хранится в томах"? Файл картинки же просто записывается на диск.
--- Объединение сообщений, 13 янв 2017 ---
Темка вот эта?
Там немного не мой вопрос... но все-равно спасибо.
Вопрос: v7: Вызвать процедуру или функцию из картинки на форме, как?

Чего-то затупил конкретно... Собственно, сабж...
Подробнее: Форма(справочника, но, это не важно). В ней есть поле картинки. Как кликнув по картинке, вызвать процедуру модуля формы(в ней я хочу открывать картинку методом ЗапуститьПриложение(ПутьКФайлу))-???
В самой картинке есть только идентификатор... Чем отловить событие клика на этом поле?
Ответ: Понятно. Окна вне 1С, мне особо не мешают, зато открывают картинку в исход сделал вот так:

В глобальнике, потому, что используется в нескольких местах, кроме справочника:

// Влад 19.01.2018

Функция НормализоватьАртикул(Арт) Экспорт
    Рез    = СокрЛП(Арт);
    Рез    = СтрЗаменить(Рез,"\","_");
    Рез    = СтрЗаменить(Рез,"/","_");
    Возврат Рез;
КонецФункции

Функция ВернутьИмяФайлаКартинки(Код, Артикул) Экспорт
    ИмяФайлаКартинки = КаталогИБ() + СокрЛП(Константа.КаталогКартинок)+ "\" + СокрЛП(Код) + "_" + НормализоватьАртикул(Артикул) + ".jpg";
    Возврат ИмяФайлаКартинки;
КонецФункции    
// Конец Влад 19.04.2018

Функция убирает слэши из Артикула, меняет на нижние подчеркивания, иначе "общая файловая ошибка".

В форме справочника:

// Влад 19.01.2018

Процедура ЗагрузитьКартинку()
    ИмяФайлаКартинки = ВернутьИмяФайлаКартинки(Код, Артикул);
    Если ФС.СуществуетФайл(ИмяФайлаКартинки) = 1 Тогда
        Картинка.Загрузить(ИмяФайлаКартинки);    
    КонецЕсли;    
КонецПроцедуры

Процедура УдалитьКартинку()
    Если Вопрос("Вы уверены, что хотите удалить картинку?",4,10) = 6 Тогда
        ИмяФайлаКартинки = ВернутьИмяФайлаКартинки(Код, Артикул);    
        ФС.УдалитьФайл(ИмяФайлаКартинки);
        ПустКартинка = СоздатьОбъект("Картинка");
        Картинка.УстановитьКартинку(ПустКартинка);
        Форма.Обновить(0);
    КонецЕсли;    
КонецПроцедуры

Процедура ЗагрузитьКартинкуВБазу()
    ИмяФайлаКартинки = ВернутьИмяФайлаКартинки(Код, Артикул);
    Если ФС.СуществуетФайл(ИмяФайлаКартинки) = 1 Тогда
        Если Вопрос("Вы уверены, что хотите изменить картинку?",4,10) <> 6 Тогда
            СтатусВозврата(0);
            Возврат;
        КонецЕсли;
    КонецЕсли;
    НоваяКартинка     = "";
    Если ФС.ВыбратьФайлКартинки(0,НоваяКартинка,КатЗагрКартинки,"Выберите файл картинки для текущего товара!","jpg",10) = 1 Тогда
        ФС.КопироватьФайл(КатЗагрКартинки + НоваяКартинка, ИмяФайлаКартинки, 0);    
    КонецЕсли;
    Картинка.Загрузить(ИмяФайлаКартинки);    
КонецПроцедуры

Процедура ПросмотрКартинки()
    ИмяФайлаКартинки = ВернутьИмяФайлаКартинки(Код, Артикул);
    ЗапуститьПриложение(ИмяФайлаКартинки);
КонецПроцедуры
// Конец работы с картинками Влад 19.04.2018


Картинки храню в папке, с именем заданным в константе, внутри ИБ.
Вопрос: Не могу вывести картинку на печать

Доброго времени суток.
Управляемое приложение. Конфигурация далека от типовой CRM., есть спр. номенклатура, есть спр Объект недвижимости.
Связывает их между собой рс .А_НоменклатураНедвижимость. В спр. Номенклатура есть картинка-тип справочник- номенк.прикрепленные файлы.
запрос=новый запрос;
запрос.Текст="ВЫБРАТЬ
| А_НоменклатураНедвижимость.Номенклатура.ФайлКартинки как Файл
|ИЗ
| РегистрСведений.А_НоменклатураНедвижимость КАК А_НоменклатураНедвижимость
|ГДЕ
| А_НоменклатураНедвижимость.ОбъектНедвижимости.Ссылка = &Ссылка";
запрос.УстановитьПараметр("ссылка",ссылканаобъект.объектнедвижимости);
рез=запрос.Выполнить().Выбрать();
если рез.Следующий() тогда

СправДопИнф=рез.файл;
Изображение=СправДопИнф.ФайлХранилище.получить();
ИзображениеОбласть = приложение1.Рисунки.кк;
_Картинка = Новый Картинка(изображение);
ИзображениеОбласть.Картинка=_Картинка;

конецесли;
в отладке рез.файл-ссылка на справочник .номенклатура присоединенные файлы.
в итоге область выводить пустой без картинки.
Ответ:
Если кто столкнется то вот так
запрос=новый запрос;
запрос.Текст="ВЫБРАТЬ
| А_НоменклатураНедвижимость.Номенклатура.ФайлКартинки как ФайлКартинки
|ИЗ
| РегистрСведений.А_НоменклатураНедвижимость КАК А_НоменклатураНедвижимость
|ГДЕ
| А_НоменклатураНедвижимость.ОбъектНедвижимости.Ссылка = &Ссылка";
запрос.УстановитьПараметр("ссылка",ссылканаобъект.объектнедвижимости);
Результат=запрос.Выполнить();
ВыборкаКартинки = Результат.Выбрать();

Пока ВыборкаКартинки.Следующий() Цикл
Если ВыборкаКартинки.ФайлКартинки <> Справочники.НоменклатураПрисоединенныеФайлы.ПустаяСсылка() Тогда

Картинка = Новый Картинка;
СтруктураКартинки = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ВыборкаКартинки.ФайлКартинки);
ЗнКартинки = ПолучитьИзВременногоХранилища(СтруктураКартинки.СсылкаНаДвоичныеДАнныеФайла);
ИзображениеОбласть = приложение1.Рисунки.кк;
Если ТипЗнч(ЗнКартинки) = Тип("Картинка") Тогда
ИзображениеОбласть.Картинка = ЗнКартинки;
Иначе
ИзображениеОбласть.Картинка = Новый Картинка(ЗнКартинки);
КонецЕсли;
Иначе
Сообщить("У номенклатуры: "+ВыборкаКартинки.Номенклатура + " нет изображения!");
КонецЕсли;


КонецЦикла;
табДок.Вывести(ПРИЛОЖЕНИЕ1);
Вопрос: Как отобразить картинку статуса в форме списка документа

Подскажите пожалуйста, если возможность в форме списка документа отображать картинки, которые будут меняться в зависимости от значения реквизита документа. Например Статус = "Выполнен" тогда отображается одна картинка, Статус = "В процессе" другая.
Ответ: Можно.
1. Для этого необходимо в форме списка установить галочку произвольный запрос на динамический список (основной реквизит "Список") и дописать там условие вида
1C
1
ВЫБОР КОГДА Статус = &Выполнен ТОГДА 0 КОГДА ... ТОГДА 1 И Т.Д. КОНЕЦ КАК Картинка
2. Заготовить картинку, в ней должны быть размещены несколько вариантов картинок, идущие друг за другом (как кадры). Нумерация картинок начинается с 0 (то, что добавляли в запросе).
3. вынести Список на форму и реквизиту Картинка установить в свойстве Вид: Поле картинки.
Надеюсь мысль ясна ; )
Вопрос: ХранилищеЗначения Несоответствие типов при выводе картинки на элемент формы

Есть реквизит с типом ХранилищеЗначения. Туда записана картинка. Хочу ее отобразить при активизации на форме(табличная часть содержит этот реквизит). При активизации строки во время попытки вывода изображения:
"            Если мТекущееОсновноеИзображение = Неопределено Тогда
                ЭлементыФормы.ПолеКартинкиФотография.Картинка = мПустаяКартинка;
            Иначе
                ЭлементыФормы.ПолеКартинкиФотография.Картинка = мТекущееОсновноеИзображение;
            КонецЕсли;    "
Сообщение: "Несоответствие типов. ЭлементыФормы.ПолеКартинкиФотография.Картинка = мТекущееОсновноеИзображение;"
Пустая картинка(Неопределено) элементу присваевается.
Ответ: () Только вот зачем ты преобразовывал картинку в двоичные данные?
Вроде ХЗ позволяет напрямую с картинкой работать:
ХранилищеЗначения (ValueStorage)
Методы:

Получить (Get)

Конструкторы:

На основании значения

Описание:

Предназначен для хранения значения в специальном формате. Он может быть записан в поля базы данных, имеющие соответствующий тип. Это позволяет сохранять в базе данных значения, тип которых не может быть выбран в качестве типа поля, например, Картинка.

Пример:

МояКартинка = Новый Картинка("C:\Мои документы\Картинка1.bmp");
ХранилищеКартинки = Новый ХранилищеЗначения(МояКартинка);

НовНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
НовНоменклатура.Наименование = "Диван ""Маргарита""";
НовНоменклатура.Изображение = ХранилищеКартинки;
НовНоменклатура.Записать();
Вопрос: Обработка по добавлению картинок к номенклатуре

Здравствуйте. Сделал обработку по добавлению к номенклатуре картинок. Но есть проблема.

При открытии номенклатуры справа отображается картинка(назовем ее иконка), если картинок несколько, то остальные в пункте "присоединенные файлы". При добавлении картинок иконка заменяется на последнюю добавленную. Вопрос, как сделать, чтобы, если иконка есть, она не менялась?
Ответ:
При открытии номенклатуры справа отображается картинка(назовем ее иконка), если картинок несколько, то остальные в пункте "присоединенные файлы". При добавлении картинок иконка заменяется на последнюю добавленную. Вопрос, как сделать, чтобы, если иконка есть, она не менялась?
Найти в коде где она меняется и изменить эту часть алгоритма.....
Вопрос: 1с 8.3 Вывод картинок в табличной части документа

Имеется документ с табличной частью, с реквизитом Номенклатура (тип СправочникСсылка.Номенклатура ). Нужно при изменении Номенклатуры выводить соответствующую картинку из справочника.

Есть одна особенность картинки хранятся в отдельном справочнике ФотоБанк с реквизитом Фото (тип ХранилищеЗначения). На который и ссылается реквизит Изображение справочника Номенклатура.
(Добавление картинки в Справочник было рассмотрено в этой теме: )

Подскажите, пожалуйста, как все же реализовать вывод картинок в табличной части документа.
Ответ: После долгих мучений, картинка выводиться в табличную часть документа, но очень маленькая. А если в конфигураторе поменять высоту колонки, то картинка выводиться в ее реальном размере (но выходит со стороки - см. скрин 2), хотя стоит в свойстве АвтоРазмер. Как это исправить? И какое свойство надо изменить, чтобы картинка была по центру ячейки?
1C
1
2
3
4
5
6
7
8
9
10
11
12
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
    СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
    Номенклатура = СтрокаТабличнойЧасти.Номенклатура;   
    СтрокаТабличнойЧасти.АдресФото = ПолучитьСсылкуКартинки(Номенклатура);
КонецПроцедуры
 
&НаСервереБезКонтекста
Функция ПолучитьСсылкуКартинки(Ссылка)
     АдресФото = ПолучитьНавигационнуюСсылку(Ссылка.Изображение,"Фото");
     Возврат АдресФото;
КонецФункции
Вопрос: Поле картинки на УФ

Есть УФ на ней "Поле картинки".
Возможно ли сделать так, чтобы при изменении размера поля картинки на форме, сам размер выводимой картинки оставался прежним (оригинальным), а в уменьшенном поле картинки выводилась та часть картинки которая при данном размере видна (как в объектив например)?!
Вот оригинальный размер:

Вот так при стягивании (не правильно):

Вот так нужно сделать:
Ответ:
Да, именно.
И соотв. при стягивании, картинка не менялась, а менялась только видимая её часть.