8.х WEB Функция Web-сервиса

Тема в разделе ""1C:Web-Сервер"", создана пользователем defragmentator, 15 авг 2012.

  1. TopicStarter Overlay
    defragmentator
    Offline

    defragmentator

    Регистрация:
    15 авг 2012
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Народ, решил написать функцию для веб-сервиса, которая бы выгружала фотку сотрудника в XML, с параметрами: ID организации, UID сотрудника.
    В общем, набросал так:

    Код:
    Функция GetXmlPersonalPhoto(OrgLink, UID)
    Запись = новый ЗаписьXML;
    Запись.УстановитьСтроку();
    Запись.ЗаписатьНачалоЭлемента("PersonalData");
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | СотрудникиОрганизаций.Ссылка,
    | СотрудникиОрганизаций.Код
    |ИЗ
    | Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
    |  ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица
    |  ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХранилищеДополнительнойИнформации КАК ХранилищеДополнительнойИнформации
    |   ПО ФизическиеЛица.ОсновноеИзображение = ХранилищеДополнительнойИнформации.Ссылка
    |   ПО СотрудникиОрганизаций.Физлицо = ФизическиеЛица.Ссылка
    |ГДЕ
    | СотрудникиОрганизаций.Актуальность
    |   И СотрудникиОрганизаций.Ссылка = &ссылкаНаСотрудника
    |   И СотрудникиОрганизаций.Организация.Ссылка = &ссылкаНаОрганизацию";
    
    Запрос.УстановитьПараметр("ссылкаНаОрганизацию", Справочники.Организации.ПолучитьСсылку(Новый УникальныйИдентификатор(OrgLink)));
    Запрос.УстановитьПараметр("ссылкаНаСотрудника", Справочники.Организации.ПолучитьСсылку(Новый УникальныйИдентификатор(UID)));
    
    Результат = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Запись.ЗаписатьНачалоЭлемента("Employee");
    Если (ВыборкаДетальныеЗаписи.Хранилище <> NULL)  Тогда
    
    Запись.ЗаписатьНачалоЭлемента("Photo");
    Запись.ЗаписатьТекст(""+Base64Строка(ВыборкаДетальныеЗаписи.Хранилище.Получить().ПолучитьДвоичныеДанные()));
    Запись.ЗаписатьКонецЭлемента();//Photo
    КонецЕсли;
    Запись.ЗаписатьКонецЭлемента();//Employee
    КонецЦикла;
    Запись.ЗаписатьКонецЭлемента();//PersonalData
    Возврат Запись.Закрыть();
    КонецФункции
    
    Но ничего не выгружает.
    Пустой XML: <PersonalData/>
    А как правильно?
  2. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.175
    Симпатии:
    13
    Баллы:
    29
    Запрос.УстановитьПараметр("ссылкаНаСотрудника", Справочники.Организации.ПолучитьСсылку(Новый УникальныйИдентификатор(UID)));

    тут точно должен быть справочник ОРГАНИЗАЦИИ ???
  3. TopicStarter Overlay
    defragmentator
    Offline

    defragmentator

    Регистрация:
    15 авг 2012
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Да, похоже перепутал. Попробую ФизическиеЛица или СотрудникиОрганизаций
  4. TopicStarter Overlay
    defragmentator
    Offline

    defragmentator

    Регистрация:
    15 авг 2012
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Нет, никак не помогло
  5. TopicStarter Overlay
    defragmentator
    Offline

    defragmentator

    Регистрация:
    15 авг 2012
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Вот окончательный вариант, но всё равно не работает (выдаёт пустой тег верхнего уровня):
    Код:
    Функция GetXmlPersonalPhoto(OrgLink, UID)
    Запись = новый ЗаписьXML;
    Запись.УстановитьСтроку();
    Запись.ЗаписатьНачалоЭлемента("PersonalData");
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | СотрудникиОрганизаций.Ссылка,
    | СотрудникиОрганизаций.Код,
    | ХранилищеДополнительнойИнформации.Хранилище
    |ИЗ
    | Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
    |  ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица
    |  ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХранилищеДополнительнойИнформации КАК ХранилищеДополнительнойИнформации
    |   ПО ФизическиеЛица.ОсновноеИзображение = ХранилищеДополнительнойИнформации.Ссылка
    |   ПО СотрудникиОрганизаций.Физлицо = ФизическиеЛица.Ссылка
    |ГДЕ
    | СотрудникиОрганизаций.Актуальность
    |   И СотрудникиОрганизаций.Ссылка = &ссылкаНаСотрудника
    |   И СотрудникиОрганизаций.Организация.Ссылка = &ссылкаНаОрганизацию";
    
    Запрос.УстановитьПараметр("ссылкаНаОрганизацию", Справочники.Организации.ПолучитьСсылку(Новый УникальныйИдентификатор(OrgLink)));
    Запрос.УстановитьПараметр("ссылкаНаСотрудника", Справочники.СотрудникиОрганизаций.ПолучитьСсылку(Новый УникальныйИдентификатор(UID)));
    
    Результат = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Запись.ЗаписатьНачалоЭлемента("Employee");
    Если (ВыборкаДетальныеЗаписи.Хранилище <> NULL)  Тогда
    
    Запись.ЗаписатьНачалоЭлемента("Photo");
    Запись.ЗаписатьТекст(""+Base64Строка(ВыборкаДетальныеЗаписи.ХранилищеДополнительнойИнформации.Хранилище.Получить().ПолучитьДвоичныеДанные()));
    Запись.ЗаписатьКонецЭлемента();//Photo
    КонецЕсли;
    Запись.ЗаписатьКонецЭлемента();//Employee
    КонецЦикла;
    Запись.ЗаписатьКонецЭлемента();//PersonalData
    Возврат Запись.Закрыть();
    КонецФункции
    
  6. TopicStarter Overlay
    defragmentator
    Offline

    defragmentator

    Регистрация:
    15 авг 2012
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Получилось наконец-таки выгрузить в XML. Получились двоичные данные.
    Интересно узнать, в каком формате хранятся фотки в 1С?
    Как их можно использовать, посмотреть в графическом редакторе?
  7. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.175
    Симпатии:
    13
    Баллы:
    29
    в двоичных данных.
    можно сохранить в файл и потом смотреть любым редактором.
  8. TopicStarter Overlay
    defragmentator
    Offline

    defragmentator

    Регистрация:
    15 авг 2012
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Проблема решена путем написания внешней программы на C#, которая расшифровывает кодировку Base64Строка

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