8.х Вставить картинку в ПолеHTMLДокумента

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Serjio77, 28 июн 2017.

  1. TopicStarter Overlay
    Serjio77
    Offline

    Serjio77

    Регистрация:
    28 июн 2017
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    Доброго времени суток уважаемые гуру 1С программирования!
    После долгих дней и безуспешных попыток решения проблемы решил обратится к вам за советом. Передо мной стоит задача вставить изображение с логотипом из справочника организации в ПолеHTMLДокумента.
    Итак, у нас имеется точное название организации которое встречается в выводимых документах. Заносим его в переменную Стр.
    Стр = ФильтрыОтчета.Организация.Значение;
    Теперь, все наши изображения хранятся в регистре сведений. Соответственно мы обращаемся с нашим полученным в переменной названием к регистру сведений для того чтобы вытащить оттуда требуемую запись.
    Запрос = Новый Запрос();
    Запрос.Текст = "Выбрать *
    |Из РегистрСведений.КартинкиИФайлы
    |Где РегистрСведений.КартинкиИФайлы.Объект = &Стр";
    Запрос.УстановитьПараметр("Стр", Стр);
    Отборка = Запрос.Выполнить().Выбрать();

    Отборка у нас стала хранилищем значений. А потому следующим шагом мы загоняем нашу картинку которая все таки сидит в полученной записи во временное хранилище значений при помощи вот такой нехитрой комбинации.
    ЗагонВХранилище = ПоместитьВоВременноеХранилище(Отборка.Данные.Получить());
    Ну вот теперь бы казалось можно успокоится и получить то что мы так хотим в ПолуHTMLДокумента. Дело то за маленьким. Всего лишь написать одну строчку кода.
    КартинкаЛоготипа = "<img src = """ + ЗагонВХранилище + """ width = ""200"" height = ""200"" />";
    Текст = Текст + КартинкаЛоготипа;

    И Вуаля.. Мы получаем в поле HTML документа самое что ни на есть.. хрен..
    Ладно.. Малый я не промах. Я сейчас пойду более глубоким путем.
    Я проверю есть ли у меня вообще картинка в моей ссылке которая падает в переменную ЗагонВХранилище. Поехали....
    ДвоичныеДанные = Отборка.Данные.Получить();
    ДвоичныеДанные.Записать("C:\wmpub\Temp.jpg");

    Все нормально. Картинка там. Она упала у меня в требуемом направлении C:\wmpub\Temp.jpg и я ее даже посмотрел. Ок.. говорю я себе. Еще не все потеряно. Я сейчас получу навигационную ссылку.
    Поехали.
    КлючЗаписиРег = РегистрыСведений.КартинкиИФайлы.СоздатьКлючЗаписи(Новый Структура("Объект", Стр));
    Если НЕ КлючЗаписиРег.Пустой() Тогда
    СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(КлючЗаписиРег, "Данные");
    КонецЕсли;

    Ссылку получил. Снова правим HTML
    КартинкаЛоготипа = "<img src = """ + СсылкаНаКартинку + """ width = ""200"" height = ""200"" />";
    Текст = Текст + КартинкаЛоготипа;

    И что мы видим? Правльно... тот самый хрен, о котором я уже рассказывал выше.
    Уважаемые мастера.. Я конечно понимаю, что у меня есть еще один выход признать себя оконченным имбицилом лишенным всяческих генетических наклоннестей к программированию и треснувшись пару раз башкой об стенку тупо навтыкать картинки в раздел конфигурации Общие -> ОбщиеКартинки и все.. А после этого используя строку:
    АдресЛоготипа = ПолеHTMLДокумента.ПолучитьURL(Метаданные.ОбщиеКартинки._____Логотипы_____);
    Вытащить то что нужно в полеHTMLДокумента. Можно так. Работает. Я проверил. Но если вдруг у нас имеется изображение сотрудника? То здесь у нас этот метод не будет приемлимым. Так как сотрудников в смене работает 3 человека. А смен у нас четыре. И сотрудники у нас имеют свойство меняться.
    Так как же мне вставить эту злополучную картинку в полеHTMLДокумента?

    P.S. Прошу не судить меня строго уважаемых граждан, которые не равнодушно относятся к острым приправам и специям, которые используются в кулинарии. А также граждан которые занимаются охраной природы, окружающих и близких нам сожителей. Я ничего не имею против растения с названием хрен. В своем обращении я использовал описательный образ который схож по своему действию с результатом когда ты долго и мучительно пытаешься добиться решения поставленной задачи. Как и от хрена у меня тоже слезятся глаза и волосы встают дыбом от бесполезных потуг и попыток наткнуться на желаемый эффект.
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.128
    Симпатии:
    953
    Баллы:
    204
    я не силен в html, какое значение должно определяться тегом img src? если это имя файла, то сохраните полученные из временного хранилища двоичные данные в файл и используйте имя файла.
  3. TopicStarter Overlay
    Serjio77
    Offline

    Serjio77

    Регистрация:
    28 июн 2017
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    1
    А куда потом путь к файлу прописать? Где у 1с корневой каталог? Или вернее сказать какая директория является для 1с корневой?
  4. TrasserZero
    Offline

    TrasserZero Опытный в 1С

    Регистрация:
    26 окт 2016
    Сообщения:
    51
    Симпатии:
    2
    Баллы:
    29
    Из-за того что графические данные и текст html невозможно объединить в одном файле, для их отображения применяется другой подход, нежели с другими элементами html-страниц. Прежде всего, графические изображения, да и другие мультимедийные данные хранятся в отдельных файлах. А для их внедрения в web-страницу используют специальные теги, которые содержат ссылки на эти отдельные файлы. В частности таким тегом является тег <img>. Встретив такой тег с адресом, браузер сначала запрашивает у Web-сервера соответствующий файл с изображением, аудио- или видеороликом, а только затем отображает его на Web-странице.
    Поэтому, если не ошибаюсь - напрямую не получится.. т.к. в БД хранится не то чтобы картинка а двоичные данные.. т.е. надо сначала выгрузить картинку в какой-нибудь временный каталог, а потом уже пихать в html. Если ошибаюсь - гуру поправят.
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.128
    Симпатии:
    953
    Баллы:
    204
    А для чего нужен именно корневой каталог 1С? временный каталог чем не устраивает в данном случае?

Поделиться этой страницей