Имя: Пароль:
1C
1C 7.7
v7: SQLITE: Запрос с выборкой документа-владельца не отрабатывает как надо
,
0 Zhuravlik
 
24.04.13
12:12
Здравствуйте, подскажите пожалуйста, вот текст запроса:

   _ТекстЗапроса = "
   |SELECT
   |    дЛитраж_ТЧ.Дата as [ДатаЧека $Дата],
   |    дЛитраж_ТЧ.Литраж as [Литраж],
   |    дЛитраж_ШП.спрТопливнаяКарта as [ТопливнаяКарта :Справочник.АВТ_ТопливныеКарты],
   |    дПутевойЛист.саАвтовоз as [Автовоз $Справочник.АВТ_ТранспортныеСредства],
   |    дПутевойЛист.ссВодитель as [Водитель $Справочник.Сотрудники]
   |
   |FROM
   |    /* Выбираю из табличной части документа */
   |    [ДокументСтроки.АВТ_ЛитражПоЧекам] as дЛитраж_ТЧ
   |
   |    /* Подключаю журнал для ограничения по пометке удаления*/
   |    inner Join [Журнал] Жур on Жур.iddocdef = :ВидДокумента.АВТ_ЛитражПоЧекам
   |    and дЛитраж_ТЧ.IDDOC = Жур.IDDOC AND Жур.ISMARK <> '*'
   |    
   |    /* Подключаю шапку документа */
   |    Left Join [Документ.АВТ_ЛитражПоЧекам] as дЛитраж_ШП on дЛитраж_ШП.IDDOC = Жур.IDDOC
   |
   |    /* Подключаю таблицу ссылок, для определения документа-владельца */
   |    Left Join [_1S.CRDOC] as Ссылки on Ссылки.CHILDID = Жур.IDDOC
   |
   |    /* Подлкючаю шапку документа-владельца, с отбором по ссылкам */
   |    Left Join [Документ.АВТ_ПутевойЛист] as дПутевойЛист on дПутевойЛист.IDDOC = Ссылки.PARENTVAL
   |
   |WHERE
   |    дЛитраж_ТЧ.Дата Between :НачДата AND :КонДата
   |
   |";

В результате выполнения поля "Автовоз" и "Водитель" - пустые. Что здесь не так?
1 Zhuravlik
 
24.04.13
12:14
Видимо Ссылки.CHILDID = Жур.IDDOC?..
2 Zhuravlik
 
24.04.13
12:17
Нет, кажется тут косяк - дПутевойЛист.IDDOC = Ссылки.PARENTVAL, а какой модификатор строку в 23 символа преобразует?
3 orefkov
 
24.04.13
12:18
дПутевойЛист.IDDOC = substr(Ссылки.PARENTVAL, 2, 9)
4 orefkov
 
24.04.13
12:21
Извиняюсь за (3), конечно же
дПутевойЛист.IDDOC = substr(Ссылки.PARENTVAL, 6, 9)
5 Zhuravlik
 
24.04.13
12:23
(3)(4) Спасибо, но не выходит все-равно, я
вывел в таблицу доп. селектом поля "Ссылки.PARENTVAL" и "дПутевойЛист.IDDOC", и поле "дПутевойЛист.IDDOC" - все пустое, но документы есть точно.
6 Zhuravlik
 
24.04.13
12:27
А сейчас убрал условия на ИДДок по ссылкам, мне программа выдала в поля из (5) значения, они вообще не равны между собой... напр.:
Ссылки.PARENTVAL = "O1 XF8    P1           ",
дПутевойЛист.IDDOC = "    BD   "
7 Zhuravlik
 
24.04.13
12:28
+ Может я еще что в самом запросе не докрутил?
8 Ёпрст
 
24.04.13
12:35
дПутевойЛист.IDDOC = substr(Ссылки.PARENTVAL, 5, 9)
9 Zhuravlik
 
24.04.13
12:38
(8) Не хочет, поле дПутевойЛист.IDDOC пустое
10 Ёпрст
 
24.04.13
12:39
а ёпт, у тя ж не графа отбора ..
11 Zhuravlik
 
