|
v7: 1C++ Ошибка в прямом запросе при получении первого движения по регистру | ☑ | ||
---|---|---|---|---|
0
es3000
07.09.12
✎
09:26
|
помогите пожалуйста...
есть регистр остатков примерно такого содержания: Склад1 Номенкл1 Характ1 ЦенаРозн1 Движение1 ... Склад1 Номенкл1 Характ1 ЦенаРозн1 Движение2 ... Склад1 Номенкл1 Характ1 ЦенаРозн1 Движение3 ... Склад2 Номенкл1 Характ1 ЦенаРозн1 Движение1 ... Склад2 Номенкл1 Характ1 ЦенаРозн1 Движение2 ... Склад2 Номенкл1 Характ1 ЦенаРозн1 Движение3 ... ... Нужно для каждой группы движений Склад, Номенклатура, Характеристика, ЦенаРозн получить самое первое движение. То есть надо получить следующую таблицу из регистра: Склад1 Номенкл1 Характ1 ЦенаРозн1 Движение1 Склад2 Номенкл1 Характ1 ЦенаРозн1 Движение2 ... сделал запрос. он при включенной отладке выдает ошибку: Код: FAILED! ICommandText::Execute(): SQL: Column ' ' is not found. Код: ТекстЗапроса = " | SELECT | $РегОст.Склад AS [Склад $Справочник.Склады], | $РегОст.Номенклатура AS [Номенклатура $Справочник.Номенклатура], //| $СпрНоменклатура.ВидНоменклатуры AS [ВидНоменклатуры $Перечисление.ВидыНоменклатуры], | $РегОст.Характеристика AS [Характеристика $Справочник.Характеристики], | $РегОст.ЦенаРозн as ЦенаРозн, | $РегОст.Количество as Количество, | $РегОст.Сумма as Сумма, | IIF(Empty($РегОст.Количество), 0, $РегОст.Сумма / $РегОст.Количество) as ЦенаОтп, | РегОст.IDDoc, | РегОст.Lineno, | РегОст.Actno | FROM $Регистр.Остатки as РегОст | INNER JOIN | (SELECT TOP 1 | $ДвиженияПоПартии.Склад, | $ДвиженияПоПартии.Номенклатура, | $ДвиженияПоПартии.Характеристика, | $ДвиженияПоПартии.ЦенаРозн, | ДвиженияПоПартии.IDDoc, | ДвиженияПоПартии.Lineno, | ДвиженияПоПартии.Actno | FROM $Регистр.Остатки as ДвиженияПоПартии | WHERE | ($ДвиженияПоПартии.Склад = $РегОст.Склад) AND | ($ДвиженияПоПартии.Номенклатура = $РегОст.Номенклатура) AND | ($ДвиженияПоПартии.Характеристика = $РегОст.Характеристика) AND | ($ДвиженияПоПартии.ЦенаРозн = $РегОст.ЦенаРозн) | ORDER BY | ДвиженияПоПартии.IDDoc, ДвиженияПоПартии.Lineno, ДвиженияПоПартии.Actno) | AS ПервоеДвижение | ON | (РегОст.IDDoc = ПервоеДвижение.IDDoc) AND | (РегОст.Lineno = ПервоеДвижение.Lineno) AND | (РегОст.Actno = ПервоеДвижение.Actno) |"; ошибка появилась после того как я добавил корреляционные переменные в подзапрос. если следующий кусок убрать, то ошибки нету, запрос отрабатывает (хоть и неправильно) Код: | WHERE | ($ДвиженияПоПартии.Склад = $РегОст.Склад) AND | ($ДвиженияПоПартии.Номенклатура = $РегОст.Номенклатура) AND | ($ДвиженияПоПартии.Характеристика = $РегОст.Характеристика) AND | ($ДвиженияПоПартии.ЦенаРозн = $РегОст.ЦенаРозн) Значит ошибка в подзапросе. Но не могу понять в чем ошибка... |
|||
1
es3000
07.09.12
✎
09:28
|
ошибся выше... надо получить таблицу:
Склад1 Номенкл1 Характ1 ЦенаРозн1 Движение1 Склад2 Номенкл1 Характ1 ЦенаРозн1 Движение1 то есть только самые первые движения для каждой группы |
|||
2
А л
07.09.12
✎
09:41
|
Проверь Lineno_, подчеркивание не забыл?
|
|||
3
es3000
07.09.12
✎
09:41
|
ап
|
|||
4
es3000
07.09.12
✎
09:43
|
(2) не, имена полей правильные.
я же говорю что ошибка появляется после добавления условия в подзапрос. похоже что подзапрос просто не видит внешнего запроса по таблицу РегОст :( |
|||
5
Mikeware
07.09.12
✎
09:44
|
Это дбфный запрос?
|
|||
6
es3000
07.09.12
✎
09:53
|
(5) ага
|
|||
7
Mikeware
07.09.12
✎
09:54
|
(6) тогда не подскажу :-)
|
|||
8
es3000
07.09.12
✎
09:55
|
(7) а намекнуть :)
|
|||
9
zelenprog
07.09.12
✎
10:01
|
(5), (7) а есть какая-то разница для запроса?
|
|||
10
Mikeware
07.09.12
✎
10:02
|
(9) у фоксового драйвера куча ограничений.
|
|||
11
Boroda
07.09.12
✎
10:11
|
А что если попробовать в подзапросе сразу получить набор первых записей.
Ну что-типа такого: | SELECT | $ДвиженияПоПартии.Склад, | $ДвиженияПоПартии.Номенклатура, | $ДвиженияПоПартии.Характеристика, | $ДвиженияПоПартии.ЦенаРозн, | MIN(ДвиженияПоПартии.IDDoc), | MIN(ДвиженияПоПартии.Lineno), | MIN(ДвиженияПоПартии.Actno) | FROM $Регистр.Остатки as ДвиженияПоПартии | GROUP BY $ДвиженияПоПартии.Склад, $ДвиженияПоПартии.Номенклатура,$ДвиженияПоПартии.Характеристика |
|||
12
es3000
07.09.12
✎
10:11
|
(10) можно пару идей, как решить мою проблему с учетом этих ограничений?
|
|||
13
es3000
07.09.12
✎
10:14
|
(11) ну это будет не само движение...
это запрос всегда будет выдавать самый первый документ, lineno = 1, actno = 1 а мне нужно найти именно само движение чтобы взять из него нужные мне ресурсы |
|||
14
Ёпрст
07.09.12
✎
10:24
|
(0) фсё в топку
|
|||
15
es3000
07.09.12
✎
11:06
|
(14) почему?
|
|||
16
Boroda
07.09.12
✎
11:21
|
Вот здесь получишь не первый документ по дате:
| (SELECT TOP 1 |... | ORDER BY ДвиженияПоПартии.IDDoc, ДвиженияПоПартии.Lineno, ДвиженияПоПартии.Actno) а первый по идентификатору |
|||
17
Ёпрст
07.09.12
✎
11:36
|
(15) всё не верно
|
|||
18
А л
07.09.12
✎
13:27
|
попробуй так
|... |FROM $Регистр.Остатки as РегОст |WHERE | (РегОст.IDDoc + РегОст.Lineno + CONVERT(char(9),РегОст.Actno)) IN | (SELECT TOP 1 | ДвиженияПоПартии.IDDoc + ПартииТоваров.Lineno_ + CONVERT(char(9),ДвиженияПоПартии.Actno) | FROM $Регистр.Остатки as ДвиженияПоПартии | WHERE ... |
|||
19
es3000
07.09.12
✎
16:19
|
(16) насчет сортировки согласен, исправлю
|
|||
20
es3000
07.09.12
✎
16:21
|
(17) а как верно?
пожалуйста, можно по пунктам что конкретно неправильно и как эту беду исправлять? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |