Объект базы данных
Contents
- 1 Краткое описание объекта базы данных
- 2 Общие функции, связанные с сервером и базой данных
- 3 Функции создания объекта базы данных и вспомогательных интерфейсов
- 4 Общие функции объектов базы данных
- 5 Функции объектов справочников
- 6 Функции объектов документов
- 7 Функции объектов перечислений
- 8 Функции объектов переменных БД
- 9 Функции объектов накопителей
- 10 Функции объектов журналов
- 11 Функции, связанные с логами базы данных
- 12 Функции работы с дополнительными (внешними) базами данных
Объект базы данных -- основной объект, связывающий информацию сервера базы данных и локальную программу. Без наличия подключения к серверу базы данных, объект не будет иметь смысла, так как невозможно будет заполнить, обновить, сохранить и пр. оный в базу данных. Объект является сложным составным набором параметров и может занимать значительный объем в памяти, поэтому при работе с объектами предусмотрены особые способы оптимизации по памяти, позволяющие полностью исключить влияние больших объемов данных на память, необходимую при работе системы. Запросы к серверу, связанные с объектами базы данных, могут выполняться значительное количество времени, поэтому при работе с ними предусмотрены особые способы оптимизации по времени, позволяющие сильно увеличить скорость выполнения отдельных запросов. На данной странице собрана основная информация по функциям, связанным с объектами базы данных. Однако, дополнительная информация, также напрямую связанная с данным объектом находится в других разделах (объект структуры базы данных, объект запроса базы данных и объект временной таблицы базы данных).
Краткое описание объекта базы данных
Основной характеристикой объекта базы данных является его заполненность. Объект может иметь следующие уровни заполненности:
- Абстрактный объект БД, без указания на типы или виды. Такой объект можно еще назвать "пустой объект БД". Создать такой объект можно, к примеру, с помощью конструкции
GetNothing("DB")
, проверить с помощью функции TypeStr. - У объекта БД выбран тип данных. Т.е., определено, какой это объект -- документ, справочник и пр. Создать такой объект можно, к примеру, с помощью конструкции
GetNothing("REF")
, проверить с помощью функции TypeStr. - У объекта БД выбран вид типа данных. Т.е., определено не только какой это объект, к примеру, справочник, но и вид этого справочника, к примеру, справочник Контрагенты, виды задаются для текущего проекта в Студии. Создать такой объект можно, к примеру, с помощью конструкции
Ref.Номенклатура
, проверить, к примеру, с помощью функции TypeStr. - Объект позиционирован на уникальный элемент базы данных. Т.е., если объект представляет справочник Контрагенты и производилось его позиционирование на элемент справочника с реквизитом Code равным "000000001734". Позиционирование всегда происходит по внутреннему коду элемента. Такой код не является реквизитом объекта и уникальным образом задает элемент в таблице базы данных (не имеет ничего общего с упомянутым реквизитом Code). Такое состояние объекта называется "объект выбран". Создать такой объект можно, к примеру, с помощью фрагмента кода
aEl:=DB("Ref.Контрагенты");aEl.FindEx(3,,"Code","000000001734")
, убедиться, что объект был выбран к помощью функции Selected или функции IsEmpty. - Объект загружен (частично или полностью). Т.е., для выбранного объекта БД из базы данных были загружены все реквизиты объекта в память системы. Последующее обращение к загруженным реквизитам уже не требует выполнения запроса к серверу, реквизиты будут прочитаны из памяти. Нужно понимать, что загруженный объект не связан более с базой данных, поэтому, если объект в ней был изменен другим пользователем, это изменение автоматически не отразится на загруженном локальном объекте, объект устареет. Эта проблема сказывается более всего при записи объектов в базу данных, поэтому перед любыми изменениями, особенно с объектами, находящимися в памяти продолжительное время, необходимо заблокировать объект, обновить его содержимое из базы данных (см. Reload), изменить содержимое необходимым образом, и уже после этого сохранить объект в базу данных. Создать и заполнить такой объект можно, к примеру, с помощью конструкции
DB("Ref.Контрагенты","Code","000000001734")
, убедиться, что объект загружен с помощью функции Loaded. В системе предусмотрены следующие возможные режимы загрузки объектов:- Полная загрузка. Обычный режим загрузки объектов, когда все реквизиты объекта загружаются в память, и это позволяет получить к ним быстрый доступ без обращения на сервер, однако, для объектов с большим количеством реквизитов, такой режим может использовать большое количество памяти, что не всегда желательно. Кроме того, бывают ситуации, когда в полной загрузке объектов нет необходимости и частичная загрузка не только уменьшит потребление памяти, но и ускорит сам процесс загрузки.
- Полная загрузка с периодическими реквизитами. В обычном случае, при полной загрузке объекта, периодические реквизиты объекта не загружаются, обращение к ним можно осуществить отдельными функциями, типа GetValue с указанием даты значения. Загрузка периодических реквизитов, однако, необходима при визуальной работе с объектом и может быть форсирована при программной загрузке, см. функции типа UseOption, LoadPeriodicalPropertiesHeader и пр.
- Загрузка строчных частей. Обычно при полной загрузке объекта, строчные части не загружаются, загрузка их осуществляется по запросу (см. функцию LineParts), однако, возможно форсирование загрузки строчных частей с помощью функций типа UseOption.
- Загрузка только заголовка. Данный режим позволяет загрузить только реквизиты, необходимые для представления элемента на экране и для его сортировки по реквизиту сортировки. Удобен этот метод тем, что загрузка будет осуществляться быстрее и потребует меньше памяти, однако, объекты по-прежнему можно будет отображать на экране, в таблицах и пр., или подвергать сортировке без того, чтобы это вызвало полную загрузку. При любом обращении к реквизитам объекта, система автоматически производит полную загрузку, поэтому такой режим обычно используется, в случаях, когда обращение к реквизитам не требуется, либо, когда большинство проверяемых объектов будут пропущены в цикле работы с объектами. Для загрузки в этом режиме можно использовать функции типа MassLoadObjects, FindEx, SelectEx или LoadEx.
- Частичная загрузка. Данный режим позволяет загрузить только выбранные реквизиты для определенных объектов. Режим может использоваться, к примеру, при выводе на экран таблиц с объектами, когда сами объекты имеют большое количество реквизитов, однако на экран выводятся только некоторые (такой способ отображения таблиц с объектами предусмотрен в редакторе форм Студии). Удобен этот метод тем, что загрузка будет осуществляться быстрее и потребует меньше памяти, однако, объекты по-прежнему можно будет отображать на экране, в таблицах и пр., или подвергать сортировке без того, чтобы это вызвало полную загрузку. Если обращение к реквизитам объектов осуществляется для загруженных реквизитов, система вернет значение реквизита без инициирования полной загрузки, иначе будет произведена полная загрузка. Данный режим является распространением режима загрузки только заголовков, так как кроме реквизитов формирования заголовка и сортировки, производится загрузка других выбранных реквизитов. При загрузке в режиме частичной загрузки (но не в режиме загрузки заголовков!) в объекте инициализируются все особые свойства: Parent, Folder, LinkedObject (для объектов журналов), Status, IsFolder. Обращение к этим свойствам (к примеру,
<Объект>.IsFolder()
) не будет приводить к полной загрузке объекта. Для загрузки в этом режиме можно использовать функции типа MassLoadObjects, FindEx, SelectEx или LoadEx.
- Полная загрузка. Обычный режим загрузки объектов, когда все реквизиты объекта загружаются в память, и это позволяет получить к ним быстрый доступ без обращения на сервер, однако, для объектов с большим количеством реквизитов, такой режим может использовать большое количество памяти, что не всегда желательно. Кроме того, бывают ситуации, когда в полной загрузке объектов нет необходимости и частичная загрузка не только уменьшит потребление памяти, но и ускорит сам процесс загрузки.
Изменения и сохранение объектов
Для каждого позиционированного (выбранного) объекта существует внутренний код базы данных, указывающий на единственную запись в базе данных, соответствующую текущему объекту. Если в реквизитах объекта произвести изменения, объект принимает статус изменен. Объект по прежнему будет загруженным и внутренний код базы данных по-прежнему будет таким же, каким он был при позиционировании объекта. Измененный объект можно сохранить в базу данных, при этом все изменения в реквизитах объекта будут записаны в базу данных и последующая загрузка реквизитов будет давать эти новые значения. При работе в многопользовательской системе, может получиться ситуация, когда два пользователя одновременно редактируют один и тот же объект, после чего сохраняют его содержимое. Так как оба пользователя работают со своей локальной копией объекта и не видят изменений друг друга, после того, как последний пользователь сохранит свои изменения в объекте, изменения первого пользователя будут утеряны. Чтобы избежать этой ситуации, объекты открытые в визуальном режиме для редактирования автоматически блокируются программой. Второй пользователь, не сможет открыть для редактирования заблокированный объект (у него будет доступ к открытию объекта в режиме просмотра, который исключает произведение каких-либо изменений). При программных изменениях, однако, блокировка объекта до его изменения и сохранения должны быть предусмотрены разработчиком. Поэтому, особенно для объектов, которые будут находиться в памяти продолжительное время, настоятельно рекомендуется следовать следующему алгоритму при изменении и сохранении объектов в базу данных:
- Произвести блокировку объекта с помощью функции Lock. Если блокировка неудачна, отказаться от изменения данного объекта (очевидно, что с ним работает другой пользователь).
- Если блокировка произведена, предусмотреть автоматическую разблокировку объекта внутри конструкции
Try .. Finally
- Загрузить или перечитать содержимое объекта с помощью функции Reload. Если пропустить этот шаг, заблокированный объект может уже содержать устаревшую информацию, так как с момента, как он был загружен до момента его блокировки могло пройти достаточно времени, чтобы другой пользователь или программа другого клиента сделали изменения в реквизитах объекта и сохранили его в базу данных.
- Произвести необходимые изменения в реквизитах и строчных частях объекта.
- Сохранить изменения в объекте в базу данных
- Окончить конструкцию
Try .. Finally
разблокировкой объекта.
Особый класс объектов представляют объекты, которых до этого не существовало в базе данных. Такие объекты далее по тексту и в описаниях функций будут называться новыми несохраненными объектами. При создании нового несохраненного объекта, он считается выбранным, однако, он еще не имеет внутреннего кода базы данных, реквизиты-нумераторы, имеющие свойство создания номера при создании нового объекта, будут заполнены после особого запроса на сервер базы данных, который запомнит предоставленные значения нумераторов до момента, как произойдет сохранение объекта, чтобы не возвратить их в момент создания подобного объекта другим пользователем. В момент сохранения объекту присваивается в базе данных внутренний код и происходит заполнение нумераторов, которые имеют свойство создания номера при записи объекта. Внутренний код и новые номера реквизитов-нумераторов возвращаются сервером и обновляют состояние объекта, который в дальнейшем будет считаться обычным выбранным (позиционированным) объектом базы данных.
Типы объектов базы данных
Виды типов объектов БД задаются в редакторе проекта -- Студии. Поэтому, программная среда не может создать самостоятельно, к примеру, новые виды справочников или документов. Однако, программная среда может создавать реальные новые элементы в базе данных, изменять их реквизиты, удалять их и пр. Информация, редактируемая в Студии, называется структурой данных (или метаданными), информация, которую может изменять программа, называется просто данными. Для более полного понимания, какие типы данных доступны в структуре данных, см. информацию по Студии, здесь дан список типов данных с которыми может работать программа:
- Ref, Reference -- тип данных справочник. Справочник может иметь произвольное количество реквизитов и строчных частей, объекты справочников могут быть папками и обычными элементами, справочники могут быть подчинены между собой с помощью особой структуры подчинения (справочники-родители), элементы справочника могут иметь особые флаги -- триггеры. Элементы справочников могут иметь ссылки в журналах справочников. Справочники используются для хранения любых типов данных, в отличие от документов, справочники обычно не связаны с накопителями базы данных (однако, такую связь можно построить программным путем).
- Doc, Document -- тип данных документ. Документ может иметь произвольное количество реквизитов и строчных частей. Элементы таблиц документов обычно называются просто "документами". Документы могут иметь особые флаги -- триггеры. Документы могут иметь ссылки в журналах документов. Документы используются для хранения любых типов данных, в отличие от справочников, они обычно могут иметь связанные записи в накопителях базы данных.
- Enum, Enumeration -- тип данных перечисление. Перечисления могут иметь произвольное количество значений. Каждое значение имеет свое наименование (как реквизиты справочников), однако, не имеет типа данных. Перечисления полностью задаются в структуре данных, и являются виртуальными объектами, каждое значение перечисления, имеет свой внутренний код базы данных. Перечисления используются для улучшения читабельности, вместо них можно, к примеру, использовать целые числа, каждое из которых будет обозначать значение перечисления.
- DBVar -- тип данных переменная базы данных. Переменные БД позволяют сохранять в базе данных единственное значение произвольного типа (которое, однако, может быть периодическим). Переменные БД обычно используются для хранения установок и опций определенного проекта. Они доступны для чтения и изменения как программным путем, так и в виде диалога редактирования.
- Jour, Journal -- тип данных журнал документов или справочников. Журналы могут иметь произвольное количество реквизитов. Каждый документ или элемент справочника, входящий в определенный журнал, содержит в нем свою ссылку -- уникальный элемент журнала, в журнале могут быть также заданы соответствия между реквизитами журнала и реквизитами соответствующих документов или справочников входящих в журнал. При изменении элемента справочника, входящего в данный журнал, система автоматически транслирует измененные реквизиты на соответствующие реквизиты элемента журнала. Журналы могут использоваться, для сводной таблицы объектов разных видов (к примеру, разных видов документов), для удобства работы пользователей, для ускорения запросов к базе данных по требуемым данным и для разгрузки сервера БД (который будет выполнять запросы к одной таблице, вместо нескольких). Создание журнала, в который входит один вид объектов, имеет мало смысла.
- Stor, Storage -- тип данных накопитель. Может иметь произвольное количество реквизитов и активов. Накопители оптимизированы для хранения вычисляемой (числовой) информации, запросы к которой будут выполняться в различных разрезах. Для этой информации выделяются особые реквизиты -- активы, которые могут содержать только числовую информацию. Допустимо, однако, чтобы накопитель не содержал ни одного актива. Каждая запись в накопителе может содержать или не содержать информацию по дате и времени этой записи, а также иметь дополнительный признак "приход" или "расход". Наличие таких признаков задается для каждого из накопителей в отдельности при редактировании проекта. Накопители имеют встроенную оптимизацию при нахождении суммы активов начиная с начала периода базы данных, обычно это используется для нахождения текущего сальдо какого-либо актива (скажем, суммы задолженности клиента). Так как база данных может быть достаточно большой по размеру, перебор всех записей в накопителе является длительной задачей и может сильно замедлять получение сальдо. Поэтому, для накопителей, использующих датирование записей для любого количества реквизитов доступен признак "аккумулятор". Наличие хотя бы одного реквизита аккумулятора в накопителе создает в базе данных особую таблицу, в которой система хранит промежуточные итоги (сальдо) в разрезе всех аккумуляторов для всех активов накопителя. Итоги вычисляются автоматически при изменениях в накопителях и сохраняются периодично через определенные периоды (к примеру, через месяц). Это позволяет, при нахождении сальдо на определенную дату в разрезе группы аккумуляторов (особого класса запросов к накопителям), создавать выборку не для всех записей накопителя, а для записей, идущих после предыдущих предыдущих итогов, сложенных с записями самих итогов. При нахождении сальдо на момент последней записи в накопителе, запрос будет производиться только по таблице итогов, где всегда хранятся записи на последнее изменение, поэтому, такой запрос будет выполнен гораздо быстрее. Обычные реквизиты, не помеченные как аккумуляторы, не могут участвовать как разрезы в запросах по нахождению сальдо.
Свойства, доступные для использования каждого из типов объектов, зависят от данного типа. Ниже дана таблица с кратким описанием свойств объектов, в зависимости от их типа. Дальнейшее описание ищите в статьях по Студии.
Тип свойства | Идентификатор свойства | Применимо к типам объектов | Описание |
---|---|---|---|
Наименование | Name | Справочники, документы, перечисления, переменные БД, журналы, накопители, нумераторы | Задает идентификатор объекта |
Заголовок | Caption | Справочники, документы, перечисления, переменные БД, журналы, накопители | Задает описательное имя объекта, может использоваться при указании на него |
Описание | Description | Справочники, документы, перечисления, переменные БД, журналы, накопители, нумераторы | Задает описание объекта, используется для хранения важной описательной информации по объекту для разработчиков |
Способ формирование представления | CaptionTemplate | Справочники, документы, журналы | Задает способ формирования представления элемента как строку-шаблон, использующую простые не периодические реквизиты элемента. Обычно эта строка представляет собой указание на реквизит, отвечающий за наименование. Но для документов, к примеру, удобно использовать совокупность даты документа, его номера и пр. |
Родительские справочники | Parents | Справочники | Задает разрешенные родительские справочники для элементов данного. При наличии выбранных родительских справочников, все элементы текущего справочника должны иметь заполненный элемент-родитель. Это позволяет производить отбор по элементам в разрезе родителя. Обычно такой подход может использоваться для создания строчных частей справочника, когда необходимо также наличие ссылки на каждую строку строчной части. К примеру, справочник с договорами удобно подчинять справочнику контрагентов. Каждый договор при этом будет "закреплен" за определенным контрагентом. |
Формы по умолчанию | DefaultForms | Справочники, документы, журналы | Параметр задает формы, модули и журналы по умолчанию при открытии объекта в виде списка, для выбора элемента, для редактирования элемента или папки. Указание на эти формы и модули используется при интерактивной работе с объектами, когда отсутствует особое указание на модули или формы. |
Встраеваемый выбор по умолчанию | IsDefaultComboOpen | Справочники, документы, журналы | Задает для объекта режим, когда по умолчанию выбор элемента будет происходить в выпадающем списке, привязанном к элементу формы, где происходит выбор. Такое поведение можно изменить программно. Когда справочник, к примеру, содержит малое число элементов, удобнее дать пользователю выбрать его элемент в выпадающем списке, как это делается при выборе элемента перечисления. |
Содержание папок | HasFolders | Справочники | Является признаком того, что данный справочник может содержать элементы-папки. Если справочник содержит папки, его элементы могут быть помещены внутрь элементов-папок для удобства работы пользователей. Кроме того, запросы по папкам будут включать все элементы внутри папок. |
Объекты-основания | CanBeBasedUpon | Справочники, документы | При использовании визуальной функции ввода объекта на основании другого объекта (обычно необходимые указания на объект-основание заполняются программно) система выдает список возможных объектов-оснований. Виды объектов, входящих в этот список, задаются в данном параметре. |
Составные индексы | CompositeIndexes | Справочники, документы, журналы, накопители | Свойство задает произвольное количеством дополнительных индексов базы данных, состоящих из цепочек обычных и особых реквизитов. Для справочников особыми реквизитами считаются @STATUS, @ELEMENT, @ISFOLDER, @FOLDER, @PARENT, для документов @STATUS, @ELEMENT, для накопителей @LINEID, @LINK, @EXPENSE, @DATE, для журналов @STATUS, @ELEMENT, @LINK, @ISFOLDER. Для цепочек реквизитов, имеющих отдельный индекс, ускоряется сортировка и поиск в базе данных, особенно это важно, если по всей совокупности реквизитов часто происходит идентификация (поиск) элементов БД. |
Режимы регистрации событий | EventLogFlags | Справочники, документы, переменные БД | Задает режимы автоматической записи событий, связанных с данным объектом, в журнал регистрации событий. События будут автоматически записывать в журнал, к примеру, при записи объекта, создании нового и пр. |
Флаг измененности | ChangeTrigger | Справочники, документы | Задает особое поле в базе данных для элементов (документов) этого объекта. Поле имеет 4 состояния и может проверяться или изменяться программно. Поле принимает определенное состояние при сохранении изменений в элемент (документ), что позволяет получить совокупность измененных объектов, выгрузить их или обработать, и пометить как неизмененные. |
Режим автоматической транзакции при обработке | AutoTransactionMode | Документы | Признак автоматически включает режим транзакции до выполнения обработчиков OnPublish/OnUnpublish и завершает режим после выполнения. Без этого признака, программа должна сама инициировать режим транзакции в нужный момент. |
Игнорирование порядка блокировки | IgnoreStoragesLockOrder | Документы | Позволяет игнорировать порядок блокировки накопителей для указанного документа, порядок блокировки используется для улучшения доступности базы данных при обработке документов в базах данных с большим количеством пользователей. |
Используемые накопители | StoragesAllowed | Документы | Разрешает создание записей из указанного документа в выбранные накопители, используется для оптимизации операций поиска записей в накопителях для выбранного документа. |
Свойства нумератора | Numerator | Нумераторы | Свойства виртуального объекта нумератора, который может использоваться для прозрачной нумерации реквизитов объектов. |
Значения перечисления | Values | Перечисления | Список значений перечисления, каждое значение имеет наименование и описание. |
Тип данных переменной БД | DataType | Переменные БД | Задает тип данных переменной БД, либо набор типов данных. |
Периодическая переменная БД | IsPeriodical | Переменные БД | Значение переменной БД зависит от конкретной даты. На сегодня это значение может быть одним, а вчера совершенно другим. Переменные подобного рода позволяют хранить простую изменяющуюся информацию, когда необходимо также иметь доступ к истории изменения этой информации. |
Период изменения переменной БД | TimePeriod | Переменные БД | Свойство реквизита задает ограничения на изменения периодической переменной БД. К примеру, переменная может быть изменена только на начало любого месяца, в течение месяца она не меняется. Это позволяет уменьшить количество возможных записей в базе данных, тем самым ускорив работу с переменной. По умолчанию переменная может изменяться на начало дня. Это ограничение можно вообще отключить. |
Датирование записей накопителя | IsPeriodicalStorage | Накопители | Позволяет использовать периодичность в выбранном накопителе (т.е. каждой записи накопителя будет соответствовать какой-либо момент времени) |
Период ведения итогов | TotalsPeriod | Накопители | Позволяет задать периодичность построения итогов накопителя, большие периоды ведут к более быстрой записи, однако, могут отрицательно сказаться на скорости расчета. Рекомендуется устанавливать данный период равным месяцу. |
Признак приход или расход | UsesDebitCreditMark | Накопители | Каждая запись накопителя приобретает дополнительный признак "приход" или "расход", который будет влиять на знак движения при нахождении итогов |
Объекты, входящие в журнал | Members | Журналы | Позволяет включить или исключить справочник (документ) в данный журнал (из журнала). |
Журнал содержит папки | WillContainFolders | Журналы справочников | Разрешает хранить в журнале папки справочников наряду с элементами справочников |
Подчинение элементов справочников и таблица подчиненности документов
При создании структуры справочников для проекта, может появиться необходимость в ссылке множества элементов одного справочника на один элемент другого. К примеру, для элемента справочника номенклатура для производственных изделий, за конкретным элементом номенклатуры может быть закреплено несколько спецификаций производства. Каждая спецификация является элементом другого справочника и может содержать большое количество реквизитов. Такую связь можно выполнить с помощью дополнительного реквизита в элементе справочника спецификации, где будет указываться элемент справочника номенклатура на который ссылается данная спецификация, однако, легче это сделать с помощью встроенного механизма подчинения справочников. Любой справочник может иметь произвольное количество справочников-родителей, это значит, что каждый элемент этого справочника должен быть подчиненным определенному элементу из справочников-родителей. Система позволяет удобно выводить таблицы с подчиненными элементами, также в запросах можно обращаться к справочнику-родителю, имеются функции для чтения элемента справочника-родителя (Parent.
Встроенная возможность отслеживания подчинения документов работает несколько другим способом. Отличие заключается в том, что любой документ может быть подчинен более чем одному документу-основанию, при этом, он может не иметь подчинения вообще. Подчинение осуществляется не через невидимый особый реквизит @Parent, как в случае со справочниками, а через системную таблицу подчинения документов. Каждый реквизит документа или срочной части документа с абстрактным типом документ или определенным видом (видами) документа, может иметь признак принадлежность таблицы подчинения (см. таблицу ниже). При сохранении документа с заполненным реквизитом с таким признаком, в системную таблицу подчинения документов помещается запись о подчинении текущего документа документу, выбранному в указанный реквизит. Таких реквизитов может быть несколько, поэтому, для одного документа в этой таблице может быть несколько записей (или ни одной). Запросы по этой таблице, позволяют не только выяснить, каким документам подчинен данный (прямой запрос), но и какие документы подчинены данному (обратный запрос), см. функцию LoadLinkedDocuments.
Реквизиты объектов базы данных
Объекты типов справочник, документ, журнал и накопитель могут иметь произвольное число реквизитов. Кроме того, объекты типа справочник, документ могут иметь произвольное число строчных (табличных) частей, каждая из которых может иметь произвольное число реквизитов. Строчная часть объекта представляет собой отдельную таблицу базы данных, привязанную к самому объекту с помощью внутреннего кода базы данных. В таблице строчной части может находиться произвольное количество записей, относящихся к определенному объекту, таким образом с одним объектов может быть связан не только конечный набор его собственных реквизитов, но и произвольное количество записей его строчных частей. К примеру, это необходимо, когда в документе продажи хранятся строки, перечисляющие номенклатуру продажи, ее количество, цены и пр., либо когда элемент справочника маркетинговых статей хранит информацию по скидкам, ассоциирующимся с данной статьей и эта информация включает список папок номенклатуры, на которые дается скидка с процентами этой скидки. Реквизит объекта (либо строчной части) может иметь любой простой тип данных, либо любое количество типов данных БД, кроме того, реквизиты имеют большое количество других свойств.
Ниже дана таблица возможных свойств строчных частей реквизитов:
Тип свойства | Идентификатор свойства | Применимо к типам объектов | Описание |
---|---|---|---|
Наименование | Name | Строчные части документов и справочников | Задает идентификатор строчной части |
Описание | Description | Строчные части документов и справочников | Задает описание строчной части, используется для хранения важной описательной информации по объекту для разработчиков |
Содержание папок | HasFolders | Строчные части справочников | Является признаком того, что данная строчная часть может содержать строки-папки. Если строчная часть содержит папки, некоторые ее строки могут быть помещены внутрь других строк, как это происходит с элементами справочников. |
Составные индексы | CompositeIndexes | Строчные части документов и справочников | Свойство задает произвольное количеством дополнительных индексов базы данных, состоящих из цепочек обычных и особых реквизитов. Для строчной части особыми реквизитами считаются @LINEID, @HEADER и @ELEMENT. Для цепочек реквизитов, имеющих отдельный индекс, ускоряется сортировка и поиск в базе данных, особенно это важно, если по всей совокупности реквизитов часто происходит идентификация (поиск) элементов БД. |
Ниже дана таблица возможных свойств реквизитов объектов и их применимости для типов объектов:
Тип свойства | Идентификатор свойства | Применимо к типам объектов | Описание |
---|---|---|---|
Наименование | Name | Справочники, документы, перечисления, журналы, накопители, реквизиты строчных частей | Задает идентификатор реквизита |
Заголовок | Caption | Справочники, документы, перечисления, журналы, накопители, реквизиты строчных частей | Задает описательное имя реквизита, может использоваться при указании на реквизит |
Описание | Description | Справочники, документы, журналы, накопители, реквизиты строчных частей | Задает описание реквизита, используется для хранения важной описательной информации по реквизиту для разработчиков |
Тип данных | DataType | Справочники, документы, журналы, накопители, реквизиты строчных частей | Задает тип данных реквизита, либо набор типов данных. |
Нумератор | Numerator | Справочники, документы, реквизиты строчных частей | Задает ограничения или особые условия автоматического создания значения реквизита. Такие реквизиты часто содержат номера или индексы справочников или документов, индексы могут быть уникальными, несколько реквизитов могут разделять один и тот же нумератор. См. статью о нумераторах. |
Простой индекс | IsIndexed | Справочники, документы, журналы, накопители, реквизиты строчных частей | Помечает реквизит для индексирования в базы данных. Для индексируемых реквизитов ускоряется сортировка и поиск в базе данных, особенно это важно, если по реквизитам часто происходит идентификация элементов БД. |
Применимость реквизита | AppliesTo | Справочники, реквизиты строчных частей справочника | Задает использование реквизита для папок, элементов или папок и элементов. К примеру, если реквизит используется только для папки, система будет сохранять только пустые значения реквизита в элементы, не являющиеся папками. Ограничение может помочь избежать несоответствия информации. |
Полнотекстовый поиск | IsFullTextSearch | Справочники, документы, журналы, реквизиты строчных частей | Включает реквизит в полнотекстовый поиск, если последний поддерживается текущей базой данных. Полнотекстовый поиск может использоваться функциями Find и прочими, если возможность его использования отсутствует, сервер базы данных будет автоматически использовать вместо него обычный поиск. Для учетных систем полнотекстовый поиск чаще всего не требуется. |
Форсирование заполненности | IsDenyEmpty | Справочники, документы, журналы, реквизиты строчных частей | Запрещает интерактивное сохранение объекта, если данный реквизит не заполнен. Ограничение удобно применять, когда требуется форсирование заполнения реквизита. |
Разрешение выбора папок | IsFolderAllowed | Справочники, журналы, реквизиты строчных частей справочника | Запрещает интерактивное сохранение объекта, если данный реквизит содержит папку справочника. Ограничение удобно применять, когда требуется убедиться, что пользователь выбирает только обычные элементы, а не папки в значения реквизита. |
Международных текст (юникод) | IsUnicode | Справочники, документы, журналы, накопители, реквизиты строчных частей | Реквизит с текстовым значением может содержать международный текст (UTF-16), однако, будет занимать в базе данных в два раза больше места. Без этого свойства текст этого реквизита базе данных может иметь только кодировку, заданную по умолчанию для этой базы данных при ее создании, международные символы, не входящие в эту кодировку могут быть сохранены как знаки "?" или как-то иначе, в зависимости от типа используемой базы данных. |
Периодический реквизит | IsPeriodical | Справочники, документы, реквизиты строчных частей | Реквизит состоит из множества записей, значение его зависит от конкретной даты. На сегодня это значение может быть одним, а вчера совершенно другим. Реквизиты подобного рода позволяют хранить простую изменяющуюся информацию, когда необходимо также иметь доступ к истории изменения этой информации. К примеру, цена определенной позиции номенклатуры может быть периодическим реквизитом, что даст возможность не только знать текущую цену, но также цену на произвольную дату. |
Период изменения периодического реквизита | TimePeriod | Справочники, документы, реквизиты строчных частей | Свойство реквизита задает ограничения на изменения периодических реквизитов. К примеру, реквизит может быть изменен только на начало любого месяца, в течение месяца реквизит не меняется. Это позволяет уменьшить количество возможных записей в базе данных, тем самым ускорив работу с реквизитами. По умолчанию реквизит может изменяться на начало дня. Это ограничение можно вообще отключить. |
Принадлежность таблицы подчинения | IsParentLink | Документы, реквизиты строчных частей документов | Свойство реквизита позволяет использовать помещать документ в таблицу подчинения, если этот реквизит заполнен значением документа. Особая таблица подчинения позволяет строить структуру подчиненности между документами внутренними средствами системы, в ином случае, потребовалось бы создать специальный справочник для подобных нужд и заполнять его программно. |
Реквизит датирования | IsWorkingDateLinked | Справочники, документы, реквизиты строчных частей | Свойство позволяет автоматически заполнить реквизит значением текущей даты при создании нового объекта или добавлении новой строки в строчную часть. Свойство используется для удобства, когда реквизит задает датирование элемента, что исключает необходимость в дополнительной программной работе по его заполнению. |
Реквизит сортировки | IsSortProp | Справочники, документы | Свойство реквизита выбирает его, как реквизит сортировки текущего вида объектов. Вид объекта может содержать только один реквизит с таким признаком. Если признак выбран, при сортировке группы объектов данного типа, ключом сортировки будет считаться данный реквизит. Обычно такой признак устанавливается для реквизитов, задающих наименование, номер или код объекта. |
Реквизит визуального фильтра таблиц | IsMainFilterProp | Справочники, документы | Свойство текстового реквизита выбирает его, как реквизит для фильтрования в визуальных таблицах. Если пользователь использует быстрое фильтрование в таблицах (вводит текст в столбце таблицы), система должна знать, какой реквизит объекта использовать для применения фильтра. Вид объекта может содержать только один реквизит с таким признаком. Обычно реквизиты с таким признаком также обладают признаком IsSortProp, но это не всегда так. Видимо наименование элемента или документа (представление) может формироваться из почти произвольной композиции реквизитов, обычно реквизит с таким свойством присутствует в формировании представления. |
Реквизит-аккумулятор | IsAccumulator | Накопители | Задает признак того, что реквизит накопителя является аккумулятором, т.е., он будет участвовать в разрезах в который будет автоматически накапливаться и обновляться информация по сальдо накопителя по активам накопителя. |
Реквизит-актив | IsAsset | Накопители | Задает признак того, что реквизит накопителя является активом. Данные реквизиты могут иметь только числовой тип данных и могут быть использованы для автоматического накопления и обновления информация по сальдо накопителя. |
Соответствие реквизитам объектов журнала | MembersLinks | Журналы | Задает связи между реквизитами объектов, входящих в журнал с текущим реквизитом журнала. См. доп. информацию в описании журналов |
Периодические реквизиты объектов базы данных
Периодическими считаются реквизиты, для которых сохраняется история их изменения и значение которых можно получить на определенную дату и время. Для таких реквизитов на сервере заведена отдельная таблица, чем чаще изменялся реквизит, тем больше записей содержит эта таблица. При получении значения периодического реквизита обычно указывается дата и время этого значения, без указании даты, реквизиты будут получены на особую дату отображения периодических реквизитов, которую можно изменить для каждого объекта базы данных в отдельности. При создании объекта, эта дата копируется из даты отображения периодических реквизитов потока, которая обычно совпадает с текущей датой. Обычно периодические реквизиты не загружаются в память при загрузке объекта, предполагается, что доступ к ним совершается с помощью функции GetValue, однако, такое поведение можно изменить. При сохранении объектов с периодическими реквизитами, запись производится не на определенную дату, а на указанный период, при этом записи в таблице периодических реквизитов, лежащие внутри периода, затираются сервером, и создаются записи, если это требуется, на начало и конец периода, с тем, чтобы сохранить корректность значений внутри и вне периода записи. Полную таблицу значений периодического реквизита можно прочитать в таблицу значений и записать из таблицы значений после проведения любых изменений внутри нее. При запросах к таким реквизитам внутри фильтров необходимо указывать также дату реквизита. Периодическими могут быть также реквизиты строчных частей (см. ниже). Каждый периодический реквизит имеет дополнительный параметр -- период изменения. При сохранении даты всех значений округляются до границ таких периодов. К примеру, если нет необходимости в изменении реквизита внутри месяца (реквизиты, связанные с фин. отчетностью и пр.), периодом изменения можно сделать месяц, в этом случае, при записи значения на середину месяца, оно автоматически будет записано на начало месяца. По умолчанию, период изменения равен одному дню, но в Студии при создании реквизитов можно выбрать широкий диапазон периодов изменения (в т.ч., выбрать период без ограничений).
Строчные части объектов базы данных
Строчные части документов или элементов справочников представляют собой особые таблицы, содержащие произвольный набор реквизитов и привязанные к определенному элементу или документу. Обычно в строчных частях хранится информация по элементу или документу, размер которой неопределен и может быть достаточно большим, однако, информация не является универсальной по природе, чтобы создавать для нее отдельный справочник. К примеру, для элемента справочника номенклатура можно создать строчную часть, которая будет содержать штрихкоды этой номенклатурной позиции, что также можно сделать с помощью подчиненного справочника, использование строчных частей, однако, удобнее в при обращении в программе, удобнее при визуальном редактировании. Кроме того, при редактировании таблицы строчной части, изменения сохраняются для всей таблицы, а не для каждой строки, что уменьшает загрузку на базу данных и ускоряет работу в случае, когда большое количество данных часто требует изменения (к примеру, для документа реализация строчная часть, содержащая номенклатуру, количество и цены, обычно подвергается частым изменениям в ценах для всех строк, поэтому, ее сохранение, при сохранении оригинального документа, имеет преимущество в уменьшении загрузки базы данных, перед сохранением каждой строки в отдельности). В отличие от элементов справочников, однако, строка строчной части не имеет доступного внутреннего кода базы данных, поэтому на нее невозможно будет сослаться в реквизите другого элемента или документа, это ограничение определяет, каким образом разработчик будет создавать структуру данных для данных нужного вида, с использованием строчных частей или справочников. Количество строчных частей для определенного объекта (вида документов или справочников) может быть любым. Количество строк в строчной части объекта также не имеет существенного ограничения, однако, большое количество строк будет сохраняться достаточно долго, что может иметь нежелательный обратный эффект увеличения загрузки на базу данных.
Строчные части в отличие от элементов справочников имеют еще одну важную черту, - для них твердо задан порядок следования. При сохранении строчной части, сервер следит за нумерацией строк с тем, чтобы последовательно идущие строки, были пронумерованы согласно их положению друг относительно друга. Для справочников порядок следования, если он необходим, потребуется предусматривать программно с помощью дополнительного реквизита.
Общие функции, связанные с сервером и базой данных
В данном разделе собраны функции, напрямую или косвенно связанные с сервером базы данных. Если клиент работает в локальном режиме, без подключения к серверу базы данных, многие функции этой группы не будут иметь значения. Раздел также продублирован в функциях общего назначения.
Идентификатор | Статус | Тип | Визуальная | Параметры | Описание |
---|---|---|---|---|---|
DBCodeLength | Реализована | Функция | DBCodeLength():<Длина строки внутреннего кода объекта БД (INT)> | Функция возвращает число 20, являющееся длиной строки внутреннего кода объекта базы данных. | |
DBTypeStr | Реализована | Функция | DBTypeStr(<Аргумент>):<Тип объекта базы данных (STRING)> | Функция возвращает тип объекта базы данных в виде строки. Пример возвращаемых значений: DOC , REF , ENUM и т.п. В случае, если аргумент не является объектом базы данных, будет возвращена пустая строка.
| |
DBObjectName | Реализована | Функция | DBObjectName(<Аргумент>):<Вид объекта базы данных (STRING)> | Функция возвращает вид объекта базы данных в виде строки. Пример для элемента справочника REF.Справочник1 будет возвращена строка Справочник1 . Результат функции соответствует конструкции <Переменная>.DBName() . В случае, если аргумент не является объектом базы данных или вид объекта не выбран, будет возвращена пустая строка.
| |
IsDBObject | Реализована | Функция | IsDBObject(<Аргумент>):<Является ли аргумент объектом БД (INT)> | Функция возвращает 1, если аргумент является объектом базы данных, иначе будет возвращен 0. | |
MassLockWithWait | Реализована | Функция | MassLockWithWait(<Список с объектами для блокировки (LIST)>,<Режим пропуска (INT)>=0,<Разблокировка при ошибках (INT)>=1,<Период ожидания млс. (INT)>=0,<Объект ошибки>,<Заблокировано пользователем (STRING)>,<Заблокировано на машине (STRING)>,<Время блокировки (DATE)>):<0 или 1 (INT)> | Функция позволяет установить блокировку на множестве объектов базы данных (или/и семафорах), блокировка происходит по указанным правилам (см. полное описание) | |
MassUnlock | Реализована | Функция | MassUnlock(<Список с объектами для разблокировки (LIST)>,<Объект ошибки>,<Заблокировано пользователем (STRING)>,<Заблокировано на машине (STRING)>,<Время блокировки (DATE)>):<0 или 1 (INT)> | Функция позволяет снять блокировку со множества объектов базы данных (или/и семафоров) по указанным правилам (см. полное описание) | |
DBLockStringMutex | Реализована | Функция | DBLockStringMutex(<Имя семафора (STRING)>,<Заблокировано пользователем (STRING)>,<Заблокировано на машине (STRING)>,<Время блокировки (DATE)>):<Результат (INT)> | Функция осуществляет блокировку именованного серверного семафора, либо возвращает данные пользователя, который его заблокировал. | |
DBIsStringMutexLocked | Реализована | Функция | DBIsStringMutexLocked(<Имя семафора (STRING)>,<Заблокировано пользователем (STRING)>,<Заблокировано на машине (STRING)>,<Время блокировки (DATE)>):<Результат (INT)> | Функция проверяет, заблокирован ли именованный серверный семафор, и возвращает данные пользователя, который его заблокировал при необходимости. | |
DBUnlockStringMutex | Реализована | Функция | DBUnlockStringMutex(<Имя семафора (STRING)>,<Заблокировано пользователем (STRING)>,<Заблокировано на машине (STRING)>,<Время блокировки (DATE)>):<Результат (INT)> | Функция осуществляет разблокировку именованного серверного семафора, либо возвращает данные пользователя, который его заблокировал. | |
StoreValue | Реализована | Функция | StoreValue(<Имя переменной (STRING)>,<Значение переменной>) | Функция сохраняет на сервере для текущего пользователя произвольное значение под выбранным именем. Функция работает только если клиент имеет подключение к серверу. | |
RestoreValue | Реализована | Функция | RestoreValue(<Имя переменной (STRING)>):<Значение переменной> | Функция получает, сохраненное ранее на сервере для текущего пользователя произвольное значение с выбранным именем. Функция работает только если клиент имеет подключение к серверу. Если значение с указанным именем не было сохранено, будет возвращено пустое значение. | |
StoreGlobalTempString | Реализована | Функция | StoreGlobalTempString(<Имя переменной (STRING)>,<Значение переменной (STRING)>) | Функция изменяет значение временной именной переменной на сервере, которая будет доступна другим пользователям, однако, будет потеряна при перезагрузке сервера. | |
RestoreGlobalTempString | Реализована | Функция | RestoreGlobalTempString(<Имя переменной (STRING)>):<Значение переменной (STRING)> | Функция получает значение временной именной переменной на сервере. Подобные переменные доступны другим пользователям, однако, теряются при перезагрузке сервера. | |
BroadcastDBUpdate | Реализована | Функция | BroadcastDBUpdate(<Тип базы данных (STRING)>,<Для всех пользователей (INT)>=0):<Сообщение успешно отправлено (INT)> | Функция рассылает запросы на обновление форм, содержащих таблицы базы данных указанного типа в текущей системе или глобально по всем клиентам сервера. В последнем случае, нужно быть осторожным, чтобы не перегружать сервер внезапным большим количеством запросов, даже с учетом того, что серверная часть использует особую систему замедления отправки запросов клиентам. | |
DBObjectFromDBCode | Реализована | Функция | DBObjectFromDBCode(<Внутренний код базы данных (STRING)>):<Объект базы данных (DB)> | Функция создает объект базы данных по его внутреннему коду. Нужно понимать, что внутренний код является уникальным в пределах текущей базы данных, при перенесении информации в другую базу данных, внутренние коды объектов будут совсем другими. | |
MassLoadObjects | Реализована | Функция | MassLoadObjects(<Объект для загрузки>,<Аргумент 1>,<Аргумент 2>,<Также загружать периодические реквизиты (INT)>=0,<Производить загрузку заголовков (INT)>=0,<Доп. реквизиты при загрузке заголовков (STRING)>=""):<Количество объектов, которые были загружены (INT)> | Функция производит загрузку большого количества объектов из списка, таблицы или являющихся реквизитами объекта БД, одновременно, что быстрее, чем загрузка этих объектов один за другим. Дополнительные параметры позволяют настроить загрузку, в т.ч. ограничить ее загрузкой только заголовков. | |
LockDBPath | Планируется | Функция | LockDBPath(<Путь или объект для блокировки (STRING,DB)>,<Заблокировано пользователем (STRING)>,<Заблокировано на машине (STRING)>,<Время блокировки (DATE)>):<0 или 1 (INT)> | Функция производит попытку блокировки всей таблицы указанных объектов (к примеру, всего справочника с указанным видом). | |
UnlockDBPath | Планируется | Функция | UnlockDBPath(<Путь или объект для разблокировки (STRING,DB)>,<Описание ошибки (STRING)>):<0 или 1 (INT)> | Функция производит разблокировки всей таблицы указанных объектов (к примеру, всего справочника с указанным видом), заблокированных ранее функцией LockDBPath | |
GetServerLocksInformation | Реализована | Функция | GetServerLocksInformation(<Перекрестная проверка (INT)>=0):<Таблица блокировок сервера (TAB)> | Функция получает полный список блокированных в данный момент объектов на сервере (включая именованные семафоры). | |
GetServerStoragesInformation | Реализована | Функция | GetServerStoragesInformation(<Имена накопителей через запятую (STRING)>=""):<Информация по накопителям (TAB)> | Функция получает информацию по всем накопителям проекта с сервера в виде таблицы. В ней присутствует информация по крайним документам, дате остатков и пр. | |
GetServerUsedSpaceInformation | Реализована | Функция | GetServerUsedSpaceInformation():<Информация по объему таблиц БД (TAB)> | Функция получает информацию по затраченному месту в базе данных по всем объектам проекта и системным таблицам с сервера в виде таблицы. В таблице также присутствует информация строчным частям и таблицам периодических значений. | |
CheckDBConsistency | Планируется | Функция | CheckDBConsistency(<Путь или объект (STRING,DB)>="",<Режим (INT)>=0):<Информация по проблемам БД (TAB)> | Функция осуществляет проверку корректности информации на сервере для всех таблиц или таблиц с заданным путем. Информация возвращается в виде таблицы. | |
BeginTransaction | Реализована | Функция | BeginTransaction():<Уровень вложения транзакции (INT)> | Функция инициирует начало транзактного изменения объектов БД. По умолчанию транзакция на сервере не включена и возникает периодически при записи объектов или обработке документов. Каждый поток имеет свой уровень вложения транзакции. Функция опасна и при некорректном использовании может привести к порче данных. См. полное описание. | |
CommitTransaction | Реализована | Функция | CommitTransaction():<Уровень вложения транзакции (INT)> | Функция уменьшает текущий уровень транзакции на единицу и, если он равен нулю, фиксирует изменения в базе данных. См. также BeginTransaction. | |
RollbackTransaction | Реализована | Функция | RollbackTransaction() | Функция отменяет все изменения, произведенные в текущей транзакции и уменьшает уровень транзакции до нуля. См. также BeginTransaction. | |
IsTransactionActive | Реализована | Функция | IsTransactionActive():<0 или 1 (INT)> | Функция возвращает 1 в случае, если в данном потоке уровень транзакции больше нуля (транзакция активна). | |
CollectObjectsLinks | Реализована | Функция | CollectObjectsLinks(<Список объектов (LIST)>):<Таблица ссылок данных объектов (TAB)> | Функция возвращает полную таблицу ссылок всех объектов БД из заданного списка. К примеру, если объект содержится в движениях накопителя или выбран в реквизите другого объекта (в т.ч. периодическом), в таблицу добавится запись о такой ссылке. Функция может использоваться перед физическим удалением объектов из БД, чтобы убедиться, что никакие другие таблицы БД не имеют на них ссылок. Функция может сильно загрузить сервер базы данных. | |
LockStorage | Реализована | Функция | LockStorage(<Наименование накопителя (STRING)>) | Функция производит блокировку указанного накопителя для всех пользователей сервера. Если накопитель был заблокирован другим пользователем, функция вызовет исключение. Функция вызывается автоматически при обработке документов с включенным режимом автоматической транзакции. Время между блокировкой и разблокировкой необходимо минимизировать, чтобы улучшить производительность базы данных. При ошибке, функция не предлагает имени пользователя, заблокировавшего накопитель, если такая информация необходима, разработчик может использовать функцию LockDBPath вместо текущей. Обычно функция используется вне модуля обработки документа. В отличие от функции UnlockStorage, функция может использоваться как внутри транзакции, так и вне оной. | |
UnlockStorage | Реализована | Функция | UnlockStorage(<Наименование накопителя (STRING)>) | Функция производит разблокировку указанного накопителя, при его блокировке функцией LockStorage. Функция может использоваться только вне режима транзакции, так как при окончании транзакции, все заблокированные накопители автоматически будут разблокированы системой. | |
InitiateBackupCreation | Реализована | Функция | InitiateBackupCreation(<Идентификатор протокола резервного копирования (STRING)>,<Ожидать завершения процесса (INT)>=0):<Внутренний код процесса резервного копирования (INT)> | Функция инициирует (и ожидает завершения, если необходимо) процесс резервного копирования базы данных и сопутствующих файлов проекта по протоколу, заданному в файлах инициализации сервера. Идентификатор протокола задается из установок в файле инициализации сервера. Если ожидание окончания процесса не задано, функция возвращается сразу же после инициации процесса резервного копирования, иначе только после окончания процесса или возникновения ошибки. Для получения информации по асинхронному процессу, а также для получения описания ошибки, остановившей процесс, используется функция QueryBackupProgress. | |
QueryBackupProgress | Реализована | Функция | QueryBackupProgress(<Код процесса резервного копирования (INT)>,<Текущее сообщение процесса копирования или сообщение об ошибке (STRING)>,<Дата и время начала последнего процесса (DATE)>):<Код состояния процесса резервного копирования (INT)> | Функция используется для получения информации об окончании или состоянии процесса резервного копирования, инициированого функцией InitiateBackupCreation. | |
QueryScheduledBackupFailure | Реализована | Функция | QueryScheduledBackupFailure(<Идентификатор протокола последней ошибки резервного копирования (STRING)>,<Сообщение об ошибке, произошедшей во время резервного копирования (STRING)>,<Дата и время начала последнего процесса (DATE)>):<Ошибка происходила (1), ошибки не было (0) (INT)> | Функция возвращает информацию по последней ошибке при резервном копировании, выполнявшемся по расписанию. Если ошибка произошла при инициации копирования функцией InitiateBackupCreation, она не будет возвращена этой функцией. Функция может выполняться при запуске клиента с административными правами, чтобы предупредить администратора о том, что какой-либо из процессов резервного копирования закончился с ошибкой. Чтобы очистить информацию об ошибке, необходимо удалить сохраненный файл ошибки в каталоге проекта на сервере. | |
SysRebuildIndexes | Реализована | Функция | SysRebuildIndexes(<Наименование объекта, для которого необходимо выполнить процедуру перестроения индексов (STRING)>) | Функция выполняет процедуру перестроения индексов для указанного объекта базы данных или для всех объектов базы данных. Данная процедура может занять продолжительное время. Необходимость в такой процедуре может появляться при обновлении сервера базы данных или порче данных в базе данных и т.д. Для некоторых типов СУБД нет возможности выполнить такую процедуру с помощью сторонних утилит, к примеру, для SQLite3 использование особых типов сравнения для текстовых данных, делает невозможным использование сторонних утилит, альтернативой перестроения индексов может служить выгрузка дампа базы данных и создание с помощью него новой базы данных. | |
SysExecServer | Реализована | Функция | SysExecServer(<Командная строка исполнения (STRING)>,<Не возвращаться до завершения (INT)>=0):<Код, возвращенный приложением (INT)> | Функция производит запуск приложения с параметрами в командной строке на стороне сервера, разбор командной строки не производится. Пользователь должен обладать административными правами для использования этой функции. Также нужно понимать, что запуск с флагом ожидания завершения (второй аргумент) приведет к "зависшей" сессии на сервере, если приложение не будет завершено. Этой функцией следует пользоваться в исключительных обстоятельствах и только когда поведение запускаемого приложения хорошо известно заранее. |
Функции создания объекта базы данных и вспомогательных интерфейсов
Функции и интерфейсы, данные ниже, используются для создания объектов разного типа. Универсальный способ создания объектов, является использование функции DB, однако, зачастую удобнее (и быстрее) создавать объекты с помощью интерфейсов, типа Ref или Doc. После создания, объект может быть позиционирован и заполнен, может быть произведена выборка по объектам, либо группа объектов загружена в список с помощью запроса. Также можно создать новый (отсутствовавший ранее в базе данных) объект, либо изменить загруженный текущий и сохранить изменения в базу данных.
Идентификатор | Статус | Тип | Визуальная | Параметры | Описание |
---|---|---|---|---|---|
DB | Реализована | Функция | DB(<Идентификация создаваемого объекта (STRING)>,<Стандартные фильтры поиска>):<Новый объект БД (DB)> | Создать объект базы данных с заданным типом и видом (наименованием). | |
Ref | Реализована | Атрибут | Ref.<Наименование справочника>:<Новый объект БД (DB)> | Создать объект базы данных справочника с заданным наименованием. | |
Doc | Реализована | Атрибут | Doc.<Наименование документа>:<Новый объект БД (DB)> | Создать объект базы данных документа с заданным наименованием. | |
Enum, Enumeration | Реализована | Функция | Enum:<Интерфейс перечисления (INTERFACE)> | Получает интерфейс перечисления, который позволяет выполнять такие функции, как Get, GetCaption и GetByIndex, и получить доступ к таким атрибутам, как <Наименование перечисления> и пр. | |
DBVar | Реализована | Функция | DBVar:<Интерфейс переменной БД (INTERFACE)> | Получает интерфейс переменной БД, который позволяет выполнять такие функции, как GetValue, SetValue и пр., и получить доступ к таким атрибутам, как <Наименование переменной БД>, Restricted и пр. | |
Stor, Storage | Реализована | Атрибут | Stor.<Наименование накопителя>:<Новый объект БД (DB)> | Создать объект базы данных накопителя с заданным наименованием. | |
Journal, Jour | Реализована | Атрибут | Journal.<Наименование журнала>:<Новый объект БД (DB)> | Создать объект базы данных журнала с заданным наименованием. | |
Struct, Meta | Реализована | Атрибут | DB.Struct:<Объект структуры, позиционированный на текущий объект базы данных (DBSTRUCT)> | Атрибут работает совместно с объектом базы данных и получает новый объект структуры базы данных, позиционированный на типе данных и виде данных текущего объекта. Принимаются как заполненные объекты БД, так и не позиционированные, с невыбранным видом или типом. Атрибут также может быть вызван непосредственно из интерфейсов, типа Ref, Doc и пр. |
Общие функции объектов базы данных
Данная группа функций и атрибутов описывает возможности работы с объектами базы данных, доступные всем или нескольким объектам, функции, работающие только со специфическим видом объектов, описаны в соответствующих параграфах ниже по статье. Функции проверяют или изменяют внутренние свойства и реквизиты объектов, производит выборку, позиционирование, загрузку в список и пр.; позволяют сохранять, удалять, блокировать и разблокировать объекты; проверяют вхождение объектов в список со папками, сохраняют и восстанавливают содержимое объектов; выполняют другие действия.
Идентификатор | Статус | Тип | Визуальная | Параметры | Описание |
---|---|---|---|---|---|
<Наименование реквизита> | Реализована | Атрибут | DB.<Наименование реквизита>:<Значение реквизита> | Атрибут получает или изменяет значение реквизита по наименованию. | |
DBType | Реализована | Функция | DB.DBType():<Тип объекта БД (STRING)> | Функция возвращает наименование выбранного типа текущего объекта, либо пустую строку, если тип не выбран. | |
DBName | Реализована | Функция | DB.DBName():<Вид объекта БД (STRING)> | Функция возвращает наименование выбранного вида объекта определенного типа, либо пустую строку, если вид не выбран. | |
IsInteractive | Планируется | Функция | DB.IsInteractive():<Принадлежность объекта к элементам формы (INT)> | Функция позволяет определить, связан ли данный объект с элементом какой-либо формы или является ли он редактируемым или открытым для просмотра объектов какого-либо потока. | |
BelongsToDB | Реализована | Функция | DB.BelongsToDB(<Внешняя база данных (EXDB)>):<Принадлежность объекта указанной базе данных (INT)> | Функция позволяет определить, принадлежит ли текущий объект указанной базе данных. Если аргумент не задан, проверяется принадлежность основной базе данных. | |
GetForm | Планируется | Функция | DB.GetForm():<Получение элемента формы, которому принадлежит объект (FORM)> | Для объектов, связанных с элементом какой-либо формы или открытых для просмотра или редактирования в каком-либо потоке, функция возвращает этот элемент на форме или саму форму. | |
UseDate | Реализована | Функция | DB.UseDate(<Дата периодических реквизитов объекта (DATE)>,<Обновить периодические реквизиты (в том числе на форме) (INT)>):<Предыдущая дата периодических реквизитов объекта (DATE)> | Функция возвращает или меняет внутреннюю дату отображения и загрузки периодических реквизитов (дату окончания периода периодических реквизитов объекта), при этом, после изменения, функция автоматически перечитывает значения периодических реквизитов объекта на новую дату, если второй аргумент равен 1, либо по умолчанию, если для объекта выбран режим загрузки периодических реквизитов или, если объект связан с элементом формы. | |
UsePeriod | Реализована | Функция | DB.UsePeriod(<Дата начала периода периодических реквизитов объекта (DATE)>,<Дата окончания периода периодических реквизитов объекта (DATE)>,<Обновить периодические реквизиты (в том числе на форме) (INT)>) | Функция меняет начальную и конечную даты периода периодических реквизитов объекта, которые используются при сохранении изменений в базе данных совместно с периодическими реквизитами. Конечная дата отвечает также за дату отображения и загрузки периодических реквизитов объекта. Функция автоматически перечитывает значения периодических реквизитов объекта на конечную дату, если второй аргумент равен 1, либо по умолчанию, если для объекта выбран режим загрузки периодических реквизитов или, если объект связан с элементом формы. | |
BegPeriodDate | Реализована | Функция | DB.BegPeriodDate():<Дата начала периода периодических реквизитов объекта (DATE)> | Функция получает текущую начальную дату периодических реквизитов объекта. Данная дата используется только при сохранении изменений в базе данных совместно с периодическими реквизитами. В отличие от функции UsePeriod, данная функция не производит изменения дат. | |
EndPeriodDate | Реализована | Функция | DB.EndPeriodDate():<Дата окончания периода периодических реквизитов объекта (DATE)> | Функция получает текущую конечную дату периодических реквизитов объекта. Данная дата используется при сохранении изменений в базе данных совместно с периодическими реквизитами, также данная дата используется для отображения и загрузки периодических реквизитов объекта. В отличие от функций UseDate и UsePeriod, данная функция не производит изменения дат. | |
UseBorders | Реализована | Функция | DB.UseBorders(<Начальный элемент-граница (DB)>,<Конечный элемент-граница (DB)>) | Функция устанавливает начальный и конечный объект при выборках функциями, типа Find, Load, Select. В случаях, если выборка происходит частями, после всех условий сортировки без твердой уверенности, что сортировка уникально определяет каждый из объектов, данный диапазон ограничения используется совместно с условиями сортировки. Опустить можно любой из аргументов или оба аргумента, в последнем случае, граничное условие в выборке применяться не будет. | |
UseOrder | Реализована | Функция | DB.UseOrder(<Список реквизитов сортировки с суффиксами (STRING)>):<Текущий список реквизитов сортировки с суффиксами (STRING)> | Функция получает или устанавливает порядок сортировки при выборках функциями, типа Find, Load, Select. В списке реквизитов наряду к обычными реквизитами, можно задавать особые реквизиты объектов. Для новых объектов порядок устанавливается пустым, что эквивалентно порядку, соответствующему внутреннему коду объектов. | |
UseOption | Реализована | Функция | DB.UseOption(<Наименование установки (STRING)>,<Значение установки>):<Текущее значение установки> | Функция получает или устанавливает значение дополнительных режимов загрузки текущего объекта базы данных. Доступны такие режимы, как загрузка периодических реквизитов и загрузка строчных частей, ограничения количества запрашиваемых за один раз элементов при выборке. | |
LoadPeriodicalPropertiesHeader | Реализована | Функция | DB.LoadPeriodicalPropertiesHeader(<Дата периодических реквизитов объекта (DATE)>) | Функция производит обновление или загрузку периодических реквизитов указанного объекта на указанную дату, либо на дату окончания периода периодических реквизитов объекта, если первый аргумент не задан. Функция не меняет внутренние даты объекта. Функция не производит никаких изменений, если текущий объект является новым несохраненным объектом. | |
LoadPeriodicalPropertiesLineParts | Реализована | Функция | DB.LoadPeriodicalPropertiesLineParts(<Дата периодических реквизитов объекта (DATE)>,<Наименование строчной части (STRING)>) | Функция производит обновление или загрузку периодических реквизитов указанной строчной части (или всех строчных частей) объекта на указанную дату, либо на дату окончания периода периодических реквизитов объекта, если первый аргумент не задан. Функция не меняет внутренние даты объекта. Функция не производит никаких изменений, если текущий объект является новым несохраненным объектом. | |
Selected | Реализована | Функция | DB.Selected():<Выбран ли объект (INT)> | Функция проверяет, выбран (позиционирован) ли данный объект. Функция возвращает -1, если объект является новым несохраненным объектом, 0, если объект не выбран (не позиционирован), 1, если объект выбран, и не было изменений в его реквизитах, 2, если объект выбран и проводились какие-либо изменения в его реквизитах. | |
Status | Реализована | Функция | DB.Status():<Статус объекта (INT)> | Функция получает статус удаления, обработки объекта. Функция возвращает -1, если объект является новым несохраненным объектом, 0, если объект не удалялся и не обрабатывался (нормальный объект), 1, если объект был удален, 2 и более, если документ обработан. | |
Loaded | Реализована | Функция | DB.Loaded():<Загружен ли объект (INT)> | Функция получает статус загруженности объекта. Функция возвращает 0, если объект не выбран (позиционирован) или выбран, но не загружен, 1, если объект был позиционирован и загружен, либо если объект является новым несохраненным объектом. | |
Loadable | Реализована | Функция | DB.Loadable():<Возможно ли загрузить объект (INT)> | Функция проверяет, возможна ли загрузка объекта (т.е., указывает ли текущий выбранный объект на определенный объект в базе данных). Если объект был сохранен во внешнем файле, после чего был физически удален из базы данных (DeletePhysically), при загрузке из файла получится объект, который система будет считать выбранным, однако, он не будет указывать на реальный объект БД. | |
DBCode | Реализована | Функция | DB.DBCode():<Внутренний код БД объекта (STRING)> | Функция получает внутренний код выбранного объекта базы данных. Использование этого кода не желательно, так как он привязан к конкретной базы данных, при смене базы данных, переносе базы и пр., этот код будет другим. | |
Find | Реализована | Функция | DB.Find(<Стандарные фильтры>...):<Объект был найден (INT)> | Функция производит поиск и позиционирование на объект текущего вида. Объект идентифицируется с помощью фильтров. Если объект найден, он будет загружен, если не найден, текущий объект не будет изменен, если в базе данных найдено более одного объекта, будет загружен первый из найденных. | |
FindEx | Реализована | Функция | DB.FindEx(<Режим загрузки (INT)>=0,<Доп. реквизиты при загрузке заголовков (STRING)>="",<Стандарные фильтры>...):<Объект был найден (INT)> | Функция производит поиск и позиционирование на объект текущего вида. Объект идентифицируется с помощью фильтров. Если объект найден, произойдет позиционирование текущего объекта, и полнота загрузки объекта будет определена режимом загрузки, если не найден, текущий объект не будет изменен, если в базе данных найдено более одного объекта, будет позиционирован первый из найденных. Функцию удобно использовать совместно со сборщиком объектов. | |
Load | Реализована | Функция | DB.Load(<Максимальное количество объектов (INT)>=0,<Стандарные фильтры>...):<Найденные объекты (LIST)> | Функция производит поиск и загрузку указанного количества объектов из базы данных в список значений. Объекты идентифицируются с помощью фильтров. Каждый объект, попавший в список, будет загружен. | |
LoadEx | Реализована | Функция | DB.LoadEx(<Максимальное количество объектов (INT)>=0,<Режим загрузки (INT)>=0,<Доп. реквизиты при загрузке заголовков (STRING)>="",<Стандарные фильтры>...):<Найденные объекты (LIST)> | Функция производит поиск и загрузку указанного количества объектов из базы данных в список значений. Объекты идентифицируется с помощью фильтров. Полнота загрузки объектов, попавших в список, будет определяться режимом загрузки. Функцию удобно использовать совместно с функцией MassLoadObjects. | |
LoadFromLinePart | Планируется | Функция | DB.LoadFromLinePart(<Наименование строчной части (STRING)>,<Список загружаемых столбцов (STRING)>,<Стандарные фильтры>...):<Результат загрузки (TAB)> | Функция производит запрос и выборку по строчной части объектов с видом текущего объекта. Записи идентифицируются с помощью фильтров, отобранные записи строчных частей могут принадлежать разным объектам. Результат выборки помещается в таблицу значений. | |
Compute | Реализована | Функция | DB.Compute(<Список реквизитов группировки (STRING)>,<Список реквизитов агрегации с типами операций (STRING)>,<Стандарные фильтры>...):<Результат вычисления (TAB)> | Функция производит выборку с агрегацией по таблице объектов текущего вида с помощью указанных фильтров. Результат выборки возвращается в виде таблицы значений со столбцами группировки и агрегации. | |
ElementsNumber | Реализована | Функция | DB.ElementsNumber(<Стандарные фильтры>...):<Количество элементов (INT)> | Функция подсчитывает количество объектов, входящих в выборку с указанными фильтрами. | |
Reload | Частичная реализация | Функция | DB.Reload(<Загружать периодические реквизиты на дату (DATE)>,<Производить загрузку заголовков (INT)>=0,<Доп. реквизиты при загрузке заголовков (STRING)>="") | Функция производит полную загрузку текущего выбранного объекта из базы данных. Все возможные изменения в объекте будут утеряны. Функцию удобно использовать совместно с функцией Lock перед записью изменений в объекте базы данных. | |
Unload | Частичная реализация | Функция | DB.Unload(<Оставить заголовок объекта (INT)>=0) | Функция очищает таблицу загруженных реквизитов и строчных частей для выбранных и загруженных объектов. Если объект является новым несохраненным объектом базы данных или изменен, функция не производит его очистку. Функция обычно используется для уменьшения размера используемой памяти в при работе с запросами. | |
Copy | Реализована | Функция | DB.Copy():<Незагруженная копия объекта (DB)> | Функция создает новый объект базы данных, аналогичный данному (если данный объект был выбран, новый объект также будет выбранным), однако, загрузка объекта не производится. Функцию удобно использовать совместно со сборщиком объектов при работе с запросом. | |
GetValue | Реализована | Функция | DB.GetValue(<Указание на реквизит (STRING)>,<Дата периодического реквизита (DATE)>):<Значение реквизита> | Функция получает значение реквизита текущего объекта по его имени. Реквизит может находиться как в заголовке объекта, так и в его строчной части. Значения периодического реквизита можно получить на указанную дату. | |
SetValue | Реализована | Функция | DB.SetValue(<Указание на реквизит (STRING)>,<Значение реквизита>,<Дата начала записи периодического реквизита (DATE)>,<Дата окончания записи периодического реквизита (DATE)>) | Функция устанавливает значение реквизита объекта по его имени. Реквизит может находиться как в заголовке объекта, так и в его строчной части. Значения периодического реквизита можно установить на указанную дату. При установке значения периодического реквизита объект не может быть новым несохраненным объектом БД, при изменении таких реквизитов, значение сохраняется в базе данных в момент вызова функции. | |
MassSetValue | Реализована | Функция | DB.MassSetValue(<Указание на реквизит и строчную часть, если необходимо (STRING)>,<Значение реквизита>,<Дата начала записи периодического реквизита (DATE)>,<Дата окончания записи периодического реквизита (DATE)>,<Стандарные фильтры>...) | Функция устанавливает значения реквизитов множества объектов, заданных в выборке с помощью стандратных фильтров. Реквизит может находиться как в заголовке объекта, так и в его строчной части. Установка значений периодических реквизитов пока не поддерживается (но планируется в будущем). Изменение реквизитов, имеющих флаги записи в таблице подчиненности документов, не поддерживается. Функция не проверяет наличие блокировки на объектах до выполнения изменения! Внимание: в реальной работе необходимо либо заблокировать изменяемые объекты до вызова функции, либо использовать функцию LockDBPath, иначе изменения в объектах, выполненные таким образом, могут быть утеряны, если какой-либо объект открыт в данный момент на редактирование пользователем (или программно) и будет записан. Дополнительные ограничения см. в статье по этой функции. | |
Props | Реализована | Функция | DB.Props:<Список с реквизитами текущего объекта (LIST)> | Функция получает список, содержащий все текущие загруженные реквизиты объекта. Изменения значений в списке автоматически транслируются на текущий объект. | |
LineParts | Реализована | Функция | DB.LineParts(<Наименование строчной части (STRING)>):<Список строчных частей или таблица строчной части (LIST,TAB)> | Функция получает таблицу значений с загруженной указанной строчной частью объекта, либо список, содержащий все таблицы значений со строчными частями объекта. Изменения значений в таблицах автоматически транслируются на текущий объект. | |
Lock | Реализована | Функция | DB.Lock(<Заблокировано пользователем (STRING)>,<Заблокировано на машине (STRING)>,<Время блокировки (DATE)>):<Успешная блокировка (INT)> | Функция производит попытку блокировки текущего выбранного объекта, объект не может быть новым несохраненным объектом БД. Если попытка неудачна, функция возвратит, если необходимо, имя пользователя, заблокировавшего объект, время его блокировки и машину, на которой он был заблокирован. Функцию удобно использовать перед изменением и сохранением объекта. | |
Unlock | Реализована | Функция | DB.Unlock(<Описание ошибки (STRING)>):<Успешная разблокировка (INT)> | Функция производит разблокировку заблокированного ранее объекта. См. также Lock. | |
IsLocked | Реализована | Функция | DB.IsLocked(<Заблокировано пользователем (STRING)>,<Заблокировано на машине (STRING)>,<Время блокировки (DATE)>):<Тип блокировки (INT)> | Функция проверяет, заблокирован ли уже другим пользователем текущий объект и, если заблокирован, то кем. Функция возвращает 0, если объект не заблокирован, 1, если текущий объект заблокирован ранее с помощью функции Lock, либо является визуальным объектом, открытым для редактирования, 2, если объект был заблокирован другим пользователем или потоком. | |
GetTrigger | Реализована | Функция | DB.GetTrigger():<Значение триггера (INT)> | Функция получает значение триггера изменения текущего объекта, если таковой был задан в Студии. Триггер может иметь 4 состояния. | |
SetTrigger | Реализована | Функция | DB.SetTrigger(<Значение триггера (INT)>) | Функция устанавливает значение триггера изменения текущего объекта, если таковой был задан в Студии. Триггер может иметь 4 состояния. | |
Select | Реализована | Функция | DB.Select(<Стандарные фильтры>...):<В выборке есть по крайней мере один элемент (INT)> | Функция инициирует выборку по таблице текущего объекта с учетом указанных фильтров, и возвращает 1, если в выборке есть объекты. Для получения следующего объекта выборки необходимо использовать функцию Next, новый объект помещается в текущий, все изменения в текущем объекте будут утеряны. Полученный объект будет загруженным. | |
SelectEx | Реализована | Функция | DB.SelectEx(<Режим загрузки (INT)>=0,<Доп. реквизиты при загрузке заголовков (STRING)>="",<Стандарные фильтры>...):<В выборке есть по крайней мере один элемент (INT)> | Функция инициирует выборку по таблице текущего объекта с учетом указанных фильтров, и возвращает 1, если в выборке есть объекты. Для получения следующего объекта выборки необходимо использовать функцию Next, новый объект помещается в текущий, все изменения в текущем объекте будут утеряны. Полнота загрузки полученного объекта, будет определяться режимом загрузки. Функцию удобно использовать для ускорения выборки, когда не все объекты требуют загрузки, либо совместно со сборщиком объектов. | |
Next | Реализована | Функция | DB.Next():<Следующий элемент найден и загружен (INT)> | Функция получает следующий (или первый после вызова Select) объект в выборке. См. также Select и SelectEx. | |
Prev | Планируется | Функция | DB.Prev():<Предыдущий элемент найден и загружен (INT)> | Функция получает предыдущий объект в выборке. См. также Select и SelectEx. | |
SelectClose | Реализована | Функция | DB.SelectClose() | Функция закрывает выборку объектов, освобождая использованные для выборки ресурсы. Функция вызывается автоматически при удалении объекта или при его заполнении функциями, типа Find и пр. | |
Save | Реализована | Функция | DB.Save(<Режим сохранения периодических реквизитов (INT)>,<Заблокировать объект после сохранения (INT)>=0,<Элемент для изменения триггера или значение триггера (DB,INT)>) | Функция выполняет сохранение текущего измененного объекта или/и его строчных частей. Если объект был открыт для визуального редактирования, функция вызывает событие OnSave, также проверяет заполненность реквизитов объекта, если он имеет обязательные для заполнения реквизиты. Если объект был заблокирован до записи, после ее выполнения блокировка сохраняется. Если запись успешна, в реквизитах объекта автоматически заполняются нумераторы, создаваемые при записи, и внутренний код объекта БД, если он был новым несохраненным объектом, также с объекта снимается признак изменен и, если он был открыт для редактирования в визуальной форме, с последней также снимается признак были изменения. | |
DeletePhysically | Реализована | Функция | DB.DeletePhysically(<Режим удаления подчиненных элементов (INT)>,<Режим удаления папок (INT)>):<Результат (INT)> | Функция производит физическое удаление элемента справочника или документа из базы данных, удаляя также подчиненные объекты, если это необходимо. Перед физическим удалением объектов, необходимо убедиться, что эти объекты не используются в реквизитах других объектов, иначе можно получить ситуацию, когда реквизиты содержат объект, который невозможно загрузить, такая ситуация для нормальной работы системы нежелательна. Для проверки, используется ли данный объект в других реквизитах каких-либо объектов, можно использовать функцию CollectObjectsLinks. | |
MassDeletePhysically | Планируется | Функция | DB.MassDeletePhysically(<Режим удаления подчиненных элементов (INT)>,<Стандарные фильтры>...) | Функция производит физическое множества элементов справочника или документов из базы данных, удаляя также подчиненные объекты, если это необходимо. Перед физическим удалением объектов, необходимо убедиться, что эти объекты не используются в реквизитах других объектов, иначе можно получить ситуацию, когда реквизиты содержат объект, который невозможно загрузить, такая ситуация для нормальной работы системы нежелательна. Для проверки, используется ли данный объект в других реквизитах каких-либо объектов, можно использовать функцию CollectObjectsLinks. | |
Mark | Реализована | Функция | DB.Mark(<Удалить 1, отменить удаление 0 (INT)>,<Режим удаления подчиненных элементов (INT)>,<Элемент для изменения триггера или значение триггера (DB,INT)>):<Результат (INT)> | Функция производит удаление или отменяет удаления документа или элемента справочника. Если документ до удаления был обработан, функция также пытается отменить обработку документа. Также может быть инициировано удаление подчиненных объектов, если в этом есть необходимость. | |
MassMark | Реализована | Функция | DB.MassMark(<Пометка удаления или обработки (INT)>,<Стандарные фильтры>...) | Функция множественного изменения пометок (как пометок удаления, так и пометок обработки) объектов, заданных в выборке с помощью стандратных фильтров. Функция не проверяет наличие блокировки на объектах до выполнения изменения! Внимание: в реальной работе необходимо либо заблокировать изменяемые объекты до вызова функции, либо использовать функцию LockDBPath, иначе измененный таким образом флаг может быть утерян, если какой-либо объект открыт в данный момент на редактирование пользователем (или программно) и будет записан. | |
New | Реализована | Функция | DB.New(<Новая папка (INT)>=0,<Объект, для копирования реквизитов (DB)>,<Также копировать нумераторы (INT)>=0,<Объект-основание (DB)>) | Функция создает новый элемент справочника или документ, для которых можно указать основание, новый объект может быть скопирован из существующего. При наличие в реквизитах объекта нумераторов, которые заполняются при создании, функция обращается на сервер с запросом блокировки значений этих нумераторов, значения, полученные таким образом с сервера, записываются в соответствующие реквизиты нового объекта и остаются заблокированными на сервере до того, как объект будет удален или сохранен. | |
LoadPeriodicalValues | Реализована | Функция | DB.[DBVar.]LoadPeriodicalValues(<Указание на реквизит или наименование DBVar (STRING)>,<Дата начала чтения периодического реквизита (DATE)>,<Дата окончания чтения периодического реквизита (DATE)>):<Таблица значений реквизита (TAB)> | Функция загружает полную или частичную таблицу периодических значений реквизита текущего объекта и возвращает ее в таблице значений. Объект не может быть новым несохраненным объектом для получения такой таблицы. Таблицу можно изменить и записать с помощью функции SavePeriodicalValues. | |
SavePeriodicalValues | Реализована | Функция | DB.[DBVar.]SavePeriodicalValues(<Указание на реквизит или наименование DBVar (STRING)>,<Таблица значений реквизита (TAB)>,<Дата начала сохранения периодического реквизита (DATE)>,<Дата окончания сохранения периодического реквизита (DATE)>) | Функция производит сохранение полной или частичной таблицы периодических значений реквизита текущего объекта. Объект не может быть новым несохраненным объектом для выполнения этой функции. Таблицу можно прочитать с помощью функции LoadPeriodicalValues. | |
SetDefaultPrefix | Реализована | Функция | DB.SetDefaultPrefix(<Указание на объект и реквизит (STRING)>,<Новый префикс по умолчанию (STRING)>):<Текущий префикс по умолчанию (STRING)> | Функция задает префикс по умолчанию для указанного строкового реквизита-нумератора объектов заданного вида, когда создается новый объект, либо происходит запись нового несохраненного объекта (в зависимости от установок нумерации реквизита-нумератора). Новые номера будут начинаться на этот префикс и заканчиваться числовым значением с длиной, которая совпадает с длиной значения нумератора за минусом длины префикса. Префикс по умолчанию можно изменить для любого реквизита-нумератора любого из объектов с помощью функции SetPrefix. В начале работы системы все префиксы по умолчанию копируются из конфигурации проекта. | |
SetPrefix | Реализована | Функция | DB.SetPrefix(<Указание на реквизит (STRING)>,<Новый префикс реквизита (STRING)>):<Текущий префикс реквизита (STRING)> | Функция задает префикс для указанного строкового реквизита-нумератора текущего объекта, она работает как для нового несохраненного объекта, так и для не выбранного объекта, который только будет создан (New). Новые номера будут начинаться на этот префикс и заканчиваться числовым значением с длиной, которая совпадает с длиной значения нумератора за минусом длины префикса. По умолчанию для нумераторов используется префикс, который можно изменить функцией SetDefaultPrefix. | |
SetNumerator | Реализована | Функция | DB.SetNumerator(<Указание на реквизит (STRING)>,<Префикс нумератора (STRING)>) | Функция позволяет заполнить (или заново заполнить) значение указанного реквизита-нумератора текущего объекта, она работает как для нового несохраненного объекта, так и для уже существующих объектов базы данных. Обычно нумераторы заполняются автоматически при записи или создании объекта, но иногда они имеют установку, запрещающие автоматическое заполнение. В этом случае, может использоваться эта функция, либо какой-либо внутренний механизм нумерации. | |
IsCreatedFromObject | Реализована | Функция | DB.IsCreatedFromObject():<Создан на основании другого объекта (INT)> | Функция проверяет, создавался ли текущий объект на основании другого объекта. Функция работает как для объектов, созданных программно (New), так и для объектов, созданных визуально с помощью функции ввода на основании. | |
FounderObject | Реализована | Функция | DB.FounderObject():<Объект, на основании которого был создан данный (DB)> | Функция возвращает объект, на основании которого был создан текущий объект. Функция работает как для объектов, созданных программно (New), так и для объектов, созданных визуально с помощью функции ввода на основании. Основание не является скрытым реквизитом объекта базы данных, оно не сохраняется в базе данных и существует только в момент создания объекта, для того, чтобы программа, по известным ей правилам, изменила реквизиты нового объекта в соответствии с его основанием. Если объект не был создан на основании другого объекта, функция возвращает пустое значение базы данных. | |
IsCopiedFromObject | Реализована | Функция | DB.IsCopiedFromObject():<Скопирован из другого объекта (INT)> | Функция проверяет, производилось ли копирование реквизитов текущего объекта из другого объекта при создании. Функция работает как для объектов, созданных программно (New), так и для объектов, созданных визуально с помощью функции скопировать из. | |
SourceObject | Реализована | Функция | DB.SourceObject():<Объект, из которого был скопирован данный (DB)> | Функция возвращает объект, значениями реквизитов которого были заполнены реквизиты текущего объекта. Функция работает как для объектов, созданных программно (New), так и для объектов, созданных визуально с помощью функции скопировать из. Объект-копирования не является скрытым реквизитом объекта базы данных, оно не сохраняется в базе данных и существует только в момент создания объекта, для того, чтобы программа, по известным ей правилам, изменила реквизиты нового объекта в соответствии с объектом, из которого он был скопирован. Если объект не был скопирован из другого объекта, функция возвращает пустое значение базы данных. | |
IsPartOf | Реализована | Функция | DB.IsPartOf(<Список объектов с папками (LIST)>,<Режим функции (INT)>=0):<Объект принадлежит множеству объектов из списка (INT)> | Функция проверяет, входит ли данный объект в список объектов (является ли он его подмножеством). Список может содержать папки, в последнем случае, проверяется, находится ли данный объект внутри структуры подпапок указанной папки. Функция аналогична по действию функции Contains. | |
Contains | Реализована | Функция | DB.Contains(<Элемент для проверки (DB)>,<Режим функции (INT)>=0):<Проверяемый элемент входит в структуру папок текущего (INT)> | Функция проверяет, входит ли указанный элемент в папку справочника, представленную текущим объектом, либо, совпадают ли проверяемые объекты. Текущий объект может не быть папкой справочника, тогда функция проверяет, совпадают ли оба объекта. Функция аналогична по действию функции Contains, когда в список для проверки входит только текущий объект. | |
StoreObjectToBuffer | Реализована | Функция | DB.StoreObjectToBuffer():<Состояние объекта (BUFFER)> | Функция сохраняет текущий объект в памяти и возвращает его в виде буфера. Текущий объект не будет изменен. В буфере сохраняются все свойства объекта -- реквизиты, особые реквизиты, признак объект изменен, внутренние коды и пр. Функция обычно используется для объектов, открытых для визуального редактирования до начала транзакции с попыткой записи объекта. | |
RestoreObjectFromBuffer | Реализована | Функция | DB.RestoreObjectFromBuffer(<Состояние объекта (BUFFER)>) | Функция восстанавливает текущий объект из указанного буфера, созданного ранее функцией StoreObjectToBuffer. Из буфера восстанавливаются все свойства объекта -- реквизиты, особые реквизиты, признак объект изменен, внутренние коды и пр. Внимание! Если объект является новым несохраненным, среди реквизитов объекта есть нумераторы, заполняемые при создании и была произведена успешная запись объекта, после чего она была отменена откатом транзакции (RollbackTransaction), получится ситуация, когда указанные нумераторы, содержат значения, которые не закреплены в таблице со значениями временных нумераторов на сервере. Поэтому, при наличии таких реквизитов, если объект новый, после отмены транзакции, нужно обновить значения реквизитов-нумераторов с помощью функции SetNumerator. Функция обычно используется для объектов, открытых для визуального редактирования, в момент отмены транзакции, когда запись не была успешной. | |
InvokeEvent | Планируется | Функция | DB.InvokeEvent(<Наименование события метаданных (STRING)><Список переменных через запятую (STRING)>,<Значение переменной 1>...):<Результат выполнения события> | Функция вызывает напрямую события, заданные в структуре конфигурации для данного объекта БД. Это позволяет эмулировать работу таких функций, как Publish и пр. Пример вызова: Doc.InvokeEvent("OnPublish","Element,Param,Option",Doc,0,0) .
|
Функции объектов справочников
В данном разделе собраны функции, работающие только с объектами с типом справочник. Они связаны с папками и родителями справочников.
Идентификатор | Статус | Тип | Визуальная | Параметры | Описание |
---|---|---|---|---|---|
IsFolder | Реализована | Функция | DB.IsFolder():<Является ли объект папкой (INT)> | Функция проверяет, является ли данный элемент справочника папкой или обычным элементом. Объект должен быть выбранным. | |
Folder | Реализована | Функция | DB.Folder(<Новая папка объекта (DB)>,<Проверять цикличность вложенности папок (INT)>=1):<Текущая папка объекта (DB)> | Функция возвращает или изменяет папку в которую входит элемент справочника. При перемещении объекта в другую папку, рекомендуется производить проверку цикличной вложенности папок, чтобы не получилась ситуация, когда текущий объект-папка вложена в папку, которая вложена в одну из папок внутри текущей. Проверка цикличности занимает некоторое время и дополнительно загружает сервер, однако, она необходима, чтобы иметь уверенность в корректности структуры папок справочника. | |
Parent | Реализована | Функция | DB.Parent(<Новый элемент родитель объекта (DB)>):<Элемент родитель объекта (DB)> | Функция возвращает или изменяет родительский элемент данного элемента справочника. При изменении элемента-родителя, функция проверяет, возможно ли подчинение справочника текущего вида справочнику предлагаемого вида. |
Функции объектов документов
В данном разделе собраны функции, работающие только с объектами с типом документ. Функции связаны с взаимодействием документов и накопителей и системной таблицей подчинения документов.
Идентификатор | Статус | Тип | Визуальная | Параметры | Описание |
---|---|---|---|---|---|
ClearStorages | Реализована | Функция | DB.ClearStorages(<Режим (INT)>,<Наименования накопителей (STRING)>) | Функция производит удаление движений текущего документа из указанного накопителя или всех накопителей, в которых текущий документ имеет движения. Если вызов функции происходит внутри транзакции, накопители будут автоматически заблокированы. Функция обычно используется внутри модулей обработки документов. | |
LoadStorage | Реализована | Функция | DB.LoadStorage(<Наименования накопителя (STRING)>):<Содержимое накопителя текущего документа (TAB)> | Функция загружает таблицу движений указанного накопителя в разрезе текущего документа и возвращает ее в виде таблицы значений. Функция может использоваться как вне транзакции, так и внутри оной. | |
SaveStorage | Реализована | Функция | DB.SaveStorage(<Наименования накопителя (STRING)>,<Содержимое накопителя текущего документа (TAB)>,<Установить дату записей (DATE)>) | Функция сохраняет таблицу движений данного документа для указанного накопителя. При этом ранее закрепленные за данным документов записи в указанном накопителе будут автоматически удалены. Функция блокирует накопитель, если вызов происходит внутри транзакции. Если записи накопителей датируются, функция позволяет также установить для всех записей таблицы указанную дату, если это необходимо. Обычно для всех записей указывается одинаковая дата, совпадающая с датой документа, но это не обязательное требование, каждая запись может иметь свою дату. Таблицу перед редактированием можно получить с помощью функции LoadStorage или InitStorageTab. | |
InitStorageTab | Реализована | Функция | DB.InitStorageTab(<Наименования накопителя (STRING)>):<Пустая таблица накопителя (TAB)> | Функция получает пустую таблицу значений движений указанного накопителя. Таблицу можно заполнить и записать в накопитель с помощью функции SaveStorage. | |
GetUsedStoragesNames | Реализована | Функция | DB.GetUsedStoragesNames:<Список накопителей с записями о текущем документе (STRING)> | Функция получает список накопителей, в которых текущий документ имеет записи. Список отдается в виде строки с наименованиями, разделенными запятыми. Каждое наименование записывается в виде STOR.<Наименование накопителя> .
| |
Publish | Реализована | Функция | DB.Publish(<Параметр>,<Опция>) | Функция выполняет процедуру обработки документа. В процессе обработки, функция автоматически сохраняет состояние объекта, инициирует режим транзакции, если она автоматическая для данного документа, вызывает обработчик события OnPublish, сохраняет изменения в документе, если они не были сохранены, изменяет пометку документа на 2, если обработчик события ее не изменил. См. описание для более подробной информации. | |
Unpublish | Реализована | Функция | DB.Unpublish(<Параметр>,<Опция>) | Функция выполняет процедуру отмены обработки документа. В процессе обработки, функция автоматически сохраняет состояние объекта, инициирует режим транзакции, если она автоматическая для данного документа, вызывает обработчик события OnUnpublish, сохраняет изменения в документе, если они не были сохранены, изменяет пометку документа на 0, если обработчик события ее не изменил, очищает содержимое накопителей, которые не были заблокированы в обработчике события. См. описание для более подробной информации. | |
PublishedMark | Реализована | Функция | DB.PublishedMark(<Ноль для отмены обработки, больше нуля -- индекс пометки обработки (INT)>):<Текущий индекс обработки (INT)> | Функция устанавливает пометку обработки на документе, если аргумент больше нуля, или снимает пометку обработки, если аргумент равен нулю. Функция может использоваться, к примеру, при обработке документов вне события OnPublish, которое автоматически устанавливает пометку обработки, поэтому нет необходимости в вызове этой функции. Функцией нужно пользоваться с осторожностью, так как при отмене статуса обработки и не удалении движений документа в накопителях, можно получить не обработанный документ, имеющий движения. | |
LoadLinkedDocuments | Реализована | Функция | DB.LoadLinkedDocuments(<Подчиненные (1), родители (0) (INT)>=1):<Список подчиненных или родительских документов (LIST)> | Функция производит запрос к системной таблице подчинения документов и возвращает список документов, подчиненных данному, либо список документов, являющихся родителями данного, в зависимости от первого аргумента запроса. |
Функции объектов перечислений
В данном разделе собраны функции, работающие только с объектами с типом перечисление или интерфейсом перечисления. В большинстве случаев, не выбранный объект перечисления создается с помощью конструкции Enum.<Наименование перечисления>
, а выбранный объект перечисления создается Enum.<Наименование перечисления>.<Наименование значения перечисления>
.
Идентификатор | Статус | Тип | Визуальная | Параметры | Описание |
---|---|---|---|---|---|
<Наименование перечисления> | Реализована | Атрибут | DB.Enum.<Наименование перечисления>:<Новый объект БД (DB)> | Создать объект базы данных перечисления с заданным наименованием. | |
<Наименование значения перечисления> | Реализована | Атрибут | DB.Enum.<Наименование значения перечисления>:<Выбранный объект перечисления (DB)> | Создать объект перечисления с требуемым значение и видом, совпадающим с видом исходного перечисления. | |
Get | Реализована | Функция | DB.Enum.Get(<Наименование перечисления[.Наименование или индекс значения перечисления] (STRING)>):<Выбранный объект перечисления (DB)> | Получить выбранный объект перечисления по его наименованию и наименованию его значения | |
GetByIndex, ValueByIndex | Реализована | Функция | DB.Enum.GetByIndex(<Наименование перечисления (STRING)>,<Индекс значения перечисления (INT)>):<Выбранный объект перечисления (DB)> | Получить выбранный объект перечисления по его наименованию и индексу (номеру) его значения | |
GetCaption | Реализована | Функция | DB.Enum.GetCaption({<Выбранный объект перечисления (DB)>,<Наименование перечисления.Наименование значения перечисления (STRING)>}):<Описание значения перечисления (STRING)> | Получить описание значения перечисления по выбранному объекту перечисления или по наименованию перечисления и наименованию его значения | |
Index | Реализована | Функция | DB.Enum.Index(<Новый индекс значения перечисления (INT)>):<Текущий индекс значения перечисления (INT)> | Получить или изменить индекс текущего выбранного значения перечисления. | |
ByIndex | Планируется | Функция | DB.Enum.ByIndex(<Индекс значения перечисления (INT)>):<Выбранный объект перечисления (DB)> | Получить новый выбранный объект перечисления, созданный из текущего перечисления с указанием индекса значения перечисления результата. | |
Count, ValuesNumber | Реализована | Функция | DB.Enum.Count():<Количество значений текущего перечисления (INT)> | Получить количество значений текущего перечисления. | |
ValueName | Реализована | Атрибут | DB.Enum.ValueName:<Наименование значения выбранного перечисления (STRING)> | Получить наименование выбранного значения текущего перечисления. |
Функции объектов переменных БД
В данном разделе собраны функции, работающие только с объектами с типом переменная БД. В большинстве случаев, получение и изменение значения переменной выполняется с помощью атрибута DBVar.<Имя переменной>
, а получение или изменение периодических переменных базы данных, выполняется с помощью функций GetValue и SetValue.
Идентификатор | Статус | Тип | Визуальная | Параметры | Описание |
---|---|---|---|---|---|
<Наименование переменной БД> | Реализована | Атрибут | DB.DBVar.<Наименование переменной БД>:<Значения переменной БД> | Получает значение названной переменной БД (если переменная периодическая, получение значения осуществляется на дату реквизитов потока (см. GlobalEndPeriodDate). | |
Restricted | Реализована | Атрибут | DB.DBVar.Restricted:<Переменные, которые не будут показаны (STRING)> | Атрибут получает или изменяет список переменных, запрещенных для отображения для текущего сеанса в системной диалоге редактирования переменных базы данных. Переменные перечислены по наименованию и разделены запятыми. Наименования переменных при чтении переведены в верхний регистр. | |
ReadOnly | Реализована | Атрибут | DB.DBVar.ReadOnly:<Переменные, которые будут доступны только для чтения (STRING)> | Атрибут получает или изменяет список переменных, запрещенных для редактирования для текущего сеанса в системной диалоге редактирования переменных базы данных. Переменные перечислены по наименованию и разделены запятыми. Наименования переменных при чтении переведены в верхний регистр. | |
GetValue | Реализована | Функция | DB.DBVar.GetValue(Наименование переменной БД (STRING),<Дата периодического значения (DATE)>):<Значение переменной БД> | Функция позволяет получить значение переменной БД по ее имени. Если переменная является периодической, функция также принимает дату получения ее значения. Функция может использоваться совместно с интерфейсом переменной базы данных. | |
SetValue | Реализована | Функция | DB.DBVar.SetValue(Наименование переменной БД (STRING),<Устанавливаемое значение переменной БД>,<Дата начала изменения периодического значения (DATE)>,<Дата окончания изменения периодического значения (DATE)>) | Функция позволяет сохранить значение переменной БД по ее имени. Если переменная является периодической, функция также принимает диапазон дат для сохранения ее значения. Функция может использоваться совместно с интерфейсом переменной базы данных. |
Функции объектов накопителей
В данном разделе собраны функции, работающие только с объектами с типом накопитель. Большинство этих функций описывают запросы к накопителям.
Идентификатор | Статус | Тип | Визуальная | Параметры | Описание |
---|---|---|---|---|---|
Totals, Gross | Реализована | Функция | DB.Totals(<Список реквизитов группировки (STRING)>,<Список реквизитов суммирования (агрегации) (STRING)>,<Остатки на дату (DATE)>,<Режим даты (INT)>,<Стандартные фильтры>...):<Таблица итогов в требуемом разрезе (TAB)> | Функция выполняет запрос к таблице остатков текущего накопителя, в разрезе заданных реквизитов-аккумуляторов, накапливая остатки по заданным реквизитам актива. Остатки будут получены на указанную дату и могут иметь режим начальный остаток или конечный остаток. При вычислении остатков могут применяться фильтры по требуемым реквизитам-аккумуляторам. Функция возвращает таблицу значений. | |
Total, Gross1 | Реализована | Функция | DB.Total(<Реквизит суммирования (агрегации) (STRING)>,<Остатки на дату (DATE)>,<Режим даты (INT)>,<Стандартные фильтры>...):<Остаток указанного актива (NUMBER)> | Функция выполняет запрос к таблице остатков текущего накопителя, находя значение заданного реквизита актива. Остатки будут получены на указанную дату и могут иметь режим начальный остаток или конечный остаток. При вычислении остатков могут применяться фильтры по требуемым реквизитам-аккумуляторам. Функция возвращает числовое значение. | |
Flow, Chart | Планируется | Функция | DB.Flow(<Список реквизитов группировки (STRING)>,<Список реквизитов суммирования (агрегации) (STRING)>,<Начальная дата ведомости (DATE)>,<Конечная дата ведомости (DATE)>,<Режим даты (INT)>,<Стандартные фильтры поиска>):<Таблица ведомости в требуемом разрезе (TAB)> | Функция выполняет запрос к таблице остатков текущего накопителя, в разрезе заданных реквизитов-аккумуляторов, накапливая остатки по заданным реквизитам актива. Остатки будут получены за указанный период. При вычислении остатков могут применяться фильтры по требуемым реквизитам-аккумуляторам. Функция возвращает таблицу значений со столбцами начального и конечного значения для каждого участвующего в запросе реквизита актива. | |
SysRecalcTotals | Реализована | Функция | DB.SysRecalcTotals(<Не использовать режим транзакции (INT)>=0) | Функция блокирует текущий накопитель и производит полный пересчет и заполнение таблицы остатков этого накопителя, если он имеет реквизиты-аккумуляторы и реквизиты активы. Для больших объемов данных функция может выполняться длительное время, в течение которого, система не позволит производить обработку документов с движениями в указанном накопителе. Функция используется для отладки и исправления базы данных. | |
SysCleanTotals | Планируется | Функция | DB.SysCleanTotals(<Не использовать режим транзакции (INT)>=0) | Функция блокирует текущий накопитель и производит очистку таблицы остатков этого накопителя, если он имеет реквизиты-аккумуляторы и реквизиты активы от записей, имеющих только нулевые значения реквизитов актива. Такие записи могут накапливаться в разных периодах остатков. Очистка подобного рода может использоваться для экономии места в базе данных, когда таблица остатков накопителя имеет склонность накапливать большое количество нулевых записей. |
Функции объектов журналов
В данном разделе собраны функции, работающие только с объектами с типом журнал (справочников или документов). Объекты журналов являются отдельными объектами, несмотря на то, что они связаны со своим оригинальным объектом справочника или документа. Объект журнала может содержать реквизиты, которые не заполняются автоматически из оригинальных объектов при их записи. Такие реквизиты можно использовать для хранения дополнительной информации, связанной с профилем данного журнала. Для изменения таких реквизитов, можно использовать функцию SetJournalProperty, также как и сохранение объекта журнала. При сохранении оригинальных объектов и изменении в журнале реквизитов, связанных с оригинальными объектами, дополнительные реквизиты не будут очищены или изменены, их значение останется неизменным.
Идентификатор | Статус | Тип | Визуальная | Параметры | Описание |
---|---|---|---|---|---|
GetJournalObject | Реализована | Функция | DB.GetJournalObject(<Наименование журнала (STRING)>):<Элемент журнала этого объекта (DB)> | Функция позволяет получить объект указанного журнала, соответствующий текущему объекту. Если данный объект не может входить в указанный журнал, функция вызовет исключение. Полученный объект журнала можно использовать для получения дополнительных реквизитов, записанных только в журнал, но отсутствующих в оригинальном объекте, для изменения этих уникальных реквизитов, либо для выполнения запросов по журналу. | |
LinkedObject, MainObject | Реализована | Функция | DB.LinkedObject():<Объект, на который ссылается текущий элемент журнала (DB)> | Функция позволяет получить объект, соответствующий указанному объекту журнала. При выполнении запросов по журналу, либо работе с визуальной таблицей журнала, функция получает оригинальный объект, который необходимо открыть для редактирования или изменить. | |
SetJournalProperty | Частичная реализация | Функция | DB.SetJournalProperty(<Список реквизитов журнала (STRING)>,<Заблокированный основной объект (DB)>) | Функция позволяет сохранить в базу данных реквизит (или список оных) объекта журнала. Часто эти реквизиты уникальны для журнала и отсутствуют в объектах, на которые ссылаются элементы журналов. До сохранения, эти реквизиты должны быть установлены в самом объекте, данная функция производит их чтение в журнал без изменения в оригинальном объекте и других реквизитах журнала. При работе с функцией рекомендуется указывать заблокированный оригинальный объект, на который ссылается объект журнала, так как объект журнала не может быть заблокирован (он является копией оригинального объекта, его блокировка не избавляла бы от опасности изменения оригинального объекта другим пользователем, что автоматически перезаписало бы объект журнала), блокирование оригинального объекта и указание оного при частичном сохранении объекта журнала, работает как практическая блокировка объекта журнала. | |
SysRefillJournal | Планируется | Функция | DB.SysRefillJournal() | Функция блокирует все изменения в текущем журнале и инициирует полное заполнение таблицы журнала на сервере. Для больших базы данных функция может выполняться длительное время, в течение которого, система не позволит производить сохранение объектов, использующий этот журнал. Функция используется для отладки и исправления базы данных. |
Функции, связанные с логами базы данных
Логи базы данных предназначены для хранения информации по событиям, в базе данных. Система может автоматически регистрировать такие события, как запись и удаление объектов, обработка и отмена обработки документов, визуальное открытие объектов и пр. Кроме системных событий, программа может создавать собственные события любого типа. Таблица логов БД может заполняться достаточно быстро (так как данные только добавляются в таблицу логов и никогда не удаляются), и, если она находится физически в той же базе данных, в которой хранятся все остальные данные системы, может сильно ускорить рост файлов базы данных, что, иногда, нежелательно. При настройке сервера базы данных имеются установки, позволяющие хранить таблицу логов в другой базе данных, которая может находиться на другой машине, если это необходимо. Запрос по логам базы данных (Query) позволяет получать информацию в любом разрезе и формировать требуемые отчеты из полученных данных.
Идентификатор | Статус | Тип | Визуальная | Параметры | Описание |
---|---|---|---|---|---|
Write | Реализована | Функция | Logs.Write(<Описание события>,<Объект события (DB)>,<Наименование события (STRING)>="USER",<Тип события (INT)>=1) | Функция позволяет добавить одну запись в лог базы данных. Запись описывается 4 аргументами, два из которых служат для классификации события, а остальные два для его описания. | |
Query | Частичная реализация | Функция | Logs.Query(<Начальная дата запроса (DATE)>,<Конечная дата запроса (DATE)>,<Количество получаемых записей (INT)>=0,<Стандартные фильтры>...):<Результат запроса (TAB)> | Функция выполняет запрос по таблице логов базы данных в указанном диапазоне дат с указанными фильтрами и получает результат в виде таблицы значений. |
Функции работы с дополнительными (внешними) базами данных
Программная работа с подключением других внешних баз данных в формате системы и под управлениями серверов системы позволяет не только совершить перенос объектов между базами, но и получить цифры отчетов старых периодов (для старых баз). Базы могут быть совершенно разными, либо копиями друг друга. Система различает объекты с одинаковыми кодами, загруженные из разных информационных баз. Ниже даны ограничения, которые имеют внешние базы по сравнению с базой, загружаемой автоматически при запуске клиентов (основной базой):
- Невозможно использование графического интерфейса, он всегда настроен на работу с основной базой. Визуальное редактирование объектов во внешних базах возможно только при написании более сложных форм с элементами, не привязанными к объектам базы данных.
- Невозможен вызов модулей или форм во внешних базах (к примеру, с помощью функции LoadModule или OpenObject). Однако, таблицы, и другие файлы можно загружать из внешней базы обычным образом. Для использования таблиц-шаблонов внешних баз при построении отчетов, необходимо воспользоваться функцией Table.SetSource, так как Table.SetSourceName работает только с основной базой данных.
- При соединении с внешней базой данных, не происходит инициализации ее глобальных модулей, поэтому, невозможен вызов функций из этих глобальных модулей.
- Функции, не являющиеся методами объектов, типа DB, но работающие с базой данных (к примеру, LockStorage), необходимо вызывать особым образом (ExecuteInternalFunction), чтобы вызов происходил к нужной внешней базе данных.
- Попытка использования объектов внешней базы данных совместно с визуальными функциями (к примеру, для позиционирования в визуальной таблице), будет вызывать ошибки или неверный результат. Запрещено использование объектов внешних баз данных в визуальных функциях и визуальных объектах.
- Ссылки на объекты внешних баз данных внутри электронных таблиц также будут работать неверно. Информацию из внешних баз данных разрешено выводить в таблицы, однако, "формулы" ячеек не должны содержать объектов из внешних баз данных, обычно такие формулы используются для открытия объекта для редактирования, что невозможно с внешними объектами.
- Запрещено присваивание реквизитам объектов одной базы данных объектов из другой базы данных, такая операция может привести к ошибочной информации в базе данных. Запрещено использование объектов одной базы данных в фильтрах запросов другой базы данных. Любое смешивание объектов в функциях будет приводить к ошибкам. Для получения информации, принадлежит ли текущий объект определенной базе данных, можно использовать функцию BelongsToDB.
Идентификатор | Статус | Тип | Визуальная | Параметры | Описание |
---|---|---|---|---|---|
Create | Реализована | Функция | ExternalDBase.Create():<Объект внешней базы данных (EXDB)> | Функция создает новый объект внешней базы данных. Объект не будет соединен с какой-либо базой данных. | |
UseProxy | Реализована | Функция | ExternalDBase.UseProxy(<Адрес и порт прокси сервера (STRING)>,<Тип прокси сервера (STRING)>,<Имя пользователя прокси (STRING)>,<Пароль пользователя прокси (STRING)>,<Дополнительные параметры прокси (STRING)>) | Функция настраивает прокси сервер для использования с соединением к данной внешней БД. Функция должна быть вызвана до фактического соединения с удаленной стороной на неактивном объекте, затем этот объект может использоваться совместно с функцией Connect. | |
Connect | Реализована | Функция | ExternalDBase.Connect(<Адрес базы данных (STRING)>,<Имя пользователя (STRING)>,<Пароль (STRING)>,<Дополнительные установки (INT)>=1) | Функция выполяет соединение с базой данных по указанному адресу под указнным пользователем с заданным паролем. Если в процессе соединения произошла ошибка, функция вызовет исключение. | |
Disconnect | Реализована | Функция | ExternalDBase.Disconnect() | Функция разрывает связь с внешней базой данных. Структура базы данных будет находиться в памяти, пока существует по крайней мере один объект, принадлежащий этой базе данных. После разрыва связи, однако, обновление или сохранение объектов будет вызывать исключение. | |
IsConnected | Реализована | Функция | ExternalDBase.IsConnected():<Установлено ли соедиение (INT)> | Функция проверяет, установлено ли соединение с внешней базой данных в текущий момент. | |
DB | Реализована | Функция | ExternalDBase.DB(<Идентификация создаваемого объекта (STRING)>,<Стандартные фильтры поиска>):<Новый объект БД (DB)> | Функция позволяет получить доступ к интерфейсу DB для текущей базы данных. Соединение в внешней БД должно быть активно. | |
Ref, Doc, Enum, DBVar, Stor, Jour | Реализована | Функция | ExternalDBase.<Интерфейс>.<Наименование объекта>:<Новый объект БД (DB)> | Функция позволяет получить доступ к интерфейсам создания объектов базы данных. | |
Logs | Реализована | Функция | ExternalDBase.Logs:<Интерфейс Logs (EXDBO)> | Функция позволяет получить доступ к интерфейсу Logs для текущей базы данных. | |
TempDB | Реализована | Функция | ExternalDBase.TempDB:<Интерфейс TempDB (EXDBO)> | Функция позволяет получить доступ к интерфейсу TempDB для текущей базы данных. | |
Query | Реализована | Функция | ExternalDBase.Query:<Интерфейс Query (EXDBO)> | Функция позволяет получить доступ к интерфейсу Query для текущей базы данных. | |
Struct, Meta | Реализована | Функция | ExternalDBase.Struct:<Интерфейс Struct (EXDBO)> | Функция позволяет получить доступ к интерфейсу Struct для текущей базы данных. | |
ExecuteInternalFunction | Реализована | Функция | ExternalDBase.ExecuteInternalFunction:(<Имя функции (STRING)>,<Аргумент 1>,<Аргумент 2>...):<Результат выполнения функции> | Функция позволяет получить выполнить функцию, не привязанную к объекту базы данных, однако, работающую с базой данных для текущей базы данных. Возможно выполнение, к примеру, таких функций: GetServerLocksInformation, LockStorage, DBLockStringMutex, StoreValue, ServerName и пр. |