Форум программистов, компьютерный форум, киберфорум
1С
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/121: Рейтинг темы: голосов - 121, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 07.06.2010
Сообщений: 65

Получить ссылку из типа реквизита

13.07.2012, 10:22. Показов 24384. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть реквизит с типом ссылка на какой-либо объект
как узнать какая именно ссылка у этого реквизита,т.е получить ,например, СправочникСсылка.Чтото ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.07.2012, 10:22
Ответы с готовыми решениями:

Как сделать ссылку реквизита табличной части справочника
Я недавний пользователь 1с. И я решил сделать на нём диплом (Библиотека). В процессе возник вопрос над которым мучаюсь второй день: Как...

Данные из реквизита типа ПеречислениеСсылка
Управляемое приложение. Создал в справочнике Номенклатура реквизит ВидУслуги (Перечисление ВидыУслуг). Когда открываю элемент...

В форме документа сделать автоматическое переключение реквизита таблицы Типа булево
Добрый день, помогите пожалуйста, Есть документ, создал форму документа, на форме нужно сделать так чтобы при изменении реквизита...

24
900 / 877 / 11
Регистрация: 15.03.2012
Сообщений: 2,680
12.11.2012, 12:16
Студворк — интернет-сервис помощи студентам
svandy, Если Вы посмотрите мой код, в переменной ЭлементТип , содержится именно Тип, а не его представление.
1
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 3
12.11.2012, 12:35
Разумеется :-)

Ну здесь не законченный продукт. Я просто такой конструкции в обсуждениях этой (подобной) темы не встречал.
Поэтому поделился. Под разные потребности можно затачивать. Через XML универсальнее получается.
0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
12.11.2012, 12:52
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Перем МассивПримитивныхТипов;
 
Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    СамСправочник = Метаданные.Справочники["ИмяСправочника"];
    КоллекцияРеквизитовСправочника = СамСправочник.Реквизиты;
    Для каждого Реквизит из КоллекцияРеквизитовСправочника Цикл
        
        ТипыРеквизита = Реквизит.Тип.Типы();
        ИмяРеквизита = Реквизит.Имя;
        
        ТипыСтрокой = "";
        ОбъектСтрокой = "";
        
        Для Каждого ТипРеквизита Из ТипыРеквизита Цикл
            
            Если Не МассивПримитивныхТипов.Найти(ТипРеквизита) = Неопределено Тогда 
                СтрокуВСтроку(ТипыСтрокой,Строка(ТипРеквизита));
                СтрокуВСтроку(ОбъектСтрокой,"Примитивный тип");
                Продолжить;
            КонецЕсли;
 
            СтрокуВСтроку(ТипыСтрокой,Строка(ТипРеквизита));
            
            Если Справочники.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда 
                СтрокуВСтроку(ОбъектСтрокой,"Справочник");
            ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда
                СтрокуВСтроку(ОбъектСтрокой,"Документ");
            ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда
                СтрокуВСтроку(ОбъектСтрокой,"Перечисление");
            ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда
                СтрокуВСтроку(ОбъектСтрокой,"Документ");
            ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда
                СтрокуВСтроку(ОбъектСтрокой,"План счетов");
            ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда
                СтрокуВСтроку(ОбъектСтрокой,"Бизнес процесс");
            ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда
                СтрокуВСтроку(ОбъектСтрокой,"Задача");
            Иначе
                СтрокуВСтроку(ОбъектСтрокой,"<Нет описания вида для типа: "+Строка(ТипРеквизита)+">");
            КонецЕсли; 
            
        КонецЦикла;   
                
        Сообщить("Реквизит справочника : " + ИмяРеквизита + " , "+?(Найти(ТипыСтрокой,",")>0,"Типы","Тип")+
        " реквизита : " +ТипыСтрокой+", "+?(Найти(ТипыСтрокой,",")>0,"Виды","Вид")+" реквизита: "+ОбъектСтрокой);
        
    КонецЦикла;
    
КонецПроцедуры
 
Процедура СтрокуВСтроку(Строка,Знач Стр)
    
    Строка = Строка+?(ПустаяСтрока(Строка),Стр,", "+Стр);
    
КонецПроцедуры    
 
МассивПримитивныхТипов = Новый Массив;
МассивПримитивныхТипов.Добавить(Тип("Строка"));
МассивПримитивныхТипов.Добавить(Тип("Число"));
МассивПримитивныхТипов.Добавить(Тип("Дата"));
МассивПримитивныхТипов.Добавить(Тип("Булево"));
Добавлено через 4 минуты
Если ссылку просто нужно получить, тоэто описание нафиг не нужно!!!!

1C
1
2
Конструктор = Новый (ТипРеквизита);
СсылкаКоторуяЯТакИскал = Конструктор.ссылка;
Добавлено через 1 минуту
Соответственно, нужно понимать, что не для всех типов поддерживается Конструктор
1
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 3
12.11.2012, 13:06
Dethmontt , спасибо большое!
Очень поучительно.
0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
12.11.2012, 13:55
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
Перем МассивПримитивныхТипов;
 
Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    Имясправочника = "Валюты";
    
    СамСправочник = Метаданные.Справочники[Имясправочника];
    КоллекцияРеквизитовСправочника = СамСправочник.Реквизиты;
    Объект = Справочники[Имясправочника].СоздатьЭлемент();
    Объект.ОбменДанными.Загрузка = Истина;
    Для каждого Реквизит из КоллекцияРеквизитовСправочника Цикл
        
        ТипРеквизита = Реквизит.Тип.Типы()[0]; //Для составного типа заполняем первый
        ИмяРеквизита = Реквизит.Имя;
        
        ТипыСтрокой = "";
        ОбъектСтрокой = "";
        
        Если Не МассивПримитивныхТипов[ТипРеквизита] = Неопределено Тогда
            //Если ТипРеквизита = Тип("Строка") Тогда 
            //  Длинна = ТипРеквизита.КвалификаторыСтроки.ДопустимаяДлина;
            //ИначеЕсли ТипРеквизита = Тип("Число") Тогда 
            //  Длинна = ТипРеквизита.
            Объект[ИмяРеквизита] = МассивПримитивныхТипов[ТипРеквизита];
            Продолжить;
        КонецЕсли;
        
        Попытка
            Конструктор = Новый (ТипРеквизита);
        Исключение
            Сообщить(ОписаниеОшибки());
            Продолжить;
        КонецПопытки;
        
        ЭтоПеречисление = ложь;
        ОбъектРек = ОбъектПоСсылке(Конструктор,ЭтоПеречисление);
        
        Если Объект = Неопределено Тогда 
            Сообщить("Блин");
            Продолжить;
        КонецЕсли;
        
        Если Не ЭтоПеречисление Тогда
            
            
            ОбъектРек.ОбменДанными.Загрузка = Истина; //Не помню в каком релизе это появилось...
            
            Попытка
                //Только справочник (ну лень мне описывать еще и реквизиты)
                //Засунем в попытку т.к. наименования может и не быть
                ОбъектРек.УстановитьНовыйКод();
                ОбъектРек.Наименование = "блин...."; //Для справочника - нужно описание обязательных реквизитов при заполнении каждого вида (Класса)
                ОбъектРек.Записать();
            Исключение
                Сообщить(ОписаниеОшибки());
                Продолжить;
            КонецПопытки;
            Объект[ИмяРеквизита] = ОбъектРек.Ссылка;
        Иначе
            Объект[ИмяРеквизита] = ОбъектРек;
        КонецЕсли; 
        
    КонецЦикла;
    
    ОткрытьЗначение(Объект);
    
КонецПроцедуры
 
Функция ОбъектПоСсылке(Ссылка,ЭтоПеречисление)
    
    ИмяОбъекта = Ссылка.Метаданные().Имя;
    ТипСсылки = ТипЗнч(Ссылка);
    
    Если Справочники.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        Возврат Справочники[ИмяОбъекта].СоздатьЭлемент();
    ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        Возврат Документы[ИмяОбъекта].СоздатьДокумент();
    ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        Возврат БизнесПроцессы[ИмяОбъекта].СоздатьБизнесПроцесс();
    ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        Возврат ПланыВидовХарактеристик[ИмяОбъекта].СоздатьЭлемент();
    ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        Возврат ПланыСчетов[ИмяОбъекта].СоздатьСчет();
    ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        Возврат ПланыВидовРасчета[ИмяОбъекта].СоздатьВидРасчета();
    ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        Возврат Задачи[ИмяОбъекта].СоздатьЗадачу();
    ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        Возврат ПланыОбмена[ИмяОбъекта].СоздатьУзел();
    ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        ЭтоПеречисление = Истина;
        Возврат Перечисления[ИмяОбъекта].Получить(0); //Первое значение Исключение будет в том случае если нету значений у перечисления (обрабатывать лень)        
    Иначе
        Возврат НеОпределено;
    КонецЕсли;
    
КонецФункции   
 
МассивПримитивныхТипов = Новый Соответствие;
МассивПримитивныхТипов.Вставить(Тип("Строка"),"аа");
МассивПримитивныхТипов.Вставить(Тип("Число"),1);
МассивПримитивныхТипов.Вставить(Тип("Дата"),Дата(2012,1,1));
МассивПримитивныхТипов.Вставить(Тип("Булево"),Истина);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.11.2012, 13:55

Получить значение дополнительного реквизита
есть дополнительный реквизит Должность у справочника ФизЛица. Как мне получить его значение, которое установлено у физЛица? Конфа...

Как получить квалификаторы реквизита?
Есть допустим справочник какой-то,например Справочник у него соответственно есть реквизиты РСтрока,РЧисло,РДата ну и ...хватит пока что ...

Как получить значение реквизита формы в V8.2
Столкнулся с такой проблемой: Есть прикладное решение в V8.1 хочу перевести его на V8.2 В конфигурации есть справочник...

Получить значение реквизита из не записанного объекта
Доброго времени. Задача: Есть справочник &quot;Номенклатура&quot;, у него есть реквизит &quot;Склад&quot;. Нужно сделать так, чтобы...

Заполнение реквизита табличной части, исходя из значения реквизита документа
Есть справочник с табличной частью. У неё есть 3 реквизита: документ, приход, расход. Есть 2 вида документа - Приход и Расход,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru