powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Обмен данными между 1С и MS SQL
46 сообщений из 46, показаны все 2 страниц
Обмен данными между 1С и MS SQL
    #38408669
Fduchun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день !

У меня возник следующий вопрос - есть самописная конфигурация на 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 - скрипт, который и передавать на выполнение серверу ?

Простите за некоторый сумбур в вопросах, просто я даже не знаю, с какой стороны приступить
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38408677
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>имеет ли смысл задействовать регламентные задания

база файловая... их нельзя будет повесить просто на сервер приложений - на клиетской машине должен будет всегда запущен "бот"...
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38408683
Fduchun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думал завести специального пользователя, под которым будет постоянно запущена 1С-ка и под которым соответственно будет периодически запускаться обработка.
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38408687
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>- Какие win - довые механизмы желательно задействовать для доступа к объектам SQL с учетом достаточно высокой интенсивности обмена данными - имеет ли смысл использовать ODBC, OLE DB или что то еще

кроме интенсивности еще надо знать средний объем в одном цикле обмена

вариантов море... от прямой записи через ado до подготовки средствами 1с файла xml ( http://v8.1c.ru/overview/xdto.htm) и засасыванием его средствами sql типа dts

люди более опытные еще вариантов накидать могут я думаю
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38408689
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FduchunЯ думал завести специального пользователя, под которым будет постоянно запущена 1С-ка и под которым соответственно будет периодически запускаться обработка.

ну да, так в файловом режиме это и крутится
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38408721
Fduchun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Касательно объема - точно сказать не могу пока, но, с прикладной точки зрения, наибольший прирост ожидается в отношении 3 таблиц, средний прирост по которым за день - около 100 строк в каждой.
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38408732
pail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fduchun,
так и выгружать прирост - только измененные данные, а не все таблицы целиком
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38408744
Fduchun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А каким-образом можно выгружать только те данные, которые были внесены/изменены с момента последней выгрузки - ввести некоторое поле-счетчик, которое обновлять после каждой выгрузки ? И соответственно выгружать данные только в соответствии с значением данного поля ?
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38408761
pail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FduchunА каким-образом можно выгружать только те данные, которые были внесены/изменены с момента последней выгрузки - ввести некоторое поле-счетчик, которое обновлять после каждой выгрузки ? И соответственно выгружать данные только в соответствии с значением данного поля ?
Два основных варианта:
1. на уровне платформы - организовать План Обмена,в состав которого включены нужные типы данных.
Изменения платформа будет фиксировать сама, остается использовать механизм сообщения обмена для выделения этих изменений.
Недостаток - все изменения надо обрабатывать-передавать одновременно, в одном сообщении, что не всегда подходит: стиль "это изменение отправим сейчас, а это - когда-нибудь в другой раз" так просто не пройдет.
2. Подписка на событие ,например на "ПослеЗаписи" для нужных типов данных, и регистр сведений, в котором ссылки на изменения складывать/забирать.
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38408763
Fduchun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто сама структура выгрузки значительно усложняется - например, где гарантия, что выгруженные данные были загружены в базу ? Получается нужно будет передавать из SQL в 1С номер последней удачной загрузки и выгружать данные анализируя данные показатель… Насколько это корректно, вот в чем вопрос...
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38408778
pail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FduchunПросто сама структура выгрузки значительно усложняется - например, где гарантия, что выгруженные данные были загружены в базу ? Получается нужно будет передавать из SQL в 1С номер последней удачной загрузки и выгружать данные анализируя данные показатель… Насколько это корректно, вот в чем вопрос...
Механизм сообщений обмена это учитывает: обмен двустороний, в ответном сообщении должна содержаться квитанция с номером принятого последнего принятого сеанса. Пока такая квитанция не будет получена, платформа не удаляет из таблицы изменений объекты (точнее - ссылки на них), которые выгружались в этом или более поздних сеансах, и будет предлагать к выгрузке в следующих. И только когда квитанция с номером принятого сообщения придет - все ссылки, которые выгружались в подтвержденном сеансе, из таблиц изменений будут удалены.

Таблицы изменений,кстати, можно и отдельно читать, запросами.
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38408874
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pailFduchunПросто сама структура выгрузки значительно усложняется - например, где гарантия, что выгруженные данные были загружены в базу ? Получается нужно будет передавать из SQL в 1С номер последней удачной загрузки и выгружать данные анализируя данные показатель… Насколько это корректно, вот в чем вопрос...
Механизм сообщений обмена это учитывает: обмен двустороний, в ответном сообщении должна содержаться квитанция с номером принятого последнего принятого сеанса. Пока такая квитанция не будет получена, платформа не удаляет из таблицы изменений объекты (точнее - ссылки на них), которые выгружались в этом или более поздних сеансах, и будет предлагать к выгрузке в следующих. И только когда квитанция с номером принятого сообщения придет - все ссылки, которые выгружались в подтвержденном сеансе, из таблиц изменений будут удалены.

Таблицы изменений,кстати, можно и отдельно читать, запросами.

+1.

Эти вещи уже есть на уровне платформы, ими надо просто нормально воспользоваться
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38409178
Фотография Deosfen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте через COM, вызывайте 1С-ку когда нужно и берите из нее, что нужно.

В 1С-ке создайте модуль специально для обмена, в модуле пропишите запросы, которые вернет удобные данные, там же сделайте преобразование если нужно и т.п., там же можно предусмотреть логику: выгружать только измененные данные.
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38409254
Fduchun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А где можно почитать об этом ? Интересует прежде всего практическая реализация - может литературу какую специализированную подскажете.
Спасибо.
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38409279
Fduchun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотелось бы уточнить, под настройкой обмена данными вы имеете в виду универсальный обмен данными в формате XML ?
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38409373
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
формально - что-то типа этого http://v8.1c.ru/metod/books/book.jsp?id=288

но я ее не листал, не знаю что внутри
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38409384
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FduchunХотелось бы уточнить, под настройкой обмена данными вы имеете в виду универсальный обмен данными в формате XML ?

не обязательно xml... xml это обертка, формат данных. план обмена, таблицы регистрации изменений, узлы - это независимые инструменты
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38409392
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. вы например создаете план обмена в который вносите список объектов подвергаемых обмену, выгребаете запросами измененные данные из сервисных таблиц (таблицы изменений) и пишете все через ado/recordset прямо в базу sql... или формируете xml файлик, который подсовываете sql

то что жирным - не зависит от способа доставки
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38409402
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeosfenПопробуйте через COM, вызывайте 1С-ку когда нужно и берите из нее, что нужно.

В 1С-ке создайте модуль специально для обмена, в модуле пропишите запросы, которые вернет удобные данные, там же сделайте преобразование если нужно и т.п., там же можно предусмотреть логику: выгружать только измененные данные.

com вещь хорошая... но требует наличия (хотя бы частичного) на машине вызывающей 1с + легкий гимор с оберткой 32-разрядного com объекта 1с на 64-битной машине + актуализация этого хозяйства при смене версий 1с + может быть гимор с авторизацией и безопасностью (зависит от строения сети и отмороженности IT-безопасников)
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38409406
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ возможен трах с ключами лицензий 1с
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38409826
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно так:
1) перевести 1с на SQL Server
2) настроить на 1с базе CDC ( http://technet.microsoft.com/ru-ru/library/bb522489(v=sql.105).aspx)
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38409833
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или так:
1) перевести 1с на SQL Server
2) с помощью Oracle GoldenGate передавать дельты из журнала транзакций в целевую базу
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38412001
Фотография Владимир Лазурко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Последний выдох ГПЖформально - что-то типа этого http://v8.1c.ru/metod/books/book.jsp?id=288

