В языке программирования 1С для работы с данными используются различные подходы, включая объектные и необъектные сущности, которые могут храниться в базе данных, а также объекты языка, которые существуют только в оперативной памяти. Одним из ключевых аспектов работы с объектными сущностями является возможность получить объект по ссылке и получить ссылку из объекта. Именно об этом пойдет речь в данной статье.
Объекты в 1С:Предприятие
Объектный подход в 1С:Предприятие применяется для работы с сущностями предметной области, такими как справочники, документы, планы видов характеристик, планы счетов и планы видов расчета. Эти сущности описываются в конфигурации с помощью объектов метаданных. Следует различать:
- Менеджеры объектов: предоставляют доступ к управлению соответствующими объектами. Например, Справочники.Номенклатура предоставляет доступ к справочнику “Номенклатура”.
- Экземпляры объектов: представляют собой конкретные записи или элементы данных. Например, Справочники.Номенклатура.СоздатьЭлемент() создает новый элемент справочника “Номенклатура”.
Также менеджеры объектов предоставляют методы для работы с объектами – создавать новые, редактировать существующие, удалять, и т.д.
Следует иметь в виду, что объектные сущности делятся на ссылочные и не ссылочные типы данных.
Объекты ссылочного типа – это объекты, которые имеют уникальную ссылку и могут быть сохранены в базе данных. К ним относятся, например, документы и справочники.
Объекты табличного типа – это объекты, которые существуют в виде таблиц и не имеют уникальной ссылки на каждую строку. Вместо этого каждая строка описывается комбинацией измерений. К таким объектам относятся все регистры.
Объекты языка 1С
Иногда возникает некоторая терминологическая путаница, и чтобы внести ясность, стоит упомянуть об объектах языка 1С, которые в базе не хранятся. К ним относятся самые разные объекты, например, универсальные коллекции (таблицы значений, массивы, структуры и др.), httpСоединения, картинки, и многое другое. Их объединяет способ создания таких объектов – через конструктор “Новый”. Например:
Структура = Новый Структура("Код, Наименование", 123, "Товар"); Массив = Новый Массив; Массив.Добавить("Элемент1"); Массив.Добавить("Элемент2"); Таблица = Новый ТаблицаЗначений; Таблица.Колонки.Добавить("Код"); Таблица.Колонки.Добавить("Наименование");
Работа со ссылками и объектами
Некоторые методы для получения объектов и ссылок
Ссылки можно получать разными способами – на существующие объекты, на основе уникального идентификатора, или пустые ссылки нужного типа. Примеры:
СсылкаПоКоду = Справочники.Номенклатура.НайтиПоКоду(123); СсылкаПоНаименованию = Справочники.Номенклатура.НайтиПоНаименованию("Морковка"); ПустаяСсылка = Справочники.Номенклатура.ПустаяСсылка(); СсылкаПоИдентификатору = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор());
Для получения объектов также есть различные методы. Можно получить объект существующий в базе, или создать новый. Примеры создания новых объектов:
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент(); НовыйДокумент = Документы.ЗаказКлиента.СоздатьДокумент(); НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу();
Получить объект по ссылке
Если у нас есть ссылка на объект, мы можем получить сам объект с помощью метода ПолучитьОбъект(). Например:
Ссылка = Справочники.Номенклатура.НайтиПоКоду(123); Если Не Ссылка.Пустая() Тогда Объект = Ссылка.ПолучитьОбъект(); КонецЕсли;
Как получить ссылку из объекта?
Если у нас есть объект, то его ссылка содержится в свойстве Ссылка. Например:
Объект = Справочники.Номенклатура.СоздатьЭлемент(); Объект.Наименование = "Товар"; Объект.Записать(); Ссылка = Объект.Ссылка;
Отличия между ссылкой и объектом в 1С
Ссылка — это всего лишь указатель на объект, который позволяет его идентифицировать. Она не содержит всех данных объекта, а лишь указывает, где этот объект находится. Например, если представить объект как документ в архиве, то ссылка — это номер на полке, по которому его можно найти.
Объект же — это полноценная сущность, содержащая все свои данные и методы. Когда мы работаем с объектом, мы можем изменять его свойства, вызывать его методы, записывать изменения в базу. Получая объект, мы загружаем в память всю его информацию, а не просто храним указатель.
Объект используется, когда нам нужно работать с его данными: изменять свойства, вызывать методы, записывать изменения в базу. Если мы получили ссылку, но нам нужно внести изменения, то сначала следует получить объект с помощью метода ПолучитьОбъект(), внести изменения и затем записать их.
А ссылка используется для хранения и отображения информации. Например, именно ссылки мы указываем в качестве типов в реквизитах, когда нам нужно хранить в этих реквизитах информацию о других объектах.
Связи нам нужно актуализировать и при создании формы, и при изменении флажка. Чтобы очистить связи параметров выбора, просто передаем пустой фиксированный массив.