Имя: Пароль:
1C
1C 7.7
v7: Тип "Дата" - почему пусто? Прямой запрос (класс "ПрямойЗапрос")
0 Dolly_EV
 
25.09.13
10:41
делаю временную таблицу:

create table #тзОбороты(
    Подр char(9)
    ,Склад char(9)
    ,ВидАП char(9)
    ,КодАП char(3)
    ,Номенклатура char(9)
    ,ПроизвИмп char(9)
    ,ИННПроизвИмп char(20)
    ,ЭтоИмпорт numeric(1,0)
    ,ТекДок char(9)
    ,ТекДок_вид int
    ,ТекДок_ном char(20)
    ,ТекДок_дата varchar(10)
... и т.д.
ТекДок_дата пробовал char(8), сhar(10), varchar(10) - ничего не помогает
в ТекДок_дата данные попадают так:
        |    ,МАКСИМУМ(ВЫБОР
        |    КОГДА РегАлкОО.ВидДокумента=:ВидДокумента.ПриходнаяНакладная
        |    ТОГДА $ПНК.ДатаДокВходящий
        |    КОГДА РегАлкОО.ВидДокумента=:ВидДокумента.ЗаказПоставщику
        |    ТОГДА $ЗаказПост.ДатаДокВходящий
        |    ИНАЧЕ $Жур.ДатаДокумента КОНЕЦ) КАК ТекДок_дата

пробовал и так:  "КАК [ТекДок_дата $Дата]"
в итоге во всех вариантах для DBF (1SQlite) все ок - на выходе запросом из тзОбороты - в поле ТекДокДата - дата, на SQL - пусто

Что Я Делаю Не Так ??
1 Dolly_EV
 
26.09.13
03:35
ап
2 Rie
 
26.09.13
03:42
(0) А заглянуть в таблицы SQL, там посмотреть тип соответствующих реквизитов и сделать такой же?
3 Dolly_EV
 
26.09.13
03:55
(2) как в Management Studio посмотреть временную таблицу?
я ее вижу, но там кроме Custom reports и Refresh нет ничего более :-(
4 Dolly_EV
 
26.09.13
03:56
Проблема в том, что в классе "ПрямойЗапрос" нет типа "DATE" для создаваемых таблиц, только char/varchar
5 Rie
 
26.09.13
04:00
(3) Не временную таблицу. Данные в неё, насколько я понял, попадают из 1Совских таблиц? Вот их и смотреть.

(4) А если явно скастить к нужному типу?
6 Dolly_EV
 
26.09.13
04:09
Новый факт:
Вот так все ок:

|    ,МАКСИМУМ($Жур.ДатаДокумента) КАК ТекДок_дата

Вот так - пусто:
|    ,МАКСИМУМ(ВЫБОР
|    КОГДА РегАлкОО.ВидДокумента=:ВидДокумента.ПриходнаяНакладная
|    ТОГДА $ПНК.ДатаДокВходящий
|    КОГДА РегАлкОО.ВидДокумента=:ВидДокумента.ЗаказПоставщику
|    ТОГДА $ЗаказПост.ДатаДокВходящий
|    ИНАЧЕ $Жур.ДатаДокумента КОНЕЦ) КАК ТекДок_дата

причем пусто и для документов в случае "ИНАЧЕ $Жур.ДатаДокумента КОНЕЦ"
Поля "ДатаДокВходящий" - тип "Дата"
7 Rie
 
26.09.13
04:11
(6) А какого типа ДатаДокумента?
8 Dolly_EV
 
26.09.13
04:27
(6) "Дата" вестимо
9 Dolly_EV
 
26.09.13
04:36
(6) хотя я уже сомневаюсь...
Попробовал
|    ,МАКСИМУМ(ВЫБОР
|    КОГДА РегАлкОО.ВидДокумента=:ВидДокумента.ПриходнаяНакладная
|    ТОГДА СОКРП($ПНК.ДатаДокВходящий)
|    КОГДА РегАлкОО.ВидДокумента=:ВидДокумента.ЗаказПоставщику
|    ТОГДА СОКРП($ЗаказПост.ДатаДокВходящий)
|    ИНАЧЕ СОКРП($Жур.ДатаДокумента) КОНЕЦ) КАК ТекДок_дата

СКЛь ругается:
State 22001, native 8152, message [Microsoft][ODBC SQL Server Driver][SQL Server]String or binary data would be truncated.
10 Dolly_EV
 
26.09.13
06:15
В общем, проблема понятна (преобразование типов)
$Жур.ДатаДокумента возвращает строку 'ГГГГММДД'
$ПНК.ДатаДокВходящий возращает дату 'ДД.ММ.ГГГГ'
11 Ёпрст
 
26.09.13
09:34
ДатаДокВходящий  - как правило, тип Строка в документе, переобразование тут не при чем.
12 Dolly_EV
 
26.09.13
11:10
(11) у меня ДатаДокВходящий = Дата
13 Dolly_EV
 
26.09.13
11:12
проблема проявляется именно при упихивании во временную ТЗ. Т.к. если просто выполнить это запрос, в возвращаемой ИТЗ в поле "ТекДок_дата" - все Ок, все даты на месте
14 Ёпрст
 
26.09.13
14:01
ну кастани её что ле тогда.
15 Ёпрст
 
26.09.13
14:02
к датетайм, например
16 trad
 
26.09.13
14:08
во-первых в
create table ...
,ТекДок_дата datetime

во-вторых

МАКСИМУМ(ВЫБОР
|    КОГДА РегАлкОО.ВидДокумента=:ВидДокумента.ПриходнаяНакладная
|    ТОГДА $ПНК.ДатаДокВходящий
|    КОГДА РегАлкОО.ВидДокумента=:ВидДокумента.ЗаказПоставщику
|    ТОГДА $ЗаказПост.ДатаДокВходящий
|    ИНАЧЕ cast($Жур.ДатаДокумента as datetime) КОНЕЦ) КАК ТекДок_дата
17 Dolly_EV
 
26.09.13
14:20
(14)(15) Угу, уже. Но помогло КАСТ при выборе уже из временной таблицы.

В общем, что с КАСТ, что без КАСТ ПЕРЕД INSERT INTO,
в СКЛе на выходе из временной таблицы БЕЗ типизации лежат даты вида "Jul 24 2013 12:00AM", одинаковые не зависимо от источника (ПНК.ДатаДокВходящий или Жур.ДатаДокумента)
При этом С ТИПИЗАЦИЕЙ без КАСТ() - получаем пустые даты, с КАСТ() - все Ок.
В итоге правильный ответ: ,МАКСИМУМ(CAST(ТекДок_дата AS DateTime)) КАК [ТекДок_дата $Дата]
при выборе из временной таблицы
18 Dolly_EV
 
26.09.13
14:21
(16) в классе "ПрямойЗапрос" нет типа "datetime", поэтому varchar(20)
19 Dolly_EV
 
26.09.13
14:48
Блин. Теперь обратная проблема:
при МАКСИМУМ(CAST(ТекДок_дата AS DateTime)) КАК [ТекДок_дата $Дата]" на DBF - пустая дата....
CAST(ТекДок_дата AS DateTime выдает строку 'ГГГГММДД', которая типизацией не приводится к Дате
В общем, вилку придется ставить Скль/НеСкль :-(
20 Rie
 
26.09.13
14:53
(19) Вот я сейчас нахально, я бы даже сказал - нагло... заявлю, что не знаю типа "Дата". DateTime - знаю. Char - знаю. Varchar - тоже знаю. А вот "Дата" и "Строка" - нет. Ну сделал хороший человек хороший класс... Респект ему. Но пользователям этого класса - надо ж понимать, что "унутре у ней неонка".
Не, мож я не прав... Но предпочитаю работать в терминах "исходных" типов.
21 Dolly_EV
 
26.09.13
15:04
(20) ты прав, конечно)) Просто я изначально "Одинеснег"))) и только сейчас постигаю программирование
22 Dolly_EV
 
26.09.13
15:07
(20) +(21) а у одинеснегов унутри 1Са есть тип "Дата")))
23 Rie
 
26.09.13
15:22
(22) Вот тут не согласен. Тут две разных ситуации.
1. Человек работает _только_ в терминах ("понятиях") 1С. Тогда - никаких "прямых запросов". Есть запросы 1С - ими и пользуйтесь. Они, кстати, не столь уж и плохи.
Но - опять же, кстати - для DBF и SQL даже результаты "стандартных" запросов - могут _сильно_ отличаться. ВключитьSQL(0) приведёт, конечно, к единому знаменателю. Но - затормозит.
2. Человек использует прямые запросы. Тогда он должен понимать, во что это выливается. Понимать, что фактически он пишет на SQL. А все эти классы, "$", ":", "~" и т.п. - это лишь инструменты, подаренные (собершенно безбоздбездно, то есть, дадом) ему для упрощения его труда по написанию SQL-запросов.
И в конечном итоге - он имеет запрос на SQL и именно с ним и совершает половые акты, если таковой не работает.
24 Rie
 
26.09.13
15:31
+(23) Кстати, если что... Насколько мне известно, автор класса ПрямойЗапрос иногда заглядывает на этот форум. А если куда отлучился - то присутствует на форуме по 1С++. И не припомню случая, когда бы он отказался отвечать на прямо заданные вопросы пользователей. Помедитируйте над этим.
25 Ёпрст
 
26.09.13
15:34
(20) Date сто лет в обед есть в скуле, начиная с 2005 (или 2008 не помню)
26 Rie
 
26.09.13
15:40
(25) Вроде как с 2008 (хотя, виноват, точно не помню). Вот только в 1С "Дата" - появилась как бы на более чем 10 лет раньше. А структура базы с тех пор не менялась. Так что не совсем это date.
Поэтому я говорю, что надо бы точно указывать скулевские типы.
27 Dolly_EV
 
26.09.13
15:41
(23) "Есть запросы 1С - ими и пользуйтесь. Они, кстати, не столь уж и плохи." - я их с освоением прямых запросов перестал понимать вообще))
(24) ессно ,вопрос параллельно и там обсуждается
http://www.1cpp.ru/forum/YaBB.pl?num=1285352210/585#599
не буду медитировать..
(20) На СКЛь (2005)
МАКСИМУМ(CAST(ТекДок_дата AS Date)) КАК [ТекДок_дата $Дата]
дает ошибку:
State 42000, native 243, message [Microsoft][ODBC SQL Server Driver][SQL Server]Type Date is not a defined system type
на ДБФ - пустая дата
28 Mikeware
 
26.09.13
15:43
(27)1. я их не знал, да еще и забыл....
29 Mikeware
 
26.09.13
15:44
(27) а тебе работа через класс ПрямойЗапрос критична?
30 Rie
 
26.09.13
15:44
(27) Ну значит, Date - с 2008.
31 Dolly_EV
 
26.09.13
15:46
(29), да, т.к. на этой конфе есть пара относительно больших контор на СКЛе и много мелких на ДБФе. И писать ВЕЗДЕ с вилками для платформы - дюже не удобно
32 Dolly_EV
 
26.09.13
15:47
Ладно, всем спасибо! На сегодня - я спать
33 Rie
 
26.09.13
15:51
+(30) Только имей в виду - 1С 7.7 появилась в _1990-х_. И транслировалась в те типы данных, которые были в MS SQL 6. С тех пор структуры данных не менялись.
34 Ёпрст
 
26.09.13
16:08
(26) аа...
:)
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан