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


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
получить значение периодики на время документа ?
05. Февраля 2009 :: 13:04
Печать  
Мне необходимо получать значение периодического реквизита на конкретный момент времени (время документа)

ранее в запросе подставлял только дату,

$ПоследнееЗначение.Номенклатура.ЦенаЗакупа(t.Товар, t.ДатаДок) as ЦенаЗакупа,

сейчас потребовалось более точное значение (т.к. цена может меняться не один раз в день)

В хелпе написано
$ПоследнееЗначение.<ИмяСправочника >| Константа.<ИмяРеквизита |
ИмяКонстанты>(<ИдОбъекта>, <Дата>[, <Время>[, <ИДДокумента

как правильно

  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: получить значение периодики на время документа ?
Ответ #1 - 05. Февраля 2009 :: 13:05
Печать  
+(1)

как правильно в  конструкции $ПоследнееЗначение подставить позицию документа
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: получить значение периодики на время документа ?
Ответ #2 - 05. Февраля 2009 :: 13:34
Печать  
Ну дык ты сам привёл цитату из хэлпа, где написано:
Цитата:
ИДДокумента - тип: конструкция типа выражение MS T-SQL; идентификатор документа, на позицию которого нужно получить последнее значение.
  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: получить значение периодики на время документа ?
Ответ #3 - 09. Февраля 2009 :: 07:10
Печать  
А можно пример ?

Пробовал
$ПоследнееЗначение.Номенклатура.ЦенаЗакупа($ДокЛ.Товар, Жур.Date_Time_IDDoc) as ЦенаЗакупа
но так ругается "Syntax error converting datetime from character string."

JohnyDeath писал(а) 05. Февраля 2009 :: 13:34:
Ну дык ты сам привёл цитату из хэлпа, где написано:
Цитата:
ИДДокумента - тип: конструкция типа выражение MS T-SQL; идентификатор документа, на позицию которого нужно получить последнее значение.

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


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: получить значение периодики на время документа ?
Ответ #4 - 09. Февраля 2009 :: 11:12
Печать  
Дело в том, что формат базы данных такой, что в журнале документов (_1sjourn) позиция документа хранится в одном поле DATE_TIME_IDDOC типа char(23), а в таблице где хранятся значения периодических реквизитов (_1sconst) позиция документа хранится по другому, в 3-х полях:
DATE типа datetime (хранится только дата без времени),
TIME типа int,
DOCID типа char(9).

Время представляется в базе количеством секунд от начала суток умноженным на 10000. В поле DATE_TIME_IDDOC оно 36-ричной системе счисления (6 символов после даты).

Вобщем, имея функцию T-SQL для перевода из 36-ричной системы счисления char(6) в int, вполне получится использовать $ПоследнееЗначение на позицию документа.
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: получить значение периодики на время документа ?
Ответ #5 - 09. Февраля 2009 :: 11:17
Печать  
А вот и эти самые, полезные функции..
Туда и обратно..
Код
Выбрать все
create function id36toint(@idc as char(6)) returns int as
begin
  declare @i int, @id int, @weight int
  set @i = 6
  set @id = 0
  set @weight = 1
  while @i > 0
  begin
    declare @code int
    set @code = ascii(substring(@idc, @i, 1));
    if @code = 0x20
	break
    if @code > 0x39
	set @code = @code - 0x37
    else
	set @code = @code - 0x30
    set @id = @id + @code * @weight
    if @i > 1
	set @weight = @weight * 36
    set @i = @i - 1
  end
  return @id
end
 



Код
Выбрать все
create function inttoid36(@id as int) returns char(6) as
begin
  declare @i int, @idc varchar(6), @weight int, @Leading int
  set @idc = ''
  set @weight = 60466176
  set @Leading = 1

  if @id = 0
    set @idc = '     0'
  else
  begin
    set @i = 0
    while @i < 6
    begin
	declare @code int
	set @code = @id / @weight;
	if @code > 9
	begin
	  set @idc = @idc + char(@code + 0x37)
	  set @Leading = 0
	end
	else
	  if @code = 0 and @Leading = 1
	   set @idc = @idc + ' '
	  else
	  begin
	    set @idc = @idc + char(@code + 0x30)
	    set @Leading = 0
	  end
	set @id = @id % @weight
	set @i = @i + 1
	if @i < 6
	  set @weight = @weight / 36
    end
  end
  return @idc
end
 

  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: получить значение периодики на время документа ?
Ответ #6 - 19. Февраля 2009 :: 09:37
Печать  
а что обозначают в журнале документов (_1sjourn) в поле DATE_TIME_IDDOC остальные символы после даты и времени?

можно ли сразу в запросе получить позицию документа в таком виде как она возвращается при обращении к методу Документ.ПолучитьПозицию()?
  
Наверх
ICQ  
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: получить значение периодики на время документа ?
Ответ #7 - 19. Февраля 2009 :: 09:45
Печать  
es3000 писал(а) 19. Февраля 2009 :: 09:37:
а что обозначают в журнале документов (_1sjourn) в поле DATE_TIME_IDDOC остальные символы после даты и времени?


Iddoc

es3000 писал(а) 19. Февраля 2009 :: 09:37:
можно ли сразу в запросе получить позицию документа в таком виде как она возвращается при обращении к реквизиту Документ.ПозицияДокумента?


А это зачем ?
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: получить значение периодики на время документа ?
Ответ #8 - 19. Февраля 2009 :: 10:21
Печать  
ev-kov писал(а) 19. Февраля 2009 :: 09:45:
es3000 писал(а) 19. Февраля 2009 :: 09:37:
а что обозначают в журнале документов (_1sjourn) в поле DATE_TIME_IDDOC остальные символы после даты и времени?


Iddoc

понятно,
а зачем в это все одно поле лепить?

ev-kov писал(а) 19. Февраля 2009 :: 09:45:
es3000 писал(а) 19. Февраля 2009 :: 09:37:
можно ли сразу в запросе получить позицию документа в таком виде как она возвращается при обращении к реквизиту Документ.ПозицияДокумента?


А это зачем ?

надо мне в запросе получить документы и их позиции
  
Наверх
ICQ  
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: получить значение периодики на время документа ?
Ответ #9 - 19. Февраля 2009 :: 11:07
Печать  
es3000 писал(а) 19. Февраля 2009 :: 10:21:
надо мне в запросе получить документы и их позиции


Поясни, почему именно в формате 1С в запросе это понадобилось ?
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: получить значение периодики на время документа ?
Ответ #10 - 20. Февраля 2009 :: 09:06
Печать  
Есть уже код, который написан на стандартном языке. Там формируется таблица с позицией документа.
Я хочу кое-что там поменять: сформировать вторую таблицу, связать их по позиции, ну и так далее
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать