Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
nikioioio
0 / 0 / 0
Регистрация: 09.10.2015
Сообщений: 15
1

Алгоритм загрузки изображений из excel по ссылке URL в реквизит основное изображение

23.03.2016, 05:48. Просмотров 2175. Ответов 14
Метки нет (Все метки)

Добрый день. Есть стандартная обработка "ЗагрузкаДанныхИзТабличногоДокумента" В событии при записи описан алгоритм:

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
НомерСтолбцаИзображение = 3;
НомерСтолбцаОписаниеИзображение = 4; 
 
 
ЗапросСуществующих = Новый Запрос();
ЗапросСуществующих.Текст = "
|ВЫБРАТЬ
|   ХранилищеДополнительнойИнформации.Ссылка
|ИЗ
|   Справочник.ХранилищеДополнительнойИнформации КАК ХранилищеДополнительнойИнформации
|ГДЕ
|   ХранилищеДополнительнойИнформации.Объект = &Объект
|   И ХранилищеДополнительнойИнформации.Наименование = &Наименование";
 
Объект.Записать();
 
ФайлКартинки = Новый Файл(СокрЛП(ТекстыЯчеек[НомерСтолбцаИзображение]));
 Предупреждение(ФайлКартинки.Существует());
Если ФайлКартинки.Существует() Тогда
   Предупреждение("!");
   ЗапросСуществующих.УстановитьПараметр("Объект", Объект.Ссылка);
   ЗапросСуществующих.УстановитьПараметр("Наименование", СокрЛП(ТекстыЯчеек[НомерСтолбцаОписаниеИзображение]));
   Выборка = ЗапросСуществующих.Выполнить().Выбрать();
   Если Выборка.Количество() <= 0 Тогда
      Предупреждение("!!");
      ХранилищеОбъект = Справочники.ХранилищеДополнительнойИнформации.СоздатьЭлемент();
      ХранилищеОбъект.ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение;
      ХранилищеОбъект.Хранилище = Новый ХранилищеЗначения(Новый Картинка(ТекстыЯчеек[НомерСтолбцаИзображение]),Новый СжатиеДанных);
      ХранилищеОбъект.Объект = Объект.Ссылка;
      ХранилищеОбъект.Наименование = СокрЛП(ТекстыЯчеек[НомерСтолбцаОписаниеИзображение]);
      ХранилищеОбъект.ИмяФайла = ТекстыЯчеек[НомерСтолбцаИзображение];
      ХранилищеОбъект.Записать();
      Объект.ОсновноеИзображение=ХранилищеОбъект.Ссылка;
   КонецЕсли;
КонецЕсли;

Помогите переделать алгоритм так, чтобы принимались URL Ссылки вместо локальных ссылок типа C:\...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2016, 05:48
Ответы с готовыми решениями:

Нужно скачать изображение по ссылке вида "data:image/png;base64,<URL>"
Всем привет! Появилась такая задача, как выкачка пары-тройки изображений из ссылки вида ...

Показывать другое изображение пока не загрузилось основное
У меня 2 картинки, одна - основная, а другая обычная gif, как сделать так, чтобы сначала была...

При рисовании на Bitmap.Canvas исчезает основное изображение
Procedure TDynamicObjects.Drawsquare(xmax, ymax, ymin, xmin: integer); begin ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,781
23.03.2016, 10:30 2
nikioioio,
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
&НаСервере
Процедура ЗагрузкаДанныхИзТабличногоДокумента()
....
Текст = СокрЛП(ТекстыЯчеек[НомерСтолбцаИзображение]);
 
РасширениеФайла = РасширениеФайла(Текст);
АдресКартинки = СтрЗаменить(Текст, """", "");
ИмяКартинки = ПолучитьИмяКартинки(АдресКартинки);
НовоеИмя = ПолучитьИмяВременногоФайла(РасширениеФайла);
 
Попытка
  КопироватьФайл(АдресКартинки, НовоеИмя); 
 
   ЗапросСуществующих.УстановитьПараметр("Объект", Объект.Ссылка);
   ЗапросСуществующих.УстановитьПараметр("Наименование", ИмяКартинки);
   Выборка = ЗапросСуществующих.Выполнить().Выбрать();
   Если Выборка.Количество() = 0 Тогда
      Предупреждение("!!");
      ХранилищеОбъект = Справочники.ХранилищеДополнительнойИнформации.СоздатьЭлемент();
      ХранилищеОбъект.ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение;
      ХранилищеОбъект.Хранилище = Новый ХранилищеЗначения(Новый Картинка(НовоеИмя),Новый СжатиеДанных);
      ХранилищеОбъект.Объект = Объект.Ссылка;
      ХранилищеОбъект.Наименование = СокрЛП(ТекстыЯчеек[НомерСтолбцаОписаниеИзображение]);
      ХранилищеОбъект.ИмяФайла = ИмяКартинки;
      ХранилищеОбъект.Записать();
      Объект.ОсновноеИзображение=ХранилищеОбъект.Ссылка;
   КонецЕсли;
  УдалитьФайлы(НовоеИмя);
Исключение
 Сообщить("Ошибка при получении картинки, возможно введен неверный URL: адрес изображения должен начинаться с ""http:""");
