Как получить текущий объект 1с

Обновлено: 06.07.2024

Мы уже познакомились с таким понятием, как объект в 1С , следующим шагом будет логично познакомиться с таким понятием, как ссылка в 1С.

Ссылка указывает на данные экземпляра объекта, но не хранит их, т.е. получив ссылку на конкретный экземпляр объекта, мы сможем узнать всю информацию об экземпляре этого объекта, но не сможем внести какие-нибудь коррективы в эту информацию.

Мы помним, что в платформе 1С 8.3. существуют три вида объектов. Это объекты метаданных, общие объекты и универсальные коллекции значений.

Так вот, ссылка может быть только у объектов метаданных.

Замечу что, ссылка указывает не на сам объект, а на экземпляр объекта. Хотя, очень часто употребляют выражения «ссылка объекта», «ссылка на объект» и т.п.

Все ссылки объектов имеют тип СправочникСсылка.<НазваниеОбъекта>, ДокументСсылка.<НазваниеОбъекта> и т.д.

Ссылку можно использовать в качестве переменной, и также ссылку можно указывать, как реквизит других объектов метаданных.

Например, в моей конфигурации есть справочник Контрагенты.

Справочник в конфигурации 1С

Ссылка на справочник у реквизита документа 1С

Это значит, теперь в документе Оплата можно хранить информацию о контрагенте, который сделал оплату.

Ссылка на справочник у реквизита документа 1С

Если мы используем ссылку в качестве реквизита какого-то объекта, то при редактировании экземпляра, на который указывает ссылка, сам реквизит не изменится.

Поясню на примере. Я выше создал документ Оплата и реквизит Оплативший для этого документа с типом СправочникСсылка.Контрагенты.

Если я переименую элемент справочника Контрагенты.

Элемент справочника 1С

Затем, зайду обратно в выше созданный документ Оплата, то увижу, что отображение контрагента в реквизите поменялось автоматически.

Документ 1С

Что это значит? Это не значит, что реквизит Оплативший элемента и сам элемент справочника Номенклатура поменялся автоматически. Нет, это значит, что данный реквизит хранит указатель на экземпляр объекта, который отображается посредством наименования. Поменяли наименование, поменялось только отображение, если бы поменяли какой-нибудь другой реквизит справочника Контрагенты, то пользователь бы ничего не заметил.

Получить ссылку 1С

Каким образом программно получить ссылку на экземпляр объекта, который уже есть в базе?

Сделать это можно несколькими способами: найти по коду, найти по наименованию, найти по реквизиту и найти по нескольким реквизитам через запрос. Я рассмотрю первые два метода.

Для демонстрации этих методов, на основной форме документа Оплата я создам команду «Установить контрагента», которую размещу в командной панели формы.

Команда основной формы 1С

При выполнении этой команды я буду в поле Оплативший записывать определенного контрагента. Для этого я создам обработчики команды на клиенте и на сервере.

Обработчики команды 1С

Первый способ получения ссылки: найти по коду, для поиска по коду необходимо использовать функцию менеджера объекта НайтиПоКоду.

Функция НайтиПоКоду вернёт ссылку на экземпляр объекта справочник Контрагенты, которому соответствует код 000000002. Почему мы задали код в виде строки, а не в виде цифры, например? Чтобы понять это, нужно открыть непосредственно редактор справочника Контрагенты в конфигураторе, перейти на закладку «Данные» и посмотреть, какой тип кода у этого справочника.

Тип кода справочника 1С

Таким образом, данный код:

Рассмотрим синтаксис этой функции для менеджера справочника:

НайтиПоКоду(<Код>,<ПоискПоПолномуКоду>,<Родитель>,<Владелец>)

Код – непосредственно тот код, по которому мы ищем наш элемент;

Данное поле необязательно, по умолчанию – Ложь;

Родитель – для иерархических справочников можно указать группу, тогда поиск будет вестись внутри группы. Данное поле необязательно;

Владелец – для подчиненных справочников можно указать владельца, тогда поиск будет вестись только среди элементов, подчиненных данному владельцу. Данное поле необязательно.

