Uploaded by wavene7990

Текст

advertisement
В процессе работы прикладных решений «1С:Предприятия» может возникнуть потребность получить и изменить данные, хранящиеся во внешних
базах данных, созданных с помощью различных сторонних СУБД (Microsoft
SQL Server, PostgreSQL, MySQL и т. п.). Эти базы данных могут быть
как реляционными, так и аналитическими.
Для доступа к внешним данным в платформе «1С:Предприятие» существует
объект конфигурации ВнешниеИсточникиДанных. В состав внешнего
источника данных могут входить таблицы и функции реляционного
источника данных и кубы аналитического источника данных.
Для того чтобы использовать информацию из внешних источников
данных
в прикладном решении «1С:Предприятия», нужно:
■ Изучить структуру внешнего источника данных и понять, какая
информация (таблицы и поля или функции) необходима для работы
алгоритмов
или отчетов в «1С:Предприятии».
■ Создать объект ВнешнийИсточникДанных, содержащий необходимые подчиненные таблицы и поля. Это можно либо сделать вручную,
либо заполнить структуру данных этого объекта из внешнего источника
данных.
■ Реализовать использование созданных объектов в прикладном решении.
■ Выполнить настройку параметров подключения к внешнему источнику
данных в той сети, где будет использоваться прикладное решение. Эти
параметры могут отличаться от тех, которые использовались при загрузке
структуры внешнего источника данных.
Для подключения к внешнему источнику данных с помощью DSN
можно
воспользоваться специальными утилитами администрирования ODBC,
которые могут сформировать описание источника данных, и затем
указать
в параметрах соединения специальную конструкцию вида DSN=<ИмяDSN>.
Описания источника данных могут быть пользовательскими и системными. Пользовательские описания источников данных доступны на данном
компьютере и только тому пользователю, который создавал этого описание.
Системное описание создается системным администратором и доступно
всем пользователем данного компьютера.
Чтобы в ОС Windows запустить эту утилиту, нужно выполнить команду
Панель управления > Администрирование > Источники данных (ODBC). При
этом открывается утилита администрирования, соответствующая версии
операционной системы
При описании полной строки соединения параметры строки соединения
должны записываться парами КлючевоеСлово=Значение и разделяться
символом «;».
DRIVER=MySQL ODBC 8.0 Unicode Driver;User ID=root;
Password=password;Data Source=localhost;Database=spa
При получении структуры внешнего источника данных платформа автоматически пытается определить, какие данные расположены в таблице: объектные
или необъектные. Таблица будет считаться объектной, если для нее указано
только одно ключевое поле, и необъектной в противном случае. Если платформа ошиблась с указанием ключевых полей, можно вручную
изменить
состав полей, которые образуют ключ таблицы. Если таблица
определена
как объектная, у нее можно указать поле, которое формирует представление
данных такого типа. Поле представления необходимо указать вручную.
Затем платформа преобразует типы полей таблиц внешнего источника
данных к типам «1С:Предприятия»: число, строка, дата, булево, уникальный
идентификатор, двоичные данные и типы, связанные с объектными
табли-
цами источников данных. Если платформа неправильно выбрала тип колонки
таблицы (например, ссылочное поле), его можно изменить вручную.
Как уже говорилось, в качестве внешних источников данных для наших
примеров мы будем использовать схемы, созданные с помощью СУБД
MySQL. Эта СУБД предварительно установлена на локальный
компьютер,
на котором будут демонстрироваться примеры. Вместе с ней также установлена оболочка MySQL Workbench, с помощью которой мы создадим внешние
схемы, таблицы и функции.
Итак, сначала создадим схему goods. В этой схеме создадим таблицу goods
с ключевым полем id типа int(10) и полем description типа varchar(45).
У поля ключа включены свойства Primary Key и Not Null. Это значит,
что поле id – это поле первичного ключа, и в этом поле не может содержаться
значение Null. В поле description, наоборот, по умолчанию записывается
Null.
Добавим в эту таблицу несколько записей.
Затем создадим схему spa. В этой схеме создадим таблицу clients с ключевым
полем id типа int(10) и полем name типа varchar(30). У поля ключа включены свойства Primary Key, Not Null, Unsigned, Auto Increment.
Это значит, что поле id – это поле первичного ключа,
самовозрастающее,
беззнаковое и в этом поле не может содержаться значение Null. В поле name,
наоборот, по умолчанию записывается Null.
Добавим в эту таблицу несколько записей.
Пример программного кода
&НаСервере
Процедура ЗагрузитьТоварыИзВнешнегоИсточника()
// Создать менеджер справочника Товары.
Товары = Справочники.Товары;
// Получить список товаров с помощью запроса к таблице goods внешнего
источника данных Товары.
Запрос = Новый Запрос;
Запрос.Текст =
″ВЫБРАТЬ
| Товары.id КАК Товар,
| Товары.description КАК Наименование
|ИЗ
| ВнешнийИсточникДанных.Товары.Таблица.goods КАК Товары
|
|УПОРЯДОЧИТЬ ПО
| Товар″;
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
// Добавить товары из таблицы goods в справочник Товары, если их там еще
нет.
Пока Выборка.Следующий() Цикл
ТоварСсылка = Товары.НайтиПоНаименованию(Выборка.Наименование,
Истина);
Если ТоварСсылка = Товары.ПустаяСсылка() ИЛИ ТоварСсылка =
Неопределено Тогда
Товар = Товары.СоздатьЭлемент();
Иначе
Товар = ТоварСсылка.ПолучитьОбъект();
КонецЕсли;
Товар.Наименование = Выборка.Наименование;
Товар.Записать();
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ВыгрузитьТоварыВоВнешнийИсточник()
// Создать менеджер таблицы goods внешнего источника данных Товары.
Товары = ВнешниеИсточникиДанных.Товары.Таблицы.goods;
// Получить список товаров с помощью запроса к справочнику Товары.
Запрос = Новый Запрос;
Запрос.Текст =
″ВЫБРАТЬ
| Товары.Код КАК Код,
| Товары.Наименование КАК Наименование
|ИЗ
| Справочник.Товары КАК Товары
|
|УПОРЯДОЧИТЬ ПО
| Код″;
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
// Добавить товары из справочника Товары во внешнюю таблицу goods, если
их там еще нет.
Пока Выборка.Следующий() Цикл
ТоварСсылка = Товары.НайтиПоПолю(″description″,
Выборка.Наименование);
Если ТоварСсылка = Товары.ПустаяСсылка() ИЛИ ТоварСсылка =
Неопределено Тогда
Товар = Товары.СоздатьОбъект();
Иначе
Товар = ТоварСсылка.ПолучитьОбъект();
КонецЕсли;
Товар.id = Число(Выборка.Код);
Товар.description = Выборка.Наименование;
Товар.Записать();
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ДобавитьПроцедуруВоВнешнийИсточник(СтрокаПроцедуры)
// Получить значение ключа с помощью функции
ПолучитьМаксимальныйКлючТаблицы()
// внешнего источника данных Спа.
ЗначениеКлюча =
ВнешниеИсточникиДанных.Спа.ПолучитьМаксимальныйКлючТаблицы() +
1;
// Создать менеджер таблицы spa_treatments внешнего источника данных
Спа.
Процедуры = ВнешниеИсточникиДанных.Спа.Таблицы.spa_treatments;
// Найти запись в таблице spa_treatments по наименованию добавляемой
процедуры.
Ссылка = Процедуры.НайтиПоПолю(″description″, СтрокаПроцедуры);
// Добавить новую процедуру в таблицу spa_treatments, если ее там еще нет.
Если Ссылка = Процедуры.ПустаяСсылка() ИЛИ Ссылка = Неопределено
Тогда
НоваяПроцедура = Процедуры.СоздатьОбъект();
// Получить и установить изменяемые поля таблицы.
ИзменяемыеПоля = НоваяПроцедура.ПолучитьИзменяемыеПоля();
Если ИзменяемыеПоля.Найти(″id″) = Неопределено Тогда
// Включить ключевое поле в состав изменяемых полей для новой записи.
ИзменяемыеПоля.Добавить(″id″);
НоваяПроцедура.УстановитьИзменяемыеПоля(ИзменяемыеПоля);
КонецЕсли;
// Записать значение ключа в ключевое поле.
НоваяПроцедура.id = ЗначениеКлюча;
НоваяПроцедура.description = СтрокаПроцедуры;
НоваяПроцедура.Записать();
КонецЕсли;
КонецПроцедуры
Download