Имя: Пароль:
1C
1C 7.7
v7: 1с++ получение ссылки документа вместо IDDOC + IDDOCDEF
0 dk
 
16.02.12
09:41
исходные
1с 7.7 SQL 1c++
есть запрос к регистру, хочу получить ссылку на документ движения (регистратор)
Джойнюсь к журналу и получаю IDDOC
Конструкция жур.iddoc [Ссылка $Документ]
возвращает iddoc вместо ссылки
Что делать и кто виноват )
1 Ёпрст
 
16.02.12
09:42
(0) читать не пробовал хелпы ?
2 Ёпрст
 
16.02.12
09:44
Хошь так:

select
жур.iddoc [Ссылка $Документ]
,жур.iddocdef Ссылка_вид


или так

select
жур.iddocdef+жур.iddoc [Ссылка $Документ]
3 Rie
 
16.02.12
09:45
(0) Если документ неопределённого вида - нужен ещё IDDOCDEF для типизации.
4 dk
 
16.02.12
09:50
читать хелп по 1с++ это капец какой-то
5 dk
 
16.02.12
09:52
>жур.iddocdef+жур.iddoc [Ссылка $Документ]
консолька матерится
6 dk
 
16.02.12
09:52
>жур.iddoc [Ссылка $Документ]
,жур.iddocdef Ссылка_вид
работает, но лишняя колонка добавляется
7 dk
 
16.02.12
09:53
в общем спасибо
8 Гефест
 
16.02.12
09:53
(5) Тем не менее, капец необходим
9 Ёпрст
 
16.02.12
09:55
(5) не верю.
10 dk
 
16.02.12
09:57
(9) qryConsole : State 22018, native 245, message [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ' 3JO0KRAD' to a column of data type int.
11 dk
 
16.02.12
09:58
, Затраты.ЖурналДокумент_вид + Затраты.ЖурналДокумент [ЖурналДокумент1 $Документ]
12 Mikeware
 
16.02.12
10:02
(11)
[dbo].Convert10To36(Затраты.ЖурналДокумент_вид) + Затраты.ЖурналДокумент [ЖурналДокумент1 $Документ]
13 dk
 
16.02.12
10:06
Invalid object name 'dbo.Convert10To36'.
14 Mikeware
 
16.02.12
10:10
(13)
CREATE FUNCTION Convert10To36(@Val_10 int) Returns char(4)
Begin
DECLARE @j int, @nSpaces int, @Res36 char(4)
DECLARE @Arr36 CHAR(36)
SELECT @Arr36 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
SELECT @Res36 = ''
SELECT @j = LOG(@Val_10) / LOG(36) + 1
SET @nSpaces = 4 - @j
while @j>0
begin
SELECT @Res36 = LTRIM(RTRIM(@Res36)) + SUBSTRING(@Arr36, @Val_10/POWER(36,@j-1) + 1 ,1)
SELECT @Val_10 = @Val_10 % POWER(36, @j-1)
SELECT @j = @j - 1
end
SET @Res36 = Left('       ', @nSpaces) + Rtrim(@Res36)
Return @Res36
End
15 trad
 
16.02.12
10:10
(9) стареешь
16 dk
 
16.02.12
10:11
а обратная есть?
17 Кириллка
 
16.02.12
10:11
(9)Так:
iddocdef - int;
iddoc - char(9);

У него же скуль, а не дбф.
18 trad
 
16.02.12
10:12
самый кошерный вариант с Ссылка_вид
а если колонка бесит, то ее можно грохнуть после получения результата
19 Mikeware
 
16.02.12
10:13
(16)
CREATE FUNCTION Convert36To10(@Val_36 varchar(9)) Returns int
Begin
DECLARE @j int, @len int, @Val_10 int
DECLARE @Arr36 char(36)
SET @Arr36 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
SET @Val_10 = 0
SET @j = 1
SET @Val_36 = LTrim(RTrim(@Val_36))
SET @len = Len(@Val_36)
while @j <= @len
begin
if @j <> 1
SET @Val_10 = @Val_10 * 36
SET @Val_10 = @Val_10 + CharIndex(Substring(@Val_36, @j ,1), @Arr36) - 1
SET @j = @j+1
end
Return @Val_10
End
20 Ёпрст
 
16.02.12
10:13
Ёююю

ltrim(Жур.iddocdef)+Жур.iddoc  [d $Документ]
21 Ёпрст
 
16.02.12
10:14
(18) неа..
:))
22 dk
 
16.02.12
10:14
(19) спб
пригодится в хозяйстве
23 Ёпрст
 
16.02.12
10:14
(15) не.. просто с дбф путаю, хотя в скуле тоже работает.. как в (20)
24 Ёпрст
 
16.02.12
10:15
(12) слишком сложно..и не нужно :)
25 dk
 
16.02.12
10:19
(20) торопишься
а проверить? )
26 Ёпрст
 
16.02.12
10:20
(25) не сцы, усё работает
27 dk
 
16.02.12
10:24
(26) стареешь или шибко самоуверен стал, вертай Ёпрст3 обратно )

qryConsole : Error # 5 : 0 : Invalid procedure call or argument
28 Кириллка
 
16.02.12
10:24
(20)нуда, только поправил :)
RIGHT('    ' + CAST(Жур.iddocdef as varchar(4)), 4) + Жур.iddoc  [d $Документ]
29 Ёпрст
 
16.02.12
10:30
(27) не знаю, какая у тебя версия 1cpp и скуля, но на 2008 sql всё работает и так
30 Mikeware
 
16.02.12
10:32
(28) анихуа!
(29) 3.2.3.16, на 2000 - не работает
31 Ёпрст
 
16.02.12
10:34
32 Ёпрст
 
16.02.12
10:35
(30) :)

хз, 2000 нема проверить
33 Ёпрст
 
16.02.12
10:36
1cpp 3.2.2.5
34 Кириллка
 
16.02.12
10:36
(30)Пробуй, все работает.
select top 100
RIGHT('    ' + CAST(Жур.iddocdef as varchar(4)), 4) + Жур.iddoc as [Док $Документ]
from _1sjourn as Жур
35 Ёпрст
 
16.02.12
10:37
+33 как видишь, вк более древней версии
:)
36 Ёпрст
 
16.02.12
10:37
(34) а как в (20) у тебя работает ?
37 Кириллка
 
16.02.12
10:39
так, отбой. там же в первых 4-х символах идентификатор 36-ный. iddocdef конверить же надо. Короче, все обазрались :)
38 trad
 
16.02.12
10:41
ёпрст, ты точно стареешь, маразмом начинает веять :)
iddocdef - в sql в десятичной системе
а для типизации из char13 вид должен быть в 36-ричной системе

всякие касты iddocdef в char будет работать ровно до 9
39 Кириллка
 
16.02.12
10:41
мажусь: я делаю только через _kind/_вид, в эту терку вписался неподумав :)
40 trad
 
16.02.12
10:43
и я утверждаю, что _kind/_вид - наш выбор
41 Ёпрст
 
16.02.12
10:43
(38) возможно, как прокомментируешь (31) ?
42 trad
 
16.02.12
10:50
(41) обман зрения
аналогично у тебя и
select
'1234'+iddoc [d $Документ]
from _1sjourn j
отработает
43 Ёпрст
 
16.02.12
10:51
(42) лукавишь.. при тыркании на табличке - документ открывается
44 Mikeware
 
16.02.12
10:52
(41) А он так, как нужно, отрабатывает?
45 Ёпрст
 
16.02.12
10:53
(42) шаман, отработало аналогично..
:)
46 Ёпрст
 
16.02.12
10:53
(44) в принципе, да, при тыркании , спрашивает вид документа и если "угадал" - открывает его, иначе, болт.
47 trad
 
16.02.12
10:55
на выходе после '1234'+iddoc [d $Документ]
будет объект - документ ссылка, но с кривыми внутренними данными
48 trad
 
16.02.12
10:57
просто для получения представления ссылки используется только iddoc и только по нему делается разыменование
49 Ёпрст
 
16.02.12
11:06
(48) ну в общем ясно..