пятница, 6 мая 2011 г.

Внешние источники данных в 1С

И наконец настал тот час когда "они" появились
Платформа 8.2.14
Реализована возможность получать данные из внешних источников данных. Для доступа используется интерфейс ODBC. Для доступа к данным внешних источников можно использовать объектную модель, язык запросов и систему компоновки данных. Реализована стандартная функция "Управление внешними источниками данных". Реализован объект метаданных "ВнешнийИсточникДанных".
В конфигурации появился новый объект Внешние источники данных.

Каждый источник представляет из себя:
  1. Перечень доступных таблиц;
  2. Перечень доступных полей в таблице
  3. Дополнительные колонки валяющие на представление 
Важно:
Строка соединения указываемая при импорте таблиц не сохраняется в конфигурации


Есть конструктор строк соединений позволяющий выбрать исчерпывающий список драйверов: 
  • SQL Server 
  • Microsoft ODBC for Oracle 
  • Microsoft Access Driver (*.mdb), Microsoft Access-Treiber (*.mdb), Driver do Microsoft Access (*.mdb) 
  • Microsoft dBase Driver (*.dbf), Microsoft dBase-Treiber (*.dbf), Driver do Microsoft dBase (*.dbf) 
  • Microsoft Excel Driver (*.xls), Microsoft Excel-Treiber (*.xls), Driver do Microsoft Excel(*.xls) 
  • Microsoft Paradox Driver (*.db ), Microsoft Paradox-Treiber (*.db ), Driver do Microsoft Paradox (*.db ) 
  • Microsoft Text Driver (*.txt; *.csv), Microsoft Text-Treiber (*.txt; *.csv), Driver da Microsoft para arquivos texto (*.txt; *.csv) 
  • Microsoft Visual FoxPro Driver, Microsoft FoxPro VFP Driver (*.dbf), Microsoft dBase VFP Driver (*.dbf),Microsoft Visual FoxPro-Treiber, Driver para o Microsoft Visual FoxPro 
  • SQL Server Native Client 10.0
После того как вы сохраните конфигурацию исходную структуру таблиц внешнего источника вы увидите в конструкторе запросов, и сможете работать с ней так же как с обычной таблицей, использовать в запросе или читать с помощью встроенного языка.

пСоед = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
пСоед.СтрокаСоединения= "DRIVER={SQL Server};SERVER=serv;UID=sa;PWD=fkujhbnv;APP=upp;DATABASE=upp";
ВнешниеИсточникиДанных.upp.УстановитьОбщиеПараметрыСоединения(пСоед);
ВнешниеИсточникиДанных.upp.УстановитьСоединение();
Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 5
| dbo_Config.FileName,
| dbo_Config.Creation,
| dbo_Config.BinaryData
|ИЗ
|ВнешнийИсточникДанных.upp.Таблица.dbo_Config КАК dbo_Config");
Таблица = Запрос.Выполнить().Выгрузить();


Важно: Перед началом работы с внешними источники необходимо установить соединение с ними (пример выше).
В запросе помимо стандартный типов будут присутствовать и двоичные данные


Вообще поведение двоичных данные радует, их не просто можно получить они еще и работают в запросах на соединение.
Но есть вещи которые огорчают:
  1. Нельзя получать данные из нескольких источников одновременно, то есть в запросе не могут присутствовать таблицы конфигурации и таблицы внешних источников; 
  2. Нельзя использовать временные таблицы в запросах с внешними источниками данных 
Резюме:
Заметным и нужным был релиз платформы 8.1.11 именно в нем появились временные таблицы, я думаю что 8.2.14 станет таким же

14 комментариев:

  1. важно заметить что работа внешних источников данных поддерживается также и в Linux при использовании библиотеки unixodbc (http://www.unixodbc.org/)

    ОтветитьУдалить
  2. mysql и postgre не поддерживаются?:(

    ОтветитьУдалить
  3. Анонимный30 мая 2011 г., 17:26

    А как будет выглядеть строка соединения к эксель-файлу ?

    ОтветитьУдалить
  4. Анонимный14 июля 2011 г., 20:50

    mysql поддерживается. нужно драйвер ODBC для mysql установить. у меня получилось.

    ОтветитьУдалить
  5. Господа, на Вас предпоследняя надежда...

    Добрый день.

    При попытке создать таблицу внешнего ИД опцией "Выбрать из списка таблиц внешнего источника данных" выпадает ошибка "ORA-01406: fetched column value was truncated".

    Строка подключения рабочая. Проверено. Данные тянутся.

    FBS=256000 (увеличение/уменьшение в десятки раз ничего не дает).

    Может кто сталкивался?

    ОтветитьУдалить
  6. @e-temka
    Может имя таблицы(Листа) слишком длинное?

    ОтветитьУдалить
  7. 2Герман
    а какое у 1С на этот счет ограничение? не подскажете?

    Плюс ко всему я когда к ораклу через ADO коннекчусь такой ошибки не возникает.

    Если я не имею возможности править имена таблиц в базе оракл, то мне можно забыть про внешние источники данных в этой задаче?

    П.С. никто совсем не отвечает. 1с и миста молчат. Если в курсе, к кому еще можно обратиться с подобной траблой?

    ОтветитьУдалить
  8. 2Герман

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

    ОтветитьУдалить
  9. 256 вроде, если данных немного то можно и через RecordSet. Вручную пропишите нужную таблицу и все

    ОтветитьУдалить
  10. 2Герман
    Спасибо за информацию!

    ОтветитьУдалить
  11. а как работать с последовательностями оракла. ведь последовательность не видно в виде таблицы???

    ОтветитьУдалить
  12. а как рабоать с поледовательностями оракла?

    ОтветитьУдалить
  13. Не подскажете как подключить Microsoft Text Driver и к нему подключить текстовый файл?

    ОтветитьУдалить
  14. Параметры строки подключения драйверов от MS
    http://msdn.microsoft.com/ru-ru/library/system.data.odbc.odbcconnection.connectionstring.aspx

    ОтветитьУдалить