Программное создание произвольного объекта по типу

1. scarl1n 03.09.24 07:25 Сейчас в теме
Как можно создать любой объект программно, имея тип? Пытался через конструкцию Новый(Тип), но там пустой объект, который ни записать, ни заполнить.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user2033930 03.09.24 08:03 Сейчас в теме
(1)
Пытался через конструкцию Новый(Тип)
Сам придумал, или подсказал кто? Али в СП вычитал?

Без Если Тогда Иначе не обойтись, даже не надейся.
3. scarl1n 03.09.24 08:11 Сейчас в теме
(2) Встречался когда-то с такой конструкцией, вот и вспомнил. Думал сработает, да и по логике если думать, будто бы должно работать, все-таки СправочникОбъект оно возвращает, но сделать с этим что-то не дает.
4. user2033930 03.09.24 08:15 Сейчас в теме
(3)
Встречался когда-то с такой конструкцией
Я много с чем и с кем в своей жизни встречался... Даже с CRE ATE TABLE...
Думал сработает, да и по логике если думать, будто бы должно работать
Но вот беда: по логике вещей и CRE ATE TABLE всегда и везде должно работать (ведь понятно же все написано!), ан нет - не работает!

// Это движок форума пробел вставляет сам...
5. scarl1n 03.09.24 08:18 Сейчас в теме
(4) Только логика была не в синтаксисе, а в том, что такая конструкция действительно возвращала объект указанного типа. Да и в принципе какое тогда у этой конструкции назначение, если ничего с этим не сделать. Ради получения метаданных (.метаданные())? Грандиозное удовольствие.
6. spacecraft 03.09.24 08:31 Сейчас в теме
(5) см. СП:
Оператор позволяет создать значение указанного типа. Допустим только для тех типов, для которых разрешено создание с помощью данного оператора (подробнее см. описание объектов языка).

В конструкторе объекта это должно быть прописано про Новый.

Далее.
(5)
Только логика была не в синтаксисе, а в том, что такая конструкция действительно возвращала объект указанного типа.

Для получения СправочникОбъект необходимо вызывать его конструктор. Через Новый создается не инициализированный объект.
7. scarl1n 03.09.24 08:32 Сейчас в теме
(6) Да, знаю. Был в надежде, что объект инициализировать получится, иначе не понятно для чего конструкция работает (для примитивных типов он исключение выдает, например).
8. spacecraft 03.09.24 08:33 Сейчас в теме
(7) Новый Массив, Новый Структура, Новый Соответствие, Новый ИнтернетПрокси
и много другого.
9. scarl1n 03.09.24 08:35 Сейчас в теме
(8) Имею ввиду именно конструкция, когда внутрь тип передавать можно. Для примитивных ведь не работает, но для ссылочных работает зачем-то, хотя не понятно как использовать можно.
10. spacecraft 03.09.24 08:41 Сейчас в теме
(9) а у примитивных есть конструктор?
У ссылочных не вызывается конструктор напрямую. но он там есть.. Там свой синтаксис. Но если есть конструктор, то и Новый не будет ошибку давать, хоть и не будет инициировать.
Тот же конструктор для элемента справочника не вызывается напрямую, а через метод СоздатьЭлемент(), в котором происходит инициализация.
11. truba 03.09.24 11:01 Сейчас в теме
(10) а что считаете примитивными в этом контексте? Дата, Число, Строка, Булево? Или не ссылочные?
12. spacecraft 03.09.24 11:40 Сейчас в теме
(11) в СП есть информация, что является примитивными типами.
Прикрепленные файлы:
14. SlavaKron 03.09.24 17:07 Сейчас в теме
(7)
для чего конструкция работает
Мне удобно использовать для получения менеджера объекта в универсальных решениях.
МетаданныеОбъекта = Метаданные.НайтиПоТипу(Тип);
МенеджерОбъекта = Новый(СтрЗаменить(МеталанныеОбъекта.ПолноеИмя(), ".", "Менеджер."));

Работает также и для любых регистров. Хотя набор записей можно сразу получить через Новый.
13. SlavaKron 03.09.24 16:57 Сейчас в теме
В контексте управляемой формы сработает:
&НаСервере
Процедура Команда1НаСервере()
	ИмяТипаПрикладногоОбъекта = "ДокументОбъект.Документ1";
	
	МассивРеквизитов = Новый Массив;
	МассивРеквизитов.Добавить(Новый РеквизитФормы("ПрикладнойОбъект", Новый ОписаниеТипов(ИмяТипаПрикладногоОбъекта)));
	
	ИзменитьРеквизиты(МассивРеквизитов);
	ПрикладнойОбъект = РеквизитФормыВЗначение("ПрикладнойОбъект");
	ПрикладнойОбъект.Дата = ТекущаяДата();
	ПрикладнойОбъект.Записать();
КонецПроцедуры
Показать
15. scarl1n 17.09.24 07:55 Сейчас в теме
(13) Ну это уже немного тяжелое что-то. Я хотел использовать такое создание для решения задачи по универсальной загрузке данных. В моей реализации после выбора загружаемого объекта (справочник / документ), в отдельной вкладке выводятся все его реквизиты, где необходимо расставить соответствия с колонками. Но для реквизитов с составным типом необходимо указать ЯВНО какой тип мы хотим грузить, и, если это ссылка, то создавать / искать объект по выбранному в колонке типу.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот