powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Обмен данными между 1С и MS SQL
25 сообщений из 46, страница 1 из 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
25 сообщений из 46, страница 1 из 2
Форумы / [игнор отключен] [закрыт для гостей] / Обмен данными между 1С и MS SQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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