Синхронизация c SQL

1. simpleU1C 14.09.17 11:54 Сейчас в теме
Добрый день!
Только начинаю изучать механизмы КД, подскажите, пожалуйста, возможно ли сделать с помощью КД следующий обмен:
1. Напрямую подключиться к БД
2. Сформировать определенный запрос
3. Сформировать документы по данным из запроса
4. Проверить по регистрам значения
5. Записать/провести документы

И отдельный момент, можно ли из БД 1С таким же образом:
1. Напрямую подключиться к БД
2. Определенным запросом залить данные в базу SQL (заранее выбрав данные в запросе на уровне 1С)
Спасибо!
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
15. herfis 499 19.09.17 15:58 Сейчас в теме
(1) Вторая база, как я понял - не 1С. КД в этом случае - не вариант.
Но у вас, как я понял, и задача несложная - решается написанием простых обработок обмена с нуля.
Вот пришлось как-то глубокую интеграцию с развесистой внешней системой делать с конвертацией по ссылкам - так пришлось для этого на коленке урезанный аналог КД изобретать. После такого на КД смотришь с нежностью.
simpleU1C; +1 Ответить
2. DenisCh 14.09.17 12:03 Сейчас в теме
по второму пункту - можно. Там это несложно.
По первому - а если у тебя файловый обмен без прямого подключения к другой БД?
simpleU1C; +1 Ответить
3. simpleU1C 14.09.17 12:54 Сейчас в теме
(2) Не совсем понял вопроса.
Идеальный вариант, напрямую подключаться к БД.
Более простой вариант, делать копию БД(отдельных связанных таблиц на тот же сервер где 1С), и уже с его копии тянуть нужные новые данные, или суть не меняется?
4. simpleU1C 15.09.17 22:42 Сейчас в теме
Доброго времени суток!
Так и не понял, есть какие то ограничения при прямом обращении к БД SQL через конвертацию данных?
Что значит "файловый обмен без прямого подключения к БД"?
Спасибо!
5. DenisCh 16.09.17 10:51 Сейчас в теме
(4)
Что значит "файловый обмен без прямого подключения к БД"?


Это когда файл обмена формируется на диске и передаётся на приёмник каким-либо способом, вплоть до флешки.
simpleU1C; +1 Ответить
6. Dnki 4 17.09.17 20:34 Сейчас в теме
Лично я делаю вывод, что автор нафантазировал в постановке задачи. Особенно пугает фраза о "прямом обращении к БД SQL". Закрадывается мысль, что имеется в виду не то, о чем подумает большинство аудитории.
Может все проще? В базе-приемнике провести документ в зависимости от чего-то?

Предлагаю, изложить саму суть задачи в таком стиле:
- есть 2 базы
- в базе-приемнике до записи документа запросить что-то
- вроде как создать еще какие-то документы.
simpleU1C; +1 Ответить
7. simpleU1C 19.09.17 14:38 Сейчас в теме
(6) Добрый день!
- Есть 2 базы, 1С и SQL
- В базу SQL нужно периодически грузить данные из 1С (в определенные таблицы) - по расписанию максимально автоматизированно
- Из базы SQL в базу 1С, на основании данных из некоторых таблиц (запрос на уровне SQL сделают нужные выборку полей) - в базе 1С создать документы с табличными частями и заполнить данными из SQL.
- Провести созданные документы в 1С
Какие архитектуры такого взаимодействия возможны?
Спасибо!
8. sssss_aaaaa_2011 19.09.17 15:08 Сейчас в теме
(7) "Есть 2 базы, 1С и SQL "
Или
1. НЕТ такого деления баз. Они обе 1С, но одна файловая, а вторая клиент-серверная.
Или
2. Если таки вторая база не 1С, то невозможно говорить о конвертации данных.
Вы уж там определитесь.
simpleU1C; +1 Ответить
10. VmvLer 19.09.17 15:15 Сейчас в теме
(8) вроде однозначно понятно 1С и SQL
simpleU1C; +1 Ответить
12. sssss_aaaaa_2011 19.09.17 15:24 Сейчас в теме
(10)Вот именно что "вроде"... Что на самом деле еще предстоит выяснить. И о какой КД идет речь тоже пока ничего не сказано.
simpleU1C; +1 Ответить
13. simpleU1C 19.09.17 15:55 Сейчас в теме
(12) Уточняю, есть база 1С файловая и баз SQL вообще не имеющая отношения к 1С.
Если бы это была база 1С SQL - ная, так бы и обозначил.
Итого, база 1С.CD и база SQL - архитектура которой отлична от 1С, т.е. база от другого ПО.)
14. sssss_aaaaa_2011 19.09.17 15:56 Сейчас в теме
(13) Ну и каким боком тут КД и какой, кстати, версии?
simpleU1C; +1 Ответить
16. simpleU1C 19.09.17 15:59 Сейчас в теме
(13) Куда смотреть, что копать?
Как описывал ранее, нужна 2 - стороняя синхронизация, из 1С в бд SQL обновлять справочник, а на основе результатов запроса SQL писать документы в 1С.
Думал КД в частности и это помогает решить.
17. herfis 499 19.09.17 16:00 Сейчас в теме
(16) Не. КД не предназначена для обмена данными с внешними системами. Только между базами 1С.
simpleU1C; +1 Ответить
18. sssss_aaaaa_2011 19.09.17 16:04 Сейчас в теме
(16) Зря. Но варианты есть, правда без КД.
Если конфа не на замке, то можно воспользоваться Внешними источниками данных, создав подключение прямо к sql, и средствами 1с читать из нее и писать в нее.
Если трогать конфу нельзя, то никто еще не отменял старый добрый ADO, с помощью которого и делать все дела.
В обоих вариантах пишутся свои обработки по переливке данных в нужную сторону.
Dnki; simpleU1C; +2 Ответить
19. simpleU1C 19.09.17 16:09 Сейчас в теме
(18) Ох, даже не знаю, огорчили или обрадовали. Хотелось до КД добраться, как до мощного функционала.
Теперь буду юзать ВИД.
Спасибо!
20. herfis 499 19.09.17 16:21 Сейчас в теме
(16)
(17) + Теоретически, конечно, извратиться можно.
Типа база 1С будет и источником и приемником, а при выгрузке лезть в SQL.
Но большого смысла это не имеет, т.к. это мало чем будет отличаться от написания ручного обмена.
Хотя... Можно попробовать прикрутить и неоптимизированную выгрузку справочников по ссылкам, например.
Типа будет ПКО на документ, где на вход данные внешнего запроса, а в ПКС ссылочного реквизита на входе будет айдишник внешнего справочника, данные по которому будут высасываться в его ПКО по этому конкретному айдишнику. Для не слишком больших объемов данных должно быть приемлемо. В этом случае может прикольно получиться :)
ЗЫ. О чем-то похожем я в свое время размышлял, но объемы данных были большие и нужна была именно оптимизированная выгрузка по ссылкам, поэтому пришлось свой велосипед писать.
simpleU1C; +1 Ответить
9. VmvLer 19.09.17 15:13 Сейчас в теме
в метаданных создать внешние источники и читать/писать

или

СтрокаПодключения = "
|DRIVER={SQL Server};
|SERVER=...;
|DATABASE=...;
|User ID=sa;
|PASSWORD=...;";

Connection = Новый COMОбъект("ADODB.Connection");
Command    = Новый COMОбъект("ADODB.Command");
Command.Prepared    = Истина;     
Command.CommandType = 1;          

Попытка
	Connection.Open(СокрЛП(СтрокаПодключения));
	Command.ActiveConnection = Connection;
Исключение
	Сообщить("Ошибка подключения к SQL-серверу " + ТекущаяДатаСеанса());
	Сообщить(ОписаниеОшибки());
	Connection = Неопределено;
	Command    = Неопределено;
КонецПопытки;

// и читать/писать
Показать
simpleU1C; +1 Ответить
11. VmvLer 19.09.17 15:17 Сейчас в теме
кстати КД с внешними источниками дружит, просто КД я тонко не пилил, есть ответ?
simpleU1C; +1 Ответить
21. simpleU1C 19.09.17 16:42 Сейчас в теме
Может дурная мысль, а что если БД 1С перевести в режим SQL, и обмен данными выполнять на уровне двух БД? - или это уже велосипед.
Конфигурация не под замком.
Спасибо!
22. sssss_aaaaa_2011 19.09.17 17:04 Сейчас в теме
(21)Велосипед, возможно самый быстрый по работе. но самый медленный по написанию. замучаешься делать сопоставления имен 1с с именами объектов на сервере.
ну еще и создание документов и их проведение таки все равно придется делать в 1с.
Dnki; simpleU1C; +2 Ответить
23. herfis 499 19.09.17 17:32 Сейчас в теме
(21) Плохая идея. Дело не в "велосипедистости". Писать объекты 1С мимо сервера приложений - путь искателей приключений.
Разовые монопольные операции - не в счет. После них и рестартануться и почекаться можно.
Dnki; simpleU1C; +2 Ответить
25. red80 19.09.17 18:32 Сейчас в теме
(21) Очень интересное решение! Отпишитесь как сделаете.
simpleU1C; +1 Ответить
26. simpleU1C 19.09.17 18:52 Сейчас в теме
(25) Очень интересное решение - делать его конечно не буду.
Все взаимодействие с внешним источником данных - может быть настроено как регламентное задание?, чтобы не вручную обработки запускались а по времени?
Спасибо!
27. red80 19.09.17 18:55 Сейчас в теме
29. Dnki 4 20.09.17 23:46 Сейчас в теме
(27) ДА!
Кто бы забанил этого "ДА-валку".
30. red80 21.09.17 08:36 Сейчас в теме
(29) Банить надо за вредительские (а может просто глупые?) советы, нарушающие лицензионную политику.
28. Dnki 4 20.09.17 23:45 Сейчас в теме
(26) "делать его конечно не буду."

Недоумеваю: чего проще написать и отладить обмен через ADODB. Лично для меня было тяжело написать в первый раз, от незнания. Потом думаешь: "Как просто!".
	Соединение = Новый COMОбъект("ADODB.Connection");
	Соединение.ConnectionString = "Provider=SQLOLEDB.1;Password=???;Persist Security Info=True;User ID=????;Initial Catalog=?????;Data Source=RDP\SQLEXPRESS";
	Попытка
		Соединение.Open();
	Исключение
		#Если Клиент Тогда
		Предупреждение("Не удалось соединиться с базой данных!");
		Сообщить(ОписаниеОшибки());
		#КонецЕсли
		Возврат;
	КонецПопытки;
	Соединение.Execute("DELETE FROM Clients .....");
Показать
24. red80 19.09.17 18:30 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот