1C 8.3.9.2033. Сервер 1С и Сервер SQL находятся по разным ip адресам в одной сети.

Задача: Необходимо записывать в стороннюю БД (MS SQL) сканы(pdf, img и т.д.).

Проблема в том, что если файл PDF находится в общем каталоге с доступом для всех пользователей, все отлично работает.
Но как только меняется путь к файлу, например, на каталог временных файлов, 1С выдает ошибку: Ошибка при вызове метода контекста (Execute) RecordSet = Command.Execute(); по причине: Произошла исключительная ситуация (0x80040e14)

Код:

```1c
    &НаСервере
    Процедура ОКНаСервере(ДД)
    Если Ложь Тогда ДД = Новый ДвоичныеДанные(Путь); КонецЕсли;

    АдресСервера = "АдресСервера";
    ИмяБД = "ИмяБД";
    Логин = "login";
    Пароль = "password";

    Connection = Новый COMОбъект("ADODB.Connection");
    СтрокаПодключения = "Provider=SQLOLEDB; Data Source="
    + СокрЛП(АдресСервера)
    + ";Initial Catalog="
    + ИмяБД
    + ";Persist Security Info=True;User ID="
    + Логин
    + ";Password="
    + Пароль;
    Connection.Open(СтрокаПодключения);

    //ПутьКФайлу = ПолучитьИмяВременногоФайла("pdf"); // Так не работает
    ПутьКФайлу = "\\общий каталог с доступом для всех пользователей"; // Так работает
    ДД.Записать(ПутьКФайлу);

    ИмяФайла = "ИмяФайла.pdf";

    ОписаниеФайла = "Аналитический лист № 245 от 21.06.2021, Название номенклатуры, серия номенклатуры";

    ID = "3323";

    sqlЗапрос = "
    |UPD ATE [Files]
    |set
    |[File] = (SEL ECT * FR OM OPENROWSET (BULK '" + ПутьКФайлу + "', SINGLE_BLOB) filepdf (rowlock)), // File - тип в SQL varbinary(max)
    |[FileName] = '" + ИмяФайла + "',
    |[FileDescription] = '" + ОписаниеФайла + "'
    |where [ID] = '" + ID + "'";

    Command = Новый COMОбъект("ADODB.Command");
    Command.ActiveConnection = Connection;
    Command.CommandType = 1;
    Command.CommandText = sqlЗапрос;

    RecordSet = Новый COMОбъект("ADODB.RecordSet");
    RecordSet = Command.Execute(); // Ошибка выходит тут

    RecordSet.close();
    Command.close();
    КонецПроцедуры
```

Помогите разобраться в чем дело? От имени какого пользователя выполняется SQL запрос и на какой виртуальной машине?
---
понимаете, что sql запрос выполняется на машине sql-сервера. А ПолучитьИмяВременногоФайла("pdf") это локальный путь к файлу на другой машине. Соответственно sql- сервер не видит этот файл и не понимает что происходит.
---
```1c
    //ПутьКФайлу = ПолучитьИмяВременногоФайла("pdf"); // Так не работает
    ПутьКФайлу = "\\общий каталог с доступом для всех пользователей"; // Так работает
```

Если АдресСервера не равен адресу сервера 1С, то все правильно. На сервере с адресом АдресСервера нет локального файла. Поэтому пишите в общую папку, а потом запускайте свой скрипт.

С другой стороны, 1С умеет уже писать во внешние источники. Подцепить таблицу, в которую Вы пишите, как внешний источник данных, укажите доя него поле ключа ID, и, пожалуйста, записывайте туда файл из временной папки на сервере 1С.
---
От имени какого пользователя выполняется SQL запрос и на какой виртуальной машине? как это трактовать? какие параметры юзера и сервера указаны от имени тех и выполняется, странно поставленный вопрос.

У тебя же здесь прописано.

АдресСервера = "АдресСервера";
    ИмяБД = "ИмяБД";
    Логин = "login";
    Пароль = "password";
---
Да, да. Я понимаю что выполняется запрос по логину и паролю SQL, базы. И по идее все должно выполнятся на сервере 1С под локальным пользователем windows USR1CV8. НО я писал "Далее когда создается COM и выполняется SQL запрос, этот запрос выполняется где то в другом месте". Поэтому возникло подозрении, что какой то другой пользователь windows выполняет запрос.
---
понимаете, что sql запрос выполняется на машине sql-сервера. А ПолучитьИмяВременногоФайла("pdf") это локальный путь к файлу на другой машине. Соответственно sql- сервер не видит этот файл и не понимает что происходит.
---
Помогите разобраться в чем дело? От имени какого пользователя выполняется SQL запрос и на какой виртуальной машине?

Вопрос к ВАШИМ сисадминам! пусть настраивают доступ к служебной папке с нужными документами именно со стороны Сервера 1С
и для пользователя который выполняет эту команду, помещения файлов.
---
Не совсем понял, что именно сисадмин должен настроить? Файл попадает на сервер 1С от пользователя, который эту команду выполняет в каталог C:\Users\Администратор\AppData\Local\Temp\ под пользователем USR1CV8. Далее когда создается COM и выполняется SQL запрос, этот запрос выполняется где то в другом месте.
---
кэп C:\Users\USR1CV8\AppData\Local\Temp\
---
```1c
    //ПутьКФайлу = ПолучитьИмяВременногоФайла("pdf"); // Так не работает
    ПутьКФайлу = "\\общий каталог с доступом для всех пользователей"; // Так работает
```

Если АдресСервера не равен адресу сервера 1С, то все правильно. На сервере с адресом АдресСервера нет локального файла. Поэтому пишите в общую папку, а потом запускайте свой скрипт.

С другой стороны, 1С умеет уже писать во внешние источники. Подцепить таблицу, в которую Вы пишите, как внешний источник данных, укажите доя него поле ключа ID, и, пожалуйста, записывайте туда файл из временной папки на сервере 1С.
---
Спасибо. Первый сценарий конечно предпочтительней, т.к. в 1С-ке уже куча таких запросов есть и не хотелось бы всех переписывать. Тут остается вопрос сисадмину, скорее всего, по предоставлению доступа к общей папке, "к какому пользователю давать доступ?" .