Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Как получить ИД периодического реквизита? (число прочтений - 3120 )
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Как получить ИД периодического реквизита?
18. Марта 2009 :: 10:06
Печать  
Как получить ИД периодического реквизита вне запроса? В классе "MetaDataWork" ничего похожего не нашёл.
Зачем мне это надо: хочу подготовить запрос типа:
Код
Выбрать все
|SELECT value Значение, date Дата
	|FROM __1S_Const
	|WHERE ID=@ИдПериодичРеквизита
	|	AND OBJID = @ИдОбъекта
	|ORDER BY date"; 


Или придётся без подготовки?  Печаль
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Как получить ИД периодического реквизита?
Ответ #1 - 18. Марта 2009 :: 10:08
Печать  
     OBJID = ЗапросПер.МД.ЗначениеВСтрокуБД(текЭлемент.ТекущийЭлемент());
     ID    = ЗапросПер.МД.ИДРеквизитаСправочника(текЭлемент.Вид(), текАтрибут);
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить ИД периодического реквизита?
Ответ #2 - 18. Марта 2009 :: 10:54
Печать  
chessman писал(а) 18. Марта 2009 :: 10:08:
     ID    = ЗапросПер.МД.ИДРеквизитаСправочника(текЭлемент.Вид(), текАтрибут);

немного не то (или потому что у меня ДБФ?)
такая реализация возвращает ИД=367
на самом деле ИД='  A7'
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Как получить ИД периодического реквизита?
Ответ #3 - 18. Марта 2009 :: 11:06
Печать  
     МД = СоздатьОбъект("MetaDataWork");
     Message(МД.ЧислоВСтроку(367, 36));
Очень довольный
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить ИД периодического реквизита?
Ответ #4 - 18. Марта 2009 :: 11:30
Печать  
chessman писал(а) 18. Марта 2009 :: 11:06:
     МД = СоздатьОбъект("MetaDataWork");
     Message(МД.ЧислоВСтроку(367, 36));
Очень довольный

А так пробелы слева обрезаются, т.е. вместо нужного мне '  A7' имеем 'A7'  Улыбка
Это как-то можно побороть или тупо в цикле добивать слева пробелы до нужной длины (4)? Или проще будет неподготовленный запрос выполнять?
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Как получить ИД периодического реквизита?
Ответ #5 - 18. Марта 2009 :: 11:38
Печать  
А у тебя цикл по периодическим реквизитам?
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить ИД периодического реквизита?
Ответ #6 - 18. Марта 2009 :: 11:46
Печать  
Да, по всем периодическим реквизитам всех справочников
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Как получить ИД периодического реквизита?
Ответ #7 - 18. Марта 2009 :: 11:49
Печать  
мммм...а зачем?
подготовить список значений, а в запросе сделай id in (Select val from #Temp)
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить ИД периодического реквизита?
Ответ #8 - 18. Марта 2009 :: 12:01
Печать  
chessman писал(а) 18. Марта 2009 :: 11:49:
мммм...а зачем?
подготовить список значений, а в запросе сделай id in (Select val from #Temp)

Выгрузку данных делаю. И по мере поступления конкретного элемента справочника надо выбирать все его движения за выбранный период
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Как получить ИД периодического реквизита?
Ответ #9 - 18. Марта 2009 :: 12:09
Печать  
А не проще сделать запрос к 1sconst за период?
Периодические константы только удалишь от туда и все.
Это и буду все значения, всех периодических реквизитов.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить ИД периодического реквизита?
Ответ #10 - 18. Марта 2009 :: 12:11
Печать  
chessman писал(а) 18. Марта 2009 :: 12:09:
А не проще сделать запрос к 1sconst за период?
Периодические константы только удалишь от туда и все.
Это и буду все значения, всех периодических реквизитов.

Можно сделать как угодно. но у меня:
JohnyDeath писал(а) 18. Марта 2009 :: 12:01:
И по мере поступления конкретного элемента справочника надо выбирать все его движения за выбранный период
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Как получить ИД периодического реквизита?
Ответ #11 - 18. Марта 2009 :: 12:17
Печать  
А зачем тебе тогда условие на id, если ты выбираешь все пер. реквизиты?
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как получить ИД периодического реквизита?
Ответ #12 - 18. Марта 2009 :: 12:40
Печать  
chessman писал(а) 18. Марта 2009 :: 12:17:
А зачем тебе тогда условие на id, если ты выбираешь все пер. реквизиты?

Так нада  Подмигивание Структура БД такая, т.е мне надо знать: ИдРеквизита (словом), Значение, ДатаЗначения
Обрабатываются входящие элементы справочника так:
Код
Выбрать все
Для й=1 По КолРеквизитов Цикл
				ИмяРеквизита=ТекМетаСпр.Реквизит(й).Идентификатор;
				ТипРеквизита=ТекМетаСпр.Реквизит(й).Тип;
				ВидРеквизита=ТекМетаСпр.Реквизит(й).Вид;

				Если ТекМетаСпр.Реквизит(й).Периодический=1 Тогда
					ТекстЗапроса="
					|SELECT value ЗначениеРеквизита, date Дата
					|FROM __1S_Const
					|WHERE ID=:ИсторияРеквизита."+ВидСправочника+"."+ИмяРеквизита+"
					|	AND OBJID = :ИдОбъекта
					|ORDER BY date";
					Запрос.Подставлять("ИдОбъекта", Объект);
					тз=Запрос.ВыполнитьЗапрос(ТекстЗапроса);
					тз.ВыбратьСтроки();
					Пока тз.ПолучитьСтроку()=1 Цикл
						ОбработатьРеквизитДокумента(Объект, ИмяРеквизита, ТипРеквизита, ВидРеквизита, тз.ЗначениеРеквизита, тз.Дата);
					КонецЦикла;
				Иначе
					ОбработатьРеквизитДокумента(Объект, ИмяРеквизита, ТипРеквизита, ВидРеквизита, ЗначениеРеквизита);
				КонецЕсли;
			КонецЦикла; 

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