Внешние источники данных 1с 8.3. Внешние источники данных. Можно использовать только в соединениях СКД

Внешние источники данных 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. Для подключения этой базы мы должны использовать соответствующий драйвер, но его выбор в конструкторе строки приводит к появлению ошибки Рис.8.

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

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, записав этот параметр, получим доступ к внутренним структурам этой базы.

Для объекта «Внешний источник» мало просто создать его в конфигурации, его еще надо подключить и в режиме «Предприятия». Это можно сделать из меню «Все функции»->Внешние источники. При первом входе в нашу таблицу нам надо прописать ту же самую строку соединения уже в режиме «Предприятия».

Релиз 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 * from 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С выглядит как-то половинчато. Я ещё не определился чем удобнее пользоваться. Вы решайте, и пишите о ваших решениях, и что вас к ним подтолкнуло.

[необходимо зарегистрироваться для просмотра ссылки]

Почему данная возможность вызывает такой интерес? Любой человек, который программировал в 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 * from 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С выглядит как-то половинчато. Я ещё не определился чем удобнее пользоваться. Вы решайте, и пишите о ваших решениях, и что вас к ним подтолкнуло.
Автор.

Работать с ними в списках в режиме 1С Предприятие.

Однако в работе частенько складывается ситуация, когда часть данных хранится где-то еще.

  • Интернет магазин (хранит данные обычно во внешней MySQL/SQL базе)
  • Другая база.

Для работы с такими данными, которые хранятся в других базах данных, нужно разрабатывать специальные механизмы.

В версии 1С 8.2.14 появился новый под названием Внешние источники данных 1С, которые сильно облегчают работу программиста, так как:

  • теперь специальные механизмы получения данных создавать не нужно
  • к таким данным можно обращаться обычным
  • такие данные можно просматривать в списках 1С.
    • Внешний источник данных 1С – внешняя база SQL

      Допустим у нас есть база SQL, в которой хранятся нужные нам данные. Попробуем прочитать данные из нее с помощью механизма Внешний источник данных 1С.

      Добавим внешний источник данных 1С. Нужно зайти в конфигуратор, внешние источники данных находятся в окне конфигурации, в самом низу дерева .

      1. Подключение

      Добавим новый внешний источник данных 1С, назовем произвольно.

      База данных состоит из таблиц. Нам нужно добавить их внутри добавленного внешнего источника данных. Нажмите на нем правой кнопкой мыши и выберите Добавить таблицу.

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

      В качестве драйвера в нашем конкретном случае выберем «SQL Server»

      Заполним основные параметры подключения к SQL. Имя сервера можно вписать или выбрать из списка.

      1С выполнит соединение с SQL и предложит выбрать из списка конкретную базу данных.

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

      Таблицы и колонки будут добавлены. Названия будут такие, как они определены в удаленной базе. В 1С Вы можете их переименовать (в свойствах).

      Вот пример добавленной таблицы:

      Вот пример добавленной колонки:

      Чтобы платформа 1С работала с внешней таблицей также, как она делает со справочниками 1С, в таблице можно указать дополнительные параметры:

      • В свойстве Поле ключа – указать одну из колонок, которая будет обеспечивать уникальную идентификацию строки; если уникальность обеспечивают несколько строк – то данный способ не работает (аналог поля Код)
      • В свойстве Поле представления – указать одну из колонок, которая будет обеспечивать краткое представление строки (аналог поля Наименование)
      • В свойстве Тип данных таблицы – указать Объектные данные.

      2. Просмотр

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

      В ветке Стандартные расположена специальная команда Управление внешними источниками данных, которая позволяет указывать параметры соединения (свои для режима 1С Предприятия) и проводить подключение.

      Сначала нужно указать параметры соединения с базой.

      Когда Вы делали настройку в конфигураторе, он в результате показал Вам строку соединения. Вы можете повторно увидеть ее, нажав Добавить таблицу в конфигураторе еще раз.

      Скопируйте строку соединения и укажите ее в режиме 1С Предприятие.

      После этого необходимо произвести собственно подключение.

      После того, как произведено подключение, возможно работать со списками.

      3. Использование в языке 1С

      Подключение можно производить и из кода программы на языке 1С.

      Параметры подключения указываются так:
      ПараметрыСоединения = ВнешниеИсточникиДанных.ИмяИсточникаКонфигураторе.ПолучитьОбщиеПараметрыСоединения();

      ПараметрыСоединения.АутентификацияСтандартная = Истина;
      ПараметрыСоединения.ИмяПользователя = «sa»;
      ПараметрыСоединения.Пароль = «пароль»;
      ПараметрыСоединения.СтрокаСоединения = «строка соединения из конфигуратора»;
      ПараметрыСоединения.СУБД = «MSSQLServer»;

      ВнешниеИсточникиДанных.ИмяИсточникаКонфигураторе.УстановитьОбщиеПараметрыСоединения(ПараметрыСоединения);
      ВнешниеИсточникиДанных.ИмяИсточникаКонфигураторе.УстановитьПараметрыСоединенияПользователя(ИмяПользователя(), Параметры);
      ВнешниеИсточникиДанных.ИмяИсточникаКонфигураторе.УстановитьПараметрыСоединенияСеанса(Параметры);
      ВнешниеИсточникиДанных.ИмяИсточникаКонфигураторе.УстановитьСоединение();

      Запросить данные из базы данных можно с помощью обычного . Пример текста запроса для внешнего источника НашВнешнийИсточник и таблицы ТаблицаВнешнегоИсточника:

      ВЫБРАТЬ
      ТаблицаВнешнегоИсточника.ИмяПоля
      ИЗ
      ВнешнийИсточникДанных.НашВнешнийИсточник.Таблица.ТаблицаВнешнегоИсточника»

      Внешний источник данных 1С – работа с файлом Excel

      Попробуем другой вариант – работу с файлом Excel через внешний источник данных 1С.

      Создадим простой файл Excel.

      Добавим внешний источник, назовем произвольно ФайлExcel. В него добавим таблицу «Лист1$». Как несложно заметить – это имя листа в Excel с добавлением символа «$».

      Как и в случае с SQL, добавим колонки. Их можно добавить вручную. Важно следить за соответствием типов добавляемых колонок, иначе позже можно получить ошибку вида «Несоответствие типов данных».

      Для колонки нужно указывать имя в 1С и имя в источнике данных.

      Для Excel существует особенность (ошибка вида «Слишком мало параметров. Требуется 3»):

      • Если в первой строке таблицы Excel расположены названия колонок, то нужно указывать просто имя этой колонки, например «Код».
      • Иначе нужно указывать полное имя с именем таблицы «Лист1$.Код», но в параметрах добавить «HDR=NO;».

      Параметры соединения для файла Excel выглядят вот так:

      • Файлы 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;
        Имя и путь к файлу нужно указать собственные.