КонецПопытки;
...
КонецПроцедуры
 
&НаСервере
Функция РасширениеФайла(ИмяФайла)
    
    Строка = СтрЗаменить(ИмяФайла, ".", Символы.ПС);
    
    Всего = СтрЧислоСтрок(Строка);
    
    Если Всего < 2 Тогда
        Возврат "";
    КонецЕсли;
    
    Возврат СтрПолучитьСтроку(Строка, Всего);
    
КонецФункции
 
&НаСервере
Функция ПолучитьИмяКартинки(АдресКартинки)
    ИмяКартинки = "";
    ПодстрокаПоиска = АдресКартинки;
    Пока Найти(ПодстрокаПоиска,"/")>0 Цикл
        ПодстрокаПоиска = Сред(ПодстрокаПоиска,Найти(ПодстрокаПоиска,"/")+1);
    КонецЦикла;
    ИмяКартинки = Лев(ПодстрокаПоиска,Найти(ПодстрокаПоиска,".")-1);
    Возврат ИмяКартинки;
КонецФункции
1
nikioioio
0 / 0 / 0
Регистрация: 09.10.2015
Сообщений: 15
23.03.2016, 10:42  [ТС] 3
Прошу прощение я во вложении скинул, куда мне поместить код? Я не программист. Ткните меня пальцем))
0
Миниатюры
Алгоритм загрузки изображений из excel по ссылке URL в реквизит основное изображение  
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,781
23.03.2016, 11:08 4
nikioioio, выложите эту обработку "Загрузка данных из табличного документа".
В режиме Конфигуратора, когда найдете эту обработку в дереве конфигурации - правой кнопкой мыши - Сохранить, как внешнюю обработку/отчет. Перед загрузкой заархивируйте.
1
nikioioio
0 / 0 / 0
Регистрация: 09.10.2015
Сообщений: 15
23.03.2016, 11:33  [ТС] 5
GreenkO,
А у меня обычное приложение. Я закинул настройку с процедурой в шапке. Как мне в событие При записи закинуть Вашу процедуру? (обработка ЗагрузкаДанныхИзТабличногоДокумента)

Добавлено через 12 минут
Это же я так понял не обработка, а просто правило которое работает при загрузки из XLS
0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,781
23.03.2016, 11:34 6
Цитата Сообщение от nikioioio Посмотреть сообщение
А у меня обычное приложение
для сохранения обработки это не имеет значения.
0
nikioioio
0 / 0 / 0
Регистрация: 09.10.2015
Сообщений: 15
23.03.2016, 11:41  [ТС] 7
GreenkO,
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
36
37
38
39
40
41
42
43
44
НомерСтолбцаИзображение = 1;
НомерСтолбцаОписаниеИзображение = 1; 
 
 
ЗапросСуществующих = Новый Запрос();
ЗапросСуществующих.Текст = "
|ВЫБРАТЬ
|   ХранилищеДополнительнойИнформации.Ссылка
|ИЗ
|   Справочник.ХранилищеДополнительнойИнформации КАК ХранилищеДополнительнойИнформации
|ГДЕ
|   ХранилищеДополнительнойИнформации.Объект = &Объект
|   И ХранилищеДополнительнойИнформации.Наименование = &Наименование";
 
Объект.Записать();
    
Текст = СокрЛП(ТекстыЯчеек[НомерСтолбцаИзображение]);
 
РасширениеФайла = ".jpg";
АдресКартинки = СтрЗаменить(Текст, """", "");
ИмяКартинки = НомерСтолбцаОписаниеИзображение;
НовоеИмя = ПолучитьИмяВременногоФайла(РасширениеФайла);
 
Попытка
  КопироватьФайл(АдресКартинки, НовоеИмя); 
 
   ЗапросСуществующих.УстановитьПараметр("Объект", Объект.Ссылка);
   ЗапросСуществующих.УстановитьПараметр("Наименование", ИмяКартинки);
   Выборка = ЗапросСуществующих.Выполнить().Выбрать();
   Если Выборка.Количество() = 0 Тогда
      Предупреждение("!!");
      ХранилищеОбъект = Справочники.ХранилищеДополнительнойИнформации.СоздатьЭлемент();
      ХранилищеОбъект.ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение;
      ХранилищеОбъект.Хранилище = Новый ХранилищеЗначения(Новый Картинка(НовоеИмя),Новый СжатиеДанных);
      ХранилищеОбъект.Объект = Объект.Ссылка;
      ХранилищеОбъект.Наименование = СокрЛП(ТекстыЯчеек[НомерСтолбцаОписаниеИзображение]);
      ХранилищеОбъект.ИмяФайла = ИмяКартинки;
      ХранилищеОбъект.Записать();
      Объект.ОсновноеИзображение=ХранилищеОбъект.Ссылка;
   КонецЕсли;
  УдалитьФайлы(НовоеИмя);
Исключение
 Сообщить("Ошибка при получении картинки, возможно введен неверный URL: адрес изображения должен начинаться с ""http:""");
