1с внешний источник данных ошибка

1С 8.3.10.2561

Есть скульная база 8ки, клиенты работают на винде, сервер крутится на линуксе (база скуль на Postgre). С помощью внешних источников данных (для того, чтобы они работали, на линуксовом сервере был установлен драйвер MSSQL) в базу 8ки было добавлено несколько таблиц. Таблицы эти созданы из 1С 7.7 (собственно загрузка данных происходит из базы 7ки). База 7ки крутится на ms sql.

Сначала, для загрузки данных, подключался к тестовой базе 7ки, в которую недавно были внесены изменения — добавлено несколько справочников (таблиц). При выполнении запросов ко всем необходимым таблицам тестовой базы проблем не было. Затем изменения были перенесены на рабочую базу 7ки. И тут начались проблемы.

Есть старые таблицы, которые были созданы в 7ке если не с самого начала, то уже точно давно (справочники контрагенты, сотрудники и еще один по-свежее, но тоже старый). А есть новые таблицы, которые были добавлены как раз после последнего обновления.

Так вот, при выполнении запросов через внешние источники данных к старым таблицам проблем нет, а вот при выполнении запросов к новым таблицам получаем ошибку

{ВнешняяОбработка.АСТ_ЗагрузкаКурьерскихЗаявок.МодульОбъекта(200)}: Ошибка при вызове метода контекста (ВыполнитьПакет)

        ПакетЗапроса = Запрос.ВыполнитьПакет();

по причине:

Ошибка выполнения запроса

по причине:

Ошибка внешней базы данных:

ошибка при выполнении запроса

по причине:

Ошибка ODBC. SQLSTATE: 42S02

Номер ошибки: 208

Описание: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]54>?CAB8<>5 8<O >1J5:B0 «dbo.SC41573».

И так со всеми новыми таблицами. Причем это только при обращении с сервера (линуксового). Если обращаться с клиента (через COM-объект), то проблем нет. Так же, как и в конфигураторе при добавлении новых таблиц через ВИД все таблицы доступны.

Перезагружали линуксовый сервак, добавляли таблицы заново, чистили пользовательский кэш на винде — не помогло. Права на таблицы везде одинаковые.

Подскажите, в чем причина и как ее победить?

 
ВИД (внешние источники данных) в 1С – это объекты конфигурации, позволяющие использовать информацию из внешних ODBC-источников (баз данных), не основанных на 1С:Предприятии, внутри прикладного решения так же, как будто бы она хранится в самой информационной базе.

В качестве ODBC-драйвера был выбран пакет FreeODBC, т.к. он бесплатный и его везде используют.

В процессе гугления использовались источники:

  • Внешние источники данных на Linux-серверах 1С
  • Настройка доступа к базе 1С на MSSQL из под Linux
  • Настройка доступа к Microsoft SQL Server через ODBC. Ubuntu 12.04
  • Пример интеграции базы 1С и внешней СУБД (хорошая статья)
  • Подробное описание работы с ВИД (да и вообще хороший блог о работе с 1С)
  • Программное добавление, изменение, удаление (примеры)
  • Запись во внешний источник данных из 1С 8.3 (используя хранимые процедуры MS SQL Server)
  • Запись во внешние источники данных в «1С:Предприятие 8» (используя хранимые процедуры MS SQL Server)

Установка

Достаточно установить пакет tdsodbc (разрядность должна совпадать с сервером 1С!):

(дополнительно установятся: libodbc1 odbcinst odbcinst1debian2)

$ apt install tdsodbc:i386

В файл odbcinst.ini добавить (если не добавилось автоматически) секцию для FreeTDS:

$ nano /etc/odbcinst.ini

[FreeTDS]

Description = FreeTDS

Driver = <путь_к_либам>/libtdsodbc.so

Setup = <путь_к_либам>/libtdsS.so

FileUsage = 1

UsageCount = 1

, где <путь_к_либам_tdsodbc>:

  • Для 32-битного пакета: /usr/lib/i386-linux-gnu/odbc
  • Для 64-битного пакета: /usr/lib/x86_64-linux-gnu/odbc

