Имеется база данных на SQL. Администратор базы данных написал функцию генерирующую xml, мне сообщили, что надо передать в функцию 2 параметра - дата начала и дата окончания, а функция вернёт xml, который нужно обработать. Я не получал ранее файлы от SQL и, соответственно не работал с данным механизмом. Соответственно протестировал 2 варианта решения, по которым возникли вопросы.
1) создал внешний источник данных, к нему замечательно подключаюсь из конфигуратора и предприятия, все таблицы вижу. Создал функцию

При попытке выполнить функцию

```1c
    Результат = ВнешнийИсточникДанных.dbo_procOrderGetXML(ДатаНачала, ДатаОкончания);
```

Получаю ошибку
[Microsoft][ODBC SQL Server Driver][SQL Server]Не удалось найти столбец "dbo", определяемую пользователем функцию или агрегатную функцию "dbo.procOrderGetXML". Также возможно, имя является неоднозначным

2) выполняю функцию через ADODB.Connection и ADODB.Command
Получаю результат в виде Com объекта

Что с ним делать то? Мне бы получить двоичные данные или строку для дальнейшего сохранения
---
Fields(0).Value = Null значит запрос пустой. Я уже говорил, что смоделировал Вашу ситуацию и все прекрасно работает

```1c
    Command.CommandText ="[dbo].[procOrderGetXML]";
    Command.CommandType = 4;
    Command.ActiveConnection = Connection;
    //Параметры
    param = Command.CreateParameter("dateB", 135, 1, , ДатаНачала);
    Command.Parameters.Append(param);

    param = Command.CreateParameter("dateE", 135, 1, , ДатаОкончания);
    Command.Parameters.Append(param);
    rs = Command.Execute();
    If RS.Fields.count and Not RS.Fields(0).Value = Null Then
    ТелоXMLСтрокой = "<?xml version="1.0" encoding="UTF-8"?>"
    + Символы.ПС
    +"<File>"
    + Символы.ПС
    + RS.Fields(0).Value
    + Символы.ПС
    +"</File>";
    Возврат (ТелоXMLСтрокой);
    endif;
```

ЧтениеXML читает
ФабрикаXDTO сериализует
---
Если выполнял через ADODB.Command, то результат тебе вернуло в ADODB.RecordSet
Как его обходить - легко гуглится.
Но насколько я понял, фишка в том, что у тебя не стандартная хранимка, возвращающая набор строк, а именно функция MSSQL, возвращающая тип xml. В такой комбинации я не пробовал. Если стандартный обход RecordSet'а результата не принесет - я бы погуглил на западных форумах и MSDN.
---
может проще из SQL выгрузить данные в xml-файл и загрузить в 1С?
---
Они в xml и выгружаются. Мне этот xml надо получить из com объекта.
(4) написал такую команду, но ругается "Не удалось найти столбец dbo, определяемую пользователем функцию или агрегатную функцию.
Написал следующий скрипт, используя MS SQL Management Studio:

```1c
    Command.CommandText ="
    |USE [BaseName]
    |DECLARE @return_value int
    |EXEC @return_value = [dbo].[procOrderGetXML]
    |@DateB = N'01.10.2016',
    |@DateE = N'25.10.2016'
    |SELECT 'Return Value' = @return_value
```

Код выполнился, что-то вернулось, условие RS.Fields.count сработало
Далее непонятка:

```1c
    Возврат RS.Fields( 0).Value
```

А там NULL
В Fields вот такая штука содержится:

Процедура в SQL
---
Так вроде функция должна возвращать bynary, у Вас @Return_value int - число
---
Так у Вас хранимая процедура. Тогда так

```1c
    Command.CommandText ="dbo.procOrderGetXML";
    Command.CommandType = 4; //обязательно
    Command.ActiveConnection = Connection;
    //Параметры
    param = Command.CreateParameter("dateB", 7, 1, , ДатаНачала); //7 - тип DateTime, Тип параметра - входящий
    Command.Parameters.Append(param);

    param = Command.CreateParameter("dateE", 7, 1, , ДатаОкончания);
    Command.Parameters.Append(param);

    rs = Command.Execute();
```
---
После Command.Execute() вылезла ошибка

```1c
    [ODBC SQL Server Driver]Дополнительная функция не реализована
```
---
Из принципа смоделировал - работает(16), правда на последней версии сыкуля на клиенте вынь 10
---
Может администратор SQL что-то недонастроил, я со стороны SQL слабо владею навыками программирования. Может и версия старее. Google натолкнул на статью про эту ошибку: https://support.microsoft.com/ru-ru/kb/214459
Это обусловлено тем, что SQL Server не поддерживает тип данных adDBDate. Чтобы устранить эту проблему, измените тип данных параметра @ theDate на adDBTimeStamp. Видимо тип параметра надо другой попробовать. Сейчас почитаю про типы
---
Скорее дело в версии драйвера odbc, а с админами надо дружить. Обидятся - зарубят вижал студио.
Константа adDBTimeStamp это 135
А можно попробовать и
Declare @DataB datetaime
Declare @DataE datetaime
Set @DataB = Cast('01.01.2016' as datetime)
Set @DataE = Cast('12.31.2016' as datetime)
EXEC procOrderGetXML(@DataB,@DataE)

