8.х Преобразование изображения в массив byte?

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

  1. TopicStarter Overlay
    abc_asup4
    Offline

    abc_asup4 Опытный в 1С

    Регистрация:
    14 фев 2010
    Сообщения:
    292
    Симпатии:
    1
    Баллы:
    29
    Подскажите
    в справочнике ХранилищеДополнительнойИнформации
    находяться фотографии Сотрудников
    Выборкой извлекаю их

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

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    Преобразуйте двоичные данные обратно.
  3. TopicStarter Overlay
    abc_asup4
    Offline

    abc_asup4 Опытный в 1С

    Регистрация:
    14 фев 2010
    Сообщения:
    292
    Симпатии:
    1
    Баллы:
    29
    А можете показать пример как это сделать?
  4. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    Вот прям из СП вам пример:
  5. TopicStarter Overlay
    abc_asup4
    Offline

    abc_asup4 Опытный в 1С

    Регистрация:
    14 фев 2010
    Сообщения:
    292
    Симпатии:
    1
    Баллы:
    29
    Пишу так

    Если ВыборкаПоФотографии.Следующий() Тогда
    Фотография = ДвоичныеДанные(ВыборкаПоФотографии.Данные.Получить());
    КонецЕсли;

    Выдает ошибку

    Процедура или функция с указанным именем не определена (ДвоичныеДанные)
    Фотография = <<?>>ДвоичныеДанные(ВыборкаПоФотографии.Данные.Получить());
  6. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    Вы почитайте доступность этого описания.
    В СП же готовый пример, прям как специально для вас и под вас немного допилил:
    Код:
    ВыборкаПоФотографии.Данные.Получить().Записать(ИмяФайла);
  7. TopicStarter Overlay
    abc_asup4
    Offline

    abc_asup4 Опытный в 1С

    Регистрация:
    14 фев 2010
    Сообщения:
    292
    Симпатии:
    1
    Баллы:
    29
    Данной командой ВыборкаПоФотографии.Данные.Получить().Записать(ИмяФайла); происходит выгрузка из Хранилища в Файл

    а можно выгрузить из данного хранилища в переменную Фотография?
  8. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    :D:D:D:D и что вы там будете хранить ? 0 и 1 ??????????? смысл понимаете двоичного файла ?
  9. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Расскажите - для чего это? Задача какая?
  10. TopicStarter Overlay
    abc_asup4
    Offline

    abc_asup4 Опытный в 1С

    Регистрация:
    14 фев 2010
    Сообщения:
    292
    Симпатии:
    1
    Баллы:
    29
    Двоичный файл он представляет данные в виде 0 или 1
    мне нужно передать эту картинку например в другую базу
    я думая сначала преобразовать в двоичный код потом в 64 -ричный а затем передать её
  11. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Код:
    Строка64 = Base64Строка(ВыборкаПоФотографии.Данные.Получить());
    Обратите внимание, что Строка64 будет иметь тип именно строка.
    С обратным преобразованием, если "другая база" - на платформе 1С также проблем не будет (Base64Значение()).
  12. TopicStarter Overlay
    abc_asup4
    Offline

    abc_asup4 Опытный в 1С

    Регистрация:
    14 фев 2010
    Сообщения:
    292
    Симпатии:
    1
    Баллы:
    29
    Пишу так

    Фотография = Base64Строка(ВыборкаПоФотографии.Данные.Получить());

    Выдает ошибку

    Ошибка при вызове метода контекста (Base64Строка): Несоответствие типов (параметр номер '1')
  13. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Код:
            
            Если ТипЗнч(ВыборкаПоФотографии.Данные) <> Тип("ДвоичныеДанные") Тогда
                ДвоичныеДанные = ВыборкаПоФотографии.Данные.Получить();
            Иначе
                ДвоичныеДанные =ВыборкаПоФотографии.Данные;
            КонецЕсли; 
            Фотография = Base64Строка(ДвоичныеДанные);
    
  14. TopicStarter Overlay
    abc_asup4
    Offline

    abc_asup4 Опытный в 1С

    Регистрация:
    14 фев 2010
    Сообщения:
    292
    Симпатии:
    1
    Баллы:
    29
    Пишу так

    Если ТипЗнч(ВыборкаПоФотографии.Данные) <> Тип("ДвоичныеДанные") Тогда
    ДвоичныеДанные = ВыборкаПоФотографии.Данные.Получить();
    Иначе
    ДвоичныеДанные = ВыборкаПоФотографии.Данные;
    КонецЕсли;
    Фотография = Base64Строка(ДвоичныеДанные);

    выдает ошибку

    Ошибка при вызове метода контекста (Base64Строка): Несоответствие типов (параметр номер '1')
  15. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    Вы посмотрите какие типы принимает Base64Строка и возвращает метод Получить().
  16. TopicStarter Overlay
    abc_asup4
    Offline

    abc_asup4 Опытный в 1С

    Регистрация:
    14 фев 2010
    Сообщения:
    292
    Симпатии:
    1
    Баллы:
    29
    Метод

    ВыборкаПоФотографии.Данные.Получить()

    имеет тип картинку

    можно ли её преобразовать в двоичный код пишу

    Фотография = ВыборкаПоФотографии.Данные.Получить();
    Фотография = Новый ДвоичныеДанные(Фотография);

    выдает ошибку

    Ошибка при вызове конструктора (ДвоичныеДанные): Файл не обнаружен 'Картинка'
  17. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    :Dнебось так и написали в пути файла Картинка ?
  18. TopicStarter Overlay
    abc_asup4
    Offline

    abc_asup4 Опытный в 1С

    Регистрация:
    14 фев 2010
    Сообщения:
    292
    Симпатии:
    1
    Баллы:
    29
    у меня нет пути к файлу
    картинка берется из ВыборкаПоФотографии
  19. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    Она там хранится в двоичном формате, как только вы используете функцию Получить(), эти двоичные данные автоматом преобразуются в данном случае - в картинку.
    Какой реквизит у вас может хранить данные типа картинка ?????????????????????7
  20. TopicStarter Overlay
    abc_asup4
    Offline

    abc_asup4 Опытный в 1С

    Регистрация:
    14 фев 2010
    Сообщения:
    292
    Симпатии:
    1
    Баллы:
    29
    Пишу так

    Если ТипЗнч(ВыборкаПоФотографии.Данные) <> Тип("ДвоичныеДанные") Тогда
    Фотография = ВыборкаПоФотографии.Данные.Получить();
    Если ТипЗнч(Фотография) = Тип("Картинка") Тогда
    Попытка
    Фотография = Строка(Фотография.ПолучитьДвоичныеДанные());
    Исключение
    Сообщить(Фамилия + " " + ТабНомер);
    КонецПопытки;
    КонецЕсли;
    Иначе
    Фотография = ВыборкаПоФотографии.Данные;
    КонецЕсли;

    Получилось
    alexburn нравится это.

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