Имя: Пароль:
1C
1C 7.7
v7: Получить объект по идентификатору
0 ЯнСмит
 
18.11.23
11:43
Хочу сделать некую универсальную штуку, перебираю все имеющиеся последовательности в конфигурации:
Для п=1 По Метаданные.Последовательность() Цикл


СпП.ДобавитьЗначение(Метаданные.Последовательность(п).ПолныйИдентификатор(),Метаданные.Последовательность(п).Идентификатор);
КонецЦикла;        
....
далее хочу установить выбранную последовательность на конкретный документ, типа вот так:

ТекПос=СпП.ПолучитьЗначение(п);
ТП.Установить(Док.ТекущийДокумент());

ругается, пробовал также через ПолучиьЗначениепИзСтроки() то же самое, помнится в молодости как-то обходил такую проблему через Шаблон(), но здесь что-то не получается =(
1 AAA
 
18.11.23
12:20
а почему из списка извлекается в ТекПос, а устанавливается ТП ?
2 MWWRuza
 
гуру
18.11.23
12:27
Ага... Весь код покажите, что-то тут не вяжется...
3 ЯнСмит
 
18.11.23
12:54
Не ... это просто очепятка, вместо ТекПос считайте, что ТП, просто не отредактировать исходное сообщение )
4 Злопчинский
 
18.11.23
13:35
док может тупо не входит в данную последовательность
5 Злопчинский
 
18.11.23
13:35
и что ругается, как ругается? матом? или культурно "я возмущен!"?
6 ЯнСмит
 
18.11.23
13:39
(5) док естественно выбран, ругается культурно, если немного подумать то как именно ясно из заголовка топика ... "Значение не представляет агрегатный объект (Установить)"
7 AAA
 
18.11.23
13:48
(6)ругается именно так как будто не опечатка.
Выведете ТипЗначенияСтр(ТП)
8 ЯнСмит
 
18.11.23
14:10
(7) Строка
9 Злопчинский
 
18.11.23
14:15
Метаданные.Последовательность(п).ПолныйИдентификатор() - вряд ли это "последовательность", это скорее "строка"
10 ЯнСмит
 
18.11.23
14:15
(9) это то понятно, вопрос в том как ПолныйИдентификатор преобразовать в Последовательность
11 AAA
 
18.11.23
14:15
Так у Строки откуда метод Установить?)) Покажите весь код, в чем проблема
12 AAA
 
18.11.23
14:16
(10)Зачем ?))
13 ЯнСмит
 
18.11.23
14:18
(11)
Перем КолП;
//\\//\\
Процедура Сформировать()
    Если Док.Выбран()=1 Тогда  
        Для п=1 По КолП Цикл
            ТП=СпП.ПолучитьЗначение(п);
            Сообщить(ТипЗначенияСтр(ТП));
            ТП.Установить(Док.ТекущийДокумент());
        КонецЦикла;    
    КонецЕсли;    
КонецПроцедуры
//\\//\\
Процедура ПриОткрытии()
    КолП=Метаданные.Последовательность();
    Если КолП>0 Тогда
        Для п=1 По КолП Цикл
            СпП.ДобавитьЗначение(Метаданные.Последовательность(п).ПолныйИдентификатор(),Метаданные.Последовательность(п).Идентификатор);
        КонецЦикла;      
    Иначе
        Сообщить("В данной базе последовательностей не задано",5);
    КонецЕсли;    
КонецПроцедуры
14 ЯнСмит
 
18.11.23
14:19
+
CgG и Док - реквизиты формы ежели чего
15 ЯнСмит
 
18.11.23
14:21
был еще вариант
            ТП=ЗначениеИзСтроки(СпП.ПолучитьЗначение(п));  
ТП.Установить(Док.ТекущийДокумент());

ошибка та же как выше писал
16 ЯнСмит
 
18.11.23
14:23
(12) а как еще добавить непосредственно последовательность в список?
17 AAA
 
18.11.23
14:29
У Вас в списке не последовательности, а строки.
18 AAA
 
18.11.23
14:33
Не сталкивался с такой задачей, но посмотрите вот это
ПолучитьАтрибут(<?>);
Синтаксис:
ПолучитьАтрибут(<ИмяПоследовательности >)
Назначение:
Получить значение последовательности по имени. Возвращает значение последовательности.
Параметры:
<ИмяПоследовательности> - строковое выражение, содержащее имя последовательности, как оно задано в конфигураторе.
19 AAA
 
18.11.23
14:34
А Вам прямо надо универсально ? Затолкайте в список конкретные последовательности, тем более не каждый документ принадлежит каждой последовательности
20 ЯнСмит
 
18.11.23
14:36
насколько я в курсе в языке метода для получения непосредственно последовательности нет, по этому и спрашиваю - как по идентификатору получить последовательность
21 AAA
 
18.11.23
14:46
(20)зачем через метаданные? запихайте конкретные  Вы пишите что то универсвльное?
22 AAA
 
18.11.23
14:47
и я Вам привел метод, посмотрите на него. Не пробовал, но скорее всего определяете последлвательность и затем получаете конкретную по идентификатору
23 AAA
 
18.11.23
14:50
Зачем это все вообще, что хотите сделать ?
24 ЯнСмит
 
18.11.23
14:52
(21) в первом же сообщении "Хочу сделать некую универсальную штуку" ))
25 AAA
 
18.11.23
14:53
(24)для чего ?
26 ЯнСмит
 
18.11.23
15:31
(18) ПолучитьАтрибут() я так понимаю это уже Формекс, у последовательности такого метода нет
(25) долго и муторно объяснять, да и какая разниц )
27 Злопчинский
 
18.11.23
15:38
(26) ты не поверишь... ПолучитьАтрибут - штатный метод 77
28 AAA
 
18.11.23
15:39
(26)дело хозяйское. Вам же надо. я как то жил без такой универсальной разработки и еще поживу ))
29 Злопчинский
 
18.11.23
15:45
Шаблон("[Последовательность."+ИмяПоследовательности+".Установить("+ПозицияДокументИТД+")]");
30 AAA
 
18.11.23
15:50
(29)Шаблон возвращает строку ) Надо курить Сервис из Формекс
31 ЯнСмит
 
18.11.23
15:54
(27) точно, ступил =(
(29) пробовал, не взлетело
32 ЯнСмит
 
18.11.23
16:01
(18) посмотрел, только не очень ясно как это вызывать
и что означает загадочная фраза из СП "Метод глобального атрибута "Последовательность""
33 AAA
 
18.11.23
18:50
Что-то похоже никак это не сделать. Либо вспоминайте как делали)
34 Олдж
 
18.11.23
19:37
(32) Ну все же просто и очевидно
Для п=1 По Метаданные.Последовательность() Цикл


        СпП.ДобавитьЗначение(Метаданные.Последовательность(п).Идентификатор,Метаданные.Последовательность(п).ПолныйИдентификатор());
    КонецЦикла;  
    
    ТекПос=СпП.ПолучитьЗначение(п);      
    
    ТП = Последовательность.ПолучитьАтрибут(текПос);
    
    ТП.Установить(выбДок.ТекущийДокумент());
35 ЯнСмит
 
18.11.23
20:06
(34) большое спасибо, все получилось, только нужно использовать в списке не ПолныйИдентификатор, а просто Идентификатор
p.s. вот не знал что есть глобальный атрибут "Последовательность"
36 AAA
 
18.11.23
20:09
(34)Браво! Были рядом не поняли как применить ))
37 Злопчинский
 
18.11.23
22:24
(30) засунуть в шаблон фукцию
38 Олдж
 
19.11.23
09:43
(35) Да, просто идентификатор. Специально для этого при добавлении в список поменял местами :)