Но без CreateParameter, а то ADO ругаться будет
 и возможно CommandType равно 1 или 8
---
Заменил тип на 135, процедура отработала, возможно успешно, как и некоторые другие варианты. Как теперь из COMОбъекта получить XML?
---
Fields(0).Value = Null значит запрос пустой. Я уже говорил, что смоделировал Вашу ситуацию и все прекрасно работает

```1c
    Command.CommandText ="[dbo].[procOrderGetXML]";
    Command.CommandType = 4;
    Command.ActiveConnection = Connection;
    //Параметры
    param = Command.CreateParameter("dateB", 135, 1, , ДатаНачала);
    Command.Parameters.Append(param);

    param = Command.CreateParameter("dateE", 135, 1, , ДатаОкончания);
    Command.Parameters.Append(param);
    rs = Command.Execute();
    If RS.Fields.count and Not RS.Fields(0).Value = Null Then
    ТелоXMLСтрокой = "<?xml version="1.0" encoding="UTF-8"?>"
    + Символы.ПС
    +"<File>"
    + Символы.ПС
    + RS.Fields(0).Value
    + Символы.ПС
    +"</File>";
    Возврат (ТелоXMLСтрокой);
    endif;
```

ЧтениеXML читает
ФабрикаXDTO сериализует
---
(24) Косяк был похоже у меня, а я на него не обращал внимания. Изначальный код подключения к базе SQL и ввода команды копировал с сайта какого-то, а там была строка Command.CommandTimeout = 100; Как я понимаю до конца формирования xml, отваливалось соединение. Сейчас увидел заветный xml, но единственное, что я пока не понял это то, что после считывания один раз в отладчике поля Fields(0).Value, а может и по другой причине, например по таймауту, Value заNULLяется. Пришлось убрать проверку, что Value <> NULL потому что после проверки уже NULL.

PS: Код из (23) наиболее правильный и работоспособный.
---
Проверка все равно нужна.
В Вашем случае на тип строка
---
Извращаться не обязательно.
MSSQL принимает даты строковыми литералами вида yyyymmdd, не завязанном на региональные настройки.
---
Работает

```1c
    &НаСервереБезКонтекста
    Функция ВыполнитьЗапросSQL(ДатаНачала,ДатаОкончания)
    Попытка
    Сервер = "Мой сервер";
    База = "Моя база";
    Пользователь = "Пользователь";
    Пароль = "Пароль";
    СтрокаСоединения = "Provider=SQLOLEDB.1;
    |Persist Security Info=False;
    |User ID=" +Пользователь+";
    |Password=" + Пароль+";
    |Initial Catalog=" + База+";
    |Data Source=" + Сервер;

    Connection = Новый COMОбъект("ADODB.Connection");
    Connection.Open(СтрокаСоединения);
    Исключение
    Возврат Неопределено;
    КонецПопытки;
    Command = Новый COMОбъект("ADODB.Command");
    Command.CommandTimeout = 100;
    Command.CommandText ="select dbo.procOrderGetXML(cast('"
    +Формат(ДатаНачала,"ДФ='yyyy-MM-dd hh:mm:ss'")
    +"' as datetime), cast('"
    +Формат(ДатаОкончания,"ДФ='yyyy-MM-dd hh:mm:ss'")
    +"' as datetime))";
    Command.CommandType = 1;
    Command.ActiveConnection = Connection;
    rs = Command.Execute();
    If RS.Fields.count Then
    Возврат RS.Fields(0).Value;
    endif;
    Возврат Неопределено;
    КонецФункции
```
---
Попробуй убрать последнюю строку в CommandText
|SELECT 'Return Value' = @return_value
Что будет в рекордсете?
---
Походу тоже самое:

(7) И так NULL
---
И в EXEC @return_value = [dbo].[procOrderGetXML] надо убрать @return_value =
---
Что в MS SQL Management Studio возвращает
USE [BaseName]
EXEC [dbo].[procOrderGetXML] '01.10.2016', '25.10.2016'
---
XMLку

Внутри:

(10) Такой запрос Management Studio сформировал по кнопке "Выполнить хранимую процедуру". В ответах ниже уже убрали @Return_value, всё равно результат неудовлетворительный. Мне бы действительно двоичные данные вместо COM объекта бы получить, дальше бы я разобрался =)
---
В MS SQL Management Studio, создай новый запрос SQL в нем выполни запрос
USE [BaseName]
EXEC [dbo].[procOrderGetXML] '01.10.2016', '25.10.2016'
Возможно нужно будет изменить формат даты на '2016/10/01'
Что в результате?

Только из комобъекта ты сможешь получить, то что нужно.
---
Получен XML (на скриншоте в окне "Результаты")
---
может как-то поможет https://habrahabr.ru/post/96145/ и https://habrahabr.ru/post/217649/.
---
Спасибо, конечно, но это всё кодинг на стороне SQL, который в моём случае делает администратор базы данных, меня же больше интересует получение этих данных на стороне 1С, то есть вытягивание xml файла из COM объекта, в котором возможно он уже присутствует.
---
Попробуй, как предлагали выше, с форматом даты
Command.CommandText ="
|USE [BaseName]
|EXEC [dbo].[procOrderGetXML] '20161001','20161025'"