но я ее не листал, не знаю что внутриЯ её листал. Очень интересная и полезная книженция на 360 страниц. HTML, FTP, XML, ADO, OLE Automation, обмены, web-расширение.
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38412080
Фотография Владимир Лазурко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как-то так:Функция 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(Соединение, СтрокаЗапроса);
      КонецЕсли;
   КонецЦикла;
   
   Результат = Истина;
   
   Возврат Результат;
   
КонецФункции
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38412081
Фотография Владимир Лазурко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще рекомендую для общего развития "Системное программирование в 1С 7.7 и 8". Там тоже тема соединений раскрыта полностью, но немного с другим уклоном.
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38412092
Фотография Владимир Лазурко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FduchunНеобходимо с заданной периодичностью организовать выгрузку данных (справочников и документов) из 1С в SQL-ю базу (не 1С - овскую), которая в свою очередь развернута на MS SQL 2012.

Вот в этой SQL-базе, если она на том же сервере, что и файловая, слепи регламентное задание.
Или переведи файловую на скуль - надёжнее будет.
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38431709
Fduchun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день !
Всем спасибо за помощь. Решил воспользоваться вашими рекомендациями и организовать обмен между 1С и MSSQL с помощью плана обмена и соответственно выгружать изменения в SQL - ю базу. В связи с этим возникло 2 вопроса:

1. Для обеспечения целостности данных возникла необходимость выгружать не только сами рабочие данные, но и внутренние идентификаторы (UID) объектов 1С. Вопрос в следующем - какой тип данных назначить для UID в SQL - й базе ? Достаточно ли назначить тип данных char(36) (для всех справочников метод УникальныйИдентификатор() выдает идентификатор разрядностью 36 символов) или все-таки это не гарантирует корректность данных и необходимо преобразовывать char в binary(16), т.к. именно в таком формате хранятся все uid-ы в SQL-м варианте 1С-х баз ?
2. Для обеспечения уникальности данных по uid необходимо ли назначать данное поле в качестве ключевого ? С точки зрения производительности лучше всего суррогатные ключи, само собой, но как тогда быть с механизмом обеспечения уникальности uid-ов ? Организовывать проверку с помощью триггеров ?
Всем заранее спасибо !
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38431737
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Для обеспечения уникальности данных по uid необходимо ли назначать данное поле в качестве ключевого ?

а зачем? сами что-то генерить будете?
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38432379
Fduchun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это необходимо для обеспечения ссылочной целостности - я выгружаю информацию в связанные таблицы - грубо говоря, несколько справочников, а также документов, реквизитами которых и являются выгружаемые элементы справочников. Элементы справочников и документов могут быть удалены, а на этапе анализа изменений из плана обмена я могу отслеживать такие объекты только по UID. Кроме того, коды справочников и документов могут также изменяться, соответственно, коды нельзя будет использовать в качестве ключевых полей. По моему мнению, UID - самый идеальный вариант в данном случае.
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38455552
Fduchun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос еще актуален. Неужели никто не сталкивался с подобными вопросами при решении аналогичных задач ?
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38461512
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FduchunВопрос еще актуален. Неужели никто не сталкивался с подобными вопросами при решении аналогичных задач ?
Да сталкивались! Только при вашем подходе ожидать что взлетит не стоит.
ИМХО:
1. 1C перевести на MS SQL.
2. Разобраться со структурой таблиц 1С ( вот обработка например) и организовать прямой доступ к данным.
3. Действовать в соответствии с правилами реинжиниринга - всеми силами избегать копирования информации. Если данные уже есть в базе 1С - не надо их копировать еще куда-то. Организуйте транзитную БД на SQL сервере, создайте там необходимые view с вменяемыми названиями полей, необходимые таблицы связи ваших не1С-ных сущностей с объектами 1С и вперед.
4. Если все же копировать информацию - то только средствами SQL без всякого тормознутого обмена данных.
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38461534
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Организуйте транзитную БД на SQL сервере, создайте там необходимые view с вменяемыми названиями полей, необходимые таблицы связи ваших не1С-ных сущностей с объектами 1С и вперед.

при частых обновлениях связи будут рассыпаться... да и выковыривать данные из полей составного типа - удовольствие ниже среднего
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38461556
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Последний выдох ГПЖ>Организуйте транзитную БД на SQL сервере, создайте там необходимые view с вменяемыми названиями полей, необходимые таблицы связи ваших не1С-ных сущностей с объектами 1С и вперед.

при частых обновлениях связи будут рассыпаться...
Любые связи рассыпаются при частых обновлениях. В том числе правила обмена, но частые обновления структуры данных заканчиваются вместе с разработкой конфигурации и началом нормальной эксплуатации.

автор да и выковыривать данные из полей составного типа - удовольствие ниже среднего

Создание/пересоздание view, основанных на несущих таблицах 1С легко автоматизировать.
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38461667
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>В том числе правила обмена, но частые обновления структуры данных заканчиваются вместе с разработкой конфигурации и началом нормальной эксплуатации

покой нам только снится
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38461978
Fduchun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, интересно конечно - сначала одни убеждают в целесообразности использования для обмена встроенных механизмов платформы, в частности, планов обмена, затем - при прочих равных условиях другие же критикуют подобный подход, приводя в защиту не менее веские аргументы. Чувствую, что действительно при подобном подходе в решению задач так и буду топтаться на месте.

Спасибо всем за полезно-бесполезные советы !!!
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38462008
Fduchun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirKrПоследний выдох ГПЖ>Организуйте транзитную БД на SQL сервере, создайте там необходимые view с вменяемыми названиями полей, необходимые таблицы связи ваших не1С-ных сущностей с объектами 1С и вперед.

при частых обновлениях связи будут рассыпаться...
Любые связи рассыпаются при частых обновлениях. В том числе правила обмена, но частые обновления структуры данных заканчиваются вместе с разработкой конфигурации и началом нормальной эксплуатации.

автор да и выковыривать данные из полей составного типа - удовольствие ниже среднего

Создание/пересоздание view, основанных на несущих таблицах 1С легко автоматизировать.

Учитывая, что моем случае база 1С постоянно дорабатывается несколькими программистами, в т.ч. из удаленных филиалов, расположенных в других часовых полюсах, мне придется отложить решение остальных задач и регулярно, 24 часа в сутки только и заниматься, что пересоздавать вьюхи.
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38462020
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FduchunVladimirKrпропущено...

Любые связи рассыпаются при частых обновлениях. В том числе правила обмена, но частые обновления структуры данных заканчиваются вместе с разработкой конфигурации и началом нормальной эксплуатации.

пропущено...


Создание/пересоздание view, основанных на несущих таблицах 1С легко автоматизировать.

Учитывая, что моем случае база 1С постоянно дорабатывается несколькими программистами, в т.ч. из удаленных филиалов, расположенных в других часовых полюсах, мне придется отложить решение остальных задач и регулярно, 24 часа в сутки только и заниматься, что пересоздавать вьюхи.

эту обезьянью работу может делать сама 1с на основании своих метаданных например по регламентному заданию из обработки
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38462023
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FduchunВообще, интересно конечно - сначала одни убеждают в целесообразности использования для обмена встроенных механизмов платформы, в частности, планов обмена, затем - при прочих равных условиях другие же критикуют подобный подход, приводя в защиту не менее веские аргументы. Чувствую, что действительно при подобном подходе в решению задач так и буду топтаться на месте.

Спасибо всем за полезно-бесполезные советы !!!

в микроскоп можно смотреть, а можно гвозди забивать... дьявол в деталях
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38462039
Последний выдох ГПЖ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Последний выдох ГПЖFduchunВообще, интересно конечно - сначала одни убеждают в целесообразности использования для обмена встроенных механизмов платформы, в частности, планов обмена, затем - при прочих равных условиях другие же критикуют подобный подход, приводя в защиту не менее веские аргументы. Чувствую, что действительно при подобном подходе в решению задач так и буду топтаться на месте.

Спасибо всем за полезно-бесполезные советы !!!

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

и вообще, описали что и так можно и так - осталось только примериться к реальной ситуации и выбрать, а вы хотите чтобы вам "морковкой жованой в рот поплевали"?
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38462083
Fduchun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я самостоятельно привык решать поставленные мне задачи - и на этом форуме я сижу не в поисках халявы, а в надежде получить советы по поводу тех или иных проблем, описанных более чем конкретно.
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38462090
Fduchun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я с самого начала указал, что база в файловом режиме - если бы была возможность перевода ее в sql вариант, я бы так и сделал с самого начала.
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38462181
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С-объекты?
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38462454
Fduchun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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С, я планировал изначально использовать уникальные идентификаторы исключительно для обеспечения целостности.
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38463092
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
create function [dbo].[getStringUUID] (@binaryUUID binary(16))
returns char(40)
as
begin
	declare @buffer varchar(40)
	select @buffer = replace(convert(varchar(40),cast(@binaryUUID as uniqueidentifier)), '-', '')

	return 
	right(@buffer, 8) + '-' +
	substring(@buffer, 21, 4) + '-' +
	substring(@buffer, 17, 4) + '-' +
	substring(@buffer, 7, 2) +
	substring(@buffer, 5, 2) + '-' +

	substring(@buffer, 3, 2) +
	substring(@buffer, 1, 2) +
	substring(@buffer, 11, 2) +
	substring(@buffer, 9, 2) +
	substring(@buffer, 15, 2) +
	substring(@buffer, 13, 2)
end 



выполните код:
Код: sql
1.
2.
3.
4.
5.
6.
7.
declare @r binary(16)
select @r=0x00010002000300040005000600070008
select 
	@r,
	dbo.getStringUUID(@r),
	cast(dbo.getStringUUID(@r) as uniqueidentifier),
	cast(cast(dbo.getStringUUID(@r) as uniqueidentifier) as binary(16))

и увидите, что прямое обратное преобразование не дает исходное значение @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.
CREATE function [dbo].[fn_getbinaryid] (@unidentifier char(36)) 
returns binary(16) 
as 
begin 
	declare @binvalue varbinary(16)
	declare @hexstring varchar(36)
	select @hexstring = '0x'+ 
	substring(@unidentifier,20,4)
	+right(@unidentifier,12) 
	+substring(@unidentifier,15,4) 
	+substring(@unidentifier,10,4)  
	+left(@unidentifier, 8)
	select @binvalue = CONVERT(varbinary(max), @hexstring, 1) 
	return ( @binvalue ) 
end
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38463722
Фотография Владимир Лазурко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Последний выдох ГПЖи вообще, описали что и так можно и так - осталось только примериться к реальной ситуации и выбрать, а вы хотите чтобы вам "морковкой жованой в рот поплевали"?Это не гигиенично!
...
Рейтинг: 0 / 0
Обмен данными между 1С и MS SQL
    #38463726
Фотография Владимир Лазурко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirKrВы не ответили на вопрос выше: Собираетесь сами без 1С создавать 1С-объекты?А как он в файловой создать "объекты 1С" "без самой 1С"?

Я думаю, что если принципиально надо работать только в файловой, для лечения перевести в скуль, полечить и вертать взад в файловую. ИМХО.
...
Рейтинг: 0 / 0
46 сообщений из 46, показаны все 2 страниц
Форумы / [игнор отключен] [закрыт для гостей] / Обмен данными между 1С и MS SQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]