|
v7: 1SQLite: как получить пустую дату в запросе, как пустое значение? | ☑ | ||
---|---|---|---|---|
0
Zhuravlik
21.02.13
✎
18:17
|
Здравствуйте. Делаю запрос из поставщика, по справочнику. Если в элементе справочника типа "Дата" указано пустое значение, то типизация $Дата возвращает строку " . . ". И на ПустоеЗначение() она не проходит, а как сделать чтоб проходило?
Сейчас пользуюсь функцией: //====================================================================== Функция ПроверкаПустойДатыЗапроса(дт) //Пустые даты запрос возвращает как " . . ". Чтобы определить, что дата пуста //ввел эту функцию Возврат Найти("0123456789", Лев(дт, 1)); КонецФункции // ВернутьДату |
|||
1
viktor_vv
21.02.13
✎
18:28
|
Скуль ?
|
|||
2
orefkov
21.02.13
✎
18:30
|
А если сравнить с Дата(0) ?
|
|||
3
viktor_vv
21.02.13
✎
18:31
|
Там пустая дата, это 1 января 1753 года .
Можешь через case прверять в запросе и заменять. Хотя может это с типизацией как-то связано. |
|||
4
Zhuravlik
21.02.13
✎
18:31
|
(1) SQLite
(2) В см. с ПолучитьПустоеЗначение("Дата")? Но это же все-равно функция, а я прямо из запроса хотел получать... |
|||
5
Zhuravlik
21.02.13
✎
18:32
|
(3) Ушел курить case)
|
|||
6
viktor_vv
21.02.13
✎
18:36
|
(4) База на чем ?
Хотя я уже не помню почему, но отказался в запросе это делать, подменял при выводе строки. И это для Табличного поля из 1С++. Что-то типа такого // | Case When $ДокЛого.СрокИзмененный=Convert(DateTime,'01.01.1753',104) Then '' Else $ДокЛого.СрокИзмененный End as [ДатаВыходаИзм $Дата], |
|||
7
viktor_vv
21.02.13
✎
18:37
|
(6) И мне просто надо было в поле выводить две точки.
|
|||
8
vinogradъ
21.02.13
✎
18:39
|
(6) просто $ДокЛого.СрокИзмененный = '17530101'
|
|||
9
КонецЦикла
21.02.13
✎
18:40
|
||||
10
Zhuravlik
21.02.13
✎
18:43
|
(6) ДБФ
|
|||
11
Zhuravlik
21.02.13
✎
18:44
|
(7) Так они и так выводятся? Это я сегодня решил попробовать переписать консоль с поставщикаТЗ на поставщик SQLite, а так в тз если задаю дату как "", то точки выводятся нормально.
|
|||
12
viktor_vv
21.02.13
✎
18:46
|
(8) Ну в приципе одно и тоже, отказался по другой причине, кажетя 1С++ не приводил пустую дату к виду " . . " , сейчас уже не помню.
|
|||
13
viktor_vv
21.02.13
✎
18:48
|
(11) Ну так в том=то и дело, что в ТЗ оно уже типизировано по одинэсовскому стандарту, а через поставщик Запрос получается геммор.
|
|||
14
orefkov
21.02.13
✎
18:52
|
(4)
В запросе сравнивай с 8ю пробелами, вроде так. |
|||
15
orefkov
21.02.13
✎
18:54
|
Вообще лучше бы текст запроса привел и что не так получается.
|
|||
16
Zhuravlik
21.02.13
✎
18:55
|
(14) Ну да, вы мне говорили что проверка на пустую дату в запросе - это 8 пробелов. Это мне в запросе с CASE просто проверять? Если 8 пробелов, то дату не типизирую?
Наверно околесицу несу... Буду курить дома, а то мне бежать пора, автобус едет. Спасибо за советы) |
|||
17
orefkov
21.02.13
✎
19:05
|
Я бы смог помочь лучше, видя текст запроса.
|
|||
18
viktor_vv
21.02.13
✎
19:29
|
(12)+ Вспомнил в чем там проблема была, как раз с типизацией
Вот на такую конструкцию | Case When $ДокТранспорт.СрокИзмененный=Cast('17530101' as DateTime) Then ' . . ' Else $ДокТранспорт.СрокИзмененный End as [ДатаВыходаИзм $Дата], В поставщике данных ТП ПоставщикДанныхODBC MSSQL ругался на некоректные входные данные для конвертации. А на такую | Case When $ДокТранспорт.СрокИзмененный=Cast('17530101' as DateTime) Then '' Else $ДокТранспорт.СрокИзмененный End as [ДатаВыходаИзм $Дата], В пустой дате выводил 01.01.01 Я так понял типизация к дате скульными средствами выполнялась. |
|||
19
КонецЦикла
21.02.13
✎
19:58
|
(16) Блин, снова автобус мешает работе!
|
|||
20
viktor_vv
21.02.13
✎
20:11
|
(19) И не говори, уже второй раз съезжает :)).
|
|||
21
КонецЦикла
21.02.13
✎
20:13
|
(20) и это только то, что мы успели заметить :)
|
|||
22
Zhuravlik
21.02.13
✎
23:07
|
(17)
Вот, например. Есть справочник "Тест", в нем один реквизит - "дтФильтр", типа "Дата". В нем всего два элемента, один с пустой датой - другой с '01.01.01'. Выполняю такой код: база = СоздатьОбъект("SQLiteBase"); база.Открыть(":memory:"); Запрос = База.НовыйЗапрос(); тз = Запрос.ВыполнитьЗапрос(" |SELECT | TRIM(спр.DESCR) as [Наименование], | спр.дтФильтр as [дтФильтр $Дата] |FROM | [Справочник.Тест] as [спр] |"); тз.ВыбратьСтроки(); Пока тз.ПолучитьСтроку() = 1 Цикл Сообщить(тз.Наименование + ": " +ПустоеЗначение(тз.дтФильтр)); КонецЦикла; И он мне сообщает: Первый: 0 Второй: 0 Хотя в "Первый" - дата пустая, а во втором - нет. (18) Сейчас буду пробовать что-нибудь изобрести с CASE у себя, спасибо) (19)(20)(21) А что ж поделать) Если на автобус не попаду - пешочком через лес зимним вечером. И курсы прогуляю по аглицкому, деваться некуда))) |
|||
23
Zhuravlik
21.02.13
✎
23:11
|
+ Все очень просто решилось)))
тз = Запрос.ВыполнитьЗапрос(" |SELECT | TRIM(спр.DESCR) as [Наименование], |/*Просто обрезаю :)))*/ | TRIM(спр.дтФильтр) as [дтФильтр $Дата] |FROM | [Справочник.Тест] as [спр] |"); Сообщает все как надо) Первый: 1 Второй: 0 |
|||
24
Туц
22.02.13
✎
07:30
|
Как-то так.
база = СоздатьОбъект("SQLiteBase"); база.Открыть(":memory:"); Запрос = База.НовыйЗапрос(); Запрос.Подставлять("ПустаяДата",ПолучитьПустоеЗначение("Дата")); тз = Запрос.ВыполнитьЗапрос(" |SELECT | TRIM(DESCR) Наименование, | дтФильтр [дтФильтр $Дата] |FROM | Справочник.Тест |WHERE дтФильтр <> :ПустаяДата |"); тз.ВыбратьСтроки(); Пока тз.ПолучитьСтроку() = 1 Цикл Сообщить(тз.Наименование + ": " +ПустоеЗначение(тз.дтФильтр)); КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |