Open
Close

Зовнішні джерела даних 1С 8.2. Зовнішні джерела даних. Приклад рядка підключення

p align="justify"> Для роботи з даними не 1с, наприклад: база SQL, база Access, файл Excel і багато інших, в технологічну платформу, починаючи з версії 8.2.14 був впроваджений механізм (об'єкт), під назвою Зовнішні джерела даних.

Давайте у цій статті розглянемо, як взаємодіє даний об'єкт із звичним нам Excel файлом. Наприклад, існує необхідність з певною періодичністю зчитувати дані з *.xls файлу в базу 1С. Якщо раніше нам необхідно за допомогою Com об'єктів проводити ініціалізацію, потім створювати таблицю значень, рядковим чином зчитувати дані, то тепер дані маніпуляції просто відпадають. При використанні Зовнішнього джерела даних ми можемо звертатись за допомогою запитів та миттєво отримувати дані.

Припустимо, у нас є книга Excel наступного змісту. З якого нам необхідно рахувати дані.

Насамперед у режимі конфігуратора додаємо нове джерело даних і назвемо його також Excel.

Тепер нам необхідно додати даних, то таблицю з тими полями, які будуть у нас в 1С. Створимо їх аналогічно тому, як названі колонки у файлі. Для цього заходимо у створений об'єкт і в кладці Дані тиснемо додати. Тут наполегливо рекомендую робити створення вручну, тому що досить часто бувають проблеми, коли 1с-ина намагається сама зробити автоматичне налаштування.

Найменування нашої таблиці надамо ТаблицяДаних. Після цього переходимо у вкладку Дані та створюємо поля (аналогічні файлу).

У властивостях кожного поля необхідно вказати Ім'я, Тип та Ім'я у джерелі даних (ідентично до файлу).
Надаємо Ім'я в джерелі даних. Тут ми вказуємо найменування аркуша *. xls із додаванням у кінці символу «$». У нас Лист1$.
Обов'язково вказуємо Поля Ключа. Тут з теорії БД необхідно вказати, те поле яким буде забезпечувати повну унікальність рядка.
Поле представлення-вказуємо поле, яке забезпечить коротке представлення рядка, у разі Номенклатура.

Всі! На цьому власне і все налаштування. Далі необхідно просто в будь-якій процедурі вказати рядок з'єднання та після підключення можна працювати з джерелом даних.

Рядок з'єднання для файлів XLSX (версія Office 2007 та вище)

Driver=(Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb));DBQ=D:\ФайлExcel.xlsx;

Рядок з'єднання для файлів XLS і раніше.

Driver=(Microsoft Excel Driver (*.xls)); DriverID=790; DBQ=D:\ФайлExcel.xls;

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

Процедура КнопкаВиконатиНатискання(Кнопка) ПараметриЗ'єднання = Новий ПараметриЗ'єднанняЗовнішньогоДжерела; Параметри З'єднання. Рядок З'єднання = «Driver = (Microsoft Excel Driver (*. xls)); DriverID = 790; DBQ = D: \ Fruit. xls; «; ЗовнішніДжерелаДані. Excel. УстановитиЗагальніПараметриСполуки(ПараметриСполуки) ; ЗовнішніДжерелаДані. Excel. ВстановитиСполука() ; Запит = Новий Запит(); Запит. Текст = «ВИБРАТИ | ТаблицяДаних. Код, | ТаблицяДаних. Номенклатура, | ТаблицяДаних. ЕдІзм, | ТаблицяДаних. Кількість | З | ЗовнішнійДжерелоДаних. Excel. Таблиця. ТаблицяДаних ЯК ТаблицяДаних»; ТЗ = Запит. Виконати ( ). Вивантажити (); Повідомити(«Підключено») ; КінецьПроцедури

Якщо ми встановимо точку зупинки і подивимося, що в нас у ТЗ, то побачимо таке:

P.S. У самому файлі Excel до назви полів не повинно бути жодних порожніх рядків, інакше виникатиме помилка odbc. sqlstate 07002 (драйвер odbc excel занадто мало параметрів).

Зовнішні джерела даних 1С - порівняно новий об'єкт метаданих 1С 8.3 та 8.2, за допомогою якого можливе підключення до 1С зовнішніх джерел даних: таблиць SQL, Excel, Access, FoxPro(dbf), іншої бази 1С, Oracle, Paradox (db), - і навіть читання з найпростіших файлів txt/csv.

Це дає безліч можливостей для інших систем. Розглянемо докладніше.

Налаштування зовнішніх джерел даних у 1С 8

Налаштування зовнішніх джерел індивідуальне для кожного виду системи. Але, як правило, загальна частина налаштування однакова — це встановлення рядка підключення:

Отримайте 267 відеоуроків з 1С безкоштовно:

Якщо рядок підключення встановлений правильно, система запропонує вибрати потрібну таблицю з бази даних. У результаті ми отримаємо готову таблицю, в якій можна вказати поле ключа (унікальне поле) та поле представлення (як запис відображатиметься в 1С):

Використання зовнішніх джерел даних у 1С 8.3

Зовнішні джерела даних 1С можна використовувати, як і інші таблиці бази даних. Платформа автоматично генерує їм форму, якщо вона не задана. У запитах також допустиме використання даних із зовнішніх джерел.

У 8 версії програми 1С розробники додали у функціонал можливість підключення сторонніх баз даних та отримання інформації з них безпосередньо з конфігуратора, без використання COM з'єднань та OLE об'єктів. Ця можливість реалізована за допомогою нового об'єкту - "Зовнішніх джерел даних"

Зовнішні джерела даних у 1С можна використовувати як і, як та інші таблиці системы:

  1. При створенні звітів та розрахунків за допомогою системи компонування даних (СКД);
  2. Для отримання посилань на інформацію, що зберігається у сторонніх джерелах;
  3. Для зміни даних, що зберігаються в таблицях;
  4. Під час формування запитів.

Важливо знати, що цей механізм не розрахований на роботу з іншими базами даних 1С, оскільки сама модель функціонування «1С.Підприємства» не передбачає втручання у дані на рівні фізичних таблиць.

Створення нового джерела

Додавання нового зовнішнього джерела до програми відбувається у режимі «Конфігуратора». У дереві конфігурації є відповідна гілка (Рис.1)

Попітніти при створенні нового джерела доведеться, незважаючи на те, що форма нового об'єкта має лише чотири закладки:

  1. Основні;
  2. Дані;
  3. функції;
  4. Права.

Перша закладка має лише один цікавий параметр – режим керування блокуванням. Якщо не запитувати про блокування даних у транзакціях, про тонкощі розпаралелювання інформаційних потоків можна залишити цей параметр у режимі автоматичного блокування. Однак подібний підхід може призвести до появи надмірних обмежень (наприклад, коли замість окремого запису програма заблокує всю фізичну таблицю, позбавивши інших користувачів можливості роботи з нею).

Керовані блокування, на відміну від автоматичних, використовують механізм транзакцій, закладений у самій програмі, а не в СУБД, що дозволяє перевести захоплення таблиць на набагато нижчий рівень.

Встановивши в цьому параметрі значення «Автоматичний та керований», ми надаємо системі можливість визначити, який режим використовувати, звернувшись безпосередньо до аналогічної властивості кожної конкретної таблиці.

Закладка «Дані» форми властивостей зовнішнього джерела

Форму закладки «Дані» представлено на Мал. 2

Мал. 2

Тут ми можемо додати таблиці зовнішнього джерела та куби. Додавати таблицю можна двома способами:

  1. Вручну тоді перед нами відкриється форма додавання таблиці (Рис. 3);

Мал. 3

  1. Або вибрати зі списку фізичних таблиць джерела (Рис. 4), у разі перед нами відкривається спеціальний конструктор.

Мал. 4

Розглянемо докладніше форму додавання таблиці. Властивість «Ім'я» служить для однозначної ідентифікації об'єкта конфігурації.

Зіставлення об'єкта метаданих та кінцевої фізичної таблиці відбувається через властивість «Ім'я в джерелі даних», розташованому на закладці «Додатково» (Рис. 5)

Мал. 5

Далі ми маємо визначити тип таблиці, точніше її об'єктність. Якщо дані, що зберігаються у структурі, можна однозначно ідентифікувати через якесь одне поле, таблиця – може бути об'єктною. Якщо індивідуальність запису визначається набором ключових полів, таблиця повинна мати необ'єктний тип.

Порівнюючи такі таблиці з іншими об'єктами метаданих, можна навести таку аналогію:

  • Об'єктні таблиці – це довідники;
  • Необ'єктні – це регістри відомостей.

Набір ключових полів визначається наступним параметром форми («Поля ключа»). Це поле обов'язково заповнити, якщо залишити його порожнім, збереження конфігурації завершиться помилкою.

Як видно з Рис.5, деякі поля та кнопки форми недоступні для зміни:

  • Вираз у джерелі даних;
  • Тип даних таблиці;
  • Поле уявлення;
  • Обробники подання.

Їх можна буде використовувати лише після того, як ми заповнимо поля таблиці, визначивши їх тип та задавши їм ідентифікатори (Рис. 6).

Мал. 6

Тут слід звернути увагу на параметр «Дозволити Null», якщо цей прапорець встановлений, таке поле небажано використовувати як ключ.

Конструктор таблиць

Мабуть, найважливішим та цікавим моментом у роботі із зовнішніми джерелами є створення рядка підключення. Її конструктор відкривається, якщо натиснути кнопку з трьома точками у параметра Рядок з'єднання.

Насамперед нам запропонують визначитися з драйвером, який використовуватиметься для підключення (Рис. 7)

Мал. 7

Неправильне визначення цього параметра не дозволить підключитись до сторонньої інформаційної бази. Також слід розуміти, що не всі вказані у списку драйвера, що випадає, можуть бути використані для автоматичного формування рядка з'єднання. Якщо платформа видала помилку (Рис. 8), рядок з'єднання доведеться прописувати вручну.

Рис.8

Мал. 9

Сам рядок є жорстко регламентованою конструкцією.

Приклад рядка підключення

Розглянемо сторонню базу даних, створену в Microsoft Access і розташовану в корені диска D. Для підключення цієї бази ми повинні використовувати відповідний драйвер, але його вибір у конструкторі рядка призводить до появи помилки.

Самостійно пропишемо параметри підключення.

Driver=(Microsoft Access Driver (*.mdb)) – саме так виглядає перша частина рядка. У фігурних дужках ми визначили драйвер.

Для файлів Excel вона матиме вигляд (Microsoft Excel Driver (*.xls)), для екселевських файлів, створених в офісі старше 2003, рядок драйвера матиме вигляд (Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)).

Відокремивши точкою коми цей параметр від наступного, ми повинні прописати адресу нашого сховища (у нашому випадку DBQ = D: \ база даних1.mdb).

Склавши ці два параметри отримаємо Driver=(Microsoft Access Driver (*.mdb));DBQ=D:\База даних1.mdb, записавши цей параметр, отримаємо доступ до внутрішніх структур цієї бази.

Для об'єкта "Зовнішнє джерело" мало просто створити його в конфігурації, його ще треба підключити і в режимі "Підприємства". Це можна зробити з меню "Всі функції"->Зовнішні джерела. При першому вході в нашу таблицю нам треба прописати той самий рядок з'єднання вже в режимі «Підприємства».

Чому ця можливість викликає такий інтерес? Будь-яка людина, яка програмувала в 1С при цьому досить непогано знайома з SQL і хоча б загалом знайома з архітектурою і принципами розробки інших технологічних платформ для бізнес додатків з твердою впевненістю скаже вам - що їй подобається найбільше в 1С. Звичайно конструктор запитів - найзручніший і найпродуманіший механізм написання запитів для отримання даних з реляційних структур, який я особисто коли-небудь зустрічав. А тепер 1С нам надали таку чудову нагоду використовувати його не тільки з 1С, але й з будь-якими іншими таблицями. Ось тільки в цю "бочку меду" насипано купу "ложок дьогтю". Про все по порядку:

1) Налаштування та використання- без "танців з бубном" не вийде
a) Додаєте зовнішнє джерело даних - начебто нічого складного
б) ставте галочку "Вибрати зі списку" - обов'язково - це потрібно щоб перевірити працездатність вже на початку і позбавить зайвих проблем
в) обов'язково натискаємо "..." - підключення саме ODBC. Чи не OLEDB як ми всі звикли, а на рівень нижче

Г) А ось тут будьте ДУЖЕ УВАЖНІ.

Це драйвер ODBC - у разі використання клієнт-серверної версії він має обов'язково бути на сервері. Якщо ви ведете розробку на одній системі, а робоча версія на іншій (як це зазвичай буває) переконайтеся, що на вас не чекають сюрпризи. Дивна рекомендація, але вибирайте найстаріший або найзагальніший драйвер у випадку якщо вас не особливо турбує швидкість і за межі можливостей стандарту SQL92 ви виходити не збираєтеся. Це забезпечить вам найкращу сумісність. Наприклад для SQL Server 2008 найкращим драйвером буде SQL Server Native Client 11, але рекомендую вибирати просто SQL Server, інакше цей самий native client доведеться встановлювати або на сервер, або на всі клієнтські машини (у разі використання файлової версії), а виграшу особливого для простих завдань він не дасть.
д) Стандартні діалоги вибору Сервера

Е) На питання збереження пароля рекомендую відповісти "так", інакше так і не вийде цю справу запустити.
ж) Вибираєте таблицю і реквізити ... чудова можливість - її можна відразу ж перейменувати так як вам подобається (і реквізити теж), при цьому у властивостях у вас відображатимуться назви полів джерела даних

З) А тепер запускаєте, відкриваєте конструктор запитів – вибираєте тупо всі записи з таблиці та ОПА – помилка. Що робити? Якщо у вас керований інтерфейс – заглянути в меню сервіс, а якщо звичайний...
Я особисто використав такий код:
Код 1C v 8.х Параметри = ЗовнішніДжерелаДаних.DAX.Отримати ЗагальніПараметриЗ'єднання();
Параметри. Аутентифікація Стандартна = Істина;
Параметри.Ім'я Користувача = "sa";
Параметри.Пароль = "pas";
Параметри.РядокЗ'єднання = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;DATABASE=database";
Параметри.СУБД = "MSSQLServer";

ЗовнішніДжерелаДаних.DAX.ВстановитиЗагальніПараметриЗ'єднання(Параметри);
ЗовнішніДжерелаДаних.DAX.УстановитиПараметриЗ'єднанняКористувача(Ім'яКористувача(), Параметри);
ЗовнішніДжерелаДаних.DAX.ВстановитиПараметриЗ'єднанняСеансу(Параметри);

ЗовнішніджерелаДаних.DAX.УстановитиСполука();
Може, якихось шматків і не потрібно, але це працює.
Виконати код потрібно ОДИН РАЗ. Після чого буде нормально підключатися ... містика звичайно - навіщо це потрібно було не зрозуміло ...

2) Джерела даних лише для читання- Так, чудес не буває ... але іноді так хочеться.

3) НЕ МОЖНА ЇХ ВИКОРИСТОВУВАТИ РАЗОМ З ВНУТРІШНІМИ ДЖЕРЕЛАМИ ДАНИХ
Мене особисто цей факт убив наповал

Як же так .... то чого так чекали і вже представляли і облизувалися як ми зараз в одному запиті з'єднаємо наші дані з 1С-кой згорнемо - згрупуємо, вставимо у звіт, а не тут було...
Але природно досвідчених людей це не зупиняє... яка думка спала на думку? Правильно – тимчасові таблиці:

4) НЕ МОЖНА ЇХ ВИКОРИСТОВУВАТИ РАЗОМ З ТИМЧАСОВИМИ ТАБЛИЦЯМИ

А ось це вже не схоже на технологічні труднощі, а дуже схоже на те, що нам хочуть "щоб життя раєм не здавалося" зробити:).

5) Можна використовувати лише у з'єднаннях СКД
Для тих, хто не знає - це в СКД на вкладці "Зв'язки наборів даних". Чи часто ви ними користуєтеся? Зручно? Мабуть, так нас хочуть примусити до використання їх частіше. Ось тільки там є колонка "Умова зв'язку" та "Параметр зв'язку". У жодній типовій конфігурації не знайшов прикладу їх використання, в документації і в Хрустальової теж якось не прозоро. Хтось зможе мені пояснити, як працює "умова зв'язку". Якщо там написати РеквізитДжерела = РевізитПриймача це не працює. Звичайно, умову можна записати в полі "Вираз" - в більшості випадків цього вистачає... ось тільки якось не дуже просто виходить.

Разом раніше це завдання вирішувалося десь так:
Код 1C v 8.х Функція ІніціалізуватиДжерелоДаних()

ДатаНач = КомпонувальникНалаштувань.Налаштування.ПараметриДаних.Елементи.Значення;
ДатаКон = КомпонувальникНалаштувань.Налаштування.ПараметриДаних.Елементи.Значення;
Якщо ДатаКон > "20100101" Тоді
ДатаКон = "20100101";
КінецьЯкщо;

КЧ = Новий КваліфікаториЧисла (15,2);
КС = Новий Кваліфікатор Рядки(255);

МасивЧисло = Новий Масив();
МасивЧисло.Додати(Тип("Число"));

МасивРядок = Новий Масив();
МасивРядок.Додати(Тип("Рядок"));

МасивДата = Новий Масив();
МасивДата.Додати(Тип("Дата"));

//У таблицю заповнюватимемо бухгалтерську собівартість
Тип Число = Новий Опис Типів (Масив Число, КЧ);
ТипРядок = Новий ОписТипів(МасивРядок,КС);
ТипДата = Новий ОписТипів(МасивДата);

//таблиця для завантаження даних із SQL
ТЗ = Новий ТаблицяЗначень();
ТЗ.Колонки.Додати("НоменклатураКод", ТипРядку);
ТЗ.Колонки.Додати("Qnty", ТипЧисло);
ТЗ.Колонки.Додати("Період", ТипДата);

ТЗ.Індекси.Додати("Період");

//Підключаємося до SQL
РядокПідключення = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Pwd=;Data Source=;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=;Use Encryption for Data=False;Tag with column collation when possible=False;Initial Catalog=Reports";
Connection = Новий COMОб'єкт ("ADODB.Connection");
Command = Новий COMОб'єкт ("ADODB.Command");
RecordSet = Новий COMОб'єкт ("ADODB.RecordSet");
Дата = "";
Спроба
Connection.Open (СокрЛП (Рядок Підключення));
Command.ActiveConnection = Connection;
Command.CommandText = "S_elect * fr om PH wh ere period >= "" + Рядок(Формат(ДатаНач, "ДФ=ггггММдд")) + "" and period<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Command.Execute();
RecordSet.MoveFirst();
Виняток
Повернення ТЗ;
КінецьСпроби;

Поки RecordSet.EOF = Брехня Цикл
Рядок = ТЗ.Додати();
Рядок.НоменклатураКод = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
Рядок.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Value;
Рядок.Період = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Value;
RecordSet.MoveNext();
КінецьЦикл;

Запит = Новий Запит();
ВрТаблиця = Новий Менеджер Тимчасових Таблиць ();
Запит.ВстановитиПараметр("врТаблицяДаних", ТЗ);
Запит.ВстановитиПараметр("ДатаНач", ДатаНач);
Запит.ВстановитиПараметр("ДатаКон", ДатаКон);
Запит.Текст = "ВИБРАТИ
| врТаблицяДаних.НоменклатураКод,
| врТаблицяДаних.Qnty,
| врТаблицяДаних.Період
|ПОМІСТИТИ ТаблицяДаних

| &врТаблицяДаних ЯК врТаблицяДаних
|ДЕ
| врТаблицяДаних.Період >= &ДатаНач
| І в ТаблицяДаних.Період<= &ДатаКон";
Запрос.Выполнить();
ТЗ = невизначено;

Запит = Новий Запит;
Запрос.МенеджерТимчасовихТаблиць = ВрТаблиця;
Запрос.Текст = "Тут запит за участю вірменної таблиці";

Результат = Запит.Виконати();
Повернення Результат;

КінецьФункції

Зовнішній набір = Ініціалізувати Джерело Даних ();
НабірДаних = Новий Структура();
НабірДаних.Вставити("ТаблицяSQL", Зовнішнійнабір);
Типові Звіти.

Власне рядків коду небагато і вони досить стандартні... при цьому можна користуватися повним функціоналом конструктора запитів, а в СКД віддати тільки функцію КОМПАНІВКИ ДАНИХ

Але на вигляд звичайно не так красиво ... та й вивантаження в таблицю значень щоразу потрібно код писати і перевіряти чи не помилився в назві реквізитів ... а то що нам дали в 1С виглядає якось половинчасто. Я ще не визначився, чим зручніше користуватися. Ви вирішуйте і пишіть про ваші рішення, і що вас до них підштовхнуло.

Інформація взята із сайту

Реліз 8.2.14.533 - нарешті більш-менш стабільний варіант 14-го релізу платформи. Нарешті випала нагода випробувати у справі чудову можливість - "зовнішні джерела даних".

Чому ця можливість викликає такий інтерес? Будь-яка людина, яка програмувала в 1С при цьому досить непогано знайома з SQL і хоча б загалом знайома з архітектурою і принципами розробки інших технологічних платформ для бізнес додатків з твердою впевненістю скаже вам - що їй подобається найбільше в 1С. Звичайно конструктор запитів - найзручніший і найпродуманіший механізм написання запитів для отримання даних з реляційних структур, який я особисто коли-небудь зустрічав. А тепер 1С нам надали таку чудову нагоду використовувати його не тільки з 1С, але й з будь-якими іншими таблицями. Ось тільки в цю "бочку меду" насипано купу "ложок дьогтю". Про все по порядку:

1) Налаштування та використання - без "танців з бубном" не вийде

A) Додаєте зовнішнє джерело даних - начебто нічого складного
б) ставте галочку "Вибрати зі списку" - обов'язково - це потрібно щоб перевірити працездатність вже на початку і позбавить зайвих проблем
в)
(IMG: http://pics.livejournal.com/comol/pic/0000cr1r.png)
- обов'язково натискаємо "..." - підключення саме ODBC. Чи не OLEDB як ми всі звикли, а на рівень нижче

А ось тут будьте ДУЖЕ УВАЖНІ.

Це драйвер ODBC - у разі використання клієнт-серверної версії він має обов'язково бути на сервері. Якщо ви ведете розробку на одній системі, а робоча версія на іншій (як це зазвичай буває) переконайтеся, що на вас не чекають сюрпризи. Дивна рекомендація, але вибирайте найстаріший або найзагальніший драйвер у випадку якщо вас не особливо турбує швидкість і за межі можливостей стандарту SQL92 ви виходити не збираєтеся. Це забезпечить вам найкращу сумісність. Наприклад для SQL Server 2008 найкращим драйвером буде SQL Server Native Client 11, але рекомендую вибирати просто SQL Server, інакше цей самий native client доведеться встановлювати або на сервер, або на всі клієнтські машини (у разі використання файлової версії), а виграшу особливого для простих завдань він не дасть.

Д) Стандартні діалоги вибору Сервера

Ж) Вибираєте таблицю і реквізити ... чудова можливість - її можна відразу ж перейменувати так як вам подобається (і реквізити теж), при цьому у властивостях у вас будуть відображатися назви полів джерела даних

З) А тепер запускаєте, відкриваєте конструктор запитів – вибираєте тупо всі записи з таблиці та ОПА – помилка. Що робити? Якщо у вас керований інтерфейс – заглянути в меню сервіс, а якщо звичайний...
Я особисто використав такий код:

Параметри = ЗовнішніДжерелаДаних.DAX.ОтриматиЗагальніПараметриЗ'єднання();
Параметри. Аутентифікація Стандартна = Істина;
Параметри.Ім'я Користувача = "sa";
Параметри.Пароль = "pas";
Параметри.РядокЗ'єднання = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;DATABASE=database";
Параметри.СУБД = "MSSQLServer";

ЗовнішніДжерелаДаних.DAX.УстановитиЗагальніПараметриЗ'єднання(Параметри);
ЗовнішніДжерелаДаних.DAX.УстановитиПараметриЗ'єднанняКористувача(Ім'яКористувача(), Параметри);
ЗовнішніДжерелаДаних.DAX.ВстановитиПараметриЗ'єднанняСеансу(Параметри);

ЗовнішніджерелаДаних.DAX.УстановитиСполука();

Може, якихось шматків і не потрібно, але це працює. Виконати код потрібно ОДИН РАЗ. Після чого буде нормально підключатися ... містика звичайно - навіщо це потрібно було не зрозуміло ...

2) Джерела даних лише для читання
Так, чудес не буває... але іноді так хочеться.

3) НЕ МОЖНА ЇХ ВИКОРИСТОВУВАТИ РАЗОМ З ВНУТРІШНІМИ ДЖЕРЕЛАМИ ДАНИХ
Мене особисто цей факт убив наповал

Як же так .... то чого так чекали і вже представляли і облизувалися як ми зараз в одному запиті з'єднаємо наші дані з 1С-кой згорнемо - згрупуємо, вставимо у звіт, а не тут було...

Але природно досвідчених людей це не зупиняє... яка думка спала на думку? Правильно – тимчасові таблиці:

4) НЕ МОЖНА ЇХ ВИКОРИСТОВУВАТИ РАЗОМ З ТИМЧАСОВИМИ ТАБЛИЦЯМИ

А ось це вже не схоже на технологічні труднощі, а дуже схоже на те, що нам хочуть "щоб життя раєм не здавалося" зробити (IMG:).

5) Можна використовувати лише у з'єднаннях СКД

Для тих, хто не знає - це в СКД на вкладці "Зв'язки наборів даних". Чи часто ви ними користуєтеся? Зручно? Мабуть, так нас хочуть примусити до використання їх частіше. Ось тільки там є колонка "Умова зв'язку" та "Параметр зв'язку". У жодній типовій конфігурації не знайшов прикладу їх використання, в документації і в Хрустальової теж якось не прозоро. Хтось зможе мені пояснити, як працює "умова зв'язку". Якщо там написати РеквізитДжерела = РевізитПриймача це не працює. Звичайно, умову можна записати в полі "Вираз" - в більшості випадків цього вистачає... ось тільки якось не дуже просто виходить.

Разом раніше це завдання вирішувалося десь так:

Функція ІніціалізуватиДжерелоДаних()

ДатаНач = КомпонувальникНалаштувань.Налаштування.ПараметриДаних.Елементи.Значення;
ДатаКон = КомпонувальникНалаштувань.Налаштування.ПараметриДаних.Елементи.Значення;
Якщо ДатаКон > "20100101" Тоді
ДатаКон = "20100101";
КінецьЯкщо;

КЧ = Новий КваліфікаториЧисла (15,2);
КС = Новий Кваліфікатор Рядки(255);

МасивЧисло = Новий Масив();
МасивЧисло.Додати(Тип("Число"));

МасивРядок = Новий Масив();
МасивРядок.Додати(Тип("Рядок"));

МасивДата = Новий Масив();
МасивДата.Додати(Тип("Дата"));

//У таблицю заповнюватимемо бухгалтерську собівартість
Тип Число = Новий Опис Типів (Масив Число, КЧ);
ТипРядок = Новий ОписТипів(МасивРядок,КС);
ТипДата = Новий ОписТипів(МасивДата);

//таблиця для завантаження даних із SQL
ТЗ = Новий ТаблицяЗначень();
ТЗ.Колонки.Додати("НоменклатураКод", ТипРядку);
ТЗ.Колонки.Додати("Qnty", ТипЧисло);
ТЗ.Колонки.Додати("Період", ТипДата);

ТЗ.Індекси.Додати("Період");

//Підключаємося до SQL
РядокПідключення = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Pwd=;Data Source=;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=;Use Encryption for Data=False;Tag with column collation when possible=False;Initial Catalog=Reports";
Connection = Новий COMОб'єкт ("ADODB.Connection");
Command = Новий COMОб'єкт ("ADODB.Command");
RecordSet = Новий COMОб'єкт ("ADODB.RecordSet");
Дата = "";
Спроба
Connection.Open (СокрЛП (Рядок Підключення));
Command.ActiveConnection = Connection;
Command.CommandText = "Select * від PH where period >= "" + Рядок(Формат(ДатаНач, "ДФ=ггггММдд")) + "" and period RecordSet = Command.Execute();
RecordSet.MoveFirst();
Виняток
Повернення ТЗ;
КінецьСпроби;

Поки RecordSet.EOF = Брехня Цикл
Рядок = ТЗ.Додати();
Рядок.НоменклатураКод = RecordSet.Fields(RecordSet.Fields.Item(1).Name).Value;
Рядок.Qnty = RecordSet.Fields(RecordSet.Fields.Item(12).Name).Value;
Рядок.Період = RecordSet.Fields(RecordSet.Fields.Item(13).Name).Value;
RecordSet.MoveNext();
КінецьЦикл;

Запит = Новий Запит();
ВрТаблиця = Новий Менеджер Тимчасових Таблиць ();
Запит.ВстановитиПараметр("врТаблицяДаних", ТЗ);
Запит.ВстановитиПараметр("ДатаНач", ДатаНач);
Запит.ВстановитиПараметр("ДатаКон", ДатаКон);
Запит.Текст = "ВИБРАТИ
| врТаблицяДаних.НоменклатураКод,
| врТаблицяДаних.Qnty,
| врТаблицяДаних.Період
|ПОМІСТИТИ ТаблицяДаних

| &врТаблицяДаних ЯК врТаблицяДаних
|ДЕ
| врТаблицяДаних.Період >= &ДатаНач
| І в ТаблицяДаних.Період Запит.Виконати();
ТЗ = невизначено;

Запит = Новий Запит;
Запрос.МенеджерТимчасовихТаблиць = ВрТаблиця;
Запрос.Текст = "Тут запит за участю вірменної таблиці";

Результат = Запит.Виконати();
Повернення Результат;

КінецьФункції

Зовнішній набір = Ініціалізувати Джерело Даних ();
НабірДаних = Новий Структура();
НабірДаних.Вставити("ТаблицяSQL", Зовнішнійнабір);
Типові Звіти.

Власне рядків коду небагато і вони досить стандартні... при цьому можна користуватися повним функціоналом конструктора запитів, а в СКД віддати тільки функцію КОМПАНІВКИ ДАНИХ

Але на вигляд звичайно не так красиво ... та й вивантаження в таблицю значень щоразу потрібно код писати і перевіряти чи не помилився в назві реквізитів ... а то що нам дали в 1С виглядає якось половинчасто. Я ще не визначився, чим зручніше користуватися. Ви вирішуйте і пишіть про ваші рішення, і що вас до них підштовхнуло.

[необхідно зареєструватися для перегляду посилання]