Типы встроенного языка, порождаемые элементом проекта вида «Документ»
После того как вы добавили в проект документ и дали ему имя, создаст несколько типов встроенного языка. Например, если в проекте есть документ Накладная, то будут созданы следующие типы:
- Накладная
 - Накладная.Ссылка
 - Накладная.Объект
 
В общем случае имена этих типов выглядят следующим образом:
- имя-документа
 - имя-документа.Ссылка
 - имя-документа.Объект
 
После создания элемента Документ в языке запросов будет доступна таблица «имя-документа» с теми же свойствами, что и у «имя-документа».Объект. Пример использования таблицы в языке запросов:
ВЫБРАТЬ Ссылка, Номер ИЗ Накладная
        Тип «имя-документа»
Вспомогательный объект с общей для конкретного документа функциональностью. Сравнение ссылочное. Доступен в окружении Сервер.
- Для документов с периодической
                        нумерацией:
НайтиПоНомеру(Номер: тип номера в зависимости от настроек в yaml, [Период:Дата]: <ИмяДокумента.Ссылка> - 
                        
Для документов без периодической нумерации:
НайтиПоНомеру(Номер: тип номера в зависимости от настроек в yaml): <ИмяДокумента.Ссылка> 
Данный метод осуществляет поиск документа по номеру в заданном временном пространстве. Присутствует только для документа, имеющего поле Номер. Если в искомом интервале найдено более одного документа, выдается исключение ИсключениеПоискаСущности.
Модуль документа
В проекте модуль, расширяющий тип имя-документа, называется модулем документа и имеет название имя-документа.xbsl. Он доступен в окружении Сервер.

В этом модуле вы можете обработать событие ПолучитьЗначенияВыбора(Параметры : ПараметрыПолученияЗначенийВыбора): Массив<ЭлементСпискаВыбора> | Неопределено для того, чтобы изменить стандартный алгоритм подбора объектов документа при вводе по строке.
Данное событие вызывается при попытке получить данные для выбора по введенной подстроке. В событие передается информация о набранной строке и параметрах фильтра. Событие должно возвратить массив выбранных данных.
Также в модуле документа можно обработать события вычисления разрешений доступа: ВычислитьРазрешенияДоступа, ВычислитьРазрешенияДоступаДляОбъектов (подробнее).Вы можете расширить тип имя-документа, добавив в модуль документа собственные публичные методы. Например, метод, создающий элементы определенного вида:
// Создает расходные накладные в документе «Накладная»
@ВПроекте
метод СоздатьНакладнуюМосква(Контрагент: Строка): Накладная.Ссылка
    пер РасходнаяНакладная = новый Накладная.Объект()
    РасходнаяНакладная.Контрагент = Контрагент
    РасходнаяНакладная.КодРегиона = Регионы.Москва
    РасходнаяНакладная.Записать()
    возврат РасходнаяНакладная.Ссылка
;Этот метод будет доступен в других модулях:
// Вызов метода разработчика у менеджера документа «Накладная»
пер РасходнаяНакладная = Накладная.СоздатьНакладнуюМосква("ООО Наименование Фирмы")Тип «имя-документа.Ссылка»
Данный тип предназначен для описания ссылки на один объект документа и имеет единственное свойство: Идентификатор: Ууид. Является базовым типом ссылок на документы. Тип имя-документа.Ссылка доступен в окружении КлиентИСервер. Сравнение структурное, то есть две ссылки считаются равными, если равны их идентификаторы.
Тип «имя-документа.Ссылка» имеет конструктор новый имя-документа.Ссылка(ид:Ууид), который позволяет создать новую ссылку по Ууид.
Также тип «имя-документа.Ссылка» содержит метод ЗагрузитьОбъект(Заблокировать:Булево): <ИмяДокумента>.Объект, который есть только на сервере и который позволяет получить экземпляр (имя-документа.Объект) из базы данных по текущей ссылке (имя-документа.Ссылка). Если объекта нет, возвращает Неопределено. Если объект существует и Заблокировать == Истина, накладывается управляемая блокировка до конца транзакции по идентификатору объекта.
Тип «имя-документа.Объект»
Экземпляр объекта, связанный с записью в базу данных. Экземпляр этого типа содержит данные одного объекта документа и предназначен для создания, изменения или удаления объекта документа. Является базовым типом для экземпляров документов. Сравнение осуществляется по ссылке. Тип имя-документа.Объект доступен в окружении КлиентИСервер.
- Номер
 - Строка. Номер документа. Стандартный реквизит, с возможностью автонумерации. Может отсутствовать
 - Дата
 - 
                            ДатаВремя. Обязательное свойство. Момент регистрации документа. Обозначает привязку документа ко времени его появления в системе. При интерактивной работе заполняется автоматически текущим (приведенным к типу) моментом при записи. После реализации формул в качестве значения по умолчанию (как в компонентах интерфейса) может заполняться по формуле.Примечание: Алгоритм установки даты в пользовательском интерфейсе при записи нового документа
Если пользователь установил в форме дату вручную, то эта дата используется для записи. При этом значение будет приведено к хранимому типу (типу реквизита Дата в документе) по правилам конвертации типов.
Если при интерактивной записи документа время равно 0:00:00, то срабатывает механизм выбора времени документа:
- если тип даты документа — Момент, то операции с датой выполняются в текущем поясе клиента, а потом приводятся к типу Момент;
 - если тип даты документа — Дата или ДатаВремя, то берется текущая дата в часовом поясе клиента и с этой датой документ записывается в БД;
 - если в текущем часовом поясе клиента дата (без времени)
                                            отличается от Сегодня-в-поясе-клиента, то время
                                            документа устанавливается по правилу «Текущее или
                                                последнее»:
- документ пытается получить время позже самого последнего введенного документа за указанную дату;
 - если в указанную дату документов не было, то время устанавливается на 12:00:00.
 
 
При неинтерактивной записи документа специального поведения поля Дата нет. Документ создается с пустой датой и записывается с ней, если она не менялась. Запись с пустой датой выдаст ошибку валидации поля. То же произойдет, если дату в форме документа очистили.
 - Ссылка
 - <имя-документа>.Ссылка. Ссылка на данный объект
 - МеткаВерсии
 - Ууид. Метка версии
 - Представление
 - Строка. Поле представления объекта
 - <объявленные реквизиты>
 - Реквизиты, объявленные в описании элемента проекта «Документ»
 
Тип «имя-документа.Объект» имеет следующие методы:
- ЭтоНовый(): Булево
 - Признак того, что объект только что создан и еще не был записан
 - Удалить()
 - 
                        
Удаляет текущий документ
 - Записать()
 - Сохраняет текущее состояние в базу
 
- новый имя-документа.Объект()
 - Создает новый объект, Ид будет определен при записи
 - новый имя-документа.Объект(ид: <ИмяДокумента>.Ссылка | Ууид)
 - Создает новый объект, Ид будет взят из параметра
 - новый имя-документа.Объект(<Реквизит1: ТипРеквизита1> = <ЗначениеПоУмолчанию1>, ..., <РеквизитN: ТипРеквизитаN = <ЗначениеПоУмолчаниюN>)
 - Конструктор по значениям всех полей — создает запись с указанными значениями реквизитов. Можно использовать только форму вызова с указанием имен параметров.
 
Модуль объекта документа
В проекте модуль, расширяющий тип имя-документа.Объект, называется модулем объекта. Он доступен в окружении Сервер.

В нем вы можете обработать такие события, как:
- ПриЗаполнении,
 - ПередЗаписью,
 - ПослеЗаписи,
 - ПередУдалением.
 
@Обработчик
метод ПередЗаписью(ПредыдущееЗначение: МойДокумент.Данные,
                   ПараметрыЗаписи: МойДокумент.ПараметрыЗаписи)
    // Действия, которые выполняются перед записью документа
;Во время записи объекта документа открывает в базе данных транзакцию записи и вызывает следующие события:

Вы можете расширить тип имя-документа.Объект, добавив в модуль объекта собственные публичные методы. Например, метод, пересчитывающий данные объекта документа, которые зависят от каких-то внешних данных, которые хранятся вне документа:
@ВПроекте
метод ПересчитатьДанные()
    // Алгоритм пересчета данных
    ....
;
            Этот метод будет доступен в других модулях:
// Вызов собственного метода объекта документа «Накладная»
// В переменной РасходнаяНакладная находится значение типа Накладная.Объект
РасходнаяНакладная.ПересчитатьДанные()
РасходнаяНакладная.Записать()
            