ДокументСсылка.<Имя документа>

Типы · <Document name>

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

Полное описание, параметры и ограничения

ДокументСсылка.<Имя документа> (DocumentRef.<Document name>)

ДокументСсылка.<Имя документа> (DocumentRef.<Document name>)

Доступен, начиная с версии 8.0.

Свойства:
<Имя общего реквизита> (<Common attribute name>)
<Имя реквизита> (<Attribute name>)
<Имя табличной части> (<Tabular section name>)
ВерсияДанных (DataVersion)
Дата (Date)
Номер (Number)
ПометкаУдаления (DeletionMark)
Проведен (Posted)
Ссылка (Ref)

Методы:
Метаданные (Metadata)
МоментВремени (PointInTime)
ПолучитьОбъект (GetObject)
ПолучитьФорму (GetForm)
Пустая (IsEmpty)
Скопировать (Copy)
УникальныйИдентификатор (UUID)

Конструкторы:
Основной

Описание:

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

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Возможен обмен с сервером. Сериализуется. Данный объект может быть сериализован в/из XML. Может использоваться в реквизитах управляемой формы. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/enterprise/current-config}. Имя типа XDTO: DocumentRef.<Имя документа>.

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

В собственной транзакции сравнить замещение и добавление проводок

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

Где и как запускать

Полный серверный общий модуль своей отдельной конфигурации УчебнаяБухгалтерия85.

Подготовка

  1. Создайте НОВУЮ пустую файловую базу с именем корневой конфигурации УчебнаяБухгалтерия85, управляемым режимом блокировок. Это отдельный стенд, не УТ/КА2/УНФ/БП и не копия с рабочими данными.

  2. Планы счетов → УчебныеСчета85: код Строка 20, Максимальное количество субконто 0, без флагов учёта. Создайте два предопределённых негрупповых счёта: УчебныйАктив, код DEMO-A, вид Активный; УчебныйПассив, код DEMO-P, вид Пассивный. Оба не забалансовые. Не создавайте счёт 41/60 и не называйте опыт реальным планом бухучёта.

  3. Документы → УчебнаяОперация85: номер Строка 40, автонумерация выключена. Без пользовательских реквизитов, проведения, обработчиков, подписок, планов обмена и внешних вызовов.

  4. Регистры бухгалтерии → УчебныеПроводки85: план УчебныеСчета85, Корреспонденция включена. Единственное измерение МеткаОперации: Строка 80, Балансовый включён, проверка заполнения Показывать ошибку. Единственный ресурс Сумма: Число 15,2, Балансовый включён. Реквизитов нет. Длина уточнения периода 3.

  5. Создайте второй регистр УчебныеОдносторонние85 с теми же планом, измерением, ресурсом и длиной уточнения периода, но Корреспонденция выключена. У обоих единственный регистратор УчебнаяОперация85. Модули наборов и документа пустые, кроме отдельной экспортной учебной процедуры в последнем уроке.

  6. Обновите конфигурацию базы данных и убедитесь, что предопределённые счета созданы как данные. Создайте серверный общий модуль УчебнаяБухгалтерияПримеры с флагом Сервер. Вставьте весь модуль одного урока, вызовите УчебнаяБухгалтерияПримеры.ВыполнитьПример() из серверной команды своей обработки.

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

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

Процедура ВыполнитьПример() Экспорт
    Если Метаданные.Документы.Количество() <> 1
        ИЛИ Метаданные.ПланыСчетов.Количество() <> 1
        ИЛИ Метаданные.РегистрыБухгалтерии.Количество() <> 2
        ИЛИ Метаданные.Документы.Найти("УчебнаяОперация85") = Неопределено
        ИЛИ Метаданные.ПланыСчетов.Найти("УчебныеСчета85") = Неопределено Тогда
        ВызватьИсключение "Разрешены только собственные документ, план счетов и два регистра";
    КонецЕсли;
    Если Метаданные.ПланыСчетов.УчебныеСчета85.МаксКоличествоСубконто <> 0 Тогда
        ВызватьИсключение "В этом опыте план счетов без субконто";
    КонецЕсли;
    Для Каждого ИмяРегистра Из СтрРазделить("УчебныеПроводки85,УчебныеОдносторонние85", ",") Цикл
        Описание = Метаданные.РегистрыБухгалтерии.Найти(ИмяРегистра);
        Если Описание = Неопределено Тогда
            ВызватьИсключение "Не найден собственный регистр " + ИмяРегистра;
        КонецЕсли;
        Если Описание.Корреспонденция <> (ИмяРегистра = "УчебныеПроводки85")
            ИЛИ Описание.ПланСчетов.Имя <> "УчебныеСчета85"
            ИЛИ Описание.Измерения.Количество() <> 1
            ИЛИ Описание.Ресурсы.Количество() <> 1
            ИЛИ Описание.Реквизиты.Количество() <> 0
            ИЛИ Описание.Измерения.Найти("МеткаОперации") = Неопределено
            ИЛИ Описание.Ресурсы.Найти("Сумма") = Неопределено
            ИЛИ Описание.ДлинаУточненияПериода <> 3 Тогда
            ВызватьИсключение "Схема собственного регистра отличается от учебной";
        КонецЕсли;
    КонецЦикла;
    СчетДебета = ПланыСчетов.УчебныеСчета85.УчебныйАктив;
    СчетКредита = ПланыСчетов.УчебныеСчета85.УчебныйПассив;
    Если СчетДебета.Пустая() ИЛИ СчетКредита.Пустая() Тогда
        ВызватьИсключение "Нужны два собственных предопределённых счёта";
    КонецЕсли;
    Если СчетДебета.ПолучитьОбъект() = Неопределено ИЛИ СчетКредита.ПолучитьОбъект() = Неопределено Тогда
        ВызватьИсключение "Данные собственных счетов не созданы";
    КонецЕсли;
    Менеджер = РегистрыБухгалтерии.УчебныеПроводки85;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Нельзя запускать урок внутри чужой транзакции";
    КонецЕсли;
    НачатьТранзакцию();
    Попытка
        Документ = Документы.УчебнаяОперация85.СоздатьДокумент();
        Документ.Дата = Дата(2026, 9, 15, 10, 0, 0);
        Документ.Номер = "B-" + Строка(Новый УникальныйИдентификатор);
        Документ.Записать();
        СвояСсылка = Документ.Ссылка;
        Набор = СвойНаборПроводок(СвояСсылка, СчетДебета, СчетКредита);
        Набор.Записывать = Ложь;
        Набор.Записать(Истина);
        Проверка = Менеджер.СоздатьНаборЗаписей();
        Проверка.Отбор.Регистратор.Установить(СвояСсылка);
        Проверка.Прочитать();
        Сообщить(Проверка.Количество() = 2 И Проверка.Итог("Сумма") = 800);
        Проверка.Очистить();
        Замена = Проверка.Добавить();
        ЗаполнитьСвоюПроводку(Замена, СвояСсылка, СчетДебета, СчетКредита, 900);
        Проверка.Записать(Истина);
        Проверка.Прочитать();
        Сообщить(Проверка.Количество() = 1 И Проверка.Итог("Сумма") = 900);
        Добавление = Менеджер.СоздатьНаборЗаписей();
        Добавление.Отбор.Регистратор.Установить(СвояСсылка);
        Добавленная = Добавление.Добавить();
        ЗаполнитьСвоюПроводку(Добавленная, СвояСсылка, СчетДебета, СчетКредита, 60);
        Добавление.Записать(Ложь);
        Сообщить(Добавление.Количество() = 0);
        Проверка.Прочитать();
        Сообщить(Проверка.Количество() = 2 И Проверка.Итог("Сумма") = 960);
        Выборка = Менеджер.ВыбратьПоРегистратору(СвояСсылка);
        ЧислоЗаписей = 0;
        СуммаВыборки = 0;
        Пока Выборка.Следующий() Цикл
            ЧислоЗаписей = ЧислоЗаписей + 1;
            СуммаВыборки = СуммаВыборки + Выборка.Сумма;
            Сообщить(Выборка.Регистратор = СвояСсылка И Выборка.Активность);
            Сообщить(Выборка.СчетДт = СчетДебета И Выборка.СчетКт = СчетКредита);
            Сообщить(Выборка.Период = Документ.Дата);
            Ключ = Менеджер.СоздатьКлючЗаписи(Новый Структура("Регистратор,НомерСтроки", Выборка.Регистратор, Выборка.НомерСтроки));
            Сообщить(Ключ.Регистратор = СвояСсылка И Ключ.НомерСтроки = Выборка.НомерСтроки);
            Сообщить("Уточнение сохранённой записи: " + Строка(Выборка.УточнениеПериода));
        КонецЦикла;
        Сообщить(ЧислоЗаписей = 2 И СуммаВыборки = 960);
        ОтменитьТранзакцию();
    Исключение
        Если ТранзакцияАктивна() Тогда
            ОтменитьТранзакцию();
        КонецЕсли;
        ВызватьИсключение;
    КонецПопытки;
    После = Менеджер.СоздатьНаборЗаписей();
    После.Отбор.Регистратор.Установить(СвояСсылка);
    После.Прочитать();
    Сообщить(После.Количество() = 0);
    Сообщить(СвояСсылка.ПолучитьОбъект() = Неопределено);
КонецПроцедуры

Функция СвойНаборПроводок(СвояСсылка, СчетДебета, СчетКредита)
    Набор = РегистрыБухгалтерии.УчебныеПроводки85.СоздатьНаборЗаписей();
    Набор.Отбор.Регистратор.Установить(СвояСсылка);
    Для Каждого СуммаСтроки Из СтрРазделить("750,50", ",") Цикл
        Запись = Набор.Добавить();
        ЗаполнитьСвоюПроводку(Запись, СвояСсылка, СчетДебета, СчетКредита, Число(СуммаСтроки));
    КонецЦикла;
    Возврат Набор;
КонецФункции

Процедура ЗаполнитьСвоюПроводку(Запись, СвояСсылка, СчетДебета, СчетКредита, СуммаСтроки)
    Запись.Период = Дата(2026, 9, 15, 10, 0, 0);
    Запись.Регистратор = СвояСсылка;
    Запись.Активность = Истина;
    Запись.СчетДт = СчетДебета;
    Запись.СчетКт = СчетКредита;
    Запись.МеткаОперации = "DEMO-BOOK";
    Запись.Сумма = СуммаСтроки;
КонецПроцедуры

Разбор по шагам

  1. Отказаться от запуска внутри чужой транзакции. Создать и записать только новый собственный документ в собственной транзакции.

  2. Записать две проводки 750 и 50 с замещением. Флаг Записывать=Ложь не препятствует прямому вызову Записать.

  3. Очистить свой считанный набор, добавить одну запись 900 и записать с замещением: две прежние записи своего регистратора заменены одной.

  4. Отдельным набором добавить 60 без замещения: в базе внутри транзакции две записи 900/60, записанный добавлением набор очищен.

  5. Обойти реальные записи только своего регистратора и составить ключ из сохранённых Регистратор и НомерСтроки, не из индекса массива.

  6. Отменить собственную транзакцию при успехе и ошибке. После отмены повторно читать только свою ссылку и проверить исчезновение документа и движений.

Как проверить результат

  1. Проверки 800,900,960 и очищенного после добавления набора Истина; выборка содержит две свои записи, сумма 960.

  2. Две последние проверки Истина: по собственной ссылке нет движений и нет сохранённого документа.

Ожидаемый результат

Замещение, добавление, постоянный номер строки и отмена собственной записи показаны раздельно.

На что обратить внимание

  1. Замещать=Истина удаляет старые движения текущего отбора. Здесь отбор только по своему только что созданному документу.

  2. Отмена транзакции не является отменой внешних HTTP, писем и файлов. Собственная учебная схема должна быть без таких обработчиков.

  3. Не выносите ЗафиксироватьТранзакцию из другого примера в этот модуль. Фиксации здесь намеренно нет.

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

Убедиться, что проводки только в памяти не попали в остатки и обороты

Заполненный набор 750/50 не записан. Три менеджерских отчёта читают базу и по уникальной собственной метке возвращают пустые таблицы.

Где и как запускать

Полный серверный общий модуль собственной конфигурации УчебнаяБухгалтерия85. Нет работы с регистрами БП/КА2.

Подготовка

  1. Создайте НОВУЮ пустую файловую базу с именем корневой конфигурации УчебнаяБухгалтерия85, управляемым режимом блокировок. Это отдельный стенд, не УТ/КА2/УНФ/БП и не копия с рабочими данными.

  2. Планы счетов → УчебныеСчета85: код Строка 20, Максимальное количество субконто 0, без флагов учёта. Создайте два предопределённых негрупповых счёта: УчебныйАктив, код DEMO-A, вид Активный; УчебныйПассив, код DEMO-P, вид Пассивный. Оба не забалансовые. Не создавайте счёт 41/60 и не называйте опыт реальным планом бухучёта.

  3. Документы → УчебнаяОперация85: номер Строка 40, автонумерация выключена. Без пользовательских реквизитов, проведения, обработчиков, подписок, планов обмена и внешних вызовов.

  4. Регистры бухгалтерии → УчебныеПроводки85: план УчебныеСчета85, Корреспонденция включена. Единственное измерение МеткаОперации: Строка 80, Балансовый включён, проверка заполнения Показывать ошибку. Единственный ресурс Сумма: Число 15,2, Балансовый включён. Реквизитов нет. Длина уточнения периода 3.

  5. Создайте второй регистр УчебныеОдносторонние85 с теми же планом, измерением, ресурсом и длиной уточнения периода, но Корреспонденция выключена. У обоих единственный регистратор УчебнаяОперация85. Модули наборов и документа пустые, кроме отдельной экспортной учебной процедуры в последнем уроке.

  6. Обновите конфигурацию базы данных и убедитесь, что предопределённые счета созданы как данные. Создайте серверный общий модуль УчебнаяБухгалтерияПримеры с флагом Сервер. Вставьте весь модуль одного урока, вызовите УчебнаяБухгалтерияПримеры.ВыполнитьПример() из серверной команды своей обработки.

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

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

  9. В обоих собственных регистрах использование итогов включено. Для урока выборки по метке у измерения МеткаОперации включите Индексировать, затем обновите конфигурацию базы данных.

  10. Метка каждой задачи содержит новый UUID. Не подставляйте DEMO-BOOK или метку другого опыта: отчёт должен читать только собственные временные проводки.

  11. План без субконто: фактические вызовы Остатки имеют четыре аргумента, Обороты и ОборотыДтКт — пять. В плане с субконто набор аргументов будет другим.

Процедура ВыполнитьПример() Экспорт
    Если Метаданные.Документы.Количество() <> 1
        ИЛИ Метаданные.ПланыСчетов.Количество() <> 1
        ИЛИ Метаданные.РегистрыБухгалтерии.Количество() <> 2
        ИЛИ Метаданные.Документы.Найти("УчебнаяОперация85") = Неопределено
        ИЛИ Метаданные.ПланыСчетов.Найти("УчебныеСчета85") = Неопределено Тогда
        ВызватьИсключение "Разрешены только собственные документ, план счетов и два регистра";
    КонецЕсли;
    Если Метаданные.ПланыСчетов.УчебныеСчета85.МаксКоличествоСубконто <> 0 Тогда
        ВызватьИсключение "В этом опыте план счетов без субконто";
    КонецЕсли;
    Для Каждого ИмяРегистра Из СтрРазделить("УчебныеПроводки85,УчебныеОдносторонние85", ",") Цикл
        Описание = Метаданные.РегистрыБухгалтерии.Найти(ИмяРегистра);
        Если Описание = Неопределено Тогда
            ВызватьИсключение "Не найден собственный регистр " + ИмяРегистра;
        КонецЕсли;
        Если Описание.Корреспонденция <> (ИмяРегистра = "УчебныеПроводки85")
            ИЛИ Описание.ПланСчетов.Имя <> "УчебныеСчета85"
            ИЛИ Описание.Измерения.Количество() <> 1
            ИЛИ Описание.Ресурсы.Количество() <> 1
            ИЛИ Описание.Реквизиты.Количество() <> 0
            ИЛИ Описание.Измерения.Найти("МеткаОперации") = Неопределено
            ИЛИ Описание.Ресурсы.Найти("Сумма") = Неопределено
            ИЛИ Описание.ДлинаУточненияПериода <> 3 Тогда
            ВызватьИсключение "Схема собственного регистра отличается от учебной";
        КонецЕсли;
    КонецЦикла;
    СчетДебета = ПланыСчетов.УчебныеСчета85.УчебныйАктив;
    СчетКредита = ПланыСчетов.УчебныеСчета85.УчебныйПассив;
    Если СчетДебета.Пустая() ИЛИ СчетКредита.Пустая() Тогда
        ВызватьИсключение "Нужны два собственных предопределённых счёта";
    КонецЕсли;
    Если СчетДебета.ПолучитьОбъект() = Неопределено ИЛИ СчетКредита.ПолучитьОбъект() = Неопределено Тогда
        ВызватьИсключение "Данные собственных счетов не созданы";
    КонецЕсли;
    Менеджер = РегистрыБухгалтерии.УчебныеПроводки85;
    Если НЕ Менеджер.ПолучитьИспользованиеИтогов() Тогда
        ВызватьИсключение "У собственного регистра должны быть включены итоги; урок их автоматически не включает";
    КонецЕсли;
    Начало = Дата(2026, 9, 15, 0, 0, 0);
    Конец = Дата(2026, 9, 16, 0, 0, 0);
    СвояМетка = "REPORT-" + Строка(Новый УникальныйИдентификатор);
    СвояСсылка = Документы.УчебнаяОперация85.ПолучитьСсылку(Новый УникальныйИдентификатор);
    Набор = СвойНаборПроводок(СвояСсылка, СчетДебета, СчетКредита);
    Для Каждого Запись Из Набор Цикл
        Запись.МеткаОперации = СвояМетка;
    КонецЦикла;
    ОтборОстатка = Новый Структура("Счет,МеткаОперации", СчетДебета, СвояМетка);
    ОтборПар = Новый Структура("СчетДт,СчетКт,МеткаОперации", СчетДебета, СчетКредита, СвояМетка);
    Остатки = Менеджер.Остатки(Конец, ОтборОстатка, "Счет,МеткаОперации", "Сумма");
    Обороты = Менеджер.Обороты(Начало, Конец, ОтборОстатка, "Счет,МеткаОперации", "Сумма");
    Пары = Менеджер.ОборотыДтКт(Начало, Конец, ОтборПар, "СчетДт,СчетКт,МеткаОперации", "Сумма");
    Сообщить(Набор.Количество() = 2 И Набор.Итог("Сумма") = 800);
    Сообщить(Остатки.Количество() = 0);
    Сообщить(Обороты.Количество() = 0);
    Сообщить(Пары.Количество() = 0);
    Сообщить(СвояСсылка.ПолучитьОбъект() = Неопределено);
КонецПроцедуры

Функция СвойНаборПроводок(СвояСсылка, СчетДебета, СчетКредита)
    Набор = РегистрыБухгалтерии.УчебныеПроводки85.СоздатьНаборЗаписей();
    Набор.Отбор.Регистратор.Установить(СвояСсылка);
    Для Каждого СуммаСтроки Из СтрРазделить("750,50", ",") Цикл
        Запись = Набор.Добавить();
        ЗаполнитьСвоюПроводку(Запись, СвояСсылка, СчетДебета, СчетКредита, Число(СуммаСтроки));
    КонецЦикла;
    Возврат Набор;
КонецФункции

Процедура ЗаполнитьСвоюПроводку(Запись, СвояСсылка, СчетДебета, СчетКредита, СуммаСтроки)
    Запись.Период = Дата(2026, 9, 15, 10, 0, 0);
    Запись.Регистратор = СвояСсылка;
    Запись.Активность = Истина;
    Запись.СчетДт = СчетДебета;
    Запись.СчетКт = СчетКредита;
    Запись.МеткаОперации = "DEMO-BOOK";
    Запись.Сумма = СуммаСтроки;
КонецПроцедуры

Разбор по шагам

  1. Создать собственные две незаписанные проводки и назначить всем строкам уникальную метку REPORT-<UUID>.

  2. Для Остатки/Обороты отбор содержит Счет; для ОборотыДтКт — СчетДт и СчетКт. Балансовая метка не делится на Дт/Кт.

  3. Поскольку план без субконто, параметры их видов отсутствуют. Передать отбор сразу после периода/периодов.

  4. Вызвать три метода, которые читают базу, не локальный Набор. Сумма в памяти 800, таблицы базы пустые.

  5. Проверить, что ссылка на документ также ещё не существует как записанный объект.

Как проверить результат

  1. Пять сообщений Истина: в памяти две строки 800, три таблицы базы пусты, документ не записан.

  2. Ни один метод не вызван с выдуманными лишними параметрами субконто.

Ожидаемый результат

Отдельный опыт объясняет границу между набором памяти и менеджером регистров базы.

На что обратить внимание

  1. Для плана с субконто сигнатура другая; нельзя слепо копировать число запятых из чужой конфигурации.

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

  3. Отчёты требуют включённых итогов; здесь при отключённых итогах возникает объяснение, а не скрытый пересчёт.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.