Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Как в прямом запросе сделать условие на реквизит типа "дата"? (число прочтений - 4838 )
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Как в прямом запросе сделать условие на реквизит типа "дата"?
03. Марта 2010 :: 13:24
Печать  
Есть справочник, в нем реквизит "ДатаДоговора", надо выбрать все элементы, у которых значение этого реквизита равно указанному в диалоге.
Сделал такой запрос:

Код
Выбрать все
	RS = СоздатьОбъект("ODBCRecordset");
	RS.УстБД1С();
	ТекстЗапроса = "
	|SELECT
	|	Спр.ID as [Элемент $Справочник.ФизическиеЛица],
	|   Спр.Descr as Наименование,
	|   $Спр.ДатаДоговора as ДатаДоговора
	|FROM
	|   $Справочник.ФизическиеЛица as Спр
	|WHERE
	|   ($Спр.ДатаДоговора = :ПараметрДата~)
	|";
	RS.УстановитьТекстовыйПараметр("ПараметрДата", ВыбДата);
	ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);
	//ТЗ.ВыбратьСтроку();
 



выдает ошибку: что-то про преобразование текста в тип "дата".

Как правильно надо сделать? Помогите плиз?
  
Наверх
ICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Как в прямом запросе сделать условие на реквизит типа "дата"?
Ответ #1 - 03. Марта 2010 :: 13:31
Печать  
Убрать модификатор ~
  
Наверх
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как в прямом запросе сделать условие на реквизит типа "дата"?
Ответ #2 - 03. Марта 2010 :: 13:41
Печать  
спасибо, сейчас попробую
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как в прямом запросе сделать условие на реквизит типа "дата"?
Ответ #3 - 03. Марта 2010 :: 13:45
Печать  
сработало!
а как туда пустую дату подсунуть? теперь только с пустой датой выдается ошибка
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Как в прямом запросе сделать условие на реквизит типа "дата"?
Ответ #4 - 03. Марта 2010 :: 16:53
Печать  
leshik писал(а) 03. Марта 2010 :: 13:31:
Убрать модификатор ~

а еще лучше поставить второй модификатор т.е.  :ПараметрДата~~
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Как в прямом запросе сделать условие на реквизит типа "дата"?
Ответ #5 - 03. Марта 2010 :: 16:55
Печать  
es3000 писал(а) 03. Марта 2010 :: 13:45:
а как туда пустую дату подсунуть? теперь только с пустой датой выдается ошибка

RS.УстановитьТекстовыйПараметр("ПараметрДата", ?(ПустоеЗначение(ВыбДата)=0,ВыбДата,'01.01.1753'));
  

1&&2&&3
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как в прямом запросе сделать условие на реквизит типа "дата"?
Ответ #6 - 06. Марта 2010 :: 13:14
Печать  
спасибо
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как в прямом запросе сделать условие на реквизит типа "дата"?
Ответ #7 - 09. Марта 2010 :: 07:55
Печать  
В случае выборки по пустой дате что-то не так...

Сама выборка сработала правильно, потом эта выборка выгружается в ТЗ, и колонка ДатаДоговора у всех равна 01.01.53.

Далее эта таблица передается для обработки в процедуру, в которой выполняется сравнение значения в колонке ДатаДоговора с пустой датой. Сравнение возвращает "ложь". Короче получается пустая дата перестала быть пустой!

Это нормально? Или опять какого-нибудь префикса не хватает?
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Как в прямом запросе сделать условие на реквизит типа "дата"?
Ответ #8 - 09. Марта 2010 :: 08:01
Печать  
es3000 писал(а) 09. Марта 2010 :: 07:55:
Сама выборка сработала правильно, потом эта выборка выгружается в ТЗ, и колонка ДатаДоговора у всех равна 01.01.53.

а для получения пустой даты а не 01.01.1753 нужно проделывать обратные действия:
select
  nullif($Спр.ДатаДоговора,'17530101') as ДатаДоговора
  

1&&2&&3
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как в прямом запросе сделать условие на реквизит типа "дата"?
Ответ #9 - 09. Марта 2010 :: 08:06
Печать  
а если действительно в справочнике стоит не пустая дата а 01.01.1753?

как тогда вся эта конструкция будет работать? получается что неправильно?
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Как в прямом запросе сделать условие на реквизит типа "дата"?
Ответ #10 - 09. Марта 2010 :: 08:20
Печать  
es3000 писал(а) 09. Марта 2010 :: 08:06:
а если действительно в справочнике стоит не пустая дата а 01.01.1753?
а не может такого быть. Для 1С '01.01.1753' в реквизитах типа Дата и есть пустая дата. Исключение ДатаДок.
  

1&&2&&3
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Как в прямом запросе сделать условие на реквизит типа "дата"?
Ответ #11 - 09. Марта 2010 :: 08:21
Печать  
ну а я открою справочник и запишу в этот реквизит 01.01.1753, что 1с-ка запишет в базу?
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как в прямом запросе сделать условие на реквизит типа "дата"?
Ответ #12 - 09. Марта 2010 :: 09:46
Печать  
es3000 писал(а) 09. Марта 2010 :: 08:21:
ну а я открою справочник и запишу в этот реквизит 01.01.1753, что 1с-ка запишет в базу?

в sql стоит ограничение NOT NULL
и любая незаполненная дата в sql таблице будет записываться
как '01.01.1753'
И наоборот когда из sql данные преобразовываются в формат 1с
то sql  значение 01.01.1753 заменяется
на значение 1с Дата(0) т.е. незаполненую пустую дату.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Как в прямом запросе сделать условие на реквизит типа "дата"?
Ответ #13 - 09. Марта 2010 :: 10:44
Печать  
es3000 писал(а) 09. Марта 2010 :: 08:21:
ну а я открою справочник и запишу в этот реквизит 01.01.1753, что 1с-ка запишет в базу?

в базу запишет 01.01.1753
  

1&&2&&3
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать