8.х Выгрузка с картинкой

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

  1. TopicStarter Overlay
    andryscha92
    Offline

    andryscha92 Опытный в 1С

    Регистрация:
    31 янв 2012
    Сообщения:
    389
    Симпатии:
    1
    Баллы:
    29
    Здравствуйте!Есть обработка которая выгружает из ут 10.3 всю номенклатуру в CSV файл. Можно ли как нибудь выгрузить картинку товара которую проставил пользователь для каждой номенклатуры(а точнее видимо ссылку на картинку надо)?каким образом это можно сделать?где то картинка должна как то храниться?
  2. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    Все это добро лежит в справочнике ХранилищеДополнительнойИнформации, связь с номенклатурой - по реквизиту Объект справочника, сами картинки находятся в реквизите Хранилище, там хранилище значения с картинкой внутри. чтобы записать его в csv можно попользоваться функцией XMLСтрока и передать параметром двоичные данные, полученные из картинки (если нужна совместимость с не-1с) либо само хранилище значения, функция вернет base64 строку, которую уже записывать в файл
  3. TopicStarter Overlay
    andryscha92
    Offline

    andryscha92 Опытный в 1С

    Регистрация:
    31 янв 2012
    Сообщения:
    389
    Симпатии:
    1
    Баллы:
    29
    использовал функцию XMLСтрока и в параметр передал хранилище(выгрузив из результата запроса) в результате
    Строка = XMLСтрока(запись.Хранилище);
    когда записал csv файл(записывал Строку) там в ячейке хранилище очень очень много символов разных. Что я делаю не так?хотелось бы что бы в ячейке в CSV файле была ссылка номенклатуре и нажимая её открывалась картинка которая хранилась бы на локальном диске. подобное можно реализовать?или может есть обработка загрузки картинок номенклатуры на сайт?синхронизация например по коду или наименованию.
  4. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    ну так сохраняйте картинку на диск и записывайте в csv имя файла.
    то, что у вас получилась большая строка - это правильно - это данные картинки, переведенные в символьный формат
  5. Alex_fess
    Offline

    Alex_fess Опытный в 1С

    Регистрация:
    23 мар 2011
    Сообщения:
    256
    Симпатии:
    7
    Баллы:
    29
    XLS не подойдет?
  6. TopicStarter Overlay
    andryscha92
    Offline

    andryscha92 Опытный в 1С

    Регистрация:
    31 янв 2012
    Сообщения:
    389
    Симпатии:
    1
    Баллы:
    29
    посмотрите я сохраняю картинку на локальный диск,указываю нужный путь. а что записывать в csv файл???так как если строку картинки записать там много символов(скрин).подскажите может двоичные данные передавать. что нужно в csv писать?
    Код:
            ИмяКартинки = "IMG_"+СокрЛП(запись.КодТовара)+".jpg";
            Если ЗначениеЗаполнено(запись.Хранилище) Тогда
            Хранилище =    запись.Хранилище;
            Файл = Хранилище.Получить();
            СтрокаКартинки = XMLСтрока(Хранилище);
            Файл.Записать(КаталогИзображений+"\"+ИмяКартинки);
            КонецЕсли;    

    Вложения:

    • 888.jpg
      888.jpg
      Размер файла:
      357 КБ
      Просмотров:
      54
  7. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    двоичные данные именно такой вот длинной base64 строкой и передаются, если надо именно их передать. если вы грузите на сайт - то тут встает вопрос - на чем сайт крутится. чаще всего картинки выгружаются в каталог на ftp сервере с именами файлов, совпадающими с кодами номенклатуры, либо в подпапки, при этом имя подпапки - код номенклатуры - это делается если надо несколько картинок привязать к номенклатуре. в csv при этом можно даже не грузить название файла картинки - он однозначно определится по коду.
    также иногда данные о номенклатуре загружаются через веб-сервисы, картинки в том числе, но в этом случае обычно не используется csv, а все данные передаются через веб-сервис
    ну и третий вариант - прямая запись в базу данных сайта, но опять же - тут не нужен csv
    Alex_fess нравится это.
  8. TopicStarter Overlay
    andryscha92
    Offline

    andryscha92 Опытный в 1С

    Регистрация:
    31 янв 2012
    Сообщения:
    389
    Симпатии:
    1
    Баллы:
    29
    вообщем csv в этом никак не взаимодействован. Нужно просто выгрузить обработкой все картинки из хранилища, присвоив им имя - код или наименование товара. Дальше картинки загружаются с синхронизацией например по коду уже сторонними средствами(не 1с). Правильно я Вас понял?
  9. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
  10. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Давно все собирался ответить в теме, как то некогда все.
    Пример кодирования картинок из моей обработки
    Код:
    ТекстовыйДокументФото.ДобавитьСтроку("<item>");
                ТекстовыйДокументФото.ДобавитьСтроку("<code>" + СокрП(Номенклатура.Код) + "</code>");
                
                ТекстовыйДокументФото.ДобавитьСтроку("<characteristics>" + СокрЛП(Характеристика.Наименование) + "</characteristics>");
               
                Если Номенклатура.ВестиУчетПоХарактеристикам = Истина тогда
                    ТекстовыйДокументФото.ДобавитьСтроку("<GUIDcharacteristics>" + строка(Характеристика.Ссылка.УникальныйИдентификатор()) + "</GUIDcharacteristics>");
                Иначе
                    ТекстовыйДокументФото.ДобавитьСтроку("<GUIDcharacteristics>" + "</GUIDcharacteristics>");
                КонецЕсли;
               
                запрос = новый запрос;
                запрос.Текст = "ВЫБРАТЬ
                |    ХранилищеДополнительнойИнформации.Ссылка
                |ИЗ
                |    Справочник.ХранилищеДополнительнойИнформации КАК ХранилищеДополнительнойИнформации
                |ГДЕ
                |    ХранилищеДополнительнойИнформации.Объект = &объект
                |    И ХранилищеДополнительнойИнформации.ХарактеристикаОбъекта = &характеристика
                |    И ХранилищеДополнительнойИнформации.ВидДанных = &картинка";
                запрос.УстановитьПараметр("объект",Номенклатура );
                запрос.УстановитьПараметр("характеристика",Характеристика );
                запрос.УстановитьПараметр("картинка",Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение);
                выборкакартинок =  запрос.Выполнить().выбрать();
               
                Если выборкакартинок.Количество()<> 0 тогда
                    пока выборкакартинок.Следующий() цикл
                        Картинка = выборкакартинок.ссылка.Хранилище.Получить();
                    конецЦикла;
                КонецЕсли;
       
             ТекстовыйДокументФото.ДобавитьСтроку("<photo>" + Base64Строка(Картинка.ПолучитьДвоичныеДанные()) + "</photo>");
                ТекстовыйДокументФото.ДобавитьСтроку("<format>" + Картинка.Формат() + "</format>");
                ТекстовыйДокументФото.ДобавитьСтроку("</item>");
    
    Где
    Код:
    Base64Строка(Картинка.ПолучитьДвоичныеДанные()
    Перекодирует картинку в двоичные данные
    Пример кодированной картинкой функцией выше. Разница в том что кодировка завернута в файд xml для отправки по post запросу
    Код:
    <?xml version="1.0" encoding="windows-1251"?>
    <data>
    <item>
    <code>00000000607</code>
    <characteristics></characteristics>
    <GUIDcharacteristics></GUIDcharacteristics>
    <photo>/9j/4AAQSkZJRgABAQEAYABgAAD/4Rm8RXhpZgAATU0AKgAAAAgACwEOAAIAAAAg
    AAAIngEPAAIAAAAFAAAIvgEQAAIAAAAHAAAIxAESAAMAAAABAAEAAAEyAAIAAAAU
    AAAIzAITAAMAAAABAAIAAIdpAAQAAAABAAAI4JybAAEAAABAAAAZGJyfAAEAAABA
    FPc6K7vHbiV27v2rf/4TDUdvzWkf/fVecspwkHeEDmxmMjKdqOiOsjsUjXaihR9K
    nEJXpXGf8Jlqf/PnF+ZpV8Zan3sYQP8AeNd0aaj7qPN5nI7PyjR5bCuNfxnqJ+7Z
    xD/gVRP421Jf+XOL/vqq5GSdwIznPemsjnoK4VvH+oqf+PCD82pjfEDUR/y4xfma
    OVhc7plfH3aPJcj7uBjoeQa4L/hYOp9PsUH/AI9Sj4i6jyDYW5x7sM/rRGIX8zt3
    j2/eBB9T1FRZFcNN8Q9TkXb9gth7jPH4mqr+O9VY/wDHtAPwNPlY7noTYpv3W3V5
    u/jnWP4YLf8AI1C3jjWyeI4Nv+5RyyC56j9rK9dtYPiPXoYbRrNX/fzcbf7q1xTe
    MtYkRhuiGe6pWctxLcyO8zO8hbdk1UYsnmNue2XylIxRVCG5faUfmitSD0i5i74+
    amRJtA4255XdVwjd8u3rUEsksUfkp0/9CWszQY2W4ZelNCK338qO+2ommlX+Gmee
    /wDdNABNFEJW2K5X/aqExKy4MVOfeW6UhSRvupmmBXlijUcJWe8QDsdm47q0ZbWd
    9q7VVc0x9KkZlAdVAp2GVS/zf6r9aazll/1VX/7HA+/Kzf7tPGmWy/eVm/4FU2Ju
    ZZZk6KaZ50rL8sVbQsY1XiP86ctp/wBMxiqsIw1hu3jaVYTsXqfSovJLfeDV0YtO
    20Un2dV/iWkBzjW6t/AzN9KT7H/0zf8A75rpPJUbeaGRPRqAOYawLHlH/wC+aRrA
    5/1Tt/3zXStEmfu0xtgb7q7qsDmHsJf4YW/FqZ/Z9wW/1I/76rpXbdnioTnNAjnX
    0u5X/lnEfxpn9nXI/wCXeP8AE10L/NUTc00gMNbC5/55wj/gVSR2coI3+Wv0Fah+
    VqjP+z1qrElWTTwSCX+QdgKKsl6KYH//2Q==</photo>
    <format>JPEG</format>
    </item>
    </data>
    Длину кодировки урезал, а то форума не хватит
    Annie нравится это.
  11. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    так это и есть первый вариант :) - не понравился человеку. отчасти - правильно.
  12. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Надеюсь объяснение последует почему отчасти правильно, у меня по протоколу http post запросы идут в таком формате, лучшего пока не придумано
  13. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    отчасти - потому что объем может случиться немаленький. если отправлять по одной записи - все ок, если все сразу - возможны проблемы из-за объема передаваемых данных - вероятность косяка повышается
  14. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Если что POST запросы по протоколу http сами по себе ограничены размерами обычно такие выгрузки делают пакетными, т.е. выгрузка возобнавляется раз в 10 минут отправляю следующий пакет данных, в каждом пакете отправки обязательно прописывается размер пакета, весь необходимый функционал в платформе реализован, нужно просто заставить его взлететь. Я бы например посмотрел как по такому протоколу передали картинку, никак, в тоже самое время текст пройдет при любых обстаятельствах. Если мне дадите пищу для размышления, как это сделать практичнее, буду признателен, т.к. у меня разраб сайтов хочет какое нить комплексное решение для своих сайтов, а у меня пока все равно руки не добрались, заодно рассмотрю.
    Другое дело, что да, есть вариант синхронизации картинок с каталогом, сайт разбирает и подставляет, вот только как правило гемороя не оберешься, ибо картинки меняются.
  15. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    сам протокол http не накладывает ограничений на длину post запросов. их накладывают веб-серверы и пакеты типа php, чтобы избежать ddos атак через post.
    для работы с каталогом и картинками - сделайте что-то типа WebDAV протокола - отличная вещь для работы с файлами на сайте.
  16. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Получается речь идет опять же о веб-сервисе в котором нам придется оперировать файлы и уже на php изобретать способ привязки товара, как определить изменилась ли картинка со стороны php при обмене, или опять же нам придется определять это со стороны 1С? Я так понимаю что придется определить со стороны 1С, тогда как понять какая картинка сейчас и под каким именем соответствует картинке на веб-ресурсе, у нас при обмене текстовая составляющая перезаполняется и перепривязывает имеющиеся файлы, что просто само по себе. Хотя я так понимаю это просто расширение php и фактически нам нужно просто использовать это расширение для передачи картинок, но оперировать файлами в этом ресурсе со стороны 1С не самая хорошая идея, команды 1С по работе с файлами достаточно ущербны и это будет кропотливой работой и скорее всего встанет вопрос, а что дешевле?
    Хотя тему запомню, отправлю разрабу сайтов, пусто покурит, посмотрю что он скажет. За ответ спасибо, погляжу, хотя странно, почему то разраб сайтов у которого своя фирма и который давно этим занимается данную мысль не предложил
  17. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    ну вариантов то много - WebDAV - хорошая штука для работы с файлами, REST - вообще со всем практически - это замена soap web-сервисам, более ориентированная на работу с данными, а не с операциями.

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