|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
Добрый день ! У меня возник следующий вопрос - есть самописная конфигурация на 1С 8.2, база в файловом варианте на сервере Win 2008 R2. Необходимо с заданной периодичностью организовать выгрузку данных (справочников и документов) из 1С в SQL-ю базу (не 1С - овскую), которая в свою очередь развернута на MS SQL 2012. Структура данных - достаточно развернутая, т.е. это не просто перекачка данных один в один из 1С в SQL. Периодичность обмена данными - предположительно 1 раз в 2 минуты. Я никогда не занимался вопросами интеграции между 1С 8 и SQL Server, в связи с чем вопросы: - Какие прикладные механизмы 1С 8 предпочтительнее задействовать для обмена данными в данном случае - имеет ли смысл задействовать регламентные задания, которые будут с заданной периодичностью запускать написанную мной обработку обмена или предпочтительнее что то еще ? - Какие win - довые механизмы желательно задействовать для доступа к объектам SQL с учетом достаточно высокой интенсивности обмена данными - имеет ли смысл использовать ODBC, OLE DB или что то еще ? - Как все-таки правильнее было бы организовать обмен - в обработке прописывать всю процедуру обмена или просто генерировать SQL - скрипт, который и передавать на выполнение серверу ? Простите за некоторый сумбур в вопросах, просто я даже не знаю, с какой стороны приступить ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2013, 16:34 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
>имеет ли смысл задействовать регламентные задания база файловая... их нельзя будет повесить просто на сервер приложений - на клиетской машине должен будет всегда запущен "бот"... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2013, 16:37 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
Я думал завести специального пользователя, под которым будет постоянно запущена 1С-ка и под которым соответственно будет периодически запускаться обработка. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2013, 16:42 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
>- Какие win - довые механизмы желательно задействовать для доступа к объектам SQL с учетом достаточно высокой интенсивности обмена данными - имеет ли смысл использовать ODBC, OLE DB или что то еще кроме интенсивности еще надо знать средний объем в одном цикле обмена вариантов море... от прямой записи через ado до подготовки средствами 1с файла xml ( http://v8.1c.ru/overview/xdto.htm) и засасыванием его средствами sql типа dts люди более опытные еще вариантов накидать могут я думаю ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2013, 16:43 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
FduchunЯ думал завести специального пользователя, под которым будет постоянно запущена 1С-ка и под которым соответственно будет периодически запускаться обработка. ну да, так в файловом режиме это и крутится ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2013, 16:44 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
Касательно объема - точно сказать не могу пока, но, с прикладной точки зрения, наибольший прирост ожидается в отношении 3 таблиц, средний прирост по которым за день - около 100 строк в каждой. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2013, 17:02 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
Fduchun, так и выгружать прирост - только измененные данные, а не все таблицы целиком ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2013, 17:09 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
А каким-образом можно выгружать только те данные, которые были внесены/изменены с момента последней выгрузки - ввести некоторое поле-счетчик, которое обновлять после каждой выгрузки ? И соответственно выгружать данные только в соответствии с значением данного поля ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2013, 17:16 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
FduchunА каким-образом можно выгружать только те данные, которые были внесены/изменены с момента последней выгрузки - ввести некоторое поле-счетчик, которое обновлять после каждой выгрузки ? И соответственно выгружать данные только в соответствии с значением данного поля ? Два основных варианта: 1. на уровне платформы - организовать План Обмена,в состав которого включены нужные типы данных. Изменения платформа будет фиксировать сама, остается использовать механизм сообщения обмена для выделения этих изменений. Недостаток - все изменения надо обрабатывать-передавать одновременно, в одном сообщении, что не всегда подходит: стиль "это изменение отправим сейчас, а это - когда-нибудь в другой раз" так просто не пройдет. 2. Подписка на событие ,например на "ПослеЗаписи" для нужных типов данных, и регистр сведений, в котором ссылки на изменения складывать/забирать. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2013, 17:24 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
Просто сама структура выгрузки значительно усложняется - например, где гарантия, что выгруженные данные были загружены в базу ? Получается нужно будет передавать из SQL в 1С номер последней удачной загрузки и выгружать данные анализируя данные показатель… Насколько это корректно, вот в чем вопрос... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2013, 17:27 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
FduchunПросто сама структура выгрузки значительно усложняется - например, где гарантия, что выгруженные данные были загружены в базу ? Получается нужно будет передавать из SQL в 1С номер последней удачной загрузки и выгружать данные анализируя данные показатель… Насколько это корректно, вот в чем вопрос... Механизм сообщений обмена это учитывает: обмен двустороний, в ответном сообщении должна содержаться квитанция с номером принятого последнего принятого сеанса. Пока такая квитанция не будет получена, платформа не удаляет из таблицы изменений объекты (точнее - ссылки на них), которые выгружались в этом или более поздних сеансах, и будет предлагать к выгрузке в следующих. И только когда квитанция с номером принятого сообщения придет - все ссылки, которые выгружались в подтвержденном сеансе, из таблиц изменений будут удалены. Таблицы изменений,кстати, можно и отдельно читать, запросами. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2013, 17:33 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
pailFduchunПросто сама структура выгрузки значительно усложняется - например, где гарантия, что выгруженные данные были загружены в базу ? Получается нужно будет передавать из SQL в 1С номер последней удачной загрузки и выгружать данные анализируя данные показатель… Насколько это корректно, вот в чем вопрос... Механизм сообщений обмена это учитывает: обмен двустороний, в ответном сообщении должна содержаться квитанция с номером принятого последнего принятого сеанса. Пока такая квитанция не будет получена, платформа не удаляет из таблицы изменений объекты (точнее - ссылки на них), которые выгружались в этом или более поздних сеансах, и будет предлагать к выгрузке в следующих. И только когда квитанция с номером принятого сообщения придет - все ссылки, которые выгружались в подтвержденном сеансе, из таблиц изменений будут удалены. Таблицы изменений,кстати, можно и отдельно читать, запросами. +1. Эти вещи уже есть на уровне платформы, ими надо просто нормально воспользоваться ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2013, 18:34 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
Попробуйте через COM, вызывайте 1С-ку когда нужно и берите из нее, что нужно. В 1С-ке создайте модуль специально для обмена, в модуле пропишите запросы, которые вернет удобные данные, там же сделайте преобразование если нужно и т.п., там же можно предусмотреть логику: выгружать только измененные данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 05:05 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
А где можно почитать об этом ? Интересует прежде всего практическая реализация - может литературу какую специализированную подскажете. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 09:33 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
Хотелось бы уточнить, под настройкой обмена данными вы имеете в виду универсальный обмен данными в формате XML ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 09:46 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
формально - что-то типа этого http://v8.1c.ru/metod/books/book.jsp?id=288 но я ее не листал, не знаю что внутри ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 10:46 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
FduchunХотелось бы уточнить, под настройкой обмена данными вы имеете в виду универсальный обмен данными в формате XML ? не обязательно xml... xml это обертка, формат данных. план обмена, таблицы регистрации изменений, узлы - это независимые инструменты ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 10:49 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
т.е. вы например создаете план обмена в который вносите список объектов подвергаемых обмену, выгребаете запросами измененные данные из сервисных таблиц (таблицы изменений) и пишете все через ado/recordset прямо в базу sql... или формируете xml файлик, который подсовываете sql то что жирным - не зависит от способа доставки ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 10:52 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
DeosfenПопробуйте через COM, вызывайте 1С-ку когда нужно и берите из нее, что нужно. В 1С-ке создайте модуль специально для обмена, в модуле пропишите запросы, которые вернет удобные данные, там же сделайте преобразование если нужно и т.п., там же можно предусмотреть логику: выгружать только измененные данные. com вещь хорошая... но требует наличия (хотя бы частичного) на машине вызывающей 1с + легкий гимор с оберткой 32-разрядного com объекта 1с на 64-битной машине + актуализация этого хозяйства при смене версий 1с + может быть гимор с авторизацией и безопасностью (зависит от строения сети и отмороженности IT-безопасников) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 10:56 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
+ возможен трах с ключами лицензий 1с ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 10:57 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
можно так: 1) перевести 1с на SQL Server 2) настроить на 1с базе CDC ( http://technet.microsoft.com/ru-ru/library/bb522489(v=sql.105).aspx) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 13:55 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
или так: 1) перевести 1с на SQL Server 2) с помощью Oracle GoldenGate передавать дельты из журнала транзакций в целевую базу ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2013, 13:57 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
Последний выдох ГПЖформально - что-то типа этого http://v8.1c.ru/metod/books/book.jsp?id=288 но я ее не листал, не знаю что внутриЯ её листал. Очень интересная и полезная книженция на 360 страниц. HTML, FTP, XML, ADO, OLE Automation, обмены, web-расширение. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2013, 15:51 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
как-то так:Функция CreateADOConnection(мСтруктураПараметров) Экспорт Провайдер = мСтруктураПараметров.Провайдер; Если Не(ЗначениеЗаполнено(Провайдер)) Тогда Провайдер = "SQLOLEDB"; КонецЕсли; ИмяСервера = мСтруктураПараметров.ИмяСервера; Если Не ЗначениеЗаполнено(ИмяСервера) Тогда ИмяСервера = ".<ИмяСервера>"; КонецЕсли; ИмяБД = мСтруктураПараметров.ИмяБазыДанных; Пользователь = мСтруктураПараметров.ИмяПользователя; Пароль = мСтруктураПараметров.ПарольПользователя; СтрокаПодключения = "Provider=" + Провайдер + ";Data Source=" + ИмяСервера + ";Initial Catalog=" + ИмяБД; Если Не ЗначениеЗаполнено(Пользователь) Тогда СтрокаПодключения = СтрокаПодключения + ";Integrated Security=SSPI;" Иначе СтрокаПодключения = СтрокаПодключения + ";UID=" + Пользователь + ";PWD=" + Пароль + ";"; КонецЕсли; Соединение = Новый COMОбъект("ADODB.Connection"); Соединение.ConnectionString = СтрокаПодключения; Соединение.ConnectionTimeOut = 30; Соединение.CommandTimeout = 120; Попытка #Если Клиент Тогда Состояние("Подключение к " + ИмяСервера + "" + ИмяБД); #КонецЕсли Соединение.Open(); #Если Клиент Тогда Состояние(""); #КонецЕсли Исключение ОбщегоНазначения.СообщитьОбОшибке("Операция не выполнена: " + ОписаниеОшибки()); Соединение = Неопределено; КонецПопытки; Возврат Соединение; КонецФункции //CreateADOConnection Функция RunDataImportRoutine(мИмяСервера="", мСоединение=Неопределено) Экспорт Результат = Ложь; Если мСоединение = Неопределено Тогда СтруктураПараметров = Новый Структура("Провайдер,ИмяСервера,ИмяБазыДанных,ИмяПользователя,ПарольПользователя", "SQLOLEDB", "<ИмяСервера>", "<ИмяБазыНаCервере>"); Соединение = CreateADOConnection(СтруктураПараметров); Иначе Соединение = мСоединение; КонецЕсли; Если Соединение = Неопределено Тогда Возврат Результат; КонецЕсли; ОбновитьЦеныНоменклатуры(Соединение); СтрокаЗапроса = "SELECT * FROM [<ИмяБазыНаCервере>].[dbo].[<ИмяТаблицыВСкуле>] WHERE [DBCode]=" + СокрЛП(КодУзлаБД)+" ORDER BY [Timestamp]"; ТаблицаВнешнихДанных = GetADODBRecordsetData(Соединение, СтрокаЗапроса); Для каждого ТекСтрока Из ТаблицаВнешнихДанных Цикл СтруктураПараметров = Новый Структура("IDRef, Вид, СтруктураДанных"); СтруктураПараметров.IDRef = ТекСтрока.IDRef; СтруктураПараметров.Вид = ТекСтрока.DocumentType; СтруктураПараметров.СтруктураДанных = ТекСтрока.StructuredData; ТекСсылка = ПолучитьДокумент(СтруктураПараметров); Если ЗначениеЗаполнено(ТекСсылка) Тогда СтрокаЗапроса = "DELETE FROM [<ИмяБазыНаCервере>].[dbo].[<ИмяТаблицыВСкуле>] WHERE [IDRef]="+ПреобразоватьЗначениеДляЗапроса(ТекСтрока.IDRef); EXecuteADOQuery(Соединение, СтрокаЗапроса); КонецЕсли; КонецЦикла; Результат = Истина; Возврат Результат; КонецФункции ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2013, 16:50 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
Еще рекомендую для общего развития "Системное программирование в 1С 7.7 и 8". Там тоже тема соединений раскрыта полностью, но немного с другим уклоном. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2013, 16:51 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
FduchunНеобходимо с заданной периодичностью организовать выгрузку данных (справочников и документов) из 1С в SQL-ю базу (не 1С - овскую), которая в свою очередь развернута на MS SQL 2012. Вот в этой SQL-базе, если она на том же сервере, что и файловая, слепи регламентное задание. Или переведи файловую на скуль - надёжнее будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2013, 16:56 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
Добрый день ! Всем спасибо за помощь. Решил воспользоваться вашими рекомендациями и организовать обмен между 1С и MSSQL с помощью плана обмена и соответственно выгружать изменения в SQL - ю базу. В связи с этим возникло 2 вопроса: 1. Для обеспечения целостности данных возникла необходимость выгружать не только сами рабочие данные, но и внутренние идентификаторы (UID) объектов 1С. Вопрос в следующем - какой тип данных назначить для UID в SQL - й базе ? Достаточно ли назначить тип данных char(36) (для всех справочников метод УникальныйИдентификатор() выдает идентификатор разрядностью 36 символов) или все-таки это не гарантирует корректность данных и необходимо преобразовывать char в binary(16), т.к. именно в таком формате хранятся все uid-ы в SQL-м варианте 1С-х баз ? 2. Для обеспечения уникальности данных по uid необходимо ли назначать данное поле в качестве ключевого ? С точки зрения производительности лучше всего суррогатные ключи, само собой, но как тогда быть с механизмом обеспечения уникальности uid-ов ? Организовывать проверку с помощью триггеров ? Всем заранее спасибо ! ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2013, 17:54 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
>Для обеспечения уникальности данных по uid необходимо ли назначать данное поле в качестве ключевого ? а зачем? сами что-то генерить будете? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2013, 18:08 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
Это необходимо для обеспечения ссылочной целостности - я выгружаю информацию в связанные таблицы - грубо говоря, несколько справочников, а также документов, реквизитами которых и являются выгружаемые элементы справочников. Элементы справочников и документов могут быть удалены, а на этапе анализа изменений из плана обмена я могу отслеживать такие объекты только по UID. Кроме того, коды справочников и документов могут также изменяться, соответственно, коды нельзя будет использовать в качестве ключевых полей. По моему мнению, UID - самый идеальный вариант в данном случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2013, 10:22 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
Вопрос еще актуален. Неужели никто не сталкивался с подобными вопросами при решении аналогичных задач ? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2013, 09:28 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
FduchunВопрос еще актуален. Неужели никто не сталкивался с подобными вопросами при решении аналогичных задач ? Да сталкивались! Только при вашем подходе ожидать что взлетит не стоит. ИМХО: 1. 1C перевести на MS SQL. 2. Разобраться со структурой таблиц 1С ( вот обработка например) и организовать прямой доступ к данным. 3. Действовать в соответствии с правилами реинжиниринга - всеми силами избегать копирования информации. Если данные уже есть в базе 1С - не надо их копировать еще куда-то. Организуйте транзитную БД на SQL сервере, создайте там необходимые view с вменяемыми названиями полей, необходимые таблицы связи ваших не1С-ных сущностей с объектами 1С и вперед. 4. Если все же копировать информацию - то только средствами SQL без всякого тормознутого обмена данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2013, 11:26 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
>Организуйте транзитную БД на SQL сервере, создайте там необходимые view с вменяемыми названиями полей, необходимые таблицы связи ваших не1С-ных сущностей с объектами 1С и вперед. при частых обновлениях связи будут рассыпаться... да и выковыривать данные из полей составного типа - удовольствие ниже среднего ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2013, 11:39 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
Последний выдох ГПЖ>Организуйте транзитную БД на SQL сервере, создайте там необходимые view с вменяемыми названиями полей, необходимые таблицы связи ваших не1С-ных сущностей с объектами 1С и вперед. при частых обновлениях связи будут рассыпаться... Любые связи рассыпаются при частых обновлениях. В том числе правила обмена, но частые обновления структуры данных заканчиваются вместе с разработкой конфигурации и началом нормальной эксплуатации. автор да и выковыривать данные из полей составного типа - удовольствие ниже среднего Создание/пересоздание view, основанных на несущих таблицах 1С легко автоматизировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2013, 11:52 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
>В том числе правила обмена, но частые обновления структуры данных заканчиваются вместе с разработкой конфигурации и началом нормальной эксплуатации покой нам только снится ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2013, 12:45 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
Вообще, интересно конечно - сначала одни убеждают в целесообразности использования для обмена встроенных механизмов платформы, в частности, планов обмена, затем - при прочих равных условиях другие же критикуют подобный подход, приводя в защиту не менее веские аргументы. Чувствую, что действительно при подобном подходе в решению задач так и буду топтаться на месте. Спасибо всем за полезно-бесполезные советы !!! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2013, 14:56 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
VladimirKrПоследний выдох ГПЖ>Организуйте транзитную БД на SQL сервере, создайте там необходимые view с вменяемыми названиями полей, необходимые таблицы связи ваших не1С-ных сущностей с объектами 1С и вперед. при частых обновлениях связи будут рассыпаться... Любые связи рассыпаются при частых обновлениях. В том числе правила обмена, но частые обновления структуры данных заканчиваются вместе с разработкой конфигурации и началом нормальной эксплуатации. автор да и выковыривать данные из полей составного типа - удовольствие ниже среднего Создание/пересоздание view, основанных на несущих таблицах 1С легко автоматизировать. Учитывая, что моем случае база 1С постоянно дорабатывается несколькими программистами, в т.ч. из удаленных филиалов, расположенных в других часовых полюсах, мне придется отложить решение остальных задач и регулярно, 24 часа в сутки только и заниматься, что пересоздавать вьюхи. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2013, 15:07 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
FduchunVladimirKrпропущено... Любые связи рассыпаются при частых обновлениях. В том числе правила обмена, но частые обновления структуры данных заканчиваются вместе с разработкой конфигурации и началом нормальной эксплуатации. пропущено... Создание/пересоздание view, основанных на несущих таблицах 1С легко автоматизировать. Учитывая, что моем случае база 1С постоянно дорабатывается несколькими программистами, в т.ч. из удаленных филиалов, расположенных в других часовых полюсах, мне придется отложить решение остальных задач и регулярно, 24 часа в сутки только и заниматься, что пересоздавать вьюхи. эту обезьянью работу может делать сама 1с на основании своих метаданных например по регламентному заданию из обработки ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2013, 15:12 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
FduchunВообще, интересно конечно - сначала одни убеждают в целесообразности использования для обмена встроенных механизмов платформы, в частности, планов обмена, затем - при прочих равных условиях другие же критикуют подобный подход, приводя в защиту не менее веские аргументы. Чувствую, что действительно при подобном подходе в решению задач так и буду топтаться на месте. Спасибо всем за полезно-бесполезные советы !!! в микроскоп можно смотреть, а можно гвозди забивать... дьявол в деталях ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2013, 15:14 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
Последний выдох ГПЖFduchunВообще, интересно конечно - сначала одни убеждают в целесообразности использования для обмена встроенных механизмов платформы, в частности, планов обмена, затем - при прочих равных условиях другие же критикуют подобный подход, приводя в защиту не менее веские аргументы. Чувствую, что действительно при подобном подходе в решению задач так и буду топтаться на месте. Спасибо всем за полезно-бесполезные советы !!! в микроскоп можно смотреть, а можно гвозди забивать... дьявол в деталях и вообще, описали что и так можно и так - осталось только примериться к реальной ситуации и выбрать, а вы хотите чтобы вам "морковкой жованой в рот поплевали"? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2013, 15:20 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
Я самостоятельно привык решать поставленные мне задачи - и на этом форуме я сижу не в поисках халявы, а в надежде получить советы по поводу тех или иных проблем, описанных более чем конкретно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2013, 15:38 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
Я с самого начала указал, что база в файловом режиме - если бы была возможность перевода ее в sql вариант, я бы так и сделал с самого начала. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2013, 15:40 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
Ну, раз не хватает денег или наглости перевести на SQL, тогда автор1. Для обеспечения целостности данных возникла необходимость выгружать не только сами рабочие данные, но и внутренние идентификаторы (UID) объектов 1С. Вопрос в следующем - какой тип данных назначить для UID в SQL - й базе ? Достаточно ли назначить тип данных char(36) (для всех справочников метод УникальныйИдентификатор() выдает идентификатор разрядностью 36 символов) или все-таки это не гарантирует корректность данных и необходимо преобразовывать char в binary(16), т.к. именно в таком формате хранятся все uid-ы в SQL-м варианте 1С-х баз ? Назначить лучше uniqueidentifier или binary(16). Но если есть трудности с преобразованиями то достаточно и char(36). автор2. Для обеспечения уникальности данных по uid необходимо ли назначать данное поле в качестве ключевого ? С точки зрения производительности лучше всего суррогатные ключи, само собой, но как тогда быть с механизмом обеспечения уникальности uid-ов ? Организовывать проверку с помощью триггеров ? Всем заранее спасибо ! Вы не ответили на вопрос выше: Собираетесь сами без 1С создавать 1С-объекты? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2013, 16:04 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
VladimirKrНу, раз не хватает денег или наглости перевести на SQL, тогда автор1. Для обеспечения целостности данных возникла необходимость выгружать не только сами рабочие данные, но и внутренние идентификаторы (UID) объектов 1С. Вопрос в следующем - какой тип данных назначить для UID в SQL - й базе ? Достаточно ли назначить тип данных char(36) (для всех справочников метод УникальныйИдентификатор() выдает идентификатор разрядностью 36 символов) или все-таки это не гарантирует корректность данных и необходимо преобразовывать char в binary(16), т.к. именно в таком формате хранятся все uid-ы в SQL-м варианте 1С-х баз ? Назначить лучше uniqueidentifier или binary(16). Но если есть трудности с преобразованиями то достаточно и char(36). автор2. Для обеспечения уникальности данных по uid необходимо ли назначать данное поле в качестве ключевого ? С точки зрения производительности лучше всего суррогатные ключи, само собой, но как тогда быть с механизмом обеспечения уникальности uid-ов ? Организовывать проверку с помощью триггеров ? Всем заранее спасибо ! Вы не ответили на вопрос выше: Собираетесь сами без 1С создавать 1С-объекты? Нет, ввод информации в базу будет осуществляться исключительно средствами 1С, я планировал изначально использовать уникальные идентификаторы исключительно для обеспечения целостности. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2013, 17:48 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
Fduchun, авторНет, ввод информации в базу будет осуществляться исключительно средствами 1С, я планировал изначально использовать уникальные идентификаторы исключительно для обеспечения целостности. Используйте, но имейте ввиду: 1С генерирует уникальные uid, более того, в 1С генератор этих значений работает как аналог функции MS SQL NEWSEQUENTIALID(). Дабы при использовании в качестве первичного ключа избежать фрагментации индекса. Однако! функция 1С УникальныйИдентификатор() переставляет байты в binary(16) перед преобразованием в строку. И прямое обратное преобразование убивает монотонность в последовательности. Использлование вот таких значений ведет к фрагментации индекса. вот реализация функции УникальныйИдентификатор() средствами TSQL. На выходе строка УникальныйИдентификатор() для объекта, ссылка которого binary(16) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
выполните код: Код: sql 1. 2. 3. 4. 5. 6. 7.
и увидите, что прямое обратное преобразование не дает исходное значение @r: 0x00010002000300040005000600070008"00070008-0006-0005-0001-000200030004"00070008-0006-0005-0001-0002000300040x08000700060005000001000200030004 то есть ваши uid, построенные прямым преобразованием из УникальныйИдентификатор() будут приводить к фрагментации индекса при использовании в качестве индексных полей. Нужно рисовать обратное преобразование. Мне лень - я работаю в SQL напрямую с binary(16) Вот нашел, но работает только начиная с MS SQL 2008: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2013, 10:52 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
Последний выдох ГПЖи вообще, описали что и так можно и так - осталось только примериться к реальной ситуации и выбрать, а вы хотите чтобы вам "морковкой жованой в рот поплевали"?Это не гигиенично! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2013, 16:51 |
|
Обмен данными между 1С и MS SQL
|
|||
---|---|---|---|
#18+
VladimirKrВы не ответили на вопрос выше: Собираетесь сами без 1С создавать 1С-объекты?А как он в файловой создать "объекты 1С" "без самой 1С"? Я думаю, что если принципиально надо работать только в файловой, для лечения перевести в скуль, полечить и вертать взад в файловую. ИМХО. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2013, 16:53 |
|
|
start [/forum/topic.php?all=1&fid=28&tid=1519610]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
710ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 9ms |
total: | 820ms |
0 / 0 |