Второй способ получения ссылки: найти по наименованию, для поиска по наименованию необходимо использовать функцию менеджера объекта НайтиПоНаименованию.

Этот способ можно применить только для тех объектов, у которых имеется стандартный реквизит Наименование.

Например, у справочников этот реквизит имеется.

Стандартный реквизит Наименование справочника 1С

А у документов его нет.

Отсутствие стандартного реквизита Наименование документа 1С

В случае этой функции, поиск ведется по тому значению, которое в поле Наименование объекта

Синтаксис функции для менеджера справочника следующий:

НайтиПоНаименованию(<Наименование>,<ТочноеСоответствие>,<Родитель>,<Владелец>)

«Наименование» – непосредственно то наименование, по которому мы ищем наш элемент;

Данное поле необязательно, по умолчанию – Ложь.

Помните это, что по умолчанию поиск ведется не точно;

Параметры «Родитель» и «Владелец» точно такие же, как для процедуры НайтиПоКоду.

Пустая ссылка 1С

Выглядит он так:

ПустаяНоменклатура= Справочники.Номенклатура.ПустаяСсылка();

ПустаяОплата = Документы.Оплата.ПустаяСсылка();

Переменные ПустаяНоменклатура и ПустаяОплата содержат в себе пустые ссылки на каждый объект.

Обращаю Ваше внимание, что для каждого вида справочника и каждого документа будет своя собственная пустая ссылка.

Данный метод очень удобно использовать, когда нам необходимо знать, найден ли элемент справочника по коду (названию) или нет.

Метод Пустая() удобно использовать работая в клиентском контексте (в том числе на тонком клиенте), потому что менеджер объекта это «тяжелый» объекта и с ним можно работать только в серверном контексте. Т.е. установку контрагента можно сделать таким способом:

В этом коде я получаю по наименованию ссылку на нужного контрагента, делаю это в серверном методе, поскольку обращаюсь к менеджеру справочника, записываю если он не пустой, а потом в клиентском методе проверяю, найден контрагент по такому наименованию или нет, если не найден то вывожу предупреждение.

Пустая ссылка в 1С

Программировать в 1С за 11 шагов

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника.

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

Основы разработки в 1С такси

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму
.

можно оплатить вручную:

Здравствуйте.
Вопрос следующий.
мне необходимо получить "Ссылку на документ" в модуле объекта и передать в модуль формы.
Подскажите пжл как это сделать.

Суть следующая:
создал ПечФорму при открытии ПечФормы вызывается модуль формы, в котором производятся некоторые действия.

создал ПечФорму при открытии ПечФормы вызывается модуль формы, в котором производятся некоторые действия.
Т.е. внешняя обработка с видом Печатная форма, подключаемая через ДополнительныеОтчетыИОбработки, с вызовом клиентского метода?
"Ссылка на документ" это ссылка на документ для которого выполняется печать?
Тогда она (они) передаются в функцию Печать.

Вот ОбъектыНазначенияМассив это и есть массив ссылок на документы.

Если вышесказанное не о том, и нужно вызвать модуль объекта обработки из модуля формы, то как-то так:


И для получения ссылки совсем не обязательно вызывать метод модуля объекта. Можно получить и в серверном методе модуля формы. если документ записан то можно ссылку получить и там и там Объект.Ссылка вернет ссылку на текущий документ если он записан, или вам надо получить ссылку другого документа? пробовал я так пишет, что метод объекта не обнаружен если не ошибаюсь когда написано Обьект = Обьект.Ссылка тогда ошибка а если например
Штука(главное изменить название) = Обьект.Ссылка тогда все срабатывает Здравствуйте.
Подключаю дополнительную ПФ через ДополнительныеОтчетыИОбработки,
в модуле объекта след. код:

выскакивает ошибка: " метод объекта не обнаружен"

Пробую и в модуле основной формы и в модуле документа

