Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Проблема с запросом по регистру (число прочтений - 6891 )
YuRa
Junior Member
**
Отсутствует



Сообщений: 19
Местоположение: Ебург
Зарегистрирован: 03. Апреля 2007
Пол: Мужской
Проблема с запросом по регистру
04. Апреля 2007 :: 04:10
Печать  
Помогите начинающему Улыбка Код такой:

ТабОплаты = СоздатьОбъект("ТаблицаЗначений");
    ТекстЗапросаСКЛ = "   
    |SELECT   
    |  $Рег.И2 as [И2 $Неопределенный],
    |  $Рег.И1_С as [И1_С $Документ],   
    |  $Рег.Р1 as Р1       
    |FROM   
    |  $Регистр.УР_Общий as Рег
    |WHERE
    |  $Рег.И2 IN (SELECT Val FROM #СЗАвто)";    
    RS.УложитьСписокОбъектов(СЗ_Авто, "#СЗАвто","Автомобили"); 
    ТабОплаты = RS.ВыполнитьИнструкцию(ТекстЗапросаСКЛ);

Измерение И2 неопред. типа, но в регистре там щас есть запись (Справочник.автомобили). Без WHERE возврашает все что есть в регистре, а с WHERE пусто, где я косяк?

В СЗ_Авто хранятся элементы Справочника.Автомобили.
  
Наверх
ICQ  
IP записан
 
YuRa
Junior Member
**
Отсутствует



Сообщений: 19
Местоположение: Ебург
Зарегистрирован: 03. Апреля 2007
Пол: Мужской
Re: Проблема с запросом по регистру
Ответ #1 - 04. Апреля 2007 :: 04:12
Печать  
Возможно проблема в том, что УложитьСписокОбъектов() укдадывает в char(13) (или я неправ?), а в регистре хранится И2 как char(23)
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с запросом по регистру
Ответ #2 - 04. Апреля 2007 :: 05:31
Печать  
YuRa писал(а) 04. Апреля 2007 :: 04:12:
Возможно проблема в том, что УложитьСписокОбъектов() укдадывает в char(13) (или я неправ?), а в регистре хранится И2 как char(23)

УложитьСписокОбъектов() укладывает в char(9). Попробуй УложитьСписокОбъектов13() - он укладывает в char(13).
  
Наверх
 
IP записан
 
YuRa
Junior Member
**
Отсутствует



Сообщений: 19
Местоположение: Ебург
Зарегистрирован: 03. Апреля 2007
Пол: Мужской
Re: Проблема с запросом по регистру
Ответ #3 - 04. Апреля 2007 :: 06:04
Печать  
JohnyDeath писал(а) 04. Апреля 2007 :: 05:31:
YuRa писал(а) 04. Апреля 2007 :: 04:12:
Возможно проблема в том, что УложитьСписокОбъектов() укдадывает в char(13) (или я неправ?), а в регистре хранится И2 как char(23)

УложитьСписокОбъектов() укладывает в char(9). Попробуй УложитьСписокОбъектов13() - он укладывает в char(13).

пробывал, результат тот же Печаль
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с запросом по регистру
Ответ #4 - 04. Апреля 2007 :: 06:44
Печать  
Ну да, тебе нужен УложитьСписокОбъектов23(), но такого нет.
Есть такой вариант: если у тебя не слишком много объектов в этом списке, то можно воспользоваться методом ЗначениеВСамуюДлиннуюСтрокуБД() класса MetaDataWork (почему-то в нынешней документации его нет, зато есть ДВА ЗначениеВДлиннуюСтрокуБД(), но на самом деле этот метод есть!).
Т.е. тебе придётся делать примерно так.
Код
Выбрать все
	МетаДата = СоздатьОбъект("MetaDataWork");
	СтрОтбора = "";
	Для н=1 По СЗ_Авто.РазмерСписка() Цикл
		СтрОтбора=СтрОтбора+"'"+ МетаДата.ЗначениеВСамуюДлиннуюСтрокуБД(СЗ_Авто.ПолучитьЗначение(н)) +"',"
	КонецЦикла;
	СтрОтбора = "(" +Лев(СтрОтбора, (СтрДлина(СтрОтбора)-1)) + ")"; 


И далее в запросе:
Код
Выбрать все
ТекстЗапросаСКЛ = "    
    |SELECT    
    |  $Рег.И2 as [И2 $Неопределенный],
    |  $Рег.И1_С as [И1_С $Документ],    
    |  $Рег.Р1 as Р1	  
    |FROM    
    |  $Регистр.УР_Общий as Рег
    |WHERE
    |  $Рег.И2 IN "+СтрОтбора; 

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



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Проблема с запросом по регистру
Ответ #5 - 04. Апреля 2007 :: 07:32
Печать  
офф. мне дурно становиться когда я читаю слово "пробывал"
  

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



Сообщений: 19
Местоположение: Ебург
Зарегистрирован: 03. Апреля 2007
Пол: Мужской
Re: Проблема с запросом по регистру
Ответ #6 - 04. Апреля 2007 :: 07:34
Печать  
JohnyDeath писал(а) 04. Апреля 2007 :: 06:44:
если у тебя не слишком много объектов в этом списке, то можно воспользоваться методом ЗначениеВСамуюДлиннуюСтрокуБД() класса MetaDataWork

ну например 300 значений, эт много?
  
Наверх
ICQ  
IP записан
 
YuRa
Junior Member
**
Отсутствует



Сообщений: 19
Местоположение: Ебург
Зарегистрирован: 03. Апреля 2007
Пол: Мужской
Re: Проблема с запросом по регистру
Ответ #7 - 04. Апреля 2007 :: 07:35
Печать  
trad писал(а) 04. Апреля 2007 :: 07:32:
офф. мне дурно становиться когда я читаю слово "пробывал"

Согласен, самому нехорошо  Подмигивание
  
Наверх
ICQ  
IP записан
 
YuRa
Junior Member
**
Отсутствует



Сообщений: 19
Местоположение: Ебург
Зарегистрирован: 03. Апреля 2007
Пол: Мужской
Re: Проблема с запросом по регистру
Ответ #8 - 04. Апреля 2007 :: 07:39
Печать  
JohnyDeath писал(а) 04. Апреля 2007 :: 06:44:

Спасибо, в таком виде все работает  Подмигивание
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Проблема с запросом по регистру
Ответ #9 - 04. Апреля 2007 :: 07:53
Печать  
по теме.
попробуй так:
|WHERE
    |  $Рег.И2 IN (SELECT 'B1'+Val FROM #СЗАвто)";      
    RS.УложитьСписокОбъектов13(СЗ_Авто, "#СЗАвто","Автомобили");   
    ТабОплаты = RS.ВыполнитьИнструкцию(ТекстЗапросаСКЛ);
  

1&&2&&3
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Проблема с запросом по регистру
Ответ #10 - 04. Апреля 2007 :: 08:08
Печать  
Цитата:
Измерение И2 неопред. типа,

С этого момента падалута поподробнее  Ужас
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
YuRa
Junior Member
**
Отсутствует



Сообщений: 19
Местоположение: Ебург
Зарегистрирован: 03. Апреля 2007
Пол: Мужской
Re: Проблема с запросом по регистру
Ответ #11 - 04. Апреля 2007 :: 08:55
Печать  
trad писал(а) 04. Апреля 2007 :: 07:53:
по теме.
попробуй так:
|WHERE
   |  $Рег.И2 IN (SELECT 'B1'+Val FROM #СЗАвто)";      
   RS.УложитьСписокОбъектов13(СЗ_Авто, "#СЗАвто","Автомобили");  
   ТабОплаты = RS.ВыполнитьИнструкцию(ТекстЗапросаСКЛ);

работает!!! А можно пояснить, что значит: $Рег.И2 IN (SELECT 'B1'+Val FROM #СЗАвто)?
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Проблема с запросом по регистру
Ответ #12 - 04. Апреля 2007 :: 09:00
Печать  
YuRa писал(а) 04. Апреля 2007 :: 08:55:
А можно пояснить, что значит: $Рег.И2 IN (SELECT 'B1'+Val FROM #СЗАвто)?

а что тут пояснять.
нужно всего лишь иметь представление как хранятся ссылки на объекты данных в реквизитах типа:
<Тип>.<Вид>
<Тип>
<Неопределенный>
  

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



Сообщений: 19
Местоположение: Ебург
Зарегистрирован: 03. Апреля 2007
Пол: Мужской
Re: Проблема с запросом по регистру
Ответ #13 - 04. Апреля 2007 :: 09:04
Печать  
ну точнее что вот это значит " 'B1'+Val  "
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Проблема с запросом по регистру
Ответ #14 - 04. Апреля 2007 :: 09:05
Печать  
YuRa писал(а) 04. Апреля 2007 :: 09:04:
ну точнее что вот это значит " 'B1'+Val  "

это конкатенация строк
  

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