Имя: Пароль:
1C
 
Как программно зная тип объекта, получить создать сам объект
0 aegoncharov
 
06.01.05
20:33
Имеем пременную Т типа тип.
Её значение, например, равно СправочникСсылка.Организации
(т.е. строка(Т)="Справочник ссылка : Организации").
Как получить Переменную П соответствующего типа?
Или просто имя этого справочника: Имя="Организации" типа строка, только без извращений с вырезанием из строки?
Как назначить реквизиту документа множественного типа, имеющего изначально тип Неопределено, тип Т?

Вроде ведь нету функциии СоздатьОбъект(Т)....
1 Волшебник
 
06.01.05
20:36
а) v8: Будни: Как определить, что ссылка на справочник или документ?
б) чем Неопределено не устраивает? подозреваю, что речь идет о поле ввода, связанном с реквизитом документа
в) есть ключевое слово Новый
2 aegoncharov
 
06.01.05
21:18
В общем если конкретнее:
Пишу функцию которая получает(Тип:тип,данные:строка) (например Тип=СправочникСсылка.Организации,в данные = код элемента этого справочника - по моему этого достаточно)
Должна вернуть значение типа СправочникСсылка.Организации, указывающее на элемент с соответствующим кодом. Значение это в дальнейшем присваивается реквизиту документа.

Если бы мы знали Имя справочника, то все выглядело бы так:
Реквизит=Справочники[Имя].НайтиПоКоду(данные,Истина);

Но программа знает только тип, которму однозначно, по идее, соответствует имя, однако преобразовать не могу.

б)Неопределено не устраивает, так как нельзя сказать
Реквизит.Метаданные().Имя - ругнется
в)В Новый переменную с типом не запихаешь
3 Волшебник
 
07.01.05
09:50
Ссылка.Метаданные().Имя
4 aegoncharov
 
07.01.05
12:01
У функции нет ссылки (она ней не знает), ее задача - получить эту самую ссылку, зная только её тип.

В общем если абстрагировать вопрос от самой программы:

Как провести следующее преобразование типов (без использования дополнительных данных):

ТИП -> ИМЯ

где, ТИП (типа тип) = СправочникСсылка.<Имя Справочника> или ДокументСсылка.<Имя Документа>
а на выходе
ИМЯ (типа строка) = "Имя Справочника" или "Имя Документа" соответственно

Вариант со разрезанием строки Строка(ТИП)="Справочник ссылка : имя справочника" считаю извращением. Возможен ли другой? (в принципе?) Данных то ведь достаточно - Типу однозначно соответствует Имя

сразу скажу что определять справочник это или документ я умею (благодаря этому форуму :) )
5 aegoncharov
 
08.01.05
06:44
Сам спросил, сам ответил:
На входе имеем Тип, Код (или Тип, Номер, Дата - в случае документа).

Имя=Метаданные.НайтиПоТипу(Тип).Имя;
Ссылка=Справочники[Имя].НайтиПоКоду(Код,Ложь);
//или, если тип - документ, поиск документа по номеру и дате

На выходе имеем Имя справочника/документа, Ссылку на нужный справочник/документ
6 Волшебник
 
08.01.05
08:25
Главное - не мешать человеку!
2 + 2 = 3.9999999999999999999999999999999...