Подключение к внешнему источнику данных 1с
Читая анонсы обновлений 1С, задумывались, какая это замечательная возможность? Хотите использовать в своих решениях? В статье изложен опыт практического использования внешних источников данных, возможно, это "совсем не то, чего мы все так хотели".
Релиз 8.2.14.533 - наконец-то более-менее стабильный вариант 14-го релиза платформы. Наконец-то представился случай испытать в деле замечательную возможность - "внешние источники данных".
Почему данная возможность вызывает такой интерес? Любой человек, который программировал в 1С, и при этом достаточно неплохо знаком с SQL и хотя бы в общих чертах знаком с архитектурой и принципами разработки других технологических платформ для бизнес-приложений, с твердой уверенностью скажет вам, что ему нравится больше всего в 1С. Конечно конструктор запросов - самый удобный и продуманный механизм написания запросов для получения данных из реляционных структур, который я лично когда-либо встречал. А теперь 1С нам предоставили такую замечательную возможность использовать его не только с 1С, но и с любыми другими таблицами. Вот только в эту "бочку мёда" насыпана куча "ложек дёгтя". Обо всём по порядку:
1) Настройка и использование - без "танцев с бубном" не получится
a) Добавляете внешний источник данных - вроде ничего сложного.
б) Ставите галочку "Выбрать из списка" - обязательно - это нужно, чтобы проверить работоспособность уже вначале, и избавить себя от лишних заморочек.
- обязательно нажимаем ". " - подключение именно ODBC. Не OLEDB как мы все привыкли, а на уровень ниже
г)
А вот здесь будьте ОЧЕНЬ ВНИМАТЕЛЬНЫ.
Это драйвер ODBC - в случае использования клиент-серверной версии он должен обязательно быть на сервере. Если вы ведёте разработку на одной системе, а рабочая версия на другой (как это обычно бывает) убедитесь что вас не ждут сюрпризы. Странная рекомендация, но выбирайте самый древний или самый общий драйвер в случае, если вас не особо заботит скорость и за пределы возможностей стандарта SQL92 вы выходить не намерены. Это обеспечит вам лучшую совместимость. Например для SQL Server 2008 лучшим драйвером будет SQL Server Native Client 11, но рекомендую выбирать просто SQL Server, иначе этот самый native client придётся устанавливать либо на сервер, либо на все клиентские машины (в случае использования файловой версии), а выигрыша особого для простых задач он не даст.
д) Стандартные диалоги выбора Сервера
и базы данных
е) На вопрос сохранения пароля рекомендую ответить "да", иначе так и не получится это дело запустить.
ж) Выбираете таблицу и реквизиты. замечательная возможность - её можно сразу же переименовать так как вам нравится (и реквизиты тоже), при этом в свойствах у вас будут отображаться названия полей источника данных
з) А теперь запускаете, открываете конструктор запросов - выбираете тупо все записи из таблицы и ОПА - ошибка. Что делать? Если у вас управляемый интерфейс - заглянуть в меню сервис, а если обычный.
Я лично использовал вот такой код:
Может каких-то кусков и не нужно, но это работает. Выполнить код нужно ОДИН РАЗ. После чего будет нормально подключаться. мистика конечно - зачем это было нужно не понятно.
2) Источники данных только для чтения
Да, чудес не бывает. но иногда так хочется.
3) НЕЛЬЗЯ ИХ ИСПОЛЬЗОВАТЬ ВМЕСТЕ С ВНУТРЕННИМИ ИСТОЧНИКАМИ ДАННЫХ
Меня лично этот факт убил наповал
Как же так. то, чего так ждали и уже представляли и облизывались, как мы сейчас в одном запросе соединим наши данные с 1С-кой свернём - сгруппируем, вставим в отчет, а не тут-то было.
Но, естественно, опытных людей это не останавливает. какая мысль пришла в голову? Правильно - временные таблицы:
4) НЕЛЬЗЯ ИХ ИСПОЛЬЗОВАТЬ ВМЕСТЕ С ВРЕМЕННЫМИ ТАБЛИЦАМИ
А вот это уже не похоже на технологические трудности, а очень смахивает на то что нам хотят "чтобы жизнь раем не казалась" сделать :).
5) Можно использовать только в соединениях СКД
Для тех кто не знает - это в СКД на вкладке "Связи наборов данных". Часто вы ими пользуетесь? Удобно? Видимо так нас хотят принудить к использованию их чаще. Вот только там есть колонка "Условие связи" и "Параметр связи". Ни в одной типовой конфигурации не нашел примера их использования, в документации и у Хрусталевой тоже как-то всё не прозрачно. Кто-нибудь сможет мне объяснить как работает "условие связи"? Если там написать РеквизитИсточника = РевизитПриемника это не работает. Конечно условие можно записать в поле "Выражение" - в большинстве случаев этого хватает. вот только как-то не очень просто получается.
Итого ранее эта задача решалась где-то так:
Собственно строчек кода немного и они достаточно стандартны. при этом можно пользоваться полным функционалом конструктора запросов, а в СКД отдать только функцию КОМПОНОВКИ ДАННЫХ
Но на вид чуть, конечно, не так красиво. да и выгрузка в таблицу значений каждый раз - нужно код писать и проверять, не ошибся ли в названии реквизитов. а то, что нам дали в 1С, выглядит как-то половинчато. Я ещё не определился, чем удобнее пользоваться. Вы решайте, и пишите о ваших решениях, и что вас к ним подтолкнуло.
Внешние источники данных — это прикладные объекты конфигурации. Они позволяют работать с внешними базами данных, не основанными на 1С:Предприятии. Благодаря этим объектам конфигурации информацию из внешних баз можно использовать внутри прикладного решения так же, как будто бы она хранится в самой информационной базе.
Внешний источник может получать данные из ODBC-источников в операционных системах Windows и Linux, причем при работе с СУБД Microsoft SQL Server, IBM DB2, PostgreSQL и Oracle Database обеспечиваются полные возможности языка запросов. Кроме этого внешние источники данных позволяют подключить к прикладному решению многомерные источники данных, такие как:
- Microsoft Analysis Services;
- Oracle Essbase;
- IBM InfoSphere Warehouse.
При работе с другими СУБД некоторые конструкции языка запросов могут не работать, т. к. они ограничены возможностями того ODBC-драйвера, который используется.
Внешний источник данных состоит из набора таблиц.
Таблицы внешнего источника данных можно описать вручную, или с помощью конструктора.
Конструктор, используя строку соединения, может подключится к внешней базе данных и предоставить список таблиц, доступных для добавления во внешний источник.
Каждая таблица, по сути, является самостоятельным объектом конфигурации. Она содержит набор полей, для неё могут быть определены формы, созданы команды и заданы макеты.
Таблицы внешних источников используются в конфигурации точно так же, как и таблицы любых других объектов конфигурации.
Например, платформа автоматически генерирует для них формы, или же форму разработчик может создать самостоятельно.
К данным этих таблиц можно обращаться с помощью языка запросов.
Эти таблицы можно использовать в отчётах на системе компоновки данных.
Также на элементы этих таблиц можно ссылаться как на любые другие данные объектного типа. Например, как на элементы справочников или документы.
В платформе начиная с версии 8.3.5 реализована возможность записи данных в таблицы внешних источников данных. В статье рассмотрена данная функциональность, расширяющая существующие возможности по интеграции конфигурации со сторонними системами.
Применимость
В статье рассматривается платформа 1C 8.3.5. Материал актуален и для текущих релизов платформы.
Запись во внешние источники данных в «1С:Предприятие 8»
В платформе 8.2.14 в дерево метаданных был добавлен новый объект – внешние источники данных. Назначение этого механизма – получение данных из внешних баз по отношению к 1С.
С выходами новых релизов платформы внешние источники данных развивались, например, стало возможным помещение во временные таблицы, выполнение соединений с обычными таблицами.
В статье мы рассмотрим, какие инструменты есть у разработчика для осуществления записи во внешние источники данных.
Все действия выполнялись на СУБД Microsoft SQL Server 2008 R2.
В платформе 8.3.4 была реализована возможность использования функций, описанных во внешних источниках данных.
Эта возможность позволяет запускать хранимые процедуры на стороне SQL Server, а при их помощи обращаться к данным внешних источников, в том числе и на запись.
Разберем пример. Создадим при помощи SQL Management Studio новую базу данных с именем kursy_test. Все дальнейшие эксперименты будут выполняться на ней.
В этой базе создадим таблицу nomenklatura, для этого напишем скрипт следующего содержания:
USE [ kursy_test ]
GO
CREATE TABLE [ dbo ] . [ nomenklatura ](
[ id ] [ int ] NOT NULL ,
[ description ] [ nvarchar ]( 150 ) NOT NULL ,
[ price ] [ numeric ]( 15 , 2 ) NULL ,
CONSTRAINT [ PK_id ] PRIMARY KEY ([ id ])
)
GO
В результате выполнения будет создана таблица следующей структуры:
Теперь нам нужно создать две хранимые процедуры, с помощью которых и будет выполняться модификация данных.
Первую процедуру назовем insert_nomenklatura. Она будет предназначена для добавления новой строки в таблицу. Скрипт для ее создания будет выглядеть так:
USE [ kursy_test ]
GO
CREATE PROCEDURE insert_nomenklatura
@id int ,
@description nvarchar ( 150 ),
@price numeric ( 15 , 2 )
AS
BEGIN
INSERT INTO [ kursy_test ] .dbo. [ nomenklatura ] ([ id ], [ description ] ,[ price ])
VALUES ( @id , @description , @price )
END
GO
Вторая процедура с именем update_nomenklatura будет выполнять обновление уже существующей в таблице записи. Чтобы ее создать, был запущен такой скрипт:
USE [ kursy_test ]
GO
CREATE PROCEDURE update_nomenklatura
@id int ,
@description nvarchar ( 150 ),
@price numeric ( 15 , 2 )
AS
BEGIN
UPDATE [ kursy_test ] .dbo. [ nomenklatura ]
SET [ description ]= @description ,[ price ]= @price
WHERE [ id ]= @id
END
GO
В Обозревателе объектов созданная таблица и две хранимые процедуры выглядят следующим образом:
Все подготовительные действия на стороне Microsoft SQL Server мы выполнили, теперь переходим в конфигуратор “1С:Предприятие 8”.
Создаем новый внешний источник данных с именем Nomenklatura. При создании новой таблицы в этом источнике данных указываем следующие параметры подключения к источнику данных:
Строку соединения укажем следующую:
При наличии пароля у пользователя sa его необходимо указать в параметре Password строки соединения.
Если все параметры подключения указаны корректно, при нажатии на кнопку ОК, откроется окно, содержащее таблицы, доступные в источнике данных:
Для увеличения нажмите на изображение.
Отмечаем галочками интересующие нас поля таблицы. При нажатии кнопки Готово во внешнем источнике данных Nomenklatura будет создана таблица dbo_nomenklatura:
Теперь переключаемся на закладку “Функции” нашего источника данных.
При помощи аналогичного мастера производим добавление двух хранимых процедур:
Получаем следующий внешний вид закладки “Функции”:
Теперь запрограммируем пользовательский интерфейс для работы с внешним источником данных.
В форме списка на командной панели расположим кнопку “Добавить” со следующим обработчиком:
&НаКлиенте
Процедура Добавить ()
Оповещение = Новый ОписаниеОповещения ( “ОткрытьТаблицуЗавершение” , ЭтотОбъект );
ОткрытьФорму (
“ВнешнийИсточникДанных.Nomenklatura.Таблица.dbo_nomenklatura.ФормаОбъекта” , , , , , ,
Оповещение , РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс );
КонецПроцедуры
В форме объекта разместим кнопку “Сохранить”, при нажатии на которую выполняется следующий код:
В режиме предприятия форма списка выглядит следующим образом:
Форма объекта представлена ниже:
Для увеличения нажмите на изображение.
После нажатия на кнопку “Сохранить” вызывается хранимая процедура на SQL Server, в таблицу базы данных будет добавлена новая запись.
Таким образом, при помощи хранимых процедур мы реализовали запись во внешние источники данных.
В платформе 8.3.5 появилась новая возможность – запись во внешние источники данных напрямую, минуя разобранный выше механизм хранимых процедур.
Данные можно редактировать как программно, так и интерактивно. И для нашего примера прибегать к конфигурированию не придется.
В командных панелях и в меню “Еще” можно увидеть стандартные кнопки, такие как “Создать”, “Скопировать”, “Изменить” и т.д.
Для увеличения нажмите на изображение.
А в форме объекта появились кнопки “Записать” и “Записать и закрыть”:
Как видно, теперь работа с внешними источниками похожа на работу со справочниками, документами и т.д.
Рассмотрим, какие изменения были произведены на уровне метаданных, чтобы сделать возможным запись во внешние источники данных.
У таблицы данных добавлено новое свойство ТолькоЧтение (тип – булево).
Если это свойство установлено в Истина, запись данных в эту таблицу средствами платформы невозможна.
Поле таблицы данных обладает теперь свойствами:
- ТолькоЧтение (тип – булево) – возможно ли изменение данных в этом поле;
- РазрешитьNull (тип – булево) – возможно ли в данном поле сохранять значение NULL.
Свойство Только чтение следует устанавливать в значение Истина для полей базы данных с автоматическим изменением, автоматически формируемые ключевые поля, вычисляемых полей и т. д.
Добавлять, изменять и удалять данные во внешних источниках можно с помощью встроенного языка.
Для этого у объектов ВнешнийИсточникДанныхТаблицаНаборЗаписей и ВнешнийИсточникДанныхТаблицаОбъект были реализованы новые методы Записать() и Удалить().
Рассмотрим пример программного добавления новой записи для внешнего источника данных, рассмотренного выше.
В модуле объекта таблицы внешнего источника данных теперь можно задать обработчики событий, возникающих при записи, такие как ПередЗаписью(), ПриЗаписи() и т. д.:
В данной статье были рассмотрены два варианта записи данных во внешние источники данных – при помощи хранимых процедур и при помощи новых механизмов платформы 8.3.5.
Таким образом, в платформе теперь реализованы механизмы для полноценной интеграции с внешними приложениями.
В редакции 8.3.6 описываемый выше функционал был расширен при помощи новых специальных методов ПолучитьИзменяемыеПоля() и УстановитьИзменяемыеПоля(). С помощью них предоставлена возможность выполнять операцию записи в те поля таблицы ВИД, которые помечены в конфигураторе как доступные только для чтения. Благодаря этому стало возможным реализовать такой сценарий, при которой запись в отдельные поля таблицы ВИД возможна только в тех случаях, когда это необходимо в соответствии с бизнес-логикой приложения.
В редакции 8.3.7 был доработан механизм, определяющий какие конкретно поля таблиц ВИД могут содержать значения NULL. До этого момента все таблиц ВИД могли принимать это значения. Такое изменение связано с увеличением скорости сортировки в динамических списках по этим полям.
В редакции 8.3.8, наконец, стало возможным определение того факта, что внешний источник данных находится в состоянии транзакции. Эта функциональность представлена новым методом ВнешнийИсточникДанныхМенеджер.ТранзакцияАктивна()
В заключении отметим, что для внешних источников данных, как было показано выше, описываются таблицы данных из классической реляционной модели. Платформа же использует иную парадигму работу с данными, предлагая разработчику некоторый набор типов прикладных объектов (справочники, документы, регистры и т.д.). Именно поэтому система при работе с таблицами внешних источников данных не поддерживает большую часть функциональности, которая присуща ее “родным” объектам. Поэтому рекомендуется воздержаться от разработки какой-то бизнес-логики, с учетом использования таблиц ВИД, если это не связано с задачами интеграции с уже существующими системами. Или, говоря по простому, нужно стараться избегать хранить данные, которые активно используются в вашем приложении, в какой-то другой таблице внешней системы, если они этой системой не используются.
В следующей статье мы рассмотрим логическое продолжение использования технологии внешних источников данных в системе «1С:Предприятие».
PDF-версия статьи для участников группы ВКонтакте
Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.
Статья в PDF-формате
Если Вы уже участник группы – нужно просто повторно авторизоваться в ВКонтакте, чтобы скрипт Вас узнал. В случае проблем решение стандартное: очистить кеш браузера или подписаться через другой браузер.
Комментарии / обсуждение (185):
В листинге процедуры Добавить упоминается метод оповещения ОткрытьТаблицуЗавершение.
Но его код не приведен. Можете подсказать, какая там логика должна быть описана?
Добрый день!
Указанный метод должен содержать действия, которые будут выполнены после того, как пользователь закроет открывшуюся форму объекта dbo_nomenklatura. Нам не требуются никакие действия после закрытия этой формы, поэтому обработчик может быть пустой.
В версии платформы 8.3.5.1068 (и позднее) появилась возможность добавления, изменения и удаления данных во внешних источниках программными средствами 1С. Примеры данной возможности представлены в данной статье.
Внешние источники данных (добавление, изменение, удаление) на примерах
В версии платформы 8.3.5.1068 (и позднее) появилась возможность добавления, изменения и удаления данных во внешних источниках программными средствами 1С. Примеры данной возможности представлены в данной статье.
Для того, чтобы запись во внешние источники стала возможной, компания 1С добавила новые свойства таблицам данных и полям внешних источников:
- Для всей таблицы - свойство ТолькоЧтение. ТолькоЧтение = Истина означает, что изменение данных в этой таблице невозможно;
- Для отдельных полей таблицы - свойства ТолькоЧтение, РазрешитьNull и ЗначениеЗаполнения:
- ТолькоЧтение = Истина означает, что изменение данных в этом поле невозможно;
- РазрешитьNull = Истина означает, что в данное поле может быть записано значение NULL;
- ЗначениеЗаполнения содержит стандартное значение этого поля (если такое существует).
Эти свойства вы (при описании таблиц вручную) или платформа (при создании таблиц конструктором) можете использовать следующим образом.
- ТолькоЧтение = Истина устанавливать, например, для представлений (view), таблиц, получаемых на основе выражения (результат функции) и подобных. Данные в таких таблицах изменять нельзя;
- ТолькоЧтение = Истина указывать для полей, устанавливаемых автоматически (AUTOINCREMENT), вычисляемых полей и подобных. Данные в таких полях изменять нельзя;
- РазрешитьNull = Истина устанавливать для всех полей, кроме ключевых, и тех, которые во внешнем источнике описаны как NOT NULL;
- ЗначениеЗаполнения поля устанавливать в том случае, когда во внешнем источнике указано стандартное значение этого поля (значение DEFAULT).
Добавлять, изменять и удалять данные во внешних источниках можно с помощью встроенного языка или интерактивно. Во встроенном языке для этого используются следующие методы менеджера таблицы:
- СоздатьНаборЗаписей() - для необъектных таблиц;
- Новый метод СоздатьОбъект() - для объектных таблиц.
Соответственно у объектов ВнешнийИсточникДанныхТаблицаНаборЗаписей и ВнешнийИсточникДанныхТаблицаОбъектпоявились новые методы Записать() и Удалить().
Добавление данных
При добавлении данных во внешний источник вы создаёте объект (или набор записей), устанавливаете значения полей и записываете. При этом есть некоторые особенности, о которых полезно знать.
Например, при попытке установить значение поля, у которого ТолькоЧтение = Истина, будет выдана ошибка. А при непосредственной записи в базу данных в выражении INSERT такие поля будут пропущены. В остальные поля записываются те значения, которые вы им присвоили. Поэтому значения Null и значения по умолчанию нужно присваивать полям в явном виде.
Далее представлен небольшой пример. В нём данные добавляются в объектную таблицу shop_feature, у которой существует два поля:
- id (РазрешитьNull = Истина);
- name (РазрешитьNull = Истина);
Выполнение оператора Записать() приведёт к тому, что сначала будет вызван обработчик события ПередЗаписью, затем выполнена физическая запись в таблицу внешнего источника (INSERT), затем будет вызван обработчик события ПриЗаписи.
С ключевым полем таблицы внешнего источника вы можете поступать следующим образом. Если ключевое поле доступно для изменения, то тогда вы «вручную» задаёте его значение перед записью. Если изменение ключевого поля запрещено, то платформа самостоятельно получит ключ в INSERT или непосредственно после. Вы можете вмешаться в этот процесс с помощью метода УстановитьСсылкуНового() до физической записи (в обработчике события ПередЗаписью) или непосредственно после физической записи (в обработчике события ПриЗаписи).
Изменение данных
При изменении данных обновляются значения всех полей таблицы, у которых ТолькоЧтение = Ложь.
Если же необходимо записать только некоторые поля, вы можете указать их перечень прямо из встроенного языка с помощью методов УстановитьЗаписываемыеПоля() и ПолучитьЗаписываемыеПоля().
Удаление данных
При удалении данных выполняется непосредственное удаление строки из таблицы базы данных. При этом поиск ссылок на удаляемый объект не выполняется. Если такая функциональность нужна, вы можете запрограммировать её самостоятельно в обработчике события ПередУдалением().
Транзакции
Чтение данных внешних источников, как и ранее, выполняется вне транзакции, а при записи платформа открывает неявную транзакцию. При этом и чтение, и запись вы можете выполнять и в явных транзакциях с помощью методов объектаВнешнийИсточникДанныхМенеджер:
Блокировки
Для управления блокировками рекомендуется использовать свойство внешнего источникаРежимУправленияБлокировкойДанных:
а также свойство таблицы внешнего источника УровеньИзоляцииТранзакций:
Кроме этого, можно самостоятельно задать уровень блокировок в методе НачатьТранзакцию().
Дополнил типовую статью примерами) Будет больше времени - добавлю больше примеров.
В новой редакции платформы 1С 8.2.14 появилась возможность устанавливать связь с внешними источниками данных. У меня была идея написать программу для прямой работы с базой данных на нашем сайте из 1С:Предприятия 8
В новой редакции платформы 1С 8.2.14 появилась возможность устанавливать связь с внешними источниками данных. У меня была идея написать программу для прямой работы с базой данных на нашем сайте из 1С:Предприятия 8
По шагам надо сделать следующее:
1. Скачиваем ODBC коннектор с сайта поставщика mysql.
2. Устанавливаем его на компьютер.
3. Заходим в конфигуратор 1С и добавляем новый внешний источник данных.4. Добавляем внешнюю таблицу:
5. Указываем режим автоматического формирования списка таблиц
6. Указываем параметры соединения. Пишем руками:
и вбиваем логин и пароль для доступа к базе mysql
7. Если все ок, то мы увидим список таблиц из базы данных сайта.
8. Выбираем нужную таблицу галочкой
9. И получаем ее в дереве метаданных.
10. Создаем обработку для тестирования с одной процедурой:
Тут необходимо понимать что в обработке надо обязательно заново прописывать параметры соединения с внешней базой данных, они не хранятся в конфигурации.
11. Ставим точку останова на конец процедуры и запускаем обработку в режиме предприятия.
p.s. мы получили данные из внешней таблицы mysql средствами языка 1С. Что самое интересное, внешние таблицы доступны в конструкторе запроса.
upd: как можно изменять данные через ODBC я написал в этом посте.
Специальные предложения
В новой редакции платформы 1С 8.2.14 появилась возможность устанавливать связь с внешними источниками данных. У меня была идея написать программу для прямой работы с базой данных на нашем сайте из 1С:Предприятия 8
Очень интересная возможность новой платформы, да все никак руки не доходят ее попробовать.
Хочется уточнить один вопрос: если я установлю драйвер MySQL, а потом настрою его в "Администратор источников данных ODBC" где-нибудь в "Пользовательский DSN" или "Системный DSN", соответственно прописав там параметры подключения - смогу ли я потом подключаться к этому источнику просто по имени этой настройки? И понадобится ли заново прописывать настройки подключения к источнику данных в каждой обработке при таком подключении?(1) я экспериментировал, параметры подключения вводил дважды:
1) в режиме конфигуратора для автоматического создания структуры таблиц
2) в режиме предприятия для отображения динамического списка записей таблиц.
Параметры вводились только один раз, они запоминаются в каком-то менеджере внешних источников данных, который доступен через "все функции" -> Стандартные -> Управление внешними источниками данных(3) Автор пишет "Тут необходимо понимать что в обработке надо обязательно заново прописывать параметры соединения с внешней базой данных, они не хранятся в конфигурации.". Получается, что хранятся? И как потом строка подключения из обработки выглядит? Можно пример?
(5) Спасибо за дополнительную информацию. Только Ваше подключение практически идентично авторскому. И парочка примечаний "Важно". Выходит к внешнему источнику данных через подключение, описанное в (1), встроенными средствами платформы обратиться нельзя.
Ладно, пока сам не попробую приставать больше не буду.(1) V_V_V, насчёт подключения с использованием DSN: там просто строка подключения будет иметь вид "DSN=;".
Теоретически, так можно избавиться от необходимости указывать логин/пароль в коде.очень полезная возможность новой версии платформы представлена наглядно в очень полезной публикации этого сообщества :) спасибо :)
Да, все это безусловно хорошая вещь - внешние источники данных.
Я вначале сильно обрадовался когда узнал что 1С сделала такой механизм.
Но потом был сильно огорчен когда узнал что с этими источниками можно работать только на чтение.:((9) Spacer,
Ну собственно не совсем понятно в чем беда. Изменять данные через ODBC вроде всегда можно было. А тут вся фишка в том что с таблицей через запросы можно работать. Вроде запросы всегда только на чтение в 1С использовались :)Набросаю сегодня завтра пример как я на сайте в данные меняю. Дам ссылку тут.
upd. На инфостарт не в силах перепостить сейчас, потому кому интересно как менять данные через ODBC, смотрите тут .
Попозже оформлю на инфостарте статью.Да, все это безусловно хорошая вещь - внешние источники данных.
Я вначале сильно обрадовался когда узнал что 1С сделала такой механизм.
Но потом был сильно огорчен когда узнал что с этими источниками можно работать только на чтение.:(
Обидно что только на чтение, я уже размечтался что базу данных своего сайта смогу прикрутить и из 1С грузить информацию на сайтКак то еще на тестовом релизе пытался связать с базой данных под управлением СУБД LETODB.Так и не получилось победить грабли вида иррациаональных чисел, и если среди DBF файлов базы имелись "пароленные" dbfки их прочитать так и не удалось, пока dbf редактором не исправил заголовок файла. а была такая надежда :(
За статью безусловно плюс. Как только появился 14 релиз 8.2 я пыталась подключить через внешние таблицы екселевский файл, пока результат отрицательный. У кого-нибудь получилось?
мне бы было интересно как подключиться к файлу базы данных на сайте (например sqlite) - не задавались таким вопросом?
(15) aximo,
Я думаю что принцип соединения аналогичный.
Сначала качаем ODBC драйвер для sqlite.Потом из 1С прописываем сотроку соединения по аналогии
Под рукой нет такой базы чтобы проверить, но суть примерно такая.
sqlite - это файл. допустим он лежит на запароленном фтп. мне кажеться, что подключение будет несколько иное. кто знает - отпишитесь
Если база на запороленном ftp то надо вероятно другими средствами делать доступ, например поднимать ssh тонель и через него самбой шарить файл базы данных. Ну и строка подключения будет какой то такой.
Очень интресная тема.И очень полезная,если параметры подключения действительно хранятся в конфигураторе
vec435 пишет:
Очень интресная тема.И очень полезная,если параметры подключения действительно хранятся в конфигуратореА они там не хранятся :)
Потестировал на MySQL. Вывод, бестолковая приблуда, зачем промежуточный механизм? какие плюсы использования.
Парни что я делаю не так? поставил себе последнюю платформу(8.3.5.1146), подключил базу через внешний источник данных. Если в конструкторе запросов выбираю поле без нижнего подчеркивания - то все работает. Если выбираю поле с нижним подчеркиванием, то выдает ошибку:
: Ошибка при вызове метода контекста (Выполнить)
Таблица = Запрос.Выполнить().Выгрузить();
по причине:
Ошибка выполнения запроса
по причине:
Ошибка внешней базы данных:
ошибка при выполнении запроса
по причине:
Ошибка ODBC. SQLSTATE: 42000
Номер ошибки: 1064
Описание: [MySQL][ODBC 5.1 Driver][mysqld-5.5.25]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"section_id"
FROM lesson_article T1' at line 2а вот как на 2003 сервере х64 получить доступ к xbase через ODBC . ни в какую не могу загрузить дрова.
Всем доброго дня! Начал разбираться с использованием внешних источников. Столкнулся со следующей проблемой. Создал форму списка для таблицы MySQL. Подключение к Базе MySQL происходит, в обработчике загрузки формы делаю подключение. Но вываливается ошибка и, соответственно таблица пустая. Прилагаю скрин ошибки.
(27) bssat, непонятно почему, но у меня в в рабочем коде выскочила точно такая же ошибка как у вас на скриншоте. Пока разбираюсь в чем дело.
у менея точно такая же ошибка, походу при трансляции запроса 1с в mysql есть какойто ограничение по символам, изза етого формируется неправельный запрос (посмотри свой скрин там видно что текст запроса обрезан) если выбрать только 1-3 поля и они уместятся в запросе тогда работает, пока не разобрался с проблемой, возможно глючный ODBC , возможноно и в самой платформе глюк
(30) roha, У меня с момента написания статьи запрос работал без проблем до 26 декабря в фоновом процессе. Что произошло я не понимаю.
Рядом с поломанным запросом лежит другой, к другому ресурсу и он нормально отрабатывает команды из 1С. Пробовал вручную через Mysql front написать запрос, все работает отлично.
Что то в механизме трансляции изменилось, по-моему после обновления на 8.2.15.289Читайте также: