Имя: Пароль:
1C
1C 7.7
v7: Кто ещё помнит прямые запросы? Помогите.
0 Aswed
 
10.11.15
11:16
Надо в старой базе подправить прямой запрос, добавив в нем отбор документов по периоду.
Пытаюсь добавить условие

ТекстЗапроса = "
        |SELECT
        |    ЗаказНаряд.IDDOC AS [ЗаказНаряд :Документ.ЗаказНаряд]
        |FROM
        |    Документ_ЗаказНаряд AS ЗаказНаряд
        |
        |LEFT JOIN
        |    Журнал AS Жур
        |ON
        |    ЗаказНаряд.IDDOC = Жур.IDDOC
        |WHERE
        |    Жур.ISMARK <> '*'
        |    AND ЗаказНаряд.ДокументОснование = :ЗаявкаНаРемонт~
        |   AND ЗаказНаряд.ДатаДок BETWEEN :НачДата AND :КонДата
        |";

Ругается

ЗапросSQL.ВыполнитьЗапрос(ТекстЗапроса, сзРезультат);
{C:\1CALFA\KIA\AUTOPLAN\AUTOPLAN — КОПИЯ.ERT(447)}: no such column: ЗаказНаряд.ДатаДок

Подскажите что не так делаю?
1 mikecool
 
10.11.15
11:17
иннер джойн журнал и у него фильтр по дате
2 mikecool
 
10.11.15
11:18
+1 каст(Лефт(Жур.ДатеТаймИддок, 8) аз датетайм)
3 НЕА123
 
10.11.15
11:19
Жур.ДатаДок
?
4 mikecool
 
10.11.15
11:30
|SELECT

        |    ЗаказНаряд.IDDOC AS [ЗаказНаряд :Документ.ЗаказНаряд]
        |FROM
        |    Документ_ЗаказНаряд AS ЗаказНаряд
        |
        |inner JOIN
        |    Журнал AS Жур
        |ON
        |    ЗаказНаряд.IDDOC = Жур.IDDOC
        |WHERE
        |    Жур.ISMARK <> '*'
        |    AND ЗаказНаряд.ДокументОснование = :ЗаявкаНаРемонт~
        |   AND cast(Left(Жур.DateTimeIddoc, 8) as DateTime) BETWEEN :НачДата AND :КонДата
        |";
5 Горогуля
 
10.11.15
11:32
Жур.ISMARK <> '*'?
6 Гёдза
 
10.11.15
11:32
(2) так лучше фильтр по дате не делать, ибо в индекс не попадешь
7 mikecool
 
10.11.15
11:34
(6) а как надо?
8 Aswed
 
10.11.15
11:42
Блин проще переписать через обычный запрос, чем вспоминать эти прямые.
Не работал с ними уже лет 5.
9 VladZ
 
10.11.15
11:53
Зачем все это помнить? Идешь сюда: http://www.1cpp.ru/index.php/Documentation  Качаешь доки. В разделе "Учебник" смотришь примеры. Там все хорошо расписано.
10 Aswed
 
10.11.15
11:58
(4) тут ругается

ЗапросSQL.ВыполнитьЗапрос(ТекстЗапроса, сзРезультат);
{C:\1CALFA\KIA\AUTOPLAN\AUTOPLAN — КОПИЯ.ERT(483)}: near "(": syntax error

(9) Уже копаюсь) Но пока не нашел то что нужно.
11 Aswed
 
10.11.15
12:15
нашел свои старые обработки, переделал как там

    ТекстЗапроса = "
        |SELECT
        |    ЗаказНаряд.IDDOC AS [ЗаказНаряд :Документ.ЗаказНаряд],
        |     CAST(LEFT(Жур.Date_Time_IDDoc,8) AS DateTime) as ДатаДок
        |FROM
        |    Документ_ЗаказНаряд AS ЗаказНаряд
        |
        |LEFT JOIN
        |    Журнал AS Жур
        |ON
        |    ЗаказНаряд.IDDOC = Жур.IDDOC
        |WHERE
        |    Жур.ISMARK <> '*'
        |    AND ЗаказНаряд.ДокументОснование = :ЗаявкаНаРемонт~
        |    AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
        |";

Все равно сволочь ругается на открывающую скобку
12 Aswed
 
10.11.15
12:16
А вообще нафиг тут делали соединение с журналом? Когда можно напрямую доки выбрать из журнала задав тип выбираемого дока?
13 Aswed
 
10.11.15
12:16
+12 сейчас так и попробую
14 Serginio1
 
10.11.15
12:51
Ато это за Жур.ISMARK <> '*'
Может

(Жур.ISMARK = 0)
15 dk
 
10.11.15
13:14
отключай строки по одной - ищи где ошибка
LEFT JOIN
на
INNER JOIN
обычно к журналу ставят
------
соединение нужно для даты документа
дата в журнале хранится
16 olegves
 
10.11.15
13:24
AS DateTime - это херь, посмотри в скуле синтаксис CAST
17 ЧеловекДуши
 
10.11.15
13:36
(0) А разве дата документа не в журнале?
Может стоит использовать Журнал, в качестве основной таблицы.
Организовать отбор только по нужному Виду документов.
Установить Период
Дописать проверку на проведенность документа.

(15) А вы В курсе, Что Иннер, на Сиквеле выполняется дольше, чем Лефт :)
18 ЧеловекДуши
 
10.11.15
13:37
(16) У 7.7, тама Строка <Дата Док.>+<Время док>+<ИД Док>
19 ЧеловекДуши
 
10.11.15
13:37
(14) Это только Пометка на удаления.
20 ЧеловекДуши
 
10.11.15
13:39
+(19) Уж тогда "Жур.Closed & 1 = 1"

http://www.script-coding.com/Direct_queries.html

Искать на страницы текст "Дополним пример выбором контрагента."
21 Попытка1С
 
10.11.15
13:43
(17) Либо left join + where либо сразу inner join and условие на дату

и не забываем про nolock в секциях
FROM и LEFT JOIN
22 Попытка1С
 
10.11.15
14:00
(11) А давно 1с++ сама преобразовывает Журнал в _1sjourn?

А вот тут

|FROM
|    Документ_ЗаказНаряд AS ЗаказНаряд

Должно же быть так

|FROM
|    $Документ.ЗаказНаряд AS ЗаказНаряд

Или что это за объект "ЗапросSQL" ?
23 ЧеловекДуши
 
10.11.15
14:06
(21) Само собой, в лефт проверку. на то, что документ не битый :)
Но вот иннер, больше от лени :)
24 varelchik
 
10.11.15
14:11
(11)Жур.ISMARK <> '*'
надо
Жур.ISMARK =0
это лишнее
       |   AND cast(Left(Жур.DateTimeIddoc, 8) as DateTime) BETWEEN :НачДата AND :КонДата
надо
        |   AND Жур.DateTimeIddoc BETWEEN :НачДата AND :КонДата~
25 ЧеловекДуши
 
10.11.15
14:26
(24) Вот бывает "BETWEEN ", подводит :)
Лучше просто "<=" и ">=" :)
26 trdm
 
10.11.15
14:33
(16) Да это ваще не скуль, а скулайт судя по
        |FROM
        |    Документ_ЗаказНаряд AS ЗаказНаряд
27 Aswed
 
10.11.15
17:43
(22) мать его

БазаSQL = СоздатьОбъект("SQLiteBase");

я этой хренью не пользовался не разу.
А я ещё думаю как то странно запрос строится. Вот отсюда видимо и рога растут.
28 Aswed
 
10.11.15
17:44
+ 27 как на этом то чуде условия в запросах строятся?
29 viktor_vv
 
10.11.15
18:00
(28) Судя по Жур.ISMARK <> '*' база случайно не ДБФ ?
30 Aswed
 
10.11.15
18:00
(29) Она самая. Хрень доисторическая.
31 viktor_vv
 
10.11.15
18:01
(29)+ Если ДБФ там структура журнала немного другая, в части даты времени, то есть поля Жур.Date_Time_IDDoc нет, попробую вспомнить.
32 viktor_vv
 
10.11.15
18:05
А, тогда

Жур.Date BETWEEN :НачДата AND :КонДата
33 viktor_vv
 
10.11.15
18:07
(32) + Првда индекс есть подходящий только по полям DATE,TIME,IDDOC , но SQLite сам нормально находит все и дополняет для попадания.
34 viktor_vv
 
10.11.15
18:09
И ДокументОснование это общий реквизит или реквизит документа ? Если общий, то флаг Отбор стоит или нет ?
35 viktor_vv
 
10.11.15
18:23
Для примера рабочий для ДБФ

ТекстЗапроса = "
    |Select
    |    Жур.IDDOC as [Док :Документ.НакладнаяНаОтпуск]
    |From
    |    Журнал as Жур
    |Where
    |    Жур.Date between :НачПериода and :КонПериода
    |    and Жур.iddocdef = :ВидДокумента.НакладнаяНаОтпуск
    |    and Жур.ISMARK <> '*'
    |";
36 Aswed
 
11.11.15
10:18
(34) Общий реквизит.
Спасибо, Date все получилось.
Ошибка? Это не ошибка, это системная функция.