Как подключить внешний источник данных 1с

от admin

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

Внешние источники данных — это прикладные объекты конфигурации. Они позволяют работать с внешними базами данных, не основанными на 1С:Предприятии. Благодаря этим объектам конфигурации информацию из внешних баз можно использовать внутри прикладного решения так же, как будто бы она хранится в самой информационной базе.

  • Microsoft Analysis Services;
  • Oracle Essbase;
  • IBM InfoSphere Warehouse.

При работе с другими СУБД некоторые конструкции языка запросов могут не работать, т. к. они ограничены возможностями того ODBC-драйвера, который используется.

Внешний источник данных состоит из набора таблиц.

Таблицы внешнего источника данных можно описать вручную, или с помощью конструктора.

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

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

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

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

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

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

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

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

К данным этих таблиц можно обращаться с помощью языка запросов.

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

Эти таблицы можно использовать в отчётах на системе компоновки данных.

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

Также на элементы этих таблиц можно ссылаться как на любые другие данные объектного типа. Например, как на элементы справочников или документы.

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

Почему данная возможность вызывает такой интерес? Любой человек, который программировал в 1С при этом достаточно неплохо знаком с SQL и хотя бы в общих чертах знаком с архитектурой и принципами разработки других технологических платформ для бизнес приложений с твердой уверенностью скажет вам — что ему нравится больше всего в 1С. Конечно конструктор запросов — самый удобный и продуманный механизм написания запросов для получения данных из реляционных структур, который я лично когда-либо встречал. А теперь 1С нам предоставили такую замечательную возможность использовать его не только с 1С, но и с любыми другими таблицами. Вот только в эту "бочку мёда" насыпана куча "ложек дёгтя". Обо всём по порядку:

1) Настройка и использование — без "танцев с бубном" не получится
a) Добавляете внешний источник данных — вроде ничего сложного
б) ставите галочку "Выбрать из списка" — обязательно — это нужно чтобы проверить работоспособность уже в начале и избавит от лишних заморочек
в) — обязательно нажимаем ". " — подключение именно ODBC. Не OLEDB как мы все привыкли, а на уровень ниже
title
г) А вот здесь будьте ОЧЕНЬ ВНИМАТЕЛЬНЫ.
title
Это драйвер ODBC — в случае использования клиент-серверной версии он должен обязательно быть на сервере. Если вы ведёте разработку на одной системе, а рабочая версия на другой (как это обычно бывает) убедитесь что вас не ждут сюрпризы. Странная рекоммендация, но выбирайте самый древний или самый общий драйвер в случае если вас не особо заботит скорость и за пределы возможностей стандарта SQL92 вы выходить не намерены. Это обеспечит вам лучшую совместимость. Например для SQL Server 2008 лучшим драйвером будет SQL Server Native Client 11, но рекоммендую выбирать просто SQL Server, иначе этот самый native client придётся устанавливать либо на сервер, либо на все клиентские машины (в случае использования файловой версии), а выигрыша особого для простых задач он не даст.
д) Стандартные диалоги выбора Сервера
title
и БД
title
е) На вопрос сохранения пароля рекомендую ответить "да", иначе так и не получится это дело запустить.
ж) Выбираете таблицу и реквизиты. замечательная возможность — её можно сразу же переименовать так как вам нравится (и реквизиты тоже), при этом в свойствах у вас будут отображаться названия полей источника данных
title
з) А теперь запускаете, открываете конструктор запросов — выбираете тупо все записи из таблицы и ОПА — ошибка. Что делать? Если у вас управляемый интерфейс — заглянуть в меню сервис, а если обычный.
Я лично использовал вот такой код:
Код 1C v 8.х
Может каких-то кусков и не нужно, но это работает.
Выполнить код нужно ОДИН РАЗ. После чего будет нормально подключаться. мистика конечно — зачем это было нужно не понятно.

2) Источники данных только для чтения — Да, чудес не бывает. но иногда так хочется.

3) НЕЛЬЗЯ ИХ ИСПОЛЬЗОВАТЬ ВМЕСТЕ С ВНУТРЕННИМИ ИСТОЧНИКАМИ ДАННЫХ
Меня лично этот факт убил наповал
alt=»title» />
Как же так. то чего так ждали и уже представляли и облизывались как мы сейчас в одном запросе соединим наши данные с 1С-кой свернём — сгруппируем, вставим в отчет, а не тут то было.
Но естественно опытных людей это не останавливает. какая мысль пришла в голову? Правильно — временные таблицы:

4) НЕЛЬЗЯ ИХ ИСПОЛЬЗОВАТЬ ВМЕСТЕ С ВРЕМЕННЫМИ ТАБЛИЦАМИ

alt=»title» />
А вот это уже не похоже на технологические трудности, а очень смахивает на то что нам хотят "чтобы жизнь раем не казалась" сделать .

5) Можно использовать только в соединениях СКД
Для тех кто не знает — это в СКД на вкладке "Связи наборов данных". Часто вы ими пользуетесь? Удобно? Видимо так нас хотят принудить к использованию их чаще. Вот только там есть колонка "Условие связи" и "Параметр связи". Ни в одной типовой конфигурации не нашел примера их использования, в документации и у Хрусталевой тоже как-то всё не прозрачно. Кто-нибудь сможет мне объяснить как работает "условие связи". Если там написать РеквизитИсточника = РевизитПриемника это не работает. Конечно условие можно записать в поле "Выражение" — в большинстве случаев этого хватает. вот только как-то не очень просто получается.

Читать:
Как переустановить клиент покерстарс покер старс на компьютере

Итого ранее эта задача решалась где-то так:
Код 1C v 8.х

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

Но на вид чуть конечно не так красиво. да и выгрузка в таблицу значений каждый раз нужно код писать и проверять не ошибся ли в названии реквизитов. а то что нам дали в 1С выглядит как-то половинчато. Я ещё не определился чем удобнее пользоваться. Вы решайте, и пишите о ваших решениях, и что вас к ним подтолкнуло.
Автор: Олег Филиппов

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

Механизм позволяющий из 1С Предприятия обращаться к данным хранящимся вне базы данных 1С. Для внешних данных имеется возможность создания форм, возможно использование их в объектах конфигурации как типообразующих данных. Получаемые данные могут быть 2 типов: Объектные (возможно использование как типа данных в реквизитах), Записи (просто набор записей). Механизм будет удобен при переходе на 1С 8 с другого ПО, в том числе с 1С Предприятие 7.7.

Запускаем среду работы с MS SQL Server, в этом примере буду использовать MS SQL Server Management Studio. В дереве правой кнопкой на ветке Базы данных — Новая.

После создания БД загрузим подготовленный мной слепок БД: перетащить файл в окно MS SQL Server Management Studio

Запускаем конфигуратор, в ветке Внешние источники добавляем новый. Внешний источник назовем «Задачи». Конструктором настроим соединение с БД (на скрине приведены параметры моей установки, у Вас они будут отличаться). Выбираем 3 таблицы, созданные скриптом: users, states, tasks.

По завершении получаем:

Посмотрим настройки для таблицы states:

Поле ключа — указывается поле уникального идентификатора (в нашем случае всегда id).

Поле представления — значение из какого поля будет использоваться при отображении (в нашем случае всегда title).

Настроим связи, т.к. данные у нас объектного типа:

Свойства таблиц и реквизитов:

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

Поле родителя — parentid

Признак незаполненного родителя — Заданное значение

Значение незаполненного родителя — 0

Запускаем 1С Предприятие. Перед использованием внешних данных потребуется 1 раз настроить доступ к данным в режиме 1С Предприятие

Надписи имеют названия колонок в БД, что не очень удобно, изменим синонимы на понятные.

Создадим формы редактирования и списка

Запускаем 1С Предприятие, смотрим результат:

Изменим представление задач, чтобы было видно номер и дату, для этого в конфигураторе в таблице Задачи сделаем следующее: Вкладка Данные — Обработчики представления. Корректируем модуль, PresentationFieldsGetProcessing — поля доступные для программного обращения для генерации представления, PresentationGetProcessing — описание правила представления.

Procedure PresentationFieldsGetProcessing(Fields, StandardProcessing)

//Вставить содержимое обработчика.

Procedure PresentationGetProcessing(Data, Presentation, StandardProcessing)

Как подключить внешний источник данных 1с

В 8.3.4 в свойствах объекта «Внешний источник данных» появилась вкладка «Функции». Для внешних таблиц MSSQL данный функционал позволяет подключить к 1С хранимые процедуры и функции на стороне SQL. В том числе и процедуры, содержащие запросы SQL на добавление и обновление данных внешней таблицы.

По сравнению с прошлым примером количество кода 1С уменьшится, поскольку подключение через COM-объект и формирование запросов SQL на стороне 1С нам больше не потребуется.

Для начала создадим тестовую таблицу с помощью скрипта в панели управления сервером SQL:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[tovar](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [nvarchar](max) NOT NULL,
[price] [numeric](18, 2) NULL,
CONSTRAINT [PK_tovar] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

Скрипт создания процедуры insert_tovar:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE insert_tovar

@name nvarchar(max),
@price numeric(18, 2)

INSERT INTO test.dbo.tovar
([name] ,[price])
VALUES (@name, @price)

Скрипт создания процедуры update_tovar:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE update_tovar

@id int,
@name nvarchar(max),
@price numeric(18, 2)

UPDATE test.dbo.tovar
SET [name] = @name
,[price] = @price
WHERE style=»white-space: pre;»>

END
GO

Теперь переходим в 1С и добавляем внешний источник данных. Подключаем таблицу SQL:

Далее, для таблицы dbo_tovar создаем формы списка и объекта. На форму списка вешаем команду «ДобавитьТовар» и обработку оповещения:

На форме объекта на командной панели размещаем команду «ЗаписатьТовар», для кнопки выставляем свойство «Кнопка по умолчанию»:

Для свойства реквизита «Объект» снимаем свойство «Сохраняемые данные», для поля «id» устанавливаем свойство «Только просмотр».

Готово, запускаем, тестируем. Для тестов использовался сервер MSSQL Server 2008 R2.

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

В описание от 1С http://v8.1c.ru/o7/201402ext/index.htm редактируют записи интерактивно и программно средствами новой платфоры.
Поставил последнюю (8.3.4.437), у меня внешний источник MS SQL открывается только для чтения. Хотя у них указано, что есть свойства таблицы: "Для всей таблицы — свойство ТолькоЧтение. ТолькоЧтение = Истина означает, что изменение данных в этой таблице невозможно".
У меня эти свойств у таблиц нет(((.

Где моя ошибка, не подскажите?

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

Похожие статьи