КонецПопытки;
вот так в событие закидываю, закидывает вот такую номенклатуру (во сложении)
0
Миниатюры
Алгоритм загрузки изображений из excel по ссылке URL в реквизит основное изображение  
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,781
23.03.2016, 12:10 8
nikioioio, попробуйте закомментить строку УдалитьФайлы(); и по пути в переменной "НовоеИмя" посмотрите, что находится. Нормально ли получается картинка по url.
0
nikioioio
0 / 0 / 0
Регистрация: 09.10.2015
Сообщений: 15
23.03.2016, 12:48  [ТС] 9
GreenkO,

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
36
37
38
39
40
41
42
43
44
НомерСтолбцаИзображение = 1;
НомерСтолбцаОписаниеИзображение = 1; 
 
 
ЗапросСуществующих = Новый Запрос();
ЗапросСуществующих.Текст = "
|ВЫБРАТЬ
|   ХранилищеДополнительнойИнформации.Ссылка
|ИЗ
|   Справочник.ХранилищеДополнительнойИнформации КАК ХранилищеДополнительнойИнформации
|ГДЕ
|   ХранилищеДополнительнойИнформации.Объект = &Объект
|   И ХранилищеДополнительнойИнформации.Наименование = &Наименование";
 
Объект.Записать();
    
Текст = СокрЛП(ТекстыЯчеек[НомерСтолбцаИзображение]);
 
 
АдресКартинки = СтрЗаменить(Текст, """", "");
ИмяКартинки = НомерСтолбцаОписаниеИзображение;
НовоеИмя = ПолучитьИмяВременногоФайла();
 
Попытка
  КопироватьФайл(АдресКартинки, НовоеИмя); 
 
   ЗапросСуществующих.УстановитьПараметр("Объект", Объект.Ссылка);
   ЗапросСуществующих.УстановитьПараметр("Наименование", ИмяКартинки);
   Выборка = ЗапросСуществующих.Выполнить().Выбрать();
   Если Выборка.Количество() = 0 Тогда
      Предупреждение("!!");
      ХранилищеОбъект = Справочники.ХранилищеДополнительнойИнформации.СоздатьЭлемент();
      ХранилищеОбъект.ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение;
      ХранилищеОбъект.Хранилище = Новый ХранилищеЗначения(Новый Картинка(НовоеИмя),Новый СжатиеДанных);
      ХранилищеОбъект.Объект = Объект.Ссылка;
      ХранилищеОбъект.Наименование = СокрЛП(ТекстыЯчеек[НомерСтолбцаОписаниеИзображение]);
      ХранилищеОбъект.ИмяФайла = ИмяКартинки;
      ХранилищеОбъект.Записать();
      Объект.ОсновноеИзображение=ХранилищеОбъект.Ссылка;
   КонецЕсли;
  //УдалитьФайлы(НовоеИмя);
Исключение
 Сообщить("Ошибка при получении картинки, возможно введен неверный URL: адрес изображения должен начинаться с ""http:""");
КонецПопытки;
в таком случае так же крест вместо картинки

Добавлено через 12 минут
GreenkO, по пути в папке TEMP вообще такого файла нет.

Добавлено через 21 минуту
GreenkO, Прошу прощения, файл нашел, .jpg но при открытии средство просмотра фотографий windows не моет открыть это изображение
0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,781
23.03.2016, 12:49 10
nikioioio, а напишите адрес, по которому получаете картинку.

Не по теме:

Код необходимо выделять соответствующим языку форматированием (кнопка на панели редактирования сообщения).

0
nikioioio
0 / 0 / 0
Регистрация: 09.10.2015
Сообщений: 15
23.03.2016, 12:50  [ТС] 11
GreenkO, http://partners.eksmo.ru/images/isho...611_cover1.jpg
0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,781
23.03.2016, 13:58 12
nikioioio, вы пробовали другие изображения загружать?
0
nikioioio
0 / 0 / 0
Регистрация: 09.10.2015
Сообщений: 15
23.03.2016, 14:01  [ТС] 13
GreenkO, несколько брал
0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,781
23.03.2016, 14:03 14
nikioioio, и у всех url начинается с https? Может дело в протоколе.
Пробовала получение изображения через
1C
1
2
3
        НовоеИмя = ПолучитьИмяВременногоФайла(РасширениеФайла);
        Соединение = Новый HTTPСоединение(АдресСервера);
        Соединение.Получить(ИмяКартинки + "." + РасширениеФайла, НовоеИмя);
По вашему адресу не срабатывает. Другие картинки все грузит по обоим методам.
0
nikioioio
0 / 0 / 0
Регистрация: 09.10.2015
Сообщений: 15
23.03.2016, 14:04  [ТС] 15
GreenkO, ну ссылка то проходит через браузер без проблем
0
23.03.2016, 14:04
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru