Типы встроенного языка, порождаемые элементом проекта вида «Документ»

После того, как вы добавили в проект документ и дали ему имя, создаст несколько типов встроенного языка. Например, если в проекте есть документ Накладная, то будут созданы следующие типы:

  • Накладная
  • Накладная.Ссылка
  • Накладная.Объект

В общем случае имена этих типов выглядят следующим образом:

  • имя-документа
  • имя-документа.Ссылка
  • имя-документа.Объект

После создания элемента Документ в языке запросов будет доступна таблица «имя-документа» с теми же свойствами что и у «имя-документа».Объект. Пример использования таблицы в языке запросов:

ВЫБРАТЬ Ссылка, Номер ИЗ Накладная

Тип «имя-документа»

Вспомогательный объект с общей для конкретного документа функциональностью. Сравнение ссылочное. Доступен в окружении Сервер

Экспортные методы модуля менеджера "пробрасываются" в объект, то есть возможно вызывать Документы.Накладная.МойЭкспортныйМетод(Параметр1). Содержит методы ПересчитатьДескрипторыДоступа() и ПересчитатьДескрипторыДоступаДляОбъектов(), унаследованные от базового типа Документ. Также содержит метод НайтиПоНомеру со следующей сигнатурой:
  • Для документов с периодической нумерацией:
    НайтиПоНомеру(Номер: тип номера в зависимости от настроек в yaml, [Период:Дата]: <ИмяДокумента.Ссылка>
  • Для документов без периодической нумерации:

    НайтиПоНомеру(Номер: тип номера в зависимости от настроек в yaml): <ИмяДокумента.Ссылка>

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

Модуль документа

В проекте модуль, расширяющий тип имя-документа, называется модулем документа и имеет название имя-документа.xbsl. Он доступен в окружении Сервер.

В этом модуле вы можете обработать событие ПолучитьЗначенияВыбора(Параметры : ПараметрыВыбораЗначений): Массив<ЭлементСпискаВыбораЗначения> | Неопределено для того, чтобы изменить стандартный алгоритм подбора объектов документа при вводе по строке.

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

Также в модуле документа можно обработать события вычисления разрешений доступа: ВычислитьРазрешенияДоступа, ВычислитьРазрешенияДоступаДляОбъектов (подробнее).

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

// Создает расходные накладные в документе «Накладная»
@ВПроекте
метод СоздатьНакладнуюМосква(Контрагент: Строка): Накладная.Ссылка

    пер РасходнаяНакладная = новый Накладная.Объект()
    РасходнаяНакладная.Контрагент = Контрагент
    РасходнаяНакладная.КодРегиона = Регионы.Москва
    РасходнаяНакладная.Записать()

    возврат РасходнаяНакладная.Ссылка
;

Этот метод будет доступен в других модулях:

// Вызов метода разработчика у менеджера документа «Накладная»
пер РасходнаяНакладная = Накладная.СоздатьНакладнуюМосква("ООО Наименование Фирмы")
Совет: В модуле документа может находиться реализация контракта сервиса.

Тип «имя-документа.Ссылка»

Данные тип предназначен для описания ссылки на один объект документа и имеет единственное свойство: Идентификатор: Ууид. Является базовым типом ссылок на документы. Тип имя-документа.Ссылка доступен в окружении КлиентИСервер. Сравнение структурное, то есть две ссылки считаются равными если равны их идентификаторы.

Тип «имя-документа.Ссылка» имеет конструктор новый имя-документа.Ссылка(ид:Ууид), который позволяет создать новую ссылку по Ууид.

Также тип «имя-документа.Ссылка» содержит метод ЗагрузитьОбъект(Заблокировать:Булево): <ИмяДокумента>.Объект, который есть только на сервере и который позволяет получить экземпляр (имя-документа.Объект) из базы данных по текущей ссылке (имя-документа.Ссылка). Если объекта нет, возвращает Неопределено. Если объект существует и Заблокировать == Истина, накладывается управляемая блокировка до конца транзакции по идентификатору объекта.

Тип «имя-документа.Объект»

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

Тип «имя-документа.Объект» имеет следующие свойства:
Номер: Строка | Число
Номер документа. Стандартный реквизит, с возможностью автонумерации. Может отсутствовать
Дата: Дата | ДатаВремя | Момент
Момент регистрации документа. Обозначает привязку документа ко времени его появления в системе. При интерактивной работе заполняется автоматически текущим (приведенным к типу) моментом при записи. Не может отсутствовать После реализации формул в качестве значения по умолчанию (как в UI-компонентах) может заполняться по формуле
Примечание: Алгоритм установки даты в пользовательском интерфейсе при записи нового документа

Если пользователь установил в форме дату вручную, то эта дата используется для записи. При этом, значение, будет приведено к хранимому типу (типу реквизита Дата в документе) по правилам конвертации типов

Если при интерактивной записи документа время равно 0:00:00, то срабатывает механизм выбора времени документа:

  • Если тип даты документа — Момент, то операции с датой выполняются в текущем поясе клиента, а потом приводятся к типу Момент
  • Если тип даты документа — Дата или ДатаВремя, то берется текущая дата в часовом поясе клиента и с этой датой документ записывается в БД
  • Если в текущем часовом поясе клиента дата (без времени) отличается от Сегодня-в-поясе-клиента, то время документа устанавливается по правилу «Текущее или последним»:
    • Документ старается получить время позже самого последнего введенного документа за указанную дату
    • Если в указанную дату документов не было — время устанавливается в 12:00:00

При неинтерактивной записи документа специальных поведений поля Дата нет. Документ создается с пустой датой и записывается с ней, если она не менялась. Запись с пустой датой выдаст ошибку валидации поля. То же произойдет, если дату в форме документа очистили.

Ссылка: <имя-документа>.Ссылка
Ссылка на данный объект
МеткаВерсии: Ууид
Метка версии
Представление: Строка
Поле представления объекта
<объявленные реквизиты>
Реквизиты, объявленные в описании элемента проекта «Документ»

Тип «имя-документа.Объект» имеет следующие методы:

ЭтоНовый(): Булево

Возвращает признак того, что документ ещё не был записан в БД. На протяжении всех обработчиков для нового объекта возвращает значение Истина

Удалить()

Удаляет текущий документ.

Записать()
Сохраняет текущее состояние в базу
УстановитьПрефикс(Префикс: Строка)

Данный метод устанавливает значение Префикса, которое будет использовано в момент вызова Записать() для формирования нового номера. Если длина Префикса == 0 или нет автонумерации, то соответствующий метод отсутствует. Поведение автонумерации совпадает с поведением автонумерации у элемента проекта Справочник

УстановитьПостфикс(Постфикс: Строка)

Данный метод устанавливает значение Постфикса, которое будет использовано в момент вызова Записать() для формирования нового номера. Если длина Постфикса == 0 или нет автонумерации, то соответствующий метод отсутствует. Поведение автонумерации совпадает с поведением автонумерации у элемента проекта Справочник

Тип «имя-документа.Объект» имеет конструктор новый имя-документа.Объект(), который позволяет создать новый объект документа. Заполнив этот экземпляр данными вы можете затем сохранить его в базе данных. Конструктор имеет следующую сигнатуру:
новый имя-документа.Объект()
Создает новый объект, Ид будет определен при записи
новый имя-документа.Объект(ид: <ИмяДокумента>.Ссылка | Ууид)
Создает новый объект, ид будет взят из параметра
новый имя-документа.Объект(<Реквизит1: ТипРеквизита1> = <ЗначениеПоУмолчанию1>, ..., <РеквизитN: ТипРеквизитаN = <ЗначениеПоУмолчаниюN>)
Конструктор по значениям всех полей — создаёт запись с указанными значениями реквизитов. Можно использовать только форму вызова с указанием имён параметров.

Модуль объекта документа

В проекте модуль, расширяющий тип имя-документа.Объект, называется модулем объекта. Он доступен в окружении Сервер.

В нем вы можете обработать такие события как:

  • ПриСоздании
  • ПриПроверкеДанных
  • ПередЗаписью
  • ПослеЗаписи
  • ПередУдалением

Во время записи объекта документа открывает в базе данных транзакцию записи и события вызываются следующим образом:

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

@ВПроекте
метод ПересчитатьДанные()

    // Алгоритм пересчета данных
    ....

;

Этот метод будет доступен в других модулях:

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