|
v7: Как правильно получить значение в запросе | ☑ | ||
---|---|---|---|---|
0
pofigos
26.11.13
✎
10:34
|
Доброе утро. Помогите корректно привязать к запросу инструкцию. Честно - сдался почти, не понимаю к чему зацепить. Сама инструкция:
SELECT TOP(1) DATE ДатаОплаты FROM (SELECT TOP (25+2) CL.DATE ДатаКалендаря FROM CL WHERE ((cl.date >='19.09.09')AND(CL.ID = 13248)and(CL.DAYLEN>0)) ORDER BY CL.DATE) AS Календарь ORDER BY Календарь.Date DESC в конструкции дата - дата накладной ТОР(25+2) - 25 это переменная. Для каждой накладной разная. Основной текст запроса: ТекстЗапроса = " |SELECT ОсновнойОстатки.Субконто1 [Контрагент $Справочник.Контрагенты] |, $Сотрудник.Филиал [Филиал $Справочник.Подразделение] |, ДокТТН.IdDoc as [Докум $Документ.ТТННаОрганизациюТовары] |, $ДокТТН.Менеджер [Сотрудник $Справочник.Сотрудники] |, $ДокТТН.Всего as Сумма |, $Договора.ВидДоговора [ВидДоговора $Перечисление.ВидДоговора] |, ОсновнойОстатки.СуммаОстаток as СуммаДолга |, ГруппировкаДок.Группировка [Группировка $Перечисление.УкрупненныеГруппировки] | |FROM $БИОстатки.Основной(:ВыбДата~ | , | ,(Счет = :ВыбСчет) | ,(Субконто1,Субконто2) | , Фильтр) AS ОсновнойОстатки | |LEFT JOIN $Справочник.Документы AS Документы (NOLOCK) on Документы.id = ОсновнойОстатки.Субконто2 |INNER JOIN $Документ.ТТННаОрганизациюТовары as ДокТТН (NOLOCK) on ДокТТН.IdDoc = RIGHT($Документы.СсылкаНаДокумент,9) |LEFT JOIN _1SJOURN AS Журнал With (NOLOCK) ON ДокТТН.IDDOC = Журнал.IDDOC |LEFT JOIN $Справочник.Договора AS Договора (NOLOCK) on Договора.id = RIGHT($ДокТТН.ОснованиеОтпуска,9) |LEFT JOIN $Справочник.Сотрудники AS Сотрудник (NOLOCK) on Сотрудник.id = $ДокТТН.Менеджер |LEFT JOIN ( | SELECT DISTINCT $Группировки.УкрупненнаяГруппировка Группировка | , ТТННаОрганизациюТоварыСтроки.IDDOC Ссылка | FROM $ДокументСтроки.ТТННаОрганизациюТовары AS ТТННаОрганизациюТоварыСтроки With (NOLOCK) | LEFT JOIN $Справочник.ВидыТоваров AS ВидыТоваров (NOLOCK) on ВидыТоваров.id = $ТТННаОрганизациюТоварыСтроки.ВидТМЦ | LEFT JOIN $Справочник.Группировки AS Группировки (NOLOCK) on Группировки.id = $ВидыТоваров.Группировки | ) as ГруппировкаДок on ДокТТН.IdDoc = ГруппировкаДок.Ссылка | |WHERE (ОсновнойОстатки.СуммаОстаток > 0) |Условия |"; |
|||
1
pofigos
26.11.13
✎
10:40
|
Теоретически должно получится что-то вроде:
SELECT TOP(1) DATE ДатаОплаты FROM |(SELECT TOP ($ПоследнееЗначение.Договора.ДнейОтсрочки(Договора.id, LEFT(Журнал.DATE_TIME_IDDOC,8))+2) CL.DATE ДатаКалендаря FROM CL |WHERE ((cl.date >= LEFT(Журнал.DATE_TIME_IDDOC,8))AND(CL.ID = 13248)and(CL.DAYLEN>0)) |ORDER BY CL.DATE) AS Календарь | |ORDER BY Календарь.Date DESC Но куда и как правильно прицепить к запросу ума не приложу ( |
|||
2
viktor_vv
26.11.13
✎
10:47
|
Вот здесь лажа
LEFT(Журнал.DATE_TIME_IDDOC,8))+2 я так понял, тебе к дате надо два дня прибавить ? |
|||
3
viktor_vv
26.11.13
✎
10:49
|
Тогда надо что-то типа
DateADD(Convert(DateTime,LEFT(Журнал.DATE_TIME_IDDOC,8),112),Day,2) |
|||
4
pofigos
26.11.13
✎
10:50
|
(3) не пойдет, т.к. подсчет идет и банковских и календарных дней. Для календарных да. а вот для банковских надо условие (CL.DAYLEN>0)
|
|||
5
viktor_vv
26.11.13
✎
10:51
|
(3)+ То есть так
DateADD(Convert(d,2,DateTime,LEFT(Журнал.DATE_TIME_IDDOC,8),112)) |
|||
6
pofigos
26.11.13
✎
10:52
|
(2) Нет нужно первые ($ПоследнееЗначение.Договора.ДнейОтсрочки(Договора.id, LEFT(Журнал.DATE_TIME_IDDOC,8))+2) записей
|
|||
7
viktor_vv
26.11.13
✎
10:58
|
(6) А, понял примерно.
И что не получается ? Засунь (1) в Select да и все. Я правда не уверен насчет Top (Выражение). |
|||
8
viktor_vv
26.11.13
✎
11:01
|
|SELECT ОсновнойОстатки.Субконто1 [Контрагент $Справочник.Контрагенты]
| |,(SELECT TOP(1) DATE ДатаОплаты FROM |(SELECT TOP ($ПоследнееЗначение.Договора.ДнейОтсрочки(Договора.id, LEFT(Журнал.DATE_TIME_IDDOC,8))+2) CL.DATE ДатаКалендаря FROM CL |WHERE ((cl.date >= LEFT(Журнал.DATE_TIME_IDDOC,8))AND(CL.ID = 13248)and(CL.DAYLEN>0)) |ORDER BY CL.DATE) AS Календарь | |ORDER BY Календарь.Date DESC ) as ДатаОплаты | |, $Сотрудник.Филиал [Филиал $Справочник.Подразделение] |
|||
9
pofigos
26.11.13
✎
11:04
|
(8) Попробую, но вроде вчера делал, не пошло. Вся эта инструкция возвращает табличное поле размерностью (1,1) Тут и нужно значение первой строки
|
|||
10
viktor_vv
26.11.13
✎
11:06
|
(9) В selecte эта конструкция вернет одно значение, это скалярный запрос получается.
$ПоследнееЗначение в нечто подобное разворачивается. |
|||
11
pofigos
26.11.13
✎
11:07
|
(10) понял. но что-то не пошло (
AccountsRecordset::СформироватьОшибку(Строка Ошибка=State 42000, native 102, message [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около конструкции "ДатаОплаты".) : State 42000, native 102, message [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около конструкции "ДатаОплаты". |
|||
12
pofigos
26.11.13
✎
11:09
|
(11) Нашел ошибку. сейчас попробую с переменными.
Спасибо |
|||
13
pofigos
26.11.13
✎
11:16
|
(10) Спасибо за помощь. Взлетело:
|, (SELECT TOP(1) DATE ДатаОплаты FROM | (SELECT TOP (CONVERT(Int,$ПоследнееЗначение.Договора.ДнейОтсрочки(Договора.id, LEFT(Журнал.DATE_TIME_IDDOC,8)))+2) Date FROM CL | WHERE ((cl.date >= LEFT(Журнал.DATE_TIME_IDDOC,8))AND(CL.ID = 13248)and(CL.DAYLEN>0)) |ORDER BY CL.DATE) AS Календарь |ORDER BY Календарь.Date DESC) as ДатаОплаты |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |