Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Внешние источники данных.

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

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

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

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

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

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

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

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

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.