хочу получить из обработки ссылку на документ, из которого запускается эта обработка
т.е. захожу в документ "прием на работу" - печать-ТрудовойДоговор
далее из Функция СведенияОВнешнейОбработке()
вызывается модуль основной формы в котором мне надо получить ссылку на текущий документ "прием на работу" (21) посмотри в интернете урок по созданию ВПФ. Там же можно скачать уже написанную обработку и понять как получается ссылка! хочу получить из обработки ссылку на документ, из которого запускается эта обработка
Особенность использования БСП в том, что обработка запускается не напрямую из документа.
Для внешней печатной формы (ВПФ) вообще использование "ОткрытиеФормы" не нужно. Обычно вполне хватает "ВызовСерверногоМетода".
Далее нужно создать процедуру Печать:

Вот в МассивОбъектов будет массив ссылок на документы для которых нужно печатать.

Пусть переменная СсылкаНаОбъект принадлежит любому ссылочному типу: справочнику, документу, плану счетов и т.д. Получить объект по ссылке можно так:

Пусть переменная Объект принадлежит любому объектному типу. Получить ссылку из объекта можно так:

Будьте внимательны, реквизит “Ссылка” заполняется только при записи объекта. Если объект не записан - ссылки не будет.

Gigi --> Gigi



Просмотр профиля Vofka --> Vofka



Просмотр профиля

можно узнать объект метаданных.

А вообще, если этот код будет писаться в форме - то и так понятно, что это за форма и к чему относится.

Bernet --> Bernet



Просмотр профиля

Gigi @ Сегодня, 14:11 ,
не совсем понятно описали что вам надо: именно имя объекта метаданных или просто тип значения?
если в контексте вашего примера с формой списка, то перед удалением можно получить имя метаданных следующим образом:

Одним словом - у вас всегда в форме есть ссылка на Объект. По этой ссылке вы можете или проверить тип значения, или если нужны метаданные взять код который я привел выше и вместо

Дописываю конфигурации на платформе 8.х.
- Управление торговым предприятием для Украины
- Управление производственным предприятием для Украины
- Управление небольшой фирмой для Украины
- Бухгалтерия для Украины;
- Общепит для Украины
- Ресторан (Рарус)
- Розница Gigi --> Gigi



Просмотр профиля

Код выдает адрес: Справчники.ИмяЭлемента.Форма.ФормаСписка(Выбора . )
А нужно только Справчники.ИмяЭлемента и все.
Можно ли это одной командой без парса.

Bernet @ Сегодня, 14:26 ,

не совсем понятно описали что вам надо: именно имя объекта метаданных или просто тип значения?
если в контексте вашего примера с формой списка, то перед удалением можно получить имя метаданных следующим образом: Bernet --> Bernet



Просмотр профиля Gigi --> Gigi



Просмотр профиля Vofka --> Vofka



Просмотр профиля

можно узнать объект метаданных.

А вообще, если этот код будет писаться в форме - то и так понятно, что это за форма и к чему относится.

Bernet --> Bernet



Просмотр профиля

Gigi @ Сегодня, 14:11 ,
не совсем понятно описали что вам надо: именно имя объекта метаданных или просто тип значения?
если в контексте вашего примера с формой списка, то перед удалением можно получить имя метаданных следующим образом:

Одним словом - у вас всегда в форме есть ссылка на Объект. По этой ссылке вы можете или проверить тип значения, или если нужны метаданные взять код который я привел выше и вместо

Дописываю конфигурации на платформе 8.х.
- Управление торговым предприятием для Украины
- Управление производственным предприятием для Украины
- Управление небольшой фирмой для Украины
- Бухгалтерия для Украины;
- Общепит для Украины
- Ресторан (Рарус)
- Розница Gigi --> Gigi



Просмотр профиля

Код выдает адрес: Справчники.ИмяЭлемента.Форма.ФормаСписка(Выбора . )
А нужно только Справчники.ИмяЭлемента и все.
Можно ли это одной командой без парса.

Bernet @ Сегодня, 14:26 ,

не совсем понятно описали что вам надо: именно имя объекта метаданных или просто тип значения?
если в контексте вашего примера с формой списка, то перед удалением можно получить имя метаданных следующим образом: Bernet --> Bernet



Просмотр профиля

Читайте также: