Элемент проекта вида «Документ»

Элемент проекта Документ предназначен для моделирования объектов, которые имеют привязку ко времени и отражают некие свершившиеся факты, актуальность которых падает с течением времени.

Ближайшим аналогом являются бумажные документы: «Накладная», «Акт», «Счет». Важным аспектом является именно естественное устаревание каждого конкретного экземпляра с течением времени. Например, долгосрочный договор с клиентом чаще всего моделируется с помощью элемента проекта Справочник, хотя у него есть четкий бумажный аналог — документ договора. Однако, с точки зрения пользователя, договор устаревает медленно (или не устаревает вообще, пока существует договоренность с контрагентом). А вот факты конкретных бизнес-операций устаревают естественным образом: отгрузили накладную, оплатили счет — и забыли об этом. Состояние счетов и накладных недельной или годовой давности не интересует нас, как пользователя в дне сегодняшнем. Операция выполнена и осталась в истории. К ней можно вернуться, но она теряет релевантность при ведении бизнеса здесь и сейчас.

Таким образом, для договоров более важен факт их существования, поэтому в моделях для их описания, как правило, используется элемент проекта Справочник, а для оплаченных счетов или отгруженных накладных важна актуальность свежих данных. Существование старых (архивных) данных все менее ценно с каждым новым днем, поэтому для описания моделей «Счет» и «Накладная», как правило, используется элемент проекта Документ.

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

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

Например, Накладная — это Документ:

Номер Дата Сумма
НК001 01.05.2022 32 000
НК002 01.05.2022 45 000
НК003 03.05.2022 23 000
НК004 04.05.2022 41 000

Объектами этого Документа являются накладная с номером НК001, датой создания 01.05.2022 и суммой 32000, накладная с номером НК002, датой создания 01.05.2022 и суммой 45000 и т. д.

Вид Документ содержит специальные свойства, которые называются реквизитами. Реквизит — это описание одной колонки в такой таблице. У вида Документ есть два стандартных реквизита — обязательный реквизит Дата, который выстраивает вводимые документы на оси времени, и необязательный системный реквизит Номер.

Реквизит Дата индексированный и позволяет искать документы в пределах диапазона дат. Списки документов в пользовательском интерфейсе автоматически сортируются по Дате. При интерактивном вводе Дата устанавливается автоматически. Форма объекта при создании нового документа открывается с реквизитом Дата равным дате в поясе клиента и временем 0:00:00 (если время актуально для типа Даты). При записи нового объекта Документа дата устанавливается по алгоритму установки даты.

Реквизит Номер может заполняться автоматически. За такое поведение отвечает свойство реквизита НомерАвтонумерация. Нумерация может выполняться с учетом периодичности. Например, каждый год накладные могут нумероваться сначала.

У Документа всегда присутствует один обязательный реквизит — Дата. Помимо системного реквизита Номер, вы также можете добавить любое количество собственных реквизитов для того, чтобы описать дополнительные колонки, например Сумма, Контрагент, Позиции, и др.

Вид Документ предоставляет следующую функциональность и логику работы с данными:

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