24.04.13
12:43
(10) Где?
12 Ёпрст
 
24.04.13
12:44
Должно как в (4) работать, если не работает - то владелеца нема.
13 Zhuravlik
 
24.04.13
12:53
(12) Не работает, но владелец есть 100%.
Вот как сейчас у меня выглядит текст запроса:

   _ТекстЗапроса = "
   |SELECT
   |    дЛитраж_ТЧ.Дата as [ДатаЧека $Дата],
   |    дЛитраж_ТЧ.Литраж as [Литраж],
   |    дЛитраж_ШП.спрТопливнаяКарта as [ТопливнаяКарта :Справочник.АВТ_ТопливныеКарты],
   |    дПутевойЛист.саАвтовоз as [Автовоз $Справочник.АВТ_ТранспортныеСредства],
   |    дПутевойЛист.ссВодитель as [Водитель $Справочник.Сотрудники],
   |    дЛитраж_ШП.IDDOC as ИД_Литраж,
   |    Ссылки.PARENTVAL as ССылки_Парент,
   |    дПутевойЛист.IDDOC as ИД_Путевой
   |
   |FROM
   |    /* Выбираю из табличной части документа */
   |    [ДокументСтроки.АВТ_ЛитражПоЧекам] as дЛитраж_ТЧ
   |
   |    /* Подключаю журнал для ограничения по пометке удаления*/
   |    inner Join [Журнал] Жур on Жур.iddocdef = :ВидДокумента.АВТ_ЛитражПоЧекам
   |    and дЛитраж_ТЧ.IDDOC = Жур.IDDOC AND Жур.ISMARK <> '*'
   |    
   |    /* Подключаю шапку документа */
   |    Left Join [Документ.АВТ_ЛитражПоЧекам] as дЛитраж_ШП on дЛитраж_ШП.IDDOC = Жур.IDDOC
   |
   |    /* Подключаю таблицу ссылок, для определения документа-владельца */
   |    Left Join [_1S.CRDOC] as Ссылки on Ссылки.CHILDID = дЛитраж_ШП.IDDOC
   |
   |    /* Подлкючаю шапку документа-владельца, с отбором по ссылкам */
   |    Left Join [Документ.АВТ_ПутевойЛист] as дПутевойЛист on дПутевойЛист.IDDOC = substr(Ссылки.PARENTVAL, 6, 9)
   |
   |WHERE
   |    дЛитраж_ТЧ.Дата Between :НачДата AND :КонДата
   |
   |";


И вот поля таблицы, которая получается в итоге: http://i49.fastpic.ru/big/2013/0424/fe/c823d4ce0468fe433676cb737d8829fe.png
ИД по путевым листам - пустые...
14 Zhuravlik
 
24.04.13
12:53
+ Что-то не пошла ссылка, вот еще раз
http://fastpic.ru/view/49/2013/0424/c823d4ce0468fe433676cb737d8829fe.png.html
15 Туц
 
24.04.13
13:22
(0) Проверяй
1. дПутевойЛист.IDDOC = Ссылки.PARENTVAL
2. Ссылки.CHILDID = Жур.IDDOC
3. Жур.iddocdef = :ВидДокумента.АВТ_ЛитражПоЧекам and дЛитраж_ТЧ.IDDOC = Жур.IDDOC AND Жур.ISMARK <> '*'

Сделай отладку 3 потом 2 потом 1.
16 Ёпрст
 
24.04.13
13:29
Одно непонятно, нафига через жж.. искать документ-владельц?

Когда у тебя в АВТ_ЛитражПоЧекам должна быть непосредственно ссылка на него.
17 Ёпрст
 
24.04.13
13:29
если он подчиненный.
18 Dolly_EV
 
24.04.13
15:12
(0) угу, в (17)
Скорее всего есть общий рекв "ДокОснование" типа "Документ", тогда:
Left Join [Документ.АВТ_ПутевойЛист] as дПутевойЛист on дПутевойЛист.IDDOC = substr(Жур.ДокОснование, 6, 9)

если он без отбора, тогда:
Left Join [Документ.АВТ_ПутевойЛист] as дПутевойЛист on дПутевойЛист.IDDOC = substr(дЛитраж_ШП.ДокОснование, 6, 9)

и не надо соединения к _1S.CRDOC
19 Zhuravlik
 
24.04.13
16:17
Извините, отвлекся.
(17) Точно) Не подумал о самом простом.
Вот так все получается

   _ТекстЗапроса = "
   |SELECT
   |    дЛитраж_ТЧ.Дата as [ДатаЧека $Дата],
   |    дЛитраж_ТЧ.Литраж as [Литраж],
   |    дЛитраж_ШП.спрТопливнаяКарта as [ТопливнаяКарта :Справочник.АВТ_ТопливныеКарты],
   |    дПутевой.саАвтовоз as [Автовоз $Справочник.АВТ_ТранспортныеСредства],
   |    дПутевой.ссВодитель as [Водитель $Справочник.Сотрудники]
   |
   |FROM
   |    /* Выбираю из табличной части документа */
   |    [ДокументСтроки.АВТ_ЛитражПоЧекам] as дЛитраж_ТЧ
   |
   |    /* Подключаю журнал для ограничения по пометке удаления*/
   |    inner Join [Журнал] Жур on Жур.iddocdef = :ВидДокумента.АВТ_ЛитражПоЧекам
   |    and дЛитраж_ТЧ.IDDOC = Жур.IDDOC AND Жур.ISMARK <> '*'
   |    
   |    /* Подключаю шапку документа */
   |    Left Join [Документ.АВТ_ЛитражПоЧекам] as дЛитраж_ШП on дЛитраж_ШП.IDDOC = Жур.IDDOC
   |
   |    /* Подключаю шапку документа-владельца */
   |    Left Join [Документ.АВТ_ПутевойЛист] as дПутевой on дПутевой.IDDOC = дЛитраж_ШП.ДокОснование
   |    
   |
   |WHERE
   |    дЛитраж_ТЧ.Дата Between :НачДата AND :КонДата
   |
   |";


А здесь больше ничего не надо добавлять для скорости/кошерности? Так все работает быстренько.
(18) Нет, общего реквизита нет.
20 Ёпрст
 
24.04.13
16:21
дЛитраж_ШП.ДокОснование, а есть уверенность, что ДокОснование - реквизит с типом Докумен.ОпределенныйВид, а не просто <Документ> без вида ?
21 Zhuravlik
 
24.04.13
16:23
(20) Точно знаю, что это так :) ДокОснование = Документ.АВТ.ПутевойЛист.
22 Zhuravlik
 
24.04.13
16:23
*Документ.АВТ_ПутевойЛист.
23 Zhuravlik
 
24.04.13
16:29
(20) А подскажите, как в литературе разобраться? Вот я читаю в доке описание типизации числа:

Типизация Число
Задается как:

$|:Число|Number[.ЧислоДлинаЧисла[.ЧислоТочностьЧисла]]

Значение результата запроса преобразуется в число. При указании точности числа, результат запроса округляется до указанной точности.

И как в соответствии с этим мне протипизировать переменную
дЛитраж_ТЧ.Литраж as [Литраж]?

При прочтении доки показалось что так:
дЛитраж_ТЧ.Литраж as [Литраж [15 [2]]] - но это неверно, через пробел тоже не катит. Что в описнаии подразумевают квадратные скобки?
24 Zhuravlik
 
24.04.13
16:30
дЛитраж_ТЧ.Литраж as [Литраж :Число.15.2] - или так имеется в виду?
25 Ёпрст
 
24.04.13
16:31
(24) да так.
26 Zhuravlik
 
24.04.13
16:31
Как в (24) получилось, но описания все-равно не понимаю, зачем там скобки квадратные?
27 Dolly_EV
 
25.04.13
03:33
(26) квадратные скобки предполагают необязательность.
Т.е. варианты
:Число.15.2
:Число.15
:Число
все будут верные.
AdBlock убивает бесплатный контент. 1Сергей