Если этого не сделать, или поставить пакет не той же разрядности, что сервер 1С, то будет ошибка:
[unixODBC][Driver Manager]Can't open lib 'FreeTDS' : file not found

А вот такая ошибка будет, если неверно указали путь к либам:
/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so file not found

При нажатии на кнопку “…” конфигурация выдаст последний вскрик в виде окошка с ошибкой и благополучно покрашится. Что это за НЛО непонятно, но на нашем серваке оно поселилось, видать, надолго:

"Ошибка аутентификации клиента 1cv8 средствми операционной системы: Аутентификационный контекст клиента отсутствует в рабочем процессе"

Как я понял, поключаться и работать с ВИД можно двумя способами:
1) Подключаться программно.
Пример:
(Спасибо caponid за инфу о поле СУБД):

Соед = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;

Соед.СтрокаСоединения = «Строка_соединения»;

Соед.АутентификацияОС = Ложь;

Соед.ИмяПользователя = Пользователь;

Соед.Пароль = Пароль;

Соед.СУБД = «MSSQLServer»; //Явно указываем, потому что тот тип, что указали в строке соединения, игнорируется;

Источник = ВнешниеИсточникиДанных[«НазваниеИсточника»];

Источник.УстановитьПараметрыСоединенияСеанса(Соед);

Источник.УстановитьСоединение();

Но тут у меня не получилось запихнуть проинициализированный объект ВИД в запрос:

Запрос.Текст =

«ВЫБРАТЬ

| Источник.Поле

|ИЗ

| &ВИД КАК Источник

;

Запрос.Параметры.Вставить(«ВИД», ВИД);

2) Использовать механизм подключения в режиме Предприятия. Параметры подключения хранятся тут:
РегистрСведений.НастройкиПодключенияКВнешнемуИсточникуДанных
или
Все функции -> Стандартные -> Управление внешними источниками данных

Строка подключения выглядит так:
"Driver={FreeTDS}; Server=SERVER,1433; Database=BASE; User Id=USER; Password=PASS;"
Пользователя и пароль я запихивал в отдельные поля.

Если в режиме предприятия будут отсутствовать параметры подключения к внешнему источнику данных, то будет ошибка:
"[unixODBC][Driver Manager]Data source name not found, and no default driver specified"

Названия Таблиц и полей в конфигураторе могут быть какими угодно, а вот к полям “Имя в источнике данных” нужно присмотреться внимательнее. Если в именах полей БД MS SQL есть, к примеру, символ “_”, то будет вот такая ошибочка:
"[FreeTDS][SQL Server]Incorrect syntax near 't_ticket_id'"

Спасибо master1c8.ru, выручил!

“Если значение, находящееся в свойстве Имя в источнике данных заключено в одинарные кавычки, то в SQL-запрос к базе данных это значение попадает без преобразований, вне зависимости от состава символов.”

Т.е. названия таблиц и полей MS SQL в поле “Имя в источнике данных” нужно указать в одинарных кавычках.

Дату нужно форматировать перед добавлением, например, так:

Формат(ТекущаяДата(), «ДФ=’yyyy-MM-dd HH:mm:ss'»)

Иначе будет:

"[FreeTDS][SQL Server]Conversion failed when converting date and/or time from character string."

Для добавления новых записей поле идентификатора с автоинкременом нужно установить в “Только чтение”, иначе будет:

"[FreeTDS][SQL Server]Cannot insert explicit value for identity column in table 't_logs' when IDENTITY_INSERT is set to OFF."

При добавлении таблицы с помощью помощника, поля с внешними ключами (foreign_key) будут по-умолчанию устанавливаться в тип объекта, а не Число. Мне это небыло нужно, поэтому вручную менял тип.

Нужно быть внимательным с поиском записи с помощью функции НайтиПоПолю(). Значение должно совпадать с типом поля в таблице. Например, строку перегонять в число:

НайтиПоПолю(«поле», Число(ЗначениеДляПоискаСтрока));

По поводу поиска вхождений записей в список значений в запросе:

table.id В(&СписокЗаявки) – не прокатит (СписокЗаявки – это СписокЗначений со значениями – строками, а id – число)

table.id В(«+СтрокаЗаявки+») – прокатит (СтрокаЗаявки – строка со значениями через запятую)
Сейчас пишу и не понимаю почему не попробовал значения списка СписокЗаявки привести к численному типу, но проверять уже лень.

Чтобы не выводить таблицы в командный интерфейс раздела (подсистемы) в свойствах таблицы нужно убрать галку “Использовать стандартные команды“.


Что не получилось

Не получилось сделать поля выбора (а-ля combobox) с выпадающим списком значений из ВИД. Ставишь реквизиту формы тип таблицы ВИД, переносишь его на форму. Все ок, элемент (контрол) создается, но не отображается. Заморачиваться не стал, вводил вручную id-шники записи, этого было достаточно.

Выполнить хранимую процедуру. До этого хранимыми процедурами в БД не пользовался, хотя хорошая вещь.
Но как ни крутил я этот функционал в конфигураторе, ничего не вышло (а тут и тут работало).
Какие были ошибки…:
1) <Выражение в источнике данных>
2) <Ошибка>

1) FuncName
2) [FreeTDS][SQL Server]Invalid column name 'FuncName'.

1) dbo.FuncName
2) [FreeTDS][SQL Server]Cannot find either column "dbo" or the user-defined function or aggregate "dbo.FuncName", or the name is ambiguous.

1) SELECT <FuncName>
2) [FreeTDS][SQL Server]Incorrect syntax near the keyword 'SELECT'.

1) EXECUTE <FuncName>
2) [FreeTDS][SQL Server]Incorrect syntax near the keyword 'EXECUTE'.

1) * from dbo.FuncName()
2) Обращение к процедуре объекта как к функции (FuncName)

Так же не решился вопрос с кириллицей. А точнее, при создании записей из 1С в MS SQL текст на русском языке превращался в кракозябры, например:

" 0:@KB85 70O2:8 87 1!, ID=[3037]"

Параметры сортировки базы: Cyrillic_General_CI_AS.
Что пытался сделать:
1) настроить FreeTDS, всунув в его конфиг параметр charset в секцию [global]:

$ nano /etc/freetds/freetds.conf

client charset = UTF8

2) добавить параметр charset в строку подключения:
"Driver={FreeTDS}; Server=SERVER,1433; Database=BASE; charset=UTF8;"

Не получилось. Еще есть вариант 3:
3) сменить API ODBC
Но придется делать все заново. Поэтому, ограничился записью текста на инглише.


Нужно больше прав!!!

При нехватке прав при выполнении запроса к таблицам ВИД будет ошибка:
Ошибка при вызове метода контекста (Выполнить): Недостаточно прав для работы с таблицей "ВнешнийИсточникДанных.БДTickets.Таблица.<TableName>"
Нужно добавить права:
На ВИД: Использование
На таблицы в запросе: Чтение

 

Для выполнения функции
<ТаблицаВИД>.НайтиПоПолю() нужно добавить права (иначе “Нарушение прав доступа!”):

На ВИД: Использование
На таблицы в запросе: Чтение, Изменение

Для функции
<ТаблицаВИД>.СоздатьОбъект() соответсвенно: Использование, Чтение и Добавление.

Кстати, стандартная роль “Запуск внешнего соединения” не понадобилась, для меня осталось загадкой ее назначение (разобраться не пытался).


Просмотров:
9 656

16.05.2017

В новой редакции платформы 1С 8.2.14 появилась возможность устанавливать связь с внешними источниками данных. У меня была идея написать программу для прямой работы с базой данных на нашем сайте из 1С:Предприятия 8

В новой редакции платформы 1С 8.2.14 появилась возможность устанавливать связь с внешними источниками данных. У меня была идея написать программу для прямой работы с базой данных на нашем сайте из 1С:Предприятия 8 

По шагам надо сделать следующее: 

  • Скачать и установить ODBC драйвер для mysql 
  • Настроить доступ и параметры связи с базой данных 
  • Прописать необходимые таблицы в конфигураторе 
  • Написать обработку которая будет соединяться с базой данных из 1С:Предприятия 8 и выдавать результат запроса. 

Поехали… 

1. Скачиваем ODBC коннектор с сайта поставщика mysql
2. Устанавливаем его на компьютер. 
3. Заходим в конфигуратор 1С и добавляем новый внешний источник данных. 

 

4. Добавляем внешнюю таблицу: 

 

5. Указываем режим автоматического формирования списка таблиц 

 

6. Указываем параметры соединения. Пишем руками: 

Цитата

DRIVER={MySQL ODBC 5.1 Driver}; 
SERVER=192.168.1.10; 
DATABASE=bitrix;

и вбиваем логин и пароль для доступа к базе mysql 

7. Если все ок, то мы увидим список таблиц из базы данных сайта. 

 

8. Выбираем нужную таблицу галочкой 

 

9. И получаем ее в дереве метаданных. 

 

10. Создаем обработку для тестирования с одной процедурой: 

ПараметрыСоединенияССайтомМИКО = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
ПараметрыСоединенияССайтомМИКО.СтрокаСоединения= "
|DRIVER={MySQL ODBC 5.1 Driver};
|SERVER=192.168.1.10;
|DATABASE=bitrix;
|UID=root;
|PWD=dbpassword_4_user_root;";
ВнешниеИсточникиДанных.СайтМИКО.УстановитьОбщиеПараметрыСоединения(ПараметрыСоединенияССайтомМИКО);
ВнешниеИсточникиДанных.СайтМИКО.УстановитьСоединение();
Запрос = Новый Запрос("ВЫБРАТЬ
                      |   b_stat_browser.Ссылка,
                      |   b_stat_browser.ID,
                      |   b_stat_browser.USER_AGENT
                      |ИЗ
                      |   ВнешнийИсточникДанных.СайтМИКО.Таблица.b_stat_browser КАК b_stat_browser");
Таблица = Запрос.Выполнить().Выгрузить();

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

11. Ставим точку останова на конец процедуры и запускаем обработку в режиме предприятия. 

12. Profit smile:) 

 

p.s. мы получили данные из внешней таблицы mysql средствами языка 1С. Что самое интересное, внешние таблицы доступны в конструкторе запроса. 

upd: как можно изменять данные через ODBC я написал в этом посте.

Описание ошибки

Во внешнем источнике данных для реквизита указан тип string с длиной -1.
Если импортировать такую конфигурацию в EDT, то при импорте выводится ошибка вида:

Ошибка импорта файла "ExternalDataSources\СКРИПТ\Tables\arstore_player.xml"
недопустимое значение "4294967295" в: /MetaDataObject/Table/ChildObjects/Field[12]/Properties/Type/StringQualifiers/Length

Как воспроизвести

Завести в Конфигураторе внешний источник данных, у которого реквизит с типом String и длиной -1.

Скриншоты

No response

Ожидаемое поведение

Ожидаю, что внешний источник данных импортируется без ошибок.

Лог рабочей области

log.txt

Версия 1С:EDT

2021.3.4

Операционная система

Windows

Установленные плагины

1C:Code style V8, 1C:SSL-support, 1C:Language Tool

Дополнительная информация

No response

Для курсача надо подключить 1с предприятие к mysql базе данных. Запилил с MySQL БД, установил 64хбитный ODBC с драйвером MySQL ODBC 8.0 ANSI Driver. В управлении ODBC без каких-либо проблем подключился к своей БД. Потом отправился в 1С предприятие версии 8.3.13.1690 х64. Там в конфигураторе через «внешние источники данных» пытаюсь подключить свою базу. Однако по кд приходит ошибка:
«Источник данных не найден и не указан драйвер, используемый по умолчанию». Строка подключения выглядит так:

DRIVER={MySQL ODBC ANSI 8.0 Driver};
SERVER=localhost;(так же пробовал ;;1; и ..1. - так у меня выглядит адрес локалхоста из-за экспериментов с доменом. )
DATABASE=Study;

Так же пытался использовать конструктор строки соединения для того же драйвера, но получил ошибку «Ошибка получения параметров строки соединения. Возможно, драйвер не позволяет получать параметры строки подключения».

Несмотря на то, что формулировки ошибок выглядят понятными. никакие эксперименты с настройками ни к чему не привели, попытки гуглить показали лишь что ошибка частая, но решается это просто отказом от ODBC в большинстве случаев. Прошу подсказать, в чём может быть проблема, или порекомендовать оптимальный альтернативный способ решения.

«Ошибка получения параметров строки соединения. Возможно драйвер не позволяет получить параметры строки соединения» — вот так реагирует 1с8.3.3.641 на попытку подключить внешний источник данных mySql. Пробовал драйвера 5.2 и 3.51. Результат всё тот же. Подскажите, что ещё можно попробовать или ЧЯДНТ?

Прочитал, что можно попробовать указать вручную строку подключения, но, к сожалению, я подключаюсь строкой из файлика udl.

Код подключения в студию.

Рабочий только последний вариант

ConnectionString нужен. Драйвер муСКЛ есть в системе?

куета какая то. Причем тут внешний источник данных?

Верно. Но как её задать? На данный момент использую последнюю строку, полученную из файла udl: ConnectionString = «Provider=MSDASQL.1;Persist Security Info=False;Data Source=220V52U»; Однако ВИД ругается на неё, если пытаюсь указать в нем такую строку подключения. Драйвера уже какие только можно было установил и с каждым такая песня. А при том, что, по-идее, если ВИД не хочет создаваться из драйвера, то можно попробовать задать строку подключения вручную.

забей. У нас тоже не работает, поэтому без всяких источников тупо написали запросы и тп и тд.

Была какая то ошибка из за наличия подчеркивания в названии таблицы. «_». Посмотрите, может  вэтом дело.

запросом из ВИ выгребает данные в ДСписках хрень — не хочет, но данных из запроса по ВИ думаю хватит

Это баг платформы, уже полтора года висит в списке ошибок 1С. и до сих пор не вылечен ни в одном обновлении.

вот как обычно вся рота не в ногу, а один старшина в ногу. У меня работает. Поставь драйвера и пропиши строку соединения вручную. Ошибка с нижним подчеркиванием здесь абсолютно не причем

Но тут же как-то получилось:

Как, хотя бы, правильно указать строку соединения?

какую строку соединения указываешь при подключении к ВИД? У меня драйвер для mySQL. строка соединения «driver={MySQL ODBC 5.1 Driver};server=server;uid=user;pwd=password;database=mbs;port=3306»;

Платформа тут вообще никаким боком. Так а реально у тебя ODBC Connector какой версии установлен и установлен ли вообще? Скачай с родного сайта последний и используй строку подключения для него.

Так есть ОДБЦ драйвер для муСКЛ?

Есть и не один: Не знаю, как правильно указать строку подключения для 5.2.5 версии драйвера. Для 5.1 получилось.

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Соединения = ПолучитьСоединенияИнформационнойБазы();

    Для каждого СоединениеИнформационнойБазы Из Соединения Цикл

        Если ПустаяСтрока(ИмяПользователя()) Тогда Продолжить; КонецЕсли;

        Если СоединениеИнформационнойБазы.Пользователь.Имя = ИмяПользователя() И СоединениеИнформационнойБазы.ИмяПриложения=«1CV8» Тогда

            Если Лев(СтрокаСоединенияИнформационнойБазы(),5)=«File=» Тогда

                ФайловыйВариант = Истина;

                ИмяСервераИБ=«»;

                ИмяБазы = «»;

            Иначе

                ФайловыйВариант = Ложь;    

                ПозицияРазделителя = Найти(СтрокаСоединенияИнформационнойБазы(),«;»);

                ИмяКластера= Сред(СтрокаСоединенияИнформационнойБазы(),7, ПозицияРазделителя-8);

                ОписаниеИБ.Вставить(«ИмяСервераИБ»,ИмяСервераИБ);

                ИмяИнформационнойБазы = Сред(СтрокаСоединенияИнформационнойБазы(),ПозицияРазделителя+5,СтрДлина(СтрокаСоединенияИнформационнойБазы())-ПозицияРазделителя-5);

                ОписаниеИБ.Вставить(«ИмяИнформационнойБазы»,СтрЗаменить(ИмяИнформационнойБазы,«»«»,«»));

                ИнформационнаяБаза = ОписаниеИБ.ИмяИнформационнойБазы;

                Пользователь = ИмяПользователя();

            КонецЕсли;    

            Прервать;

        КонецЕсли;

    КонецЦикла;

    Соединитель = Новый COMОбъект(«V81.COMConnector»);

    АгентСервера = Соединитель.ConnectAgent(ИмяКластера);  

    КластерыСерверов = АгентСервера.GetClusters().Выгрузить();

    ИмяСервераИБВРег = ВРег(ИмяКластера);

    Для Каждого Кластер Из КластерыСерверов Цикл

        Если ВРег(Кластер.HostName) = ИмяСервераИБВРег Тогда

            СерверИнформационнойБазы = Кластер;

            Прервать;

        КонецЕсли;

    КонецЦикла;

    АгентСервера.Authenticate(СерверИнформационнойБазы,АдминистраторКластера,ПарольАдминистратораКластера );

    ПроцессыCOM = АгентСервера.GetWorkingProcesses(СерверИнформационнойБазы);

    РабочиеПроцессы = ПроцессыCOM.Выгрузить();

    РабочийПроцесс = РабочиеПроцессы[0];

    СписокСоединений = РабочиеПроцессы;

    СоединениеСРабочимПроцессом = Соединитель.ConnectWorkingProcess(

    РабочийПроцесс.HostName + «:» + Формат(РабочийПроцесс.MainPort, «ЧГ=»));

    СоединениеСРабочимПроцессом.AddAuthentication(Пользователь,ПарольПользователя);

    // Получение списка информационных баз

    ИнформационныеБазы = СоединениеСРабочимПроцессом.GetInfoBases().Выгрузить();

    // Поиск информационной базы с требуемыми параметрами подключения

    ИмяИнформационнойБазыВРег = ВРег(ИмяИнформационнойБазы);

    Для Каждого ИБ Из ИнформационныеБазы Цикл

        // Если информационная база найдена

        Если ВРег(ИБ.Name) = ВРег(ИмяИнформационнойБазы) Тогда

            // Запомнить информационную базу и прекратить поиск

            ИнформационнаяБаза = ИБ.Name;                    

            Прервать;              

        КонецЕсли;

    КонецЦикла;

    ИнформационныеБазы = СоединениеСРабочимПроцессом.GetInfoBases().Выгрузить();    

    Для Каждого ИБ Из ИнформационныеБазы Цикл

        // Если информационная база найдена

        Если ВРег(ИБ.Name) = ВРег(ИмяИнформационнойБазы) Тогда

            //р= СоединениеСРабочимПроцессом.Connect(ИБ,»тест»,»»);  

            Для шаг = 0 по СписокСоединений.Количество()1 Цикл

                //                        

                ф=Соединитель.ConnectWorkingProcess(СписокСоединений[шаг].HostName + «:» + Формат(СписокСоединений[шаг].MainPort, «ЧГ=»));

                Попытка ф.AddAuthentication(Пользователь,ПарольПользователя);Исключение КонецПопытки;

                Соединения = ф.GetInfoBaseConnections(ИБ).Выгрузить();

                Для Каждого соед Из Соединения Цикл

                   Если соед.AppID=«SrvrConsole» Тогда Продолжить; КонецЕсли;

                   Если соед.AppID=«COMConsole» Тогда Продолжить; КонецЕсли;

                   Если соед.AppID=«Designer» Тогда Продолжить; КонецЕсли;

                    НоваяСессия = Сессии.Добавить();

                    НоваяСессия.Юзер = соед.UserName;

                    НоваяСессия.Комп = Соед.HostName;

                    НоваяСессия.Сессия1С = соед.ConnID;

                    НоваяСессия.SPID = соед.dbProcInfo;

                КонецЦикла;

            КонецЦикла;

            //Соединения = СоединениеСРабочимПроцессом.GetInfoBaseConnections(ИБ).Выгрузить();

            Прервать;

        КонецЕсли;

    КонецЦикла;

SPR1TE89

21 / 21 / 3

Регистрация: 22.04.2014

Сообщений: 112

1

Работа с внешними источниками данных

18.04.2016, 09:50. Показов 8844. Ответов 10

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте.
Конфа — Комплексная автоматизация 1.1(1.1.58.4)
Платформа — 8.3(8.3.7.1917)

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Запрос  = новый Запрос("ВЫБРАТЬ
                           |    dbo_inc.did,
                           |    dbo_inc.sid,
                           |    dbo_inc.idttm,
                           |    dbo_inc.ndttm,
                           |    dbo_inc.ival
                           |ИЗ
                           |    ВнешнийИсточникДанных.EPos_НПС.Таблица.dbo_inc КАК dbo_inc
                           |ГДЕ
                           |    dbo_inc.sid В(&МассивСид)") ;
    Запрос.УстановитьПараметр("МассивСид", МассивФильтра);
    ТаблицаНПС = Запрос.Выполнить().Выгрузить();
//В самом конце кода есть еще процедура разрыва соединения SQL
ВнешниеИсточникиДанных.EPos_НПС.РазорватьСоединение();

Проблема возникает при повторном формировании запроса.
Текст ошибки:

1C
1
2
3
4
5
6
7
8
9
10
11
{Отчет.EPos_ОтчетПоВыгруженнымПлатежам.МодульОбъекта(161)}: Ошибка при вызове метода контекста (Выполнить)
    ТаблицаНПС = Запрос.Выполнить().Выгрузить();
по причине:
Ошибка выполнения запроса
по причине:
Ошибка внешней базы данных:
ошибка при выполнении запроса
по причине:
Ошибка ODBC. SQLSTATE: 42S02
Номер ошибки: 208
Описание: [Microsoft][ODBC SQL Server Driver][SQL Server]Недопустимое имя объекта "#tt1".

Может кто встречался посоветуйте решение.
Спасибо заранее.
И да этот запрос в отчете содержится. Делал таймаут не помогает.



0



Модератор

Эксперт 1С

3769 / 2952 / 586

Регистрация: 10.03.2011

Сообщений: 11,628

Записей в блоге: 1

18.04.2016, 10:14

2

SPR1TE89, платформа какая?



0



21 / 21 / 3

Регистрация: 22.04.2014

Сообщений: 112

18.04.2016, 10:21

 [ТС]

3

Dethmontt, 1C?

Добавлено через 40 секунд
1С-

Цитата
Сообщение от SPR1TE89
Посмотреть сообщение

Платформа — 8.3(8.3.7.1917)



0



Модератор

Эксперт 1С

3769 / 2952 / 586

Регистрация: 10.03.2011

Сообщений: 11,628

Записей в блоге: 1

18.04.2016, 10:34

4

Сколько не юзал внешние источники с такой лажой не сталкивался.

Возможно это глюк платформы и она за собой не удаляет созданную зачемТО ВТ

А если почистить процедурный кеш на SQL ?



0



SPR1TE89

21 / 21 / 3

Регистрация: 22.04.2014

Сообщений: 112

18.04.2016, 10:41

 [ТС]

5

Dethmontt, Так вот самое интересное, что если 1 — раз запустить отчет, он формирует все хорошо, 2 — раз запускаешь ошибка эта вылетает, 3 -раз формируешь все хорошо. Но блин это же отчет он всегда должен работать. Кэш чистил Скуля. Не помогает. Но даже если бы и помогло, каждый раз при формировании отчета чистить кэш — как то бредово.

Кэш чистил так :

SQL
1
2
3
4
5
6
7
 USE [DB_base]
DBCC FREEPROCCACHE
GO
 
USE [DB_base]
DBCC FLUSHPROCINDB(8)
GO

Может еще что надо?



0



Модератор

Эксперт 1С

3769 / 2952 / 586

Регистрация: 10.03.2011

Сообщений: 11,628

Записей в блоге: 1

18.04.2016, 12:46

6

Строку подключения покажи?



0



SPR1TE89

21 / 21 / 3

Регистрация: 22.04.2014

Сообщений: 112

18.04.2016, 13:37

 [ТС]

7

Dethmontt,

1C
1
2
3
4
5
6
7
8
9
10
11
Параметры = ВнешниеИсточникиДанных.EPos_НПС.ПолучитьОбщиеПараметрыСоединения();
    Параметры.АутентификацияСтандартная = Истина;
    Параметры.ИмяПользователя = "user";
    Параметры.Пароль = "blablabla";
    Параметры.СтрокаСоединения = "DRIVER={SQL Server};SERVER=10.37.133.208;UID=user;PWD=blablabla;DATABASE=stp;LANGUAGE=русский";
    Параметры.СУБД = "MSSQLServer";
 
    ВнешниеИсточникиДанных.EPos_НПС.УстановитьОбщиеПараметрыСоединения(Параметры);
    ВнешниеИсточникиДанных.EPos_НПС.УстановитьПараметрыСоединенияПользователя(ИмяПользователя(), Параметры);
    ВнешниеИсточникиДанных.EPos_НПС.УстановитьПараметрыСоединенияСеанса(Параметры);
    ВнешниеИсточникиДанных.EPos_НПС.УстановитьСоединение();



0



Модератор

Эксперт 1С

3769 / 2952 / 586

Регистрация: 10.03.2011

Сообщений: 11,628

Записей в блоге: 1

18.04.2016, 17:57

8

попробуй нативный клиент

Driver={SQL Server Native Client 11.0};Server=myServerAddressatabase=myDataBase;Uid=myUsername;Pwd=myPassword



0



SPR1TE89

21 / 21 / 3

Регистрация: 22.04.2014

Сообщений: 112

19.04.2016, 10:38

 [ТС]

9

Dethmontt,

1C
1
2
3
4
5
6
7
8
Ошибка выполнения запроса
по причине:
Ошибка внешней базы данных:
ошибка при выполнении запроса
по причине:
Ошибка ODBC. SQLSTATE: 42S02
Номер ошибки: 208
Описание: [Microsoft][SQL Server Native Client 11.0][SQL Server]Недопустимое имя объекта "#tt1".

Блин что за бред. Drop table теперь делать

Добавлено через 1 час 35 минут
А могут ли как то права влиять на удаление временных таблиц из под 1с? Может проблема в правах?



0



Модератор

Эксперт 1С

3769 / 2952 / 586

Регистрация: 10.03.2011

Сообщений: 11,628

Записей в блоге: 1

19.04.2016, 16:57

10

Цитата
Сообщение от SPR1TE89
Посмотреть сообщение

Блин что за бред. Drop table теперь делать

А как ты узнаешь ее имя в тепмпДБ ?

Добавлено через 53 секунды
SPR1TE89, советую попробовать на какой-нить другой платформе 1С



1



SPR1TE89

21 / 21 / 3

Регистрация: 22.04.2014

Сообщений: 112

20.04.2016, 14:55

 [ТС]

11

Dethmontt, Видимо придется, спасибо.

Добавлено через 5 часов 56 минут
Разобрался.

1C
1
ВнешниеИсточникиДанных.EPos_НПС.РазорватьСоединение();

Проблема возникала из за этой процедуры.
Получалось так что при каждом новом формировании отчета устанавливал соединение с базой

1C
1
ВнешниеИсточникиДанных.EPos_НПС.УстановитьСоединение();

как только отчет заканчивал формировать данные обрывал соединение. Из за чего вылетала ошибка при последующем формировании. Честно говоря сам не пойму почему оно так работает. По идеи должны соединения все обрываться…
Убрал это

1C
1
ВнешниеИсточникиДанных.EPos_НПС.РазорватьСоединение();

. И все заработало.

Добавлено через 5 минут
Единственно подключение к базе будет всегда



1



Понравилась статья? Поделить с друзьями:
  • 1с бухгалтерия ошибка доступа к файлу
  • 1с sql ошибка при работе с файлом
  • 1с comconnector произошла ошибка 80110802
  • 1с внешние источники данных ошибка odbc sqlstate im002
  • 1с sql журнал регистрации ошибка