|
v7: Сложный запрос для табличного поля 1С++ | ☑ | ||
---|---|---|---|---|
0
АЛьФ
05.05.17
✎
12:23
|
Попробовали в Табличное поле прописать запрос не из одного селекта, а с созданием и заполнением временных таблиц, папдейтами и последующей итоговой выборки из них. Вроде как ТабличноеПоле проглатывает запрос, но работать с ним не хочет (у поставщика атрибут "Поля" - пустое значение).
Возник закономерный вопрос: это мы чего-то не так делаем или Табличное поле принципиально не работает с такими запросами? Ну и код, собственно. оПоставщикДанных = СоздатьОбъект("ПоставщикДанныхODBC.MSSQL"); оПоставщикДанных.БазаДанных = СоздатьОбъект("ODBCDataBase"); стрДатаЗапроса = "'" + СокрЛП(глПреобразоватьДатуВСтроку(НачМесяца(ВыбПериодПланирования.ДатаОкончания)) + " 00:00:00.000'"); ТекстЗапроса = " |IF EXISTS(SELECT * FROM tempdb.dbo.sysobjects WHERE id = OBJECT_ID(N'[tempdb].[dbo].[#Временно]')) DROP TABLE #Временно |IF EXISTS(SELECT * FROM tempdb.dbo.sysobjects WHERE id = OBJECT_ID(N'[tempdb].[dbo].[#ВременноСырье]')) DROP TABLE #ВременноСырье | |SELECT IDENTITY(INT) AS Счет,ParentExt as Сырье,ВвестиВДействиеС,ФлагРаботы |INTO #Временно FROM Справочник_ОсновнойАналог |WHERE " + стрДатаЗапроса + " >= ВвестиВДействиеС AND IsMark = 0 |ORDER BY ВвестиВДействиеС | |SELECT тов.CODE as КодСырья,спр.Номенклатура, спр.Коэффициент as Коэффициент |, 'Х' as Исключить, CAST('1753-01-01 00:00:00.000' AS datetime) as ВвестиВДействиеС, спр.ID |INTO #ВременноСырье |FROM Справочник_НоменклатураАналога as спр, Справочник_Товары as тов |WHERE спр.ParentExt = ?текВладелец(14,9) |AND спр.IsMark = 0 AND тов.ID = спр.Номенклатура | |UPDATE #ВременноСырье SET ВвестиВДействиеС = тз.ДатаВвода FROM |(SELECT t2.Сырье as Сырье, t2.ВвестиВДействиеС as ДатаВвода FROM | (SELECT t1.Сырье,ВвестиВДействиеС,t1.ФлагРаботы | FROM #Временно AS t1 WHERE t1.Счет in (SELECT MAX(Счет) AS Счет FROM #Временно )) as t2 |WHERE t2.ФлагРаботы = 1) as тз |WHERE тз.Сырье = ID | |SELECT КодСырья as КодСырья | , Номенклатура as [Аналог $Справочник.Товары] | , Коэффициент as Коэффициент | , Исключить as Исключить | , ВвестиВДействиеС as Основной | , ID as [Элемент $Справочник.НоменклатураАналога] |FROM #ВременноСырье"; оПоставщикДанных.УстТекстЗапроса(ТекстЗапроса); оПоставщикДанных.Поля.Добавить("Элемент").Автоудаление = 0; // тут ошибка, что Поля - "не агрегатный объект" оПоставщикДанных.УстКлючПорядка("Аналог"); |
|||
1
Ёпрст
05.05.17
✎
12:37
|
Это, УстИДПоле не нужно разве там сделать еще ?
Усё позабыл |
|||
2
АЛьФ
05.05.17
✎
12:41
|
2(1) Нужно. Оно дальше и до него не доходит. Этот код с простым запросом с одним селектом прекрасно отрабатывает.
|
|||
3
Ёпрст
05.05.17
✎
12:43
|
Была же какая-то хрень, чтоб пакетный запрос выдавал последний результат..Склероз.
|
|||
4
trdm
05.05.17
✎
12:46
|
в QA это было. Выбор номера пакета для выполнения.
|
|||
5
АЛьФ
05.05.17
✎
12:54
|
2(4) И?...
|
|||
6
Ёпрст
05.05.17
✎
13:02
|
Это, а так, не работает ?
Источник = СоздатьОбъект("ODBCDataProvider.MSSQL"); Источник.БазаДанных = СоздатьОбъект("ODBCDataBase"); Источник.УстТекстЗапроса(ТекстЗапроса); Источник.УстКлючПорядка("Аналог"); Источник.УстИдПоля("твой ид для поля") Поля = Источник.Поля; ПолеЭлемент = Поля.Добавить("Элемент"); ПолеЭлемент.Автоудаление = 0 ТабПоле.ПоставщикДанных = Источник; ТабПоле.ПоставщикДанных.Обновить(); |
|||
7
Ёпрст
05.05.17
✎
13:03
|
И не помню ужо, между запросами, не надо ли ; втыкать, случаем ?
|
|||
8
АЛьФ
05.05.17
✎
13:06
|
2(6) на строке "Источник.УстКлючПорядка("Аналог")" пишет, что нет такого поля "Аналог".
2(7) В менеджере этот запрос отрабатывает нормально без ошибок. |
|||
9
Ёпрст
05.05.17
✎
13:15
|
(8)
|SET NOCOUNT OFF вот это воткни в начало |
|||
10
Ёпрст
05.05.17
✎
13:15
|
или ON ?
^)) |
|||
11
Ёпрст
05.05.17
✎
13:16
|
|SET NOCOUNT ON
или OFF ? короче, это в первую строчку в запросе |
|||
12
АЛьФ
05.05.17
✎
13:22
|
2(9)(10)(11) Не помогло.
|
|||
13
ADirks
05.05.17
✎
13:42
|
А зачем заполнение временных таблиц в запросе для ТП? Конечно оно работать не будет. Заполняйте ВТ перед показом, а в запросе для ТП оставить только финальный селект.
|
|||
14
АЛьФ
05.05.17
✎
13:50
|
2(13) Как обойти я придумаю. Это просто был самый просто путь решения вопроса. Фигово, если ТП воспринимает только простой селект :(
|
|||
15
Ёпрст
05.05.17
✎
13:56
|
(14)Не со временными табличками он тоже работал Надо поискать примёр
|
|||
16
ADirks
05.05.17
✎
13:57
|
ТП этот селект же ещё модифицирует разными способами. И состав полей меняется, и условия. Так что, по другому особо и не сделаешь.
|
|||
17
АЛьФ
05.05.17
✎
14:00
|
2(16) Понятно. Спасибо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |