Имя: Пароль:
1C
1С v8
Внешние источники данных.
0 ДенисЧ
 
05.12.20
14:38
Есть база. В ней настроен внешний источник к МССКЛ.
Введены общие настройки.
В обработке в интерактиве уходим на сервер (ессно) и всё читается.
Попробовал запихнуть вызов в ДлительныеОперации - получаю ошибку авторизации.

В чём разница?
1 Garykom
 
гуру
05.12.20
14:45
(0) Лично я отказался от этих глючных внешних источников в 1С и стал юзать свою прокладку на го
2 ДенисЧ
 
05.12.20
14:47
(1) Ваше мнение очень ценно, спасибо.

Если бы была моя воля - я бы использовал АДО.
3 organizm
 
05.12.20
15:54
у тебя наверно с сервера подключение идет, а там не все так просто.
4 ДенисЧ
 
05.12.20
15:55
(3) @в интерактиве уходим на сервер@
Учу читать (хотя бы начальный пост)...
5 kumena
 
05.12.20
16:06
> опробовал запихнуть вызов в ДлительныеОперации - получаю ошибку авторизации.

"получаю ошибку авторизации."
ну логично же, что общие настройки там не действуют и надо к источнику программно подключиться.
6 ДенисЧ
 
05.12.20
16:15
(5) Почему логично? Заданы общие настройки, под конкретного пользователя ничего не прописывалось
В чём отличие форменного серверного вызова от серверного вызова в фоновом задании?
7 kumena
 
05.12.20
16:28
> Почему логично?

ну потому что об этом факте говорит программа, в одном случае подключается, а в другом выдает ошибку авторизации.

> отличие форменного серверного вызова от серверного вызова в фоновом задании?
Я не знаю, но видимо в вашем (или общем) случае есть, раз поведение разное. Но у нас кажется подключение с общих настроек работало.
8 kumena
 
05.12.20
16:30
В любом случае ошибку авторизации надо лечить правильной авторизацией, так что лучше прописать настройки подключения.
9 Garykom
 
гуру
05.12.20
16:32
Интересно а регламентные/фоновые от какого пользователя 1С запускаются?
В смысле когда фоновое запускаем из интерактивного сеанса то понятно, а если по расписанию на сервере?
Не пользователь операционки (тут понятно от кого сервер 1С запущен) а пользователь 1С.
10 ДенисЧ
 
05.12.20
16:32
А вот где их прописать, кроме как в общих? Чтобы фоновое подхватило? А то мне потом это удовольствие в регламент пихать.
Попробую конкретно мне ещё прописать... Хотя...
11 ДенисЧ
 
05.12.20
16:32
(9) Фоновые в длительных - от того, кто их запустил, регламенты - от того, кто прописан в настройках
12 Garykom
 
гуру
05.12.20
16:33
(11) проверить можешь?
13 ДенисЧ
 
05.12.20
16:34
(12) Ну регламенты - точно от того, кто прописан. Он появляется в активных пользователях и ЖР.
Фоновые пользовательские - тоже.
14 kumena
 
05.12.20
20:12
> А вот где их прописать, кроме как в общих? Чтобы фоновое подхватило?

Перед началом запроса к внешнему источнику, у меня так работает.

&НаСервере
Функция ВыполнитьОбновление(ПараметрыОбновления) Экспорт
    
    Ответ = ПодключитьВнешнийИсточник();
    Если Ответ.Результат Тогда
        Выполнить("Ответ = Обновить" + ПараметрыОбновления.ТаблицаДанных +"(Ответ)");
    КонецЕсли;
    
    Возврат Ответ;
    
КонецФункции    

&НаСервере
Функция ПодключитьВнешнийИсточник()
    
    СтруктураОтвета = Новый Структура("Результат, ТекстОшибки, Текст");
    
    Попытка
        
        Выборка = ПолучитьДанныеПодключения();
        ПараметрыСоединения = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
        ПараметрыСоединения.СтрокаСоединения = ПолучитьСтрокуПодключения(Выборка);
        ПараметрыСоединения.АутентификацияОС = Ложь;
        ПараметрыСоединения.ИмяПользователя = Выборка.UID;
        ПараметрыСоединения.Пароль = Выборка.PWD;
        ПараметрыСоединения.СУБД = "MSSQLServer";
        ВнешнийИсточник = ВнешниеИсточникиДанных.ВнешниеДанные;
        ВнешнийИсточник.УстановитьПараметрыСоединенияСеанса(ПараметрыСоединения);
        ВнешнийИсточник.УстановитьСоединение();    
        
        СтруктураОтвета.Результат = Истина;
        Возврат СтруктураОтвета;
        
    Исключение
        
        СтруктураОтвета.Результат = Ложь;
        СтруктураОтвета.ТекстОшибки = "Не удалось выполнить подключение,
                                      |Проверьте настройки подключения!";
        Возврат СтруктураОтвета;
        
    КонецПопытки;    
    
КонецФункции    

&НаСервере
Функция ПолучитьСтрокуПодключения(Данные)
    
    SERVER = СокрЛП(Данные.SERVER);
    UID = СокрЛП(Данные.UID);
    PWD = СокрЛП(Данные.PWD);
    DATABASE = СокрЛП(Данные.DATABASE);
    
    Возврат
    "DRIVER={SQL Server};"
    +"SERVER="+SERVER+";"
    +"UID="+UID+";"
    +"PWD="+PWD+";"
    +"DATABASE="+DATABASE+";"
    +"LANGUAGE=Русский";

КонецФункции
15 kumena
 
05.12.20
20:15
+14, если обновление запускает обработка, то текст ошибки уходит на клиента, задание - то в журнал.
16 ДенисЧ
 
05.12.20
20:23
(14) У меня нет явного подключения. И вообще - в явном виде пароль в коде хранить моветон
17 kumena
 
06.12.20
11:33
> И вообще - в явном виде пароль в коде хранить моветон

а в явном виде он у меня дальше модуля внешних данных и не уходит, а сама таблица регистра с настройками пользователям не доступна, а тем, кому она по правам доступна - они этот пароль должны знать.
можно и так хранить, https://its.1c.ru/db/v8std/content/740/hdoc
но я считаю, что в данном случае такая секретность только мешать будет.

я сейчас вспомнил, была ситуация с одной базой, там были подключены внешние таблицы, и все прекрасно работало с общими настройками, как у вас.
но когда я туда внедрил бсп, а потом, уже позднее надо было сделать обработку данных с учетом внешних данных, и я захотел это сделать как это делается в типовых (что бы ничего не забыть) - меняется релиз и срабатывают процедуры обновления, так вот, если память не изменяет, у меня тоже была ошибка авторизации, хотя если тот же код был просто в обработке, которую запускал я - то она работала! В итоге, я не стал терять время и разбираться, а просто при обновлении рабочей базы сделал все обработкой.

Видимо это похожий случай, так что если разберешься в чем причина - напиши!
Исходя из того опыта позднее написал эту функцию для подключения, с ней работает без проблем, но на той базе не пробовал, т.к. ей теперь не занимаюсь.