|
v7: Прямой запрос 1с++ к сторонней базе | ☑ | ||
---|---|---|---|---|
0
eshtrey
24.09.15
✎
14:18
|
Из одной базы SQL надо подключится с другой базе и отобрать сотрудников.
Сотрудники отбираются по нескольким реквизитам, значения реквизитов указаны в списке на форме отчета. Сами реквизиты периодические. Вот пример для одного реквизита для отбора из текущей базы RS = СоздатьОбъект("ODBCRecordset"); RS.УстБД1С(); ТекстЗапроса = " |SEL ECT Сотрудники.ID [Сотр $Справочник.Сотрудники] |FROM $Справочник.Сотрудники AS Сотрудники With (NOLOCK) |WHERE | Сотрудники.IsFolder = 2 AND | Сотрудники.IsMark = 0 |"; Если ВыбДепартаменты.РазмерСписка()>0 Тогда ТекстЗапроса=ТекстЗапроса+"AND ($ПоследнееЗначение.Сотрудники.Департамент(Сотрудники.ID, :ВыбДата) IN (SELECT Val FR OM #Департаменты)) |"; RS.УложитьСписокОбъектов(ВыбДепартаменты, "#Департаменты", "Департаменты"); КонецЕсли; RS.УстановитьТекстовыйПараметр("ВыбДата", КонДата); Темп = СоздатьОбъект("ТаблицаЗначений"); Темп = RS.ВыполнитьИнструкцию(ТекстЗапроса, Темп); Как написать запрос для отбора сотрудников из другой базы? Департаменты совпадают по коду. Спасибо |
|||
1
Boroda
24.09.15
✎
14:38
|
Наверное, вместо RS.УстБД1С() использовать RS.УстБД(НужнаяБаза)
|
|||
2
eshtrey
24.09.15
✎
14:43
|
это понятно
ODBCD = СоздатьОбъект("ODBCDataBase"); ODBCD.ПрисоединитьИБ(ПутьИмпортируемойБазы, глРобот, глРоботПароль); RS = СоздатьОбъект("ODBCRecordset"); RS.УстБД(ODBCD); а условие отбора такое же использовать? элементы в списке от текущей базы. |
|||
3
Ёпрст
24.09.15
✎
14:53
|
Если базы не нв одном серваке, то прилинковать сервак , потом писать простой запрос, обрящаясь одновременно к табличкам разных баз в одном запросе.
|
|||
4
Ёпрст
24.09.15
✎
14:53
|
усё
|
|||
5
Ёпрст
24.09.15
✎
14:53
|
если удаленная база не прямой потомок, в тексте запроса синхронизировать по какому-либо реквизиту, например, коду.
|
|||
6
Boroda
24.09.15
✎
14:59
|
ID департаментов в списке будут будут разные, следовательно так делать нельзя.
Сперва найти элементы с нужными кодами,затем их в список. |
|||
7
sergeev-ag-1977
24.09.15
✎
15:00
|
NOLOCK - жесть !!!
|
|||
8
Ёпрст
24.09.15
✎
15:01
|
(6) че ?
|
|||
9
Ёпрст
24.09.15
✎
15:01
|
(7) ?
|
|||
10
Ёпрст
24.09.15
✎
15:05
|
На вот, развлекайся
Процедура Сформировать() рс=создатьОбъект("ODBCRecordSet"); ТекстЗапроса = " |SELECT | СпрНаш.DESCR as КлиентосВЭтойбазе -- наименование клиентоса в этой базе | ,Спр.DESCR as КлиентосВУдаленнойБазе --наименование клиентоса в удаленной базе |FROM $Справочник.Контрагенты СпрНаш (nolock) |left join dataBase2.dbo.@Справочник.Контрагенты Спр (nolock) on СпрНаш.Code = Спр.Code |"; глМД = СоздатьОбъект("MetaDataWork"); ТекстЗапроса=глМД.ОбрМетаСКЛ(ТекстЗапроса); глМД2 = СоздатьОбъект("MetaDataWork"); ПутьКБазе2 = "D:\полный путьк базе данных\"; глМД2.ПрисоединитьМД(ПутьКБазе2+"1Cv7.md"); ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"@","$"); ТекстЗапроса=глМД2.ОбрМетаСКЛ(ТекстЗапроса); Т = рс.ВыполнитьИнструкцию(ТекстЗапроса); Т.ВыбратьСтроку(); КонецПроцедуры |
|||
11
eshtrey
24.09.15
✎
15:12
|
спасибо
|
|||
12
eshtrey
07.10.15
✎
15:52
|
(3)как прилинковать сервер?
|
|||
13
eshtrey
08.10.15
✎
10:49
|
||||
14
eshtrey
08.10.15
✎
10:52
|
в запросе ко второму серверу
LEFT JOIN serv-1c-buh.BUH.dbo.@Справочник.Контрагенты СпрКонтрБУ on СпрКонтрУУ.Code = СпрКонтрБУ.Code и так BUH.dbo.@Справочник.Контрагенты СпрКонтрБУ on СпрКонтрУУ.Code = СпрКонтрБУ.Code и еще куча разных вариантов, все время ошибка, то на дефис ругается, то сервер не определен |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |