|
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) аа...
:) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |