Студия/Конфигурация данных проекта

From SunFlurry wiki
Jump to: navigation, search

Contents

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

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

Большинство объектов проекта (такие, как переменные, справочники, документы, журналы, перечисления, накопители, макросы, свободные обработки, нумераторы) помещены в свои древовидную структуру папок. Эта структура позволяет разработчикам систематизировать объекты удобным образом, для быстрого доступа к ним. Свойства объекта не меняются в зависимости от того, в какую папку он помещен, однако, поиск объектов, размещенных в папки по назначению или типу облегчается, ускоряя работу разработчика. Папки, заданные в структуре объектов также будут показаны при выборе типов данных в клиенте или Студии, к ним также можно получить доступ программно. Объекты внутри каждой из папок всегда сортируются по алфавиту.

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

  • Любой объект базы данных (будь то справочник или документ или что-то другое) всегда имеет соответствующую папку в файловой структуре проекта на сервере базы данных.
  • Внутренние файлы, принадлежащие объекту базы данных (модули, формы, таблицы и пр.), не относящиеся к данным базы данных располагаются в файловой структуре на сервере базы данных.
  • Реквизиты, строчные части и другие подчиненные объекты метаданных, имеющие соответственные поля или таблицы в базе данных не имеют соответствующих файлов или папок в файловой структуре на сервере базы данных.
  • Файл, хранящий свойства объектов базы данных, называется Meta.ini (файл метаданных). Он (и его оригинальная копия Meta.ini.src на сервере базы данных), это единственный файл, входящий в структуру проекта, не размещающийся внутри папки структуры Modules. Файл метаданных всегда находится в внутри папки LocalConfig.

Копирование объектов дерева конфигурации проекта

Студия позволяет копировать объекты или части этих объектов (реквизиты, строчные части, модули, формы и пр., см. ниже) в буфер с тем, чтобы осуществить вставку и создание нового объекта, его реквизитов и пр., либо добавить формы или модули путем копирования. Вставку также можно совершать в другие проекты, однако, нужно иметь в виду, что ссылки на реквизиты и объекты в добавляемых формах могут содержать ссылки на несуществующие в проекте объекты (поиск будет осуществляться по именам), поэтому каждый добавленный таким образом объект необходимо проверить на корректную и безошибочную работу. Копирование выделенного объекта или выделенной части объекта обычно выполняется с помощью правого меню мыши или комбинации клавиш Ctrl+C, вставка -- с помощью правого меню мыши или комбинации клавиш Ctrl+V. Если выделенный элемент не может быть скопирован в буфер, система покажет диалог с описанием ошибки в момент копирования. Если скопированный объект невозможно вставить в текущее место конфигурации проекта, возможность вставки будет отсутствовать.

Объекты конфигурации данных

Визуальное представление дерева конфигурации проекта начинается с пункта Конфигурация проекта. Контекстное меню этого пункта позволяет:

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

Ветка Общие объекты дерева конфигурации содержит:

  • Набор глобальных модулей. Модулей, которые загружаются в память при запуске клиента, и остаются в памяти на всем протяжении работы клиента. Другие модули или обработчики событий могут вызвать функции и использовать переменные, заданные в глобальных модулях. Кроме того, глобальные модули могут содержать функции, отвечающие за предопределенные события, т.е., при наступлении этих событий, функция будет найдена в глобальном модуле (часто, во всех модулях) и будет запущена системой автоматически. Для дополнительной информации, см. Предопределенные события.
  • Глобальные формы проекта. Формы, описанные здесь не относятся ни к объектам, ни к свободным обработкам и могут использоваться из любых объектов. Обычно сюда помещаются формы общих диалогов, не имеющих специфического назначения.
  • Глобальные таблицы проекта. Таблицы и шаблоны, хранящиеся здесь, могут использоваться во многих печатных формах или отчетах. К примеру, можно поместить сюда шаблон таблицы с заголовком отчетов.
  • Порядок блокировки накопителей задает или отключает порядок в котором должны блокироваться накопители при обработке документов, для увеличения скорости обработки документов. Если накопители будут заблокированы документом в другой последовательности, система вызовет исключение и обработка будет остановлена. Для дополнительной информации, см. также статью ClearStorages.
  • Контекстное меню позволяет добавить новые глобальные модули, формы, таблицы или любые другие файлы, в т.ч. бинарные в папку общих объектов.
  • Редактор свойств позволяет переименовать глобальные объекты.

Структура стандартного объекта дерева конфигурации

Большинство объектов конфигурации проекта могут содержать внутренние части и свойства в виде папок и ветвей. На рисунке 2 показан пример частично раскрытого внутреннего дерева объекта справочника бухГруппыПроводок. Обычно объект конфигурации может иметь следующие ветви-разделы:

  • Заголовок -- имя основной ветки объекта совпадает с наименованием объекта метаданных и позволяет получить доступ к его основным свойствам с помощью редактора свойств.
    • Формы -- ветка, содержащая формы объекта (если объект подразумевает наличие форм). Формы выводятся на экран для осуществления диалога с пользователем, т.е. являются элементами графического интерфейса системы. Разработчик создает каждую форму из таких визуальных элементов, как кнопки, таблицы, поля редактирования, поля со списками и пр. Объекты могут иметь произвольное количество форм, имя каждой формы должно быть уникально в пределах объекта. Меню клика правой кнопки мыши позволяет вызвать редактор выделенной формы, копировать форму в буфер обмена и вставить ее из буфера обмена, а также добавлять или удалять формы. Без заданных форм и модулей, объект не может быть открыт для редактирования или просмотра при работе оператора. Консольный клиент не использует формы, однако загружает модули объектов. Для информации по редактору форм, см. следующую статью.
    • Модули -- ветка, содержащая модули объекта (если объект подразумевает наличие модулей, к примеру, объекты макросов состоят только из форм). Модули содержат основной текст кода и загружаются в память до загрузки форм, т.е. представляют собой текстовые файлы написанные на языке системы. Программы, расположенные в модулях, позволяют управлять взаимодействием пользователя с графическим интерфейсом. Для консольного клиента модули являются основным способом вызова программ в других потоках. Консольный клиент не загружает формы после загрузки модулей. Объекты могут иметь произвольное количество модулей (выбор нужного модуля для загрузки обычно задается разработчиком в момент загрузки модуля и формы (LoadModule), открытия объекта (OpenObject) и т.п.), но чаще всего имеют всего один модуль с именем Module. Имя каждого модуля должно быть уникально в пределах объекта. Меню клика правой кнопки мыши позволяет вызвать редактор выделенного модуля, копировать модуль в буфер обмена и вставить его из буфера обмена, а также добавлять или удалять модули. Без заданных форм и модулей, объект не может быть открыт для редактирования или просмотра при работе оператора. Для информации по редактору модулей, см. следующую статью.
    • Таблицы -- ветка, содержащая электронные таблицы или шаблоны таблиц объекта (если объект подразумевает наличие таблиц, к примеру, объекты макросов состоят только из форм). Таблицы чаще всего представляют шаблоны или полезные части, позволяющие в момент создания печатных форм или отчетов (часто связанных с объектом), копировать определенные диапазоны в создаваемую печатную форму. К примеру, для создания отчета, из такого шаблона берется заголовок отчета, при это система подставляет тексты заголовка из программы вместо переменных шаблона, затем много раз повторяется строка отчета с разыми данными, подставляемыми программой, затем в отчет добавляется строка итогов. Таблицы-шаблоны позволяют сильно упростить создание отчетов. Разница между таблицей и таблицей-шаблоном обычно заключается в том, что шаблон имеет именованные регионы ячеек для копирования и некоторые ячейки содержат исполняемые выражения, вместо обычного текста, однако, принципиальной разными не существует. Объекты могут иметь произвольное количество таблиц (выбор нужной таблицы осуществляется в момент создания печатной формы или отчета, к примеру, с помощью функции SetSourceName), таблица по умолчанию, не требующая указания на имя шаблона при создании отчетов называется Table. Имя каждой таблицы должно быть уникально в пределах объекта. Меню клика правой кнопки мыши позволяет вызвать редактор выделенной таблицы, копировать таблицу в буфер обмена и вставить ее из буфера обмена, импортировать таблицу из внешнего файла, экспортировать таблицу в файл, а также добавлять или удалять таблицы. Таблицы в системе хранятся в особом внутреннем формате sft, однако система может импортировать и экспортировать таблицы в формате Excel. Для информации по редактору таблиц, см. следующую статью.
    • Другие файлы -- ветка, содержащая дополнительные файлы (в том числе бинарные), импортированные в проект. Файлы могут быть абсолютно любыми и иметь различное предназначение. Система не позволяет редактировать такие файлы, однако, если файл имеет расширение ini, для редактирования будет вызван текстовый редактор. Файлы могут использоваться программой для различных нужд, однако, нужно помнить, что они находятся на сервере, а не на локальной машине клиента. Для исполняемых файлов, их необходимо сначала скопировать на локальную машину клиента (к примеру, в каталог временных файлов, см. CopyFileToTemp), затем уже запускать на исполнение. Имя каждого файла должно быть уникально в пределах объекта (они будут находиться внутри одной папки на сервере). Меню клика правой кнопки мыши позволяет добавить новый ini-файл, импортировать произвольный файл в проект, экспортировать (сохранить на диске) файл из проекта, удалять, копировать и вставлять файлы.
    • Реквизиты заголовка или просто Реквизиты -- ветка содержит реквизиты объектов (поля базы данных) типа справочник, документ, журнал или накопитель (описание см. ниже). Имя каждого реквизита должно быть уникально в пределах объекта. Меню клика правой кнопки мыши позволяет копировать реквизит в буфер обмена и вставить его из буфера обмена, а также добавлять или удалять реквизиты.
    • Активы -- ветка содержит особые числовые реквизиты накопителей (описание см. ниже). Имя каждого актива должно быть уникально среди реквизитов и других активов накопителя. Меню клика правой кнопки мыши позволяет копировать актив в буфер обмена и вставить его из буфера обмена, а также добавлять или удалять активы.
    • Табличные части -- ветка содержит табличные части объектов (дополнительные таблицы базы данных, связанные с объектом) типа справочник или документ (описание см. ниже). Имя каждой табличной части должно быть уникально в пределах объекта. Меню клика правой кнопки мыши позволяет копировать табличную часть в буфер обмена и вставить ее из буфера обмена, а также добавлять или удалять табличные части. Табличные части имеют собственный набор реквизитов (см. ниже). Имя каждого реквизита табличной части должно быть уникально в пределах объекта. Меню клика правой кнопки мыши позволяет копировать реквизит в буфер обмена и вставить его из буфера обмена, а также добавлять или удалять реквизиты.

Нетипичными объектами проекта (т.е., объектами, для дерево структуры которых сильно отличается от описанного выше) являются: глобальные переменные, перечисления, макросы и свободные нумераторы. Свойства этих объектов, а также стандратных объектов, описаны ниже по тексту в данной статье.

Глобальные переменные

Глобальные переменные являются простейшими хранилищами информации в базе данных. Они не представлены таблицами, и содержат всего одно значение (либо набор датированных значений в режиме периодической переменной) определенного типа. Обычно такие переменные используются для хранения общих установок базы данных, которые нет смысла помещать в справочники. К примеру, префиксы документов базы данных или дату начала работы в базе данных. В программе переменные имеют особый интерфейс DBVar в рамках которого, программа обращается к переменным по их имени (к примеру DBVar.ОсновнаяВалюта), см. статью Объект базы данных. Имя каждой переменной уникально в пределах проекта, и имеет стандартные ограничения для создания имен (коды символов не могут быть меньше 65 (латинская A), но могут содержать цифры, использование знаков [, ], \, /, {, }, |, ^, ~, ¦, ` запрещено, имя может содержать международные символы).

Ветка Глобальные переменные (DB Variable) может содержать вложенную структуру папок любого уровня. Структура папок, в которой находится переменная, никак не влияет на ее свойства.

Контекстное меню позволяет добавлять или удалять переменные или папки структуры, в которую они помещены, а также копировать переменные. При вставке скопированной переменной, все свойства новой переменной будут взяты из старой, однако имя переменной будет изменено (добавлен префикс, чтобы сохранить уникальность имен переменных).

Переменные имеют следующие свойства в редакторе свойств:

  • Заголовок (Caption) -- используется в диалогах выбора типов данных для описания переменной, в частности из-за того, что наименование обычно не содержит пробелов.
  • Описание (Description) -- используется для описания использования переменной в проекте для разработчиков, во встроенной помощи, или в программе.
  • Тип данных (DataType) -- задает тип данных переменной. Каждая переменная может иметь тип данных, типа строка, число, дата, ссылка на другой объект конфигурации или на несколько объектов. Для редактирования типов данных вызывается редактор типов данных.
  • Флаг периодичности данных (IsPeriodical) переменной позволяет сделать переменную периодической. См. ниже Периодичность реквизитов справочников и документов.
  • Период изменения (TimePeriod) задается только для периодических переменных. См. ниже Периодичность реквизитов справочников и документов.
  • Режим автоматической регистрации в журнале регистрации событий (EventLogFlags) задается режимы регистрации изменения или просмотра переменных, см. ниже параграф про редактор автоматической регистрации в журнале регистрации событий.

Справочники

Справочники являются универсальными таблицами для хранения данных. В отличие от простой таблицы базы данных (поля таблицы будут соответствовать в этом случае реквизитам справочников, а каждая запись таблицы будет соответствовать элементу справочника), справочники могут также содержать периодические реквизиты (т.е., реквизиты, для которых задана отдельная таблица изменения на определенные даты, реквизиты, которые хранят историю изменений), справочники также могут иметь заданное число подчиненных таблиц -- строчных частей. Каждая строчная часть имеет определенное число своих реквизитов (в том числе периодических реквизитов), представленных полями в подчиненной таблице, и может иметь произвольное число строк. Такие подчиненные таблицы удобны для хранения информации, связанной с элементом справочника, размер которой может меняться (к примеру, если справочник описывает пользователей сайта, то строчная часть может содержать дату и вид достижения пользователя), однако, из-за того, что строка строчной части не может быть адресована, как отдельный объект базы данных, иногда выгоднее хранить такие данные в справочниках, подчиненных данному. Справочники или их строчные части могут содержать папки элементов. Структура папок поддерживается и ведется системой автоматически, папки будут использованы при выводе таблиц справочников на экран, а также при запросах можно указывать все элементы, входящие в определенные папки. В программе справочники имеют особый интерфейс Ref в рамках которого, либо с помощью интерфейса DB, можно создать новый объект справочника и заполнить его реквизиты из базы данных (к примеру, с помощью функции Find). Имя каждого справочника уникально в пределах проекта, и имеет стандартные ограничения для создания имен (коды символов не могут быть меньше 65 (латинская A), но могут содержать цифры, использование знаков [, ], \, /, {, }, |, ^, ~, ¦, ` запрещено, имя может содержать международные символы). См. также статью Объект базы данных

Ветка Справочники (Reference Book) может содержать вложенную структуру папок любого уровня. Структура папок, в которой находится справочник, никак не влияет на его свойства. Не нужно также путать структуру папок метаданных в конфигурации проекта и папки элементов справочника в реальной базе данных.

Контекстное меню позволяет добавлять или удалять справочники или папки структуры, в которую они помещены, а также копировать и вставлять их. При вставке скопированного справочника, все свойства нового будут взяты из старого, однако наименование будет изменено (добавлен префикс, чтобы сохранить уникальность имен).

Справочники имеют следующие свойства в редакторе свойств:

  • Наименование (Name) -- задает наименование справочника.
  • Заголовок (Caption) -- используется в диалогах выбора типов данных для описания справочника, в частности из-за того, что наименование обычно не содержит пробелов.
  • Описание (Description) -- используется для описания использования справочника в проекте для разработчиков, во встроенной помощи, или в программе.
  • Шаблон формирования представления объекта (CaptionTemplate) -- используется в клиенте, когда необходимо вывести на экран элемент справочника. Формирование представления элемента по умолчанию совпадает с его реквизитом Name (либо Code, если первый отсутствует), однако, разработчик может изменить его, создав из реквизитов по своему желанию. При редактировании шаблона вызывается редактор, который позволяет выбрать реквизиты для формирования шаблона. При формировании шаблона нельзя использовать реквизиты, которые имеют периодичность и реквизиты, которые имеют тип данных ссылку на другие объекты базы данных (так как для создания представления, сначала необходимо было бы загрузить и создать представление объекта, хранящегося в указанном реквизите, что не только замедлило бы создание, но и позволило бы создать в проекте ошибочные шаблоны с рекурсивными созданием наименований).
  • Родительские справочники (Parent) -- Каждый элемент справочника может иметь особую ссылку -- родительский справочник. Таблица элементов справочника, имеющих родителя, обычно выводится только при задании родительского элемента. Более одного типа справочника может быть задано, как родительский справочник текущего (к примеру, справочник ШтрихКоды может быть подчинен элементам справочника Номенклатура или элементам справочника Партии). Отдельный элемент справочника не может иметь более одного элемента родителя. В программе доступ к родительскому справочнику осуществляется с помощью специального реквизита, который доступен в запросах, как @Parent и из обычной программы, как функция Parent. Если по крайней мере один тип справочника задан как родительский для данного, система будет проверять заполненность реквизита родительского справочника и не разрешать сохранение элемента, если реквизит не заполнен. Систему подчинения справочников можно создать без использования реквизита родительского справочника, любой реквизит может содержать ссылку на другие справочники, тем самым быть родительским справочником. Однако, в случае родительских справочников, системой уже предусмотрены требуемые ограничения и заданы нужные свойства при работе с подчинением справочников (к примеру, при удалении родительского элемента, система автоматически удаляет подчиненные), использовать такое подчинение удобно.
  • Формы и модули по умолчанию (DefaultForms) -- свойство позволяет задать формы и модули по умолчанию при открытии справочника в разных режимах. Разработчик всегда сможет задать загрузку нужных ему форм и модулей, однако, при открытии элемента справочника на редактирование или таблицы с элементами справочника для выбора без указания на определенный модуль или форму, система будет загружать указанные здесь модули и формы по умолчанию. См. также, к примеру, статью OpenObject. См. рис. 3 для общего вида редактора форм по умолчанию. Для справочников описывается до шести случаев вызовов:
    • Список или журнал по умолчанию -- Задает наименование журнала справочников (если необходимо), а также модуля и формы в журнале или в текущем справочнике, которые будут использоваться при открытии таблицы с элементами этого справочника для просмотра. Если журнал задан, будет открыт журнал, в который также могут входить элементы других справочников, иначе будут использована форма текущего справочника, которая может содержать только элементы текущего справочника.
    • Для выбора элемента или папки -- Задает наименование журнала справочников (если необходимо), а также модуля и формы в журнале или в текущем справочнике, которые будут использоваться при открытии таблицы с элементами этого справочника для выбора элемента или папки. Данный вид используется для справочников, для которых задано наличие элементов-папок и только в случае, когда виды для выбора элемента или для выбора папки не заданы. Если журнал задан, будет открыт журнал, в который также могут входить элементы других справочников, иначе будут использована форма текущего справочника, которая может содержать только элементы текущего справочника.
    • Для выбора элемента -- Задает наименование журнала справочников (если необходимо), а также модуля и формы в журнале или в текущем справочнике, которые будут использоваться при открытии таблицы с элементами этого справочника для выбора элемента. Если журнал задан, будет открыт журнал, в который также могут входить элементы других справочников, иначе будут использована форма текущего справочника, которая может содержать только элементы текущего справочника.
    • Для выбора папки -- Задает наименование журнала справочников (если необходимо), а также модуля и формы в журнале или в текущем справочнике, которые будут использоваться при открытии таблицы с элементами этого справочника для выбора папки. Данный вид используется для справочников, для которых задано наличие элементов-папок. Если журнал задан, будет открыт журнал, в который также могут входить элементы других справочников, иначе будут использована форма текущего справочника, которая может содержать только элементы текущего справочника.
    • Для редактирования элемента -- Задает наименование модуля и формы в текущем справочнике, которые будут использоваться при открытии элемента этого справочника для просмотра или редактирования. Задание журнала при этом недоступно.
    • Для редактирования папки -- Задает наименование модуля и формы в текущем справочнике, которые будут использоваться при открытии папки этого справочника для просмотра или редактирования. Задание журнала при этом недоступно. Данный вид используется для справочников, для которых задано наличие элементов-папок.
  • Способ выбора элементов в полях редактирования по умолчанию (IsDefaultComboOpen) -- установка позволяет изменять поведение по умолчанию при выборе элементов этого справочника в полях редактирования или ячейках таблиц. Если установка отключена, для выбора элемента будет вызвана форма выбора элементов или папок, в ином случае, будет выведено всплывающее окно, привязанное к месту выбора, в котором пользователь может быстро осуществить выбор. Для небольших справочников, особенно без наличия папок иногда удобнее и быстрее для пользователя использовать всплывающее окно, но последнее может иметь ограниченные возможности. Разработчик может выбрать необходимый ему способ выбора, изменив свойства соответствующей формы, здесь описывается только случай по умолчанию.
  • Справочник содержит папки (HasFolders) -- установка позволяет разрешать использование деление элементов справочника на папки и элементы.
  • Объекты-основания справочника (CanBeBasedUpon) -- свойство используется для задания объектов, которые могут стать основанием для элементов текущего справочника. Такими объектами могут быть не только справочники (в том числе и текущий), но и документы. Обычно свойства ввода на основании полностью задаются программно на усмотрение разработчика, система, однако, помогает созданию таких операций с помощью интерфейса по умолчанию (операции "ввод на основании" контекстного меню) и выбора подчиненного объекта из заданных в полях CanBeBasedUpon объектов.
  • Составные и особые индексы (CompositeIndexes) -- свойство используется для задания дополнительных индексов базы данных, состоящих из нескольких реквизитов последовательно (составной индекс) или особых полей и реквизитов. Для отдельных реквизитов, по которым часто осуществляется поиск, легко задать индекс непосредственно в свойствах реквизита, однако, когда необходимо задать индекс связки реквизитов, возможно, с участием особых полей (к примеру, @ISFOLDER, @FOLDER, @PARENT), можно использовать это свойство. Свойство позволяет хранить произвольное количество индексов. Нужно помнить, что каждый индекс замедляет сохранение элементов справочников, важно понимать, реальную необходимость в создании индекса.
  • Режим автоматической регистрации в журнале регистрации событий (EventLogFlags) -- установка задает режимы регистрации изменения или просмотра элементов справочника, см. ниже параграф про редактор автоматической регистрации в журнале регистрации событий.
  • Триггер изменения (ChangeTrigger) -- установка позволяет использовать триггер изменения для элементов справочника. Триггеры имеют 4 состояния и используются для отлова изменений в элементах для обмена с внешними источниками. См. статью SetTrigger.

При работе с запросами или временными таблицами, для доступа к скрытым (особым) реквизитам справочников и их строчных частей заданы следующие константы:

  • @ELEMENT -- реквизит, дающий ссылку на сам элемент справочника (таким образом удобно, к примеру, использовать фильтр по списку элементов).
  • @HEADER -- указывает на элемент при запросах к табличной части справочника.
  • @ISFOLDER -- Задает числовое значение, является ли текущий элемент справочника папкой (1) или обычным элементом (0), также может использоваться для записей строчных частей справочников.
  • @FOLDER -- Задает ссылку на объект папки, в которой находится текущий элемент справочника, также может использоваться для записей строчных частей справочников.
  • @PARENT -- Задает ссылку на объект родителя, которому подчинен текущий элемент справочника.
  • @STATUS -- Задает числовое значение статуса текущего объекта. Для справочников это значение может быть 0 -- для обычного элемента, 1 -- для удаленного элемента.
  • @LINE, @LINEID -- Задает номер строки строчной части (строки нумеруются с единицы).
  • @TRIGGER -- Задает значение триггера изменения для элементов справочников, для которых такой триггер задан.

Строчные части справочников

Каждая строчная часть справочника является самостоятельной таблицей базы данных и имеет свои реквизиты. Справочник может иметь неограниченное количество строчных частей или ни одной. Имя каждой строчной части уникально в пределах одного справочника, и имеет стандартные ограничения для создания имен (коды символов не могут быть меньше 65 (латинская A), но могут содержать цифры, использование знаков [, ], \, /, {, }, |, ^, ~, ¦, ` запрещено, имя может содержать международные символы). Доступ к строчным частям из программы обычно осуществляется с помощью функции LineParts.

Контекстное меню позволяет добавлять или удалять строчные части, а также копировать и вставлять их. При вставке скопированной строчной части, все свойства новой будут взяты из старой, однако наименование будет изменено (добавлен префикс, чтобы сохранить уникальность имен).

Строчные части имеют следующие свойства в редакторе свойств:

  • Наименование (Name) -- задает наименование строчной части.
  • Описание (Description) -- используется для описания использования строчной части в проекте для разработчиков, во встроенной помощи, или в программе.
  • Строчная часть содержит папки (HasFolders) -- установка позволяет разрешать использование папок в строках строчной части.
  • Составные и особые индексы (CompositeIndexes) -- свойство используется для задания дополнительных индексов базы данных, состоящих из нескольких реквизитов последовательно (составной индекс) или особых полей и реквизитов. Для отдельных реквизитов, по которым часто осуществляется поиск, легко задать индекс непосредственно в свойствах реквизита, однако, когда необходимо задать индекс связки реквизитов, возможно, с участием особых полей (к примеру, @HEADER), можно использовать это свойство. Свойство позволяет хранить произвольное количество индексов. Нужно помнить, что каждый индекс замедляет сохранение таблиц строчных частей справочников, важно понимать, реальную необходимость в создании индекса.

Реквизиты справочников и строчных частей справочников

Каждый реквизит справочника или строчной части справочника соответствует одному полю в таблице в базы данных. Однако, если реквизит является периодическим, он не содержится в основной таблице, а может иметь множество записей в таблице периодических реквизитов. В программе доступ к реквизитам обычно осуществляется по их имени, применительно к объекту базы данных <Объект БД>.<Имя реквизита> или к таблице строчной части <Таблица строчной части>.<Имя реквизита>. Имя каждого реквизита уникально в пределах справочника или строчной части, и имеет стандартные ограничения для создания имен (коды символов не могут быть меньше 65 (латинская A), но могут содержать цифры, использование знаков [, ], \, /, {, }, |, ^, ~, ¦, ` запрещено, имя может содержать международные символы).

Контекстное меню позволяет добавлять или удалять реквизиты, а также копировать и вставлять их. При вставке скопированного реквизита, все свойства нового будут взяты из старого, однако наименование будет изменено (добавлен префикс, чтобы сохранить уникальность имен).

Реквизиты имеют следующие свойства в редакторе свойств:

  • Наименование (Name) -- задает наименование реквизита.
  • Заголовок (Caption) -- используется в диалогах выбора реквизитов в клиентах, выступает как более читабельная альтернатива имени.
  • Описание (Description) -- используется для описания использования реквизита в проекте для разработчиков, во встроенной помощи, или в программе.
  • Тип данных (DataType) -- задает тип данных реквизита. Каждый реквизит может иметь тип данных строка, число, дата, ссылка на другой объект конфигурации или на несколько объектов. Для редактирования типов данных вызывается редактор типов данных.
  • Нумератор (Numerator) -- позволяет превратить данный реквизит в нумератор. Нумератор может иметь тип числа или строки, обычно такие реквизиты используются для автоматической или полуавтоматической последовательной нумерации объектов. Новые номера присваиваются только для реквизитов, которые имеют пустое содержимое и только если автоматическое присваивание новых номеров разрешено. Таким образом, программа может производить нумерацию самостоятельно, если в этом есть необходимость, а сервер, при сохранении объекта, будет проверять значение реквизита на уникальность. При присваивании нового номера автоматически, он может быть создан в момент сохранения объекта в базу данных или в момент создания нового объекта (режим задается в свойствах нумератора). Сервер базы данных может осуществлять контроль уникальности нумератора по всем данным базы данных, или в пределах справочника-родителя (для справочников), справочника-папки, в пределах элемента или документа (для реквизитов строчных частей). Для текстового нумератора задается длина номера и разрешается использовать префиксы номеров (см. к примеру, функцию SetPrefix), а также возможен режим форсирования соблюдения корректной длины номера, если номер задан программой, а не создан на сервере. Нумератор также может зависеть от периода и быть уникальным только внутри указанного периода (год, квартал месяц или день), в этом случае свойства нумератора требуют задания периодического реквизита с типом дата и время, находящегося в этом же объекте (строчной части). Независимо от всего перечисленного выше, нумератор может принадлежать единственному реквизиту, либо быть общим среди нескольких реквизитов разных объектов. В последнем случае, нумератор задается в отдельной ветке конфигурации проекта, а здесь указывается только ссылка на него.
  • Применимость реквизита (AppliesTo) -- свойство задает декоративную установку, которая используется для удобства работы с объектом в Студии. Установка указывает, применяется ли текущий реквизит для работы с элементами или папками или является общим для элементов и папок справочника.
  • Индексация реквизита (IsIndexed) -- свойство позволяет создать для этого реквизита свой индекс в базе данных, что может ускорить поиск по этому реквизиту. Нужно помнить, что каждый индекс замедляет сохранение элементов справочников, важно понимать, реальную необходимость в создании индекса.
  • Полнотекстовый поиск (IsFullTextSearch) -- свойство включает реквизит в каталог полнотекстового поиска в базе данных. После включения, при поиске, можно использовать префиксы поиска ~ (см. Стандартные фильтры).
  • Запретить пустое значение (IsDenyEmpty) -- свойство позволяет запретить интерактивное сохранение элементов справочников, если данный реквизит не был заполнен каким-либо значением. Может использоваться для того, чтобы пользователи не забывали заполнять требуемые реквизиты до сохранения элементов.
  • Флаг периодичности данных (IsPeriodical) реквизита позволяет сделать реквизит периодическим.
  • Период изменения (TimePeriod) -- задается только для периодических реквизитов.
  • Реквизит наложения фильтра в таблицах (IsMainFilterProp) -- задается для текстовых реквизитов, чаще всего для наименований (Name) или номеров документов (DocNum). Если в столбике визуальной таблицы отображается объект данного типа и пользователь производит быстрый отбор по этому столбику (вводит фразу поиска в столбике), система будет накладывать фильтр на данный реквизит объекта (представление объекта может собираться из нескольких реквизитов, см. CaptionTemplate). Свойство недоступно для реквизитов строчных частей. Объект может иметь только один реквизит с этим свойством.
  • Разрешить хранить папки в реквизите (IsFolderAllowed) запрещает или разрешает интерактивно выбирать не только элементы, но и папки, как значения данного реквизита. Обычно папки не служат как элементы, и иногда пользователь по ошибке может выбрать не элемент а папку в важный реквизит справочника или документа (к примеру, вместо элемента справочника склады, пользователь выбирает папку складов). Данная установка позволяет запретить выбирать папки (по умолчанию).
  • Реквизит даты и времени объекта (IsWorkingDateLinked) -- Особое свойство доступное для реквизитов с типов "дата и время". При создании нового объекта (New), значение этого реквизита будет автоматически заполнено текущей датой и временем.
  • Реквизит сортировки объектов (IsSortProp) -- задается для реквизитов имеющих простой тип (не ссылки на другие объекты). При сортировке списков или таблиц в программе (Sort), система будет использовать этот реквизит, как реквизит по которому будет происходить сортировка. Для справочников, это обычно Name, для документов, это обычно DocDate. Свойство недоступно для реквизитов строчных частей. Объект может иметь только один реквизит с этим свойством.
  • Разрешать международные символы (IsUnicode) -- Установка позволяет хранить UTF-16 текст в содержимом текстовых реквизитов (по умолчанию используется ANSI). Нужно понимать, что такие поля занимают в два раза больше места в базе данных. Установка применима только к СУБД, которые позволяют хранить текст в Unicode или ANSI в зависимости от типа данных, из поддерживаемых СУБД на данный момент это только MS SQL. Для остальных СУБД текст всегда хранится в Unicode и данная установка ни на что не влияет.

Документы

Документы, как и справочники, являются универсальными таблицами для хранения данных. В отличие от простой таблицы базы данных (поля таблицы будут соответствовать в этом случае реквизитам документов, а каждая запись таблицы будет соответствовать отдельному документу), документы, как и справочники, могут также содержать периодические реквизиты (т.е., реквизиты, для которых задана отдельная таблица изменения на определенные даты, реквизиты, которые хранят историю изменений), документы, как и справочники, также могут иметь заданное число подчиненных таблиц -- строчных частей. Каждая строчная часть имеет определенное число своих реквизитов (в том числе периодических реквизитов), представленных полями в подчиненной таблице, и может иметь произвольное число строк. Такие подчиненные таблицы удобны для хранения информации, связанной с документом, размер которой может меняться (к примеру, если документ описывает продажу товара, то строчная часть может содержать набор товаров, их количества и цены, кроме того, вторая строчная часть может содержать таблицу со скидками и типами скидок). Нужно понимать, что строка строчной части не может быть адресована, как отдельный объект базы данных, если необходимо обойти это ограничение, вместо строчной части можно использовать элементы справочника, имеющие реквизит с типом документ, который будет описывать их подчинение данным документам. Строчные части документов могут содержать папки элементов. Сами документы, в отличие от справочников, не могут быть папками. В программе документы имеют особый интерфейс Doc в рамках которого, либо с помощью интерфейса DB, можно создать новый объект документа и заполнить его реквизиты из базы данных (к примеру, с помощью функции Find). Имя каждого документа уникально в пределах проекта, и имеет стандартные ограничения для создания имен (коды символов не могут быть меньше 65 (латинская A), но могут содержать цифры, использование знаков [, ], \, /, {, }, |, ^, ~, ¦, ` запрещено, имя может содержать международные символы). См. также статью Объект базы данных

Ветка Документы (Documents) может содержать вложенную структуру папок любого уровня. Структура папок, в которой находится документ, никак не влияет на его свойства.

Контекстное меню позволяет добавлять или удалять документы или папки структуры, в которую они помещены, а также копировать и вставлять их. При вставке скопированного документа, все свойства нового будут взяты из старого, однако наименование будет изменено (добавлен префикс, чтобы сохранить уникальность имен).

Документы имеют следующие свойства в редакторе свойств:

  • Наименование (Name) -- задает наименование документа.
  • Заголовок (Caption) -- используется в диалогах выбора типов данных для описания документа, в частности из-за того, что наименование обычно не содержит пробелов.
  • Описание (Description) -- используется для описания использования документа в проекте для разработчиков, во встроенной помощи, или в программе.
  • Шаблон формирования представления объекта (CaptionTemplate) -- используется в клиенте, когда необходимо вывести на экран определенный документ. Шаблон формирования представления нового документа при его создании задается в виде %Name% №%DocNum% от %DocDate%, однако, разработчик может изменить его, создав из реквизитов документа по своему желанию. При редактировании шаблона вызывается редактор, который позволяет выбрать реквизиты для формирования шаблона. При формировании шаблона нельзя использовать реквизиты, которые имеют периодичность и реквизиты, которые имеют тип данных ссылки на другие объекты базы данных (так как для создания представления, сначала необходимо было бы загрузить и создать представление объекта, хранящегося в указанном реквизите, что не только замедлило бы создание, но и позволило бы создать в проекте ошибочные шаблоны с рекурсивными созданием наименований).
  • Формы и модули по умолчанию (DefaultForms) -- свойство позволяет задать формы и модули по умолчанию при открытии документа в разных режимах. Разработчик всегда сможет задать загрузку нужных ему форм и модулей, однако, при открытии документа на редактирование или таблицы/журнала с документами для выбора без указания на определенный модуль или форму, система будет загружать указанные здесь модули и формы по умолчанию. См. также, к примеру, статью OpenObject. Для документов описывается до трех случаев вызовов:
    • Список или журнал по умолчанию -- Задает наименование журнала документов (обычно), а также модуля и формы в журнале или в текущем документе, которые будут использоваться при открытии таблицы для просмотра. Если журнал задан, будет открыт журнал, в который также могут входить другие документы, иначе будут использована форма списка текущего документа, которая может содержать только документы одного вида.
    • Для выбора элемента -- Задает наименование журнала документов (обычно), а также модуля и формы в журнале или в текущем документе, которые будут использоваться при открытии таблицы для выбора документа. Если журнал задан, будет открыт журнал, в который также могут входить другие документы, иначе будут использована форма списка текущего документа, которая может содержать только документы одного вида.
    • Для редактирования элемента -- Задает наименование модуля и формы в текущем документе, которые будут использоваться при открытии документа для просмотра или редактирования. Задание журнала при этом недоступно.
  • Способ выбора документов в полях редактирования по умолчанию (IsDefaultComboOpen) -- установка позволяет изменять поведение по умолчанию при выборе этих документов в полях редактирования или ячейках таблиц. Если установка отключена, для выбора элемента будет вызвана форма выбора документов (обычно журнал), в ином случае, будет выведено всплывающее окно, привязанное к месту выбора, в котором пользователь может быстро осуществить выбор. Для таблиц с небольшим количеством документов, иногда удобнее и быстрее для пользователя использовать всплывающее окно, но последнее может иметь ограниченные возможности. Разработчик может выбрать необходимый ему способ выбора, изменив свойства соответствующей формы, здесь описывается только случай по умолчанию. Для документов эта опция по умолчанию отключена.
  • Режим автоматической транзакции при обработке (AutoTransactionMode) -- Установка, позволяющая автоматически контролировать режим транзакции при обработке документа. По умолчанию она включена и рекомендована к установке. См. также статью BeginTransaction. Если установка не активна, программа обработки документа обычно выполняет следующий алгоритм (более подробно о транзакциях Транзакции):
    • Сохранить состояние документа, если он открыт в виде визуальной формы или в сохранении есть необходимость
    • Инициировать режим транзакции внутри конструкции Try .. Finally
    • Выполнить необходимые действия, до блокировки накопителей (проверка данных и подготовка таблиц)
    • Заблокировать (нужные) накопители
    • Выполнить запись новых таблиц в заблокированные накопители
    • Сохранить документ, если он был изменен
    • Установить пометку документ "обработан" (2 или больше) с помощью функции PublishedMark.
    • В обработчике Finally отменить или зафиксировать транзакцию.
      • Если транзакция зафиксирована, сохранить информацию об обработке в журнал регистрации событий, если это необходимо.
      • Если транзакция отменена, восстановить состояние документа, если оно было сохранено, иначе избавиться от объекта, так как он может иметь некорректное состояние.
  • Игнорировать порядок блокировки (IgnoreStoragesLockOrder) -- установка позволяет игнорировать порядок блокировки (более подробно о транзакциях Транзакции). Порядок блокировки перечисляет последовательно, в каком порядке могут быть заблокированы накопители при обработке документа. Если программа пытается нарушить порядок блокировки, будет вызвано исключение и обработка остановлена. Порядок блокировки позволяет избежать событий, когда два обрабатываемых документа входят в вечный цикл ожидания освобождения нужных им накопителей, когда один из документов удерживает накопитель, нужный другому документу и наоборот. В такой ситуации через определенный промежуток времени будет вызвано исключение. При соблюдении порядка блокировки такая ситуация исключена. Функция ClearStorages блокирует очищаемые накопители в нужном порядке, поэтому, если документ блокирует сразу все нужные ему накопители, можно не заботиться об их порядке блокировки (такой подход может немного уменьшить скорость обработки документов в базе).
  • Объекты-основания документа (CanBeBasedUpon) -- свойство используется для задания объектов, которые могут стать основанием для документов данного вида. Такими объектами могут быть не только документы (в том числе и текущий), но и элементы справочников. Обычно свойства ввода на основании полностью задаются программно на усмотрение разработчика, система, однако, помогает созданию таких операций с помощью интерфейса по умолчанию (операции "ввод на основании" контекстного меню) и выбора подчиненного объекта из заданных в полях CanBeBasedUpon объектов.
  • Используемые накопители (StoragesAllowed) -- свойство используется для задания накопителей, которые могут быть использованы при обработке данного документа. Список накопителей, закрепленных за документом, необходим для оптимизации отмены обработки документа или очистки его движений, для того, чтобы серверу не приходилось проверять, есть ли записи этого документа в каждом накопителе, которых может быть достаточно много.
  • Составные и особые индексы (CompositeIndexes) -- свойство используется для задания дополнительных индексов базы данных, состоящих из нескольких реквизитов последовательно (составной индекс) или особых полей и реквизитов. Для отдельных реквизитов, по которым часто осуществляется поиск, легко задать индекс непосредственно в свойствах реквизита, однако, когда необходимо задать индекс связки реквизитов, возможно, с участием особых полей (к примеру, @STATUS), можно использовать это свойство. Свойство позволяет хранить произвольное количество индексов. Нужно помнить, что каждый индекс замедляет сохранение документов, важно понимать, реальную необходимость в создании индекса.
  • Режим автоматической регистрации в журнале регистрации событий (EventLogFlags) -- установка задает режимы регистрации изменения, просмотра или обработки документов, см. ниже параграф про редактор автоматической регистрации в журнале регистрации событий.
  • Триггер изменения (ChangeTrigger) -- установка позволяет использовать триггер изменения для документов данного вида. Триггеры имеют 4 состояния и используются для отлова изменений в документах для обмена с внешними источниками. См. статью SetTrigger.

Строчные части документов

Каждая строчная часть документа является самостоятельной таблицей базы данных и имеет свои реквизиты. Документ может иметь неограниченное количество строчных частей или ни одной. Имя каждой строчной части уникально в пределах текущего вида документа, и имеет стандартные ограничения для создания имен (коды символов не могут быть меньше 65 (латинская A), но могут содержать цифры, использование знаков [, ], \, /, {, }, |, ^, ~, ¦, ` запрещено, имя может содержать международные символы). Доступ к строчным частям из программы обычно осуществляется с помощью функции LineParts.

Контекстное меню позволяет добавлять или удалять строчные части, а также копировать и вставлять их. При вставке скопированной строчной части, все свойства новой будут взяты из старой, однако наименование будет изменено (добавлен префикс, чтобы сохранить уникальность имен).

Строчные части документов имеют следующие свойства в редакторе свойств:

  • Наименование (Name) -- задает наименование строчной части.
  • Описание (Description) -- используется для описания использования строчной части в проекте для разработчиков, во встроенной помощи, или в программе.
  • Составные и особые индексы (CompositeIndexes) -- свойство используется для задания дополнительных индексов базы данных, состоящих из нескольких реквизитов последовательно (составной индекс) или особых полей и реквизитов. Для отдельных реквизитов, по которым часто осуществляется поиск легко задать индекс непосредственно в свойствах реквизита, однако, когда необходимо задать индекс связки реквизитов, возможно, с участием особых полей (к примеру, @HEADER), можно использовать это свойство. Свойство позволяет хранить произвольное количество индексов. Нужно помнить, что каждый индекс замедляет сохранение таблиц строчных частей справочников, важно понимать, реальную необходимость в создании индекса.

Реквизиты документов и строчных частей документов

Каждый реквизит документа или строчной части документа соответствует одному полю в таблице в базы данных. Однако, если реквизит является периодическим, он не содержится в основной таблице, а может иметь множество записей в таблице периодических реквизитов. В программе доступ к реквизитам обычно осуществляется по их имени, применительно к объекту базы данных <Объект БД>.<Имя реквизита> или к таблице строчной части <Таблица строчной части>.<Имя реквизита>. Имя каждого реквизита уникально в пределах справочника или строчной части, и имеет стандартные ограничения для создания имен (коды символов не могут быть меньше 65 (латинская A), но могут содержать цифры, использование знаков [, ], \, /, {, }, |, ^, ~, ¦, ` запрещено, имя может содержать международные символы).

Контекстное меню позволяет добавлять или удалять реквизиты, а также копировать и вставлять их. При вставке скопированного реквизита, все свойства нового будут взяты из старого, однако наименование будет изменено (добавлен префикс, чтобы сохранить уникальность имен).

Реквизиты имеют следующие свойства в редакторе свойств:

  • Наименование (Name) -- задает наименование реквизита.
  • Заголовок (Caption) -- используется в диалогах выбора реквизитов в клиентах, выступает как более читабельная альтернатива имени.
  • Описание (Description) -- используется для описания использования реквизита в проекте для разработчиков, во встроенной помощи, или в программе.
  • Тип данных (DataType) -- задает тип данных реквизита. Каждый реквизит может иметь тип данных строка, число, дата, ссылка на другой объект конфигурации или на несколько объектов. Для редактирования типов данных вызывается редактор типов данных.
  • Нумератор (Numerator) -- позволяет превратить данный реквизит в нумератор. Нумератор может иметь тип числа или строки, обычно такие реквизиты используются для автоматической или полуавтоматической последовательной нумерации объектов. Новые номера присваиваются только для реквизитов, которые имеют пустое содержимое и только если автоматическое присваивание новых номеров разрешено. Таким образом, программа может производить нумерацию самостоятельно, если в этом есть необходимость, а сервер, при сохранении объекта, будет проверять значение реквизита на уникальность. При присваивании нового номера автоматически, он может быть создан в момент сохранения объекта в базу данных или в момент создания нового объекта (режим задается в свойствах нумератора). Сервер базы данных может осуществлять контроль уникальности нумератора по всем данным базы данных, или в пределах документа (для реквизитов строчных частей). Для текстового нумератора задается длина номера и разрешается использовать префиксы номеров (см. к примеру, функцию SetPrefix), а также возможен режим форсирования соблюдения корректной длины номера, если номер задан программой, а не создан на сервере. Нумератор также может зависеть от периода и быть уникальным только внутри указанного периода (год, квартал месяц или день), в этом случае свойства нумератора требуют задания периодического реквизита с типом дата и время, находящегося в этом же объекте (строчной части). Независимо от всего перечисленного выше, нумератор может принадлежать единственному реквизиту, либо быть общим среди нескольких реквизитов разных объектов. В последнем случае, нумератор задается в отдельной ветке конфигурации проекта, а здесь указывается только ссылка на него.
  • Индексация реквизита (IsIndexed) -- свойство позволяет создать для этого реквизита свой индекс в базе данных, что может ускорить поиск по этому реквизиту. Нужно помнить, что каждый индекс замедляет сохранение элементов справочников, важно понимать, реальную необходимость в создании индекса.
  • Полнотекстовый поиск (IsFullTextSearch) -- свойство включает реквизит в каталог полнотекстового поиска в базе данных. После включения, при поиске, можно использовать префиксы поиска ~ (см. Стандартные фильтры).
  • Запретить пустое значение (IsDenyEmpty) -- свойство позволяет запретить интерактивное сохранение документов, если данный реквизит не был заполнен каким-либо значением. Может использоваться для того, чтобы пользователи не забывали заполнять требуемые реквизиты до сохранения документа.
  • Флаг периодичности данных (IsPeriodical) реквизита позволяет сделать реквизит периодическим.
  • Период изменения (TimePeriod) -- задается только для периодических реквизитов.
  • Реквизит наложения фильтра в таблицах (IsMainFilterProp) -- задается для текстовых реквизитов, чаще всего для наименований (Name) или номеров документов (DocNum). Если в столбике визуальной таблицы отображается объект данного типа и пользователь производит быстрый отбор по этому столбику (вводит фразу поиска в столбике), система будет накладывать фильтр на данный реквизит объекта (представление объекта может собираться из нескольких реквизитов, см. CaptionTemplate). Свойство недоступно для реквизитов строчных частей. Объект может иметь только один реквизит с этим свойством.
  • Реквизит сортировки объектов (IsSortProp) -- задается для реквизитов имеющих простой тип (не ссылки на другие объекты). При сортировке списков или таблиц в программе (Sort), система будет использовать этот реквизит, как реквизит по которому будет происходить сортировка. Для справочников, это обычно Name, для документов, это обычно DocDate. Свойство недоступно для реквизитов строчных частей. Объект может иметь только один реквизит с этим свойством.
  • Реквизит даты и времени объекта (IsWorkingDateLinked) -- Особое свойство доступное для реквизитов с типов "дата и время". При создании нового объекта (New), значение этого реквизита будет автоматически заполнено текущей датой и временем.
  • Разрешать международные символы (IsUnicode) -- Установка позволяет хранить UTF-16 текст в содержимом текстовых реквизитов (по умолчанию используется ANSI). Нужно понимать, что такие поля занимают в два раза больше места в базе данных.
  • Участвует в таблице подчинения документов (IsParentLink) -- Установка доступна для реквизитов с типом документ. При сохранении документов с заполненными реквизитами с этим признаком, создается запись в таблице подчинения документов о том, что текущий документ подчинен документу, указанному в текущем реквизите. Признак доступен как для реквизитов документа, так и для реквизитов его строчных частей.

При работе с запросами или временными таблицами, для доступа к скрытым (особым) реквизитам документов заданы следующие константы:

  • @ELEMENT -- реквизит, дающий ссылку на сам элемент документ (таким образом удобно, к примеру, использовать фильтр по списку документов).
  • @HEADER -- указывает на документ при запросах к табличной части документов.
  • @STATUS -- Задает числовое значение статуса текущего документа. Реквизит может принимать значение 0 -- для обычного документа, 1 -- для удаленного документа, 2..200 -- документ обработан с пометкой @STATUS-1 (обычно 2).
  • @LINE, @LINEID -- Задает номер строки строчной части (строки нумеруются с единицы).
  • @TRIGGER -- Задает значение триггера изменения для документов, для которых такой триггер задан.
  • @PARENTDOC -- Задает ссылку на таблицу родительских документов из таблицы подчинения документов.
  • @CHILDDOC -- Задает ссылку на таблицу подчиненных документов из таблицы подчинения документов.

Разница между справочниками и документами

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

Функциональная особенность Применимость к справочникам Применимость к документам Дополнительная информация
Строчные части Доступны Доступны Строчные части представляют собой подчиненные таблицы данных с доступом из программы и из запросов.
Система подчинения между объектами Используются справочники-родители (Parents) Используется таблица подчинения документов (LinkedDocuments) См. следующий параграф для доп. информации.
  • Подчинение справочников происходит по типу строчных частей, отличие состоит в том, что строку строчной части нельзя представить в виде самостоятельного объекта, однако, строки строчных частей нумеруются автоматически и сортируются по их номеру.
  • В отличие от элемента справочника, свойства подчинения документов сохраняются в особую таблицу подчинения. Один документ может быть подчинен сразу нескольким документам (в т.ч. себе самому), что недоступно для справочников. Однако, из-за того, что для всех документов используется единая таблица подчинения, работа с ней может замедлиться, при большом количестве записей.
Доступность папок и работа с папками Объект и строки строчных частей Не доступны (в текущей реализации) Особые реквизиты "папка" (@ISFOLDER) и "родительская папка" (@FOLDER) могут автоматически контролироваться системой. Функционально, элементы папок ничем не отличаются от обычных элементов, однако:
  • При выводе справочников с папками на экран, система автоматически контролирует текущую папку и позволяет пользователям "двигаться" структуре папок.
  • Система также автоматически подбирает для папок иконку папки, отличную от иконки элемента
  • При запросах в базу данных, информация фильтруется не только по отдельным элементам, но и по папкам и, автоматически, по всем элементам и подпапкам, принадлежащим этим папкам.
  • При запросах типа Query в базу данных, в определенном режиме в результирующую таблицу системой автоматически подставляется структура папок и для каждой из папок автоматически считаются промежуточные итоги переменных агрегации.

Создание функционала папок программными средствами возможно, но трудоемко.

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

События справочников и документов

Для справочников и документов доступна также особая категория событий -- события метаданных. Фактически эти события является программами-триггерами, вызываемыми в определенные моменты при работе с объектами в программах-клиентах. Важно понимать, что все эти события (кроме OnPusblish, OnUnpublish) вызываются только для визуальных изменений объектов, программные изменения обычно не вызывают событий. Примеры возможных событий: при попытке создания новых объектов из журналов или таблиц справочников, удалении документов пользователем, сохранении объекта, открытого для визуального редактирования (при этом сохранение вызывается программно с помощью Эл.Save()), обработки или отмены обработки документа, открытого для визуального редактирования или загруженного программно и т.п. События создаются в редакторе модулей, который вызывается со второй закладки редактора свойств объектов. Все события этой группы являются прерывающими.

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

  • OnNew -- Событие, возникающее в момент интерактивного создания элемента или папки справочника. Событие имеет одну входящую переменную с именем Element, которая описывает новый создаваемый элемент. Программа события, к примеру, может заполнить какие-либо реквизиты заданными заранее значениями, или запретить создание, в зависимости от прав пользователя. Система принимает из обработчика события значение исходящей переменной Result. Если переменная содержит пустую строку (по умолчанию), создание элемента или папки разрешено, иначе переменная содержит описание ошибки, система вызовет исключение с этим описанием, создание элемента или папки будет остановлено.
  • OnSave -- Событие, возникающее в момент сохранения открытого интерактивно элемента или группы справочника. Событие имеет одну входящую переменную с именем Element, которая описывает сохраняемый элемент. Программа события, к примеру, может проверить заполненность реквизитов, либо произвести требуемые изменения реквизитов перед сохранением. Система принимает из обработчика события значение исходящей переменной Result. Если переменная содержит пустую строку (по умолчанию), сохранение элемента или папки разрешено, иначе переменная содержит описание ошибки, система вызовет исключение с этим описанием, сохранение элемента или папки будет отменено.
  • OnDelete -- Событие, возникающее в момент удаления (отмены удаления) открытого интерактивно элемента или группы справочника. Событие имеет две входящие переменные: Element описывает удаляемый элемент, ActionType -- описывает тип операции (-1 -- для отмены удаления, 0 -- для установки пометки удаления (логическое удаление), 1 -- для физического удаления из базы данных). Программа события, к примеру, может проверить наличие прав у пользователя на совершение операции удаления или отмены удаления. Система принимает из обработчика события значение исходящей переменной Result. Если переменная содержит пустую строку (по умолчанию), удаление (отмена удаления) элемента или папки разрешено, иначе переменная содержит описание ошибки, система вызовет исключение с этим описанием, удаление (отмена удаления) элемента или папки будет отменено.

Для документов доступны следующие события метаданных:

  • OnNew -- Событие, возникающее в момент интерактивного создания документа. Событие имеет одну входящую переменную с именем Element, которая описывает новый создаваемый документ. Программа события, к примеру, может заполнить какие-либо реквизиты заданными заранее значениями, или запретить создание, в зависимости от прав пользователя. Система принимает из обработчика события значение исходящей переменной Result. Если переменная содержит пустую строку (по умолчанию), создание документа разрешено, иначе переменная содержит описание ошибки, система вызовет исключение с этим описанием, создание документа будет остановлено.
  • OnSave -- Событие, возникающее в момент сохранения открытого интерактивно документа. Событие имеет одну входящую переменную с именем Element, которая описывает сохраняемый документ. Программа события, к примеру, может проверить заполненность реквизитов, либо произвести требуемые изменения реквизитов перед сохранением. Система принимает из обработчика события значение исходящей переменной Result. Если переменная содержит пустую строку (по умолчанию), сохранение документа разрешено, иначе переменная содержит описание ошибки, система вызовет исключение с этим описанием, сохранение документа будет отменено.
  • OnDelete -- Событие, возникающее в момент удаления (отмены удаления) открытого интерактивно документа. Событие имеет две входящие переменные: Element описывает удаляемый документ, ActionType -- описывает тип операции (-1 -- для отмены удаления, 0 -- для установки пометки удаления (логическое удаление), 1 -- для физического удаления из базы данных). Программа события, к примеру, может проверить наличие прав у пользователя на совершение операции удаления или отмены удаления. Система принимает из обработчика события значение исходящей переменной Result. Если переменная содержит пустую строку (по умолчанию), удаление (отмена удаления) документа разрешено, иначе переменная содержит описание ошибки, система вызовет исключение с этим описанием, удаление (отмена удаления) документа будет отменено.
  • OnPublish -- Событие, возникающее в момент обработки документа. Важно: событие будет работать как для открытых для редактирования интерактивно, так и для невизуальных документов. Ожидается, что программа события, проверит корректность заполнения документа и сохранит требуемые записи в требуемые накопители. Режим инициирования транзакции, может быть как автоматическим, так и включаться программно (опция AutoTransactionMode). После обработки документу присваивается особый статус (метка), которая может принимать значение от 1 до 199, однако, система будет трактовать все документы с меткой одинаково (как обработанные), числовое значение метки может быть использовано для целей разработчика; по умолчанию (в режиме автоматической транзакции), система ставит метку 1, программа может изменить ее самостоятельно (см. PublishedMark). Во время записи в накопители, необходимо также соблюдать порядок их блокировки (если не предусмотрено иного, опция IgnoreStoragesLockOrder). См. также статью Publish. Система принимает из обработчика события значение исходящей переменной Result. Если переменная содержит пустую строку (по умолчанию), обработка документа разрешена, иначе переменная содержит описание ошибки, система вызовет исключение с этим описанием, обработка документа будет отменена. Событие имеет следующие входящие переменные:
    • Element -- описывает обрабатываемый документ.
    • Param, Option -- дополнительные переменные, переданные внешней программой в обработчик события (см. Publish).
  • OnUnpublish -- Событие, возникающее в момент отмены обработки документа. Важно: событие будет работать как для открытых для редактирования интерактивно, так и для невизуальных документов. Ожидается, что программа события, проверит корректность операции и удалит записи документа из всех накопителей. Режим инициирования транзакции, может быть как автоматическим, так и включаться программно (опция AutoTransactionMode). После отмены обработки с документа снимается (обнуляется) особый статус (метка обработки). Во время записи в накопители, необходимо также соблюдать порядок их блокировки (если не предусмотрено иного, опция IgnoreStoragesLockOrder). См. также статью Unpublish. Система принимает из обработчика события значение исходящей переменной Result. Если переменная содержит пустую строку (по умолчанию), обработка документа разрешена, иначе переменная содержит описание ошибки, система вызовет исключение с этим описанием, обработка документа будет отменена. Событие имеет следующие входящие переменные:
    • Element -- описывает документ, обработка которого отменяется.
    • Param, Option -- дополнительные переменные, переданные внешней программой в обработчик события (см. Unpublish).

Для реквизитов документов или справочников а также реквизитов их строчных частей, доступны следующие события метаданных:

  • OnNewProp -- Событие, возникающее в момент интерактивного создания элемента, документа или группы справочника, содержащего данный реквизит, а также в момент создания новой строки строчной части. выполняется после OnNew для каждого реквизита, где задан текст события. Большое количество таких событий не желательно, так как может замедлить интерактивное создание элемента или документа. Событие может использоваться для начального заполнения реквизита. Событие имеет следующие входящие переменные: Element описывает элемент или документ, Index задается для реквизитов строчных частей и указывает на номер новой строки строчной части. Событие не имеет исходящих переменных.
  • OnChangeProp -- Событие, возникающее после интерактивного изменения реквизита документа или справочника, а также реквизита строчной части. Событие имеет одну входящую переменную с именем Value, которая описывает новое значение, присваиваемое этому реквизиту. Программа события обычно проверяет корректность нового значения реквизита и разрешает его обновление или запрещает его. Система принимает из обработчика события значение исходящей переменной Result. Если переменная содержит пустую строку (по умолчанию), изменение реквизита разрешено, иначе переменная содержит описание ошибки, система вызовет исключение с этим описанием, изменение реквизита будет отменено.

Периодичность реквизитов справочников и документов

Реквизиты объектов, имеющие флаг периодичности позволяют хранить несколько значений совместно с датами этих значений в дополнительной таблице базы данных. Таким образом кроме текущего значения реквизита (значения на текущую дату), можно получить историю его изменения. Такая информация может быть полезна в случае, когда необходимо получать отчеты или данные за определенный период. К примеру, цена номенклатуры может быть периодическим реквизитом. Это позволит узнать ее цену на любую дату, если цена участвует в выгрузке данных, выгрузка за старые даты не будет меняться, если цена недавно была изменена. Однако, хранение значения в дополнительной таблице может замедлить отображение периодических реквизитов при их выводе в визуальные таблицы или поля, кроме того, такие реквизиты требуют больше места для хранения в базе данных, что может увеличить ее размер. При загрузке объекта базы данных в память (см. Объект базы данных) периодические реквизиты обычно не загружаются из базы данных (режим можно изменить), поэтому, для их получения система выполняет дополнительный запрос, что увеличивает нагрузку на базу данных и замедляет выполнение программ. Даже сам синтаксис получения или изменения таких реквизитов обычно отличается от простых реквизитов. К примеру, чтобы получить значение простого реквизита, достаточно использовать конструкцию <Объект>.<Имя реквизита>, чтобы получить значение периодического реквизита, необходимо воспользоваться функцией GetValue: <Объект>.GetValue(<Имя реквизита>,<Дата реквизита>). Синтаксис работы с периодическими реквизитами также отличается в запросах и фильтрах функций загрузки или временных таблиц базы данных. При загрузке объекта для редактирования в визуальную форму, все его периодические реквизиты всегда загружаются на определенную дату (см. функцию UsePeriod), при сохранении объекта, редактируемого в визуальной форме, программа автоматически сохраняет изменения в периодических реквизитах на период, заданный функцией UsePeriod. Отображение периодических реквизитов в таблицах обычно контролируется другой функцией: EndPeriodDate.

Система позволяет задать дополнительный параметр для периодических реквизитов -- период хранения (TimePeriod). Период хранения дает возможность сохранять реквизиты на начало требуемых временных промежутков, а не на любой момент. По умолчанию, периодические реквизиты сохраняются на начало дня. Это позволяет не только уменьшить таблицу изменения реквизитов, но и облегчить расчет и избежать дополнительных проверок. Если значение реквизита может изменяться раз в день, однако, в таблице изменения хранятся несколько значений на определенную дату, это неверная ситуация, которую программа позволяет избежать автоматически. Кроме периода хранения в один день, позволяется задавать периоды: неделя, месяц, квартал, год, а также меньшие периоды хранения (не рекомендуется): час, минута, секунда. Кроме того, система позволяет отключить проверку периода хранения вообще.

Журналы справочников и документов

Журнал является зависимой таблицей базы данных. Журналы хранят сводную информацию из справочников или документов, каждый журнал имеет список справочников или документов, помещенных в него. Любой элемент справочника, помещенного в определенный журнал, будет иметь свою уникальную запись в этом журнале. В журналах не существует записей, не связанных ни с одним оригинальным элементом справочника или документом. В текущей реализации журнал может содержать только записи, связанные со справочниками или документами, но не смесь между ними. Большинство реквизитов журнала связано с соответствующими реквизитами помещаемых в журнал справочников или документов, однако журналы могут иметь дополнительные поля, не связанные с оригинальными реквизитами. Такие поля позволяют хранить разнообразную информацию объектам, помещенным в журнал, к примеру, могут быть индикаторами того, был ли оригинальный элемент выгружен во внешний источник. Журналы помогают удобно и быстро обработать сводную информацию из нескольких источников (к примеру, можно создать общий журнал документов, в который будут помещены все документы проекта, вывод и работа с такой информацией была бы затруднительна, так как необходимо было бы делать запросы к многим таблицам, после этого совмещать их по времени, отбрасывать лишние, если в результат вошло слишком много документов, повторять запрос, если вошло слишком мало и т.п.). Однако, нужно понимать, что каждый журнал замедляет сохранение оригинальных объектов, так как объекты одновременно будут записываться в свои таблицы и в таблицы журналов, поэтому журналы нужно использовать только если в них есть реальная необходимость, у примеру, если в журнал входит объект одного вида, необходимости в таком журнале нет.

Элементы журналов могут быть адресованы и использованы в языке системы также, как и элементы справочников или документы. С помощью функции LinkedObject можно получить оригинальный объект, из объекта журнала, также можно получить связанный объект журнала по имени журнала из оригинального объекта с помощью функции GetJournalObject. В запросах к журналам можно адресовать оригинальные объекты с помощью особого реквизита @LINK.

Журналы всегда содержат статус @STATUS оригинального объекта (обычный объект, удален, обработан), также для журналов справочников доступен реквизит @ISFOLDER, определяющий, является ли объект папкой или элементом. Журналы не могут содержать строчных частей или периодических элементов. В программе журналы имеют особый интерфейс Jour в рамках которого, либо с помощью интерфейса DB, можно найти элемент журнала напрямую в базе данных. Имя каждого журнала уникально в пределах проекта (одновременно для журналов справочников и журналов документов), и имеет стандартные ограничения для создания имен (коды символов не могут быть меньше 65 (латинская A), но могут содержать цифры, использование знаков [, ], \, /, {, }, |, ^, ~, ¦, ` запрещено, имя может содержать международные символы). См. также статью Объект базы данных

В конфигурации проекта имеются две ветки Журналы (Journals). Одна внутри ветки документов, одна внутри ветки справочников. Ветки могут содержать вложенную структуру папок любого уровня. Структура папок, в которой находится журнал, никак не влияет на его свойства.

Контекстное меню позволяет добавлять или удалять журналы или папки структуры, в которую они помещены, а также копировать и вставлять их. При вставке скопированного журнала, все свойства нового будут взяты из старого, однако наименование будет изменено (добавлен префикс, чтобы сохранить уникальность имен).

Журналы имеют следующие свойства в редакторе свойств:

  • Наименование (Name) -- задает наименование журнала.
  • Заголовок (Caption) -- используется в диалогах выбора типов данных для описания журнала, в частности из-за того, что наименование обычно не содержит пробелов.
  • Описание (Description) -- используется для описания использования журнала в проекте для разработчиков, во встроенной помощи, или в программе.
  • Шаблон формирования представления объекта (CaptionTemplate) -- используется в клиенте, когда необходимо вывести на экран элемент журнала (что обычно не происходит, обычно выводится на экран оригинальный элемент, связанный с элементом журнала). Формирование представления элемента журнала по умолчанию не задано, разработчик может изменить его, создав из реквизитов журнала по своему желанию. При редактировании шаблона вызывается редактор, который позволяет выбрать реквизиты для формирования шаблона. При формировании шаблона нельзя использовать реквизиты, которые имеют тип данных ссылки на другие объекты базы данных (так как для создания представления, сначала необходимо было бы загрузить и создать представление объекта, хранящегося в указанном реквизите, что не только замедлило бы создание, но и позволило бы создать в проекте ошибочные шаблоны с рекурсивными созданием наименований).
  • Объекты, входящие в данный журнал (Members) -- свойство задает список документов или справочников, которые будут иметь свои записи в этом журнале. См. ниже параграф описывающий редактор.
  • Формы и модули по умолчанию (DefaultForms) -- свойство позволяет задать формы и модули по умолчанию при открытии журнала в разных режимах. Разработчик всегда сможет задать загрузку нужных ему форм и модулей, однако, при открытии таблицы журнала с элементами журнала для выбора без указания на определенный модуль или форму, система будет загружать указанные здесь модули и формы по умолчанию. См. также, к примеру, статью OpenObject. Для журналов описывается до трех случаев вызовов:
    • Список по умолчанию -- Задает наименование модуля и формы журнала, которые будут использоваться при открытии таблицы для просмотра.
    • Для выбора элемента -- Задает наименование модуля и формы журнала, которые будут использоваться при открытии таблицы для выбора элемента журнала.
    • Для редактирования элемента -- Задает наименование модуля и формы журнала, которые будут использоваться при открытии элемента журнала для просмотра или редактирования. Обычно такая операция не используется, так как элементы журнала не являются самостоятельными.
  • Способ выбора элементов журнала в полях редактирования по умолчанию (IsDefaultComboOpen) -- установка позволяет изменять поведение по умолчанию при выборе элементов журнала в полях редактирования или ячейках таблиц. Если установка отключена, для выбора элемента будет вызвана форма выбора журнала, в ином случае, будет выведено всплывающее окно, привязанное к месту выбора, в котором пользователь может быстро осуществить выбор. Для таблиц с небольшим количеством элементов, иногда удобнее и быстрее для пользователя использовать всплывающее окно, но последнее может иметь ограниченные возможности. Разработчик может выбрать необходимый ему способ выбора, изменив свойства соответствующей формы, здесь описывается только случай по умолчанию. Для журналов эта опция по умолчанию отключена.
  • Составные и особые индексы (CompositeIndexes) -- свойство используется для задания дополнительных индексов базы данных, состоящих из нескольких реквизитов последовательно (составной индекс) или особых полей и реквизитов. Для отдельных реквизитов, по которым часто осуществляется поиск, легко задать индекс непосредственно в свойствах реквизита, однако, когда необходимо задать индекс связки реквизитов, возможно, с участием особых полей (к примеру, @STATUS), можно использовать это свойство. Свойство позволяет хранить произвольное количество индексов. Нужно помнить, что каждый индекс замедляет сохранение оригинальных объектов журналов, важно понимать, реальную необходимость в создании индекса.

При работе с запросами или временными таблицами, для доступа к скрытым (особым) реквизитам журналов заданы следующие константы:

  • @ELEMENT -- реквизит, дающий ссылку на сам элемент журнала.
  • @LINK -- реквизит, дающий ссылку на оригинальный элемент или документ, породивший данный элемент журнала.
  • @ISFOLDER -- Задает числовое значение, является ли текущий элемент журнала папкой (1) или обычным элементом (0). Используется только для журналов справочников.
  • @STATUS -- Задает числовое значение статуса текущего элемента журнала. Статус элемента всегда соответствует статусу оригинального объекта журнала. Для журналов справочников это значение может быть 0 -- для обычного элемента, 1 -- для удаленного элемента, для журналов документов: 0 -- для обычного элемента, 1 -- для удаленного элемента, 2..200 -- оригинальный документ элемента обработан с пометкой @STATUS-1.
  • @LINKTYPE -- Реквизит указывает на тип оригинального объекта. Аргументом фильтра в этом случае должна быть строка или список, состоящий из строк. Аргумент должен указывать на тип объекта отбора в формате <Тип объекта>.<Вид объекта> (к примеру "Doc.Реализация" будет производить отбор только документов типа реализация для журнала).

Реквизиты элементов журналов

Каждый реквизит элемента журнала соответствует одному полю в таблице в базы данных. В программе доступ к реквизитам обычно осуществляется по их имени: <Объект БД>.<Имя реквизита>. Имя каждого реквизита уникально в пределах одного журнала, и имеет стандартные ограничения для создания имен (коды символов не могут быть меньше 65 (латинская A), но могут содержать цифры, использование знаков [, ], \, /, {, }, |, ^, ~, ¦, ` запрещено, имя может содержать международные символы).

Контекстное меню позволяет добавлять или удалять реквизиты, а также копировать и вставлять их. При вставке скопированного реквизита, все свойства нового будут взяты из старого, однако наименование будет изменено (добавлен префикс, чтобы сохранить уникальность имен).

Реквизиты имеют следующие свойства в редакторе свойств:

  • Наименование (Name) -- задает наименование реквизита.
  • Заголовок (Caption) -- используется в диалогах выбора реквизитов в клиентах, выступает как более читабельная альтернатива имени.
  • Описание (Description) -- используется для описания использования реквизита в проекте для разработчиков, во встроенной помощи, или в программе.
  • Тип данных (DataType) -- задает тип данных реквизита. Каждый реквизит может иметь тип данных строка, число, дата, ссылка на другой объект конфигурации или на несколько объектов. Для редактирования типов данных вызывается редактор типов данных.
  • Сопоставление с реквизитами оригинальных объектов (MembersLinks) -- хранит таблицу сопоставления текущего реквизита с реквизитами объектов, входящих в этот журнал. При изменении и сохранении оригинального объекта, элемент журнала, связанный с ним, будет обновлен, если реквизит журнала имеет сопоставление с реквизитом сохраняемого объекта, значение реквизита журнала будет обновлено. Если реквизит не имеет сопоставления с сохраняемым объектом, его значение изменено не будет. Это позволяет хранить в дополнительных или неиспользуемых реквизитах уникальную информацию. См. ниже параграф описывающий редактор.
  • Индексация реквизита (IsIndexed) -- свойство позволяет создать для этого реквизита свой индекс в базе данных, что может ускорить поиск по этому реквизиту. Нужно помнить, что каждый индекс замедляет сохранение элементов справочников, важно понимать, реальную необходимость в создании индекса.
  • Полнотекстовый поиск (IsFullTextSearch) -- свойство включает реквизит в каталог полнотекстового поиска в базе данных. После включения, при поиске, можно использовать префиксы поиска ~ (см. Стандартные фильтры).
  • Запретить пустое значение (IsDenyEmpty) -- свойство позволяет запретить интерактивное сохранение журналов, если данный реквизит не был заполнен каким-либо значением. Обычно элементы журнала не редактируются интерактивно.
  • Разрешить хранить папки в реквизите (IsFolderAllowed) запрещает или разрешает интерактивно выбирать не только элементы, но и папки, как значения данного реквизита. Обычно элементы журнала не редактируются интерактивно.
  • Разрешать международные символы (IsUnicode) -- Установка позволяет хранить UTF-16 текст в содержимом текстовых реквизитов (по умолчанию используется ANSI). Нужно понимать, что такие поля занимают в два раза больше места в базе данных.

Перечисления

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

Перечисления могут служить как более понятная и удобочитаемая альтернатива числовым данным, когда значение поля является перечисляемым. К примеру, тип номенклатуры может быть "товар", "произведенная продукция" или "основное средство". Поле ТипНоменклатуры может быть заведено, как число, при этом 0 будет соответствовать товару, 1 произведенной продукции и т.п., но может также быть заведено как перечисление с тремя значениями. Обращение к имени перечислений в программе облегчает читабельность программ и упрощает поиск по всем файлам для нахождения обращений к нужным данным. Кроме того, при удалении значения перечисления в проекте или добавлении нового, нет необходимости перенумеровывать данные в реквизитах, где оно хранится, так как для новых значений всегда задается новый внутренний код. С цифрами же будет необходимо либо перенумеровать все старшие цифры, уменьшив их на единицу, либо примериться с тем, что в определенном поле можно задать числа от 1 до 5, кроме числа 3, так как оно больше не используется.

Значения перечисления не содержат других данных и не загружаются из базы данных. В программе журналы имеют особый интерфейс Enum в рамках которого, либо с помощью интерфейса DB, можно создать перечисление или значение перечисления. К примеру, можно обратиться к значению по имени Enum.<Наименование перечисления>.<Наименование значения перечисления>, либо создать с помощью функции Get. Перечисления участвуют в запросах как фильтры.

Имя каждого перечисления уникально в пределах проекта, имя каждого значения перечисления уникально в пределах перечисления. Имена имеют стандартные ограничения для создания имен (коды символов не могут быть меньше 65 (латинская A), но могут содержать цифры, использование знаков [, ], \, /, {, }, |, ^, ~, ¦, ` запрещено, имя может содержать международные символы). См. также статью Объект базы данных

Ветка Перечисления (Enumerations) может содержать вложенную структуру папок любого уровня. Структура папок, в которой находится перечисление, никак не влияет на его свойства.

Контекстное меню позволяет добавлять или удалять перечисления или папки структуры, в которую они помещены, а также копировать и вставлять их. При вставке скопированного перечисления, все свойства нового будут взяты из старого, однако наименование будет изменено (добавлен префикс, чтобы сохранить уникальность имен).

Перечисления имеют следующие свойства в редакторе свойств:

  • Наименование (Name) -- задает наименование перечисления.
  • Заголовок (Caption) -- используется в диалогах выбора типов данных для описания перечисления, в частности из-за того, что наименование обычно не содержит пробелов.
  • Описание (Description) -- используется для описания использования перечисления в проекте для разработчиков, во встроенной помощи, или в программе.
  • Значения перечисления (Values) -- открывает редактор значений перечисления, где можно добавить, удалить или изменить значения данного перечисления. Каждое значение имеет два свойства: "наименование" -- имя значения, по которому будет происходить обращение к нему и "представление" -- имя, которое будет отображаться, когда значение перечисления будет выведено на экран. Если представление не задано, при выводе на экран будет использоваться наименование значения.

Накопители

Накопители -- дополнительные зависимые таблицы, обычно используются для накопления статистической цифровой информации в нужных разрезах, записи накопителей часто датированы, имеют оптимизацию по нахождению суммы реквизита для датированных записей с первых записей базы данных до нужной даты и времени записи (сальдо или итог). Записи накопителей зависимы и связаны с документами базы данных, записи, не связанные с документами в текущей реализации не предусмотрены, в частности из-за того, что записи таблиц накопителей не могут быть представлены, как самостоятельный объект данных в системе. Цифровые реквизиты накопителей, по которым будет производится суммирование или другие операции, называются активами. Для простых накопителей, активы ничем не отличаются от остальных реквизитов. Однако, если записи накопителей датированы (т.е., для каждой записи задана ее дата и время, которая обычно совпадает с датой документа, с которым связана запись, но может и отличаться от даты документа), для определенных реквизитов можно задать дополнительный флаг -- аккумулятор. В этом случае, в базе данных для накопителя создается вторая таблица -- таблица итогов, которая содержит только реквизиты-аккумуляторы и реквизиты-активы. Таблица и итогов используется для оптимизации скорости нахождения итогов аккумуляторов с начала периода базы до указанного момента. Таблица хранит буферные записи по итогам всех активов в разрезе всех аккумуляторов за определенные даты времени (обычно на конец каждого месяца). При нахождении итогов аккумулятора на определенную дату без таблицы итогов требуется найти сумму поля аккумулятора в базе данных для всех записей базы данных, дата которых меньше или совпадает с датой поиска, таких записей может быть очень много (иногда много миллионов), что может занять продолжительное время. При наличии таблицы итогов, система находит значение аккумулятора в таблице итогов за дату периода, предшествующего дате поиска и складывает его со значениями аккумулятора записей обычной таблицы накопителя с датами после даты записи таблицы итогов до даты поиска. Таких записей может быть гораздо меньше (к примеру, для баз данных, существующих продолжительное время -- 5 лет, таких записей будет в среднем в (5*12-1) 59 раз меньше), что может значительно ускорить вычисление итога.

У таблиц итогов есть свои минусы, -- они замедляют сохранение записей в накопитель. При сохранении группы записей в накопитель, система должна обновить записи таблицы итогов за периоды, лежащие после дат записей, и чем больше таких периодов, тем больше изменений необходимо выполнить в таблице. Замедление сохранения записей в накопители с итогами компенсируется более быстрым формированием отчетов с итогами по этим накопителям. Кроме того, обычно в базе создаются и изменяются документы, датированные текущей датой, для которых при записи в накопители в таблицах итогов необходимо изменить только один период -- текущий (если не существует записей с датами будущих периодов).

В программе накопители имеют особый интерфейс Stor в рамках которого, либо с помощью запросов (Query), можно найти итоги активов накопителей или получить суммы их значений за какой-либо период (см., к примеру, Total). Имя каждого накопителя уникально в пределах проекта, и имеет стандартные ограничения для создания имен (коды символов не могут быть меньше 65 (латинская A), но могут содержать цифры, использование знаков [, ], \, /, {, }, |, ^, ~, ¦, ` запрещено, имя может содержать международные символы). См. также статью Объект базы данных.

Ветка Накопители (Storages) может содержать вложенную структуру папок любого уровня. Структура папок, в которой находится накопитель, никак не влияет на его свойства.

Контекстное меню позволяет добавлять или удалять накопители или папки структуры, в которую они помещены, а также копировать и вставлять их. При вставке скопированного накопителя, все свойства нового будут взяты из старого, однако наименование будет изменено (добавлен префикс, чтобы сохранить уникальность имен).

Накопители имеют следующие свойства в редакторе свойств:

  • Наименование (Name) -- задает наименование накопителя.
  • Заголовок (Caption) -- используется в диалогах выбора типов данных для описания накопителя, в частности из-за того, что наименование обычно не содержит пробелов.
  • Описание (Description) -- используется для описания использования накопителя в проекте для разработчиков, во встроенной помощи, или в программе.
  • Записи накопителя датированы (IsPeriodicalStorage) -- параметр указывает на то, что записи данного накопителя датированы (см. выше).
  • Период накопления итогов (TotalsPeriod) -- параметр позволяет выбрать период накопления итогов накопителей, записи которых датированы, и у которых есть по крайней мере один актив и один аккумулятор (см. выше). Рекомендуемый период итогов -- месяц, если период сделать слишком маленьким, сохранение записей в накопитель будет сильно замедлено и таблица итогов будет расти очень быстро, увеличивая объем базы данных. Если период сделать слишком большим, скорость нахождения итогов замедлится.
  • Записи содержат признак приход или расход (UsesDebitCreditMark) -- параметр указывает на то, что каждая запись накопителя будет содержить дополнительный признак приход или расход, для случаев, когда знака аккумулятора в записях недостаточно.
  • Составные и особые индексы (CompositeIndexes) -- свойство используется для задания дополнительных индексов базы данных, состоящих из нескольких реквизитов последовательно (составной индекс) или особых полей и реквизитов. Для отдельных реквизитов, по которым часто осуществляется поиск, легко задать индекс непосредственно в свойствах реквизита, однако, когда необходимо задать индекс связки реквизитов, возможно, с участием особых полей (к примеру, @LINEID, @DATE), можно использовать это свойство. Свойство позволяет хранить произвольное количество индексов. Нужно помнить, что каждый индекс замедляет сохранение элементов справочников, важно понимать, реальную необходимость в создании индекса.

При работе с запросами или временными таблицами, для доступа к скрытым (особым) реквизитам накопителей заданы следующие константы:

  • @LINK -- Указывает оригинальный документ, к которому привязана текущая запись накопителя.
  • @EXPENSE -- Для записей накопителей, для которых разрешен признак приход или расход, задает флаг расхода.
  • @DATE -- Задает дату записи для накопителей, записи которых датированы.
  • @SECOND -- В запросах (query), задает дату записи для накопителей, записи которых датированы. Время даты корректируется на начало секунды. Позволяет производить группировку движений накопителя в разрезе секунд.
  • @MINUTE -- В запросах (query), задает дату записи для накопителей, записи которых датированы. Время даты корректируется на начало минут. Позволяет производить группировку движений накопителя в разрезе минут.
  • @HOUR -- В запросах (query), задает дату записи для накопителей, записи которых датированы. Время даты корректируется на начало часов. Позволяет производить группировку движений накопителя в разрезе часов.
  • @DAY -- В запросах (query), задает дату записи для накопителей, записи которых датированы. Время даты корректируется на начало дня. Позволяет производить группировку движений накопителя в разрезе дней.
  • @WEEK -- В запросах (query), задает дату записи для накопителей, записи которых датированы. Время даты корректируется на начало недели. Позволяет производить группировку движений накопителя в разрезе недель.
  • @MONTH -- В запросах (query), задает дату записи для накопителей, записи которых датированы. Время даты корректируется на начало месяца. Позволяет производить группировку движений накопителя в разрезе месяцев.
  • @QUARTER -- В запросах (query), задает дату записи для накопителей, записи которых датированы. Время даты корректируется на начало квартала. Позволяет производить группировку движений накопителя в разрезе кварталов.
  • @YEAR -- В запросах (query), задает дату записи для накопителей, записи которых датированы. Время даты корректируется на начало лет. Позволяет производить группировку движений накопителя в разрезе лет.

Реквизиты накопителей

Имя каждого реквизита уникально в пределах накопителя, и имеет стандартные ограничения для создания имен (коды символов не могут быть меньше 65 (латинская A), но могут содержать цифры, использование знаков [, ], \, /, {, }, |, ^, ~, ¦, ` запрещено, имя может содержать международные символы).

Контекстное меню позволяет добавлять или удалять реквизиты, в папке реквизитов и папке активов, а также копировать и вставлять их. При вставке скопированного реквизита, все свойства нового будут взяты из старого, однако наименование будет изменено (добавлен префикс, чтобы сохранить уникальность имен). Реквизиты в папке активов могут иметь только числовой тип данных.

Реквизиты имеют следующие свойства в редакторе свойств:

  • Наименование (Name) -- задает наименование реквизита.
  • Заголовок (Caption) -- используется в диалогах выбора реквизитов в клиентах, выступает как более читабельная альтернатива имени.
  • Описание (Description) -- используется для описания использования реквизита в проекте для разработчиков, во встроенной помощи, или в программе.
  • Тип данных (DataType) -- задает тип данных реквизита. Обычные реквизиты могут иметь тип данных строка, число, дата, ссылка на другой объект конфигурации или на несколько объектов, для реквизитов-активов разрешен только числовой тип данных. Для редактирования типов данных вызывается редактор типов данных.
  • Индексация реквизита (IsIndexed) -- свойство позволяет создать для этого реквизита свой индекс в базе данных, что может ускорить поиск по этому реквизиту. Нужно помнить, что каждый индекс замедляет сохранение записей накопителей, важно понимать, реальную необходимость в создании индекса.
  • Реквизит является аккумулятором (IsAccumulator) -- Для стандартных реквизитов (не активов) позволяет выделить этот реквизит, как измерение таблицы итогов. Записи таблицы итогов за любой период содержат итоги по всем активам в разрезе всех аккумуляторов. Чем больше аккумуляторов в накопителе, тем медленнее происходит сохранение данных в него и тем больший размер имеет его таблица итогов.
  • Разрешать международные символы (IsUnicode) -- Установка позволяет хранить UTF-16 текст в содержимом текстовых реквизитов (по умолчанию используется ANSI). Нужно понимать, что такие поля занимают в два раза больше места в базе данных.

Пользовательские компоненты (макросы)

Пользовательские компоненты интерфейса (макросы) используются для выделения часто встречающихся частей интерфейса форм в отдельную особую форму. Эту форму-макрос в дальнейшем можно помещать на другие формы (или макросы), тем самым упрощаю разработку форм и приводя графический интерфейс к одному последовательному виду. Макрос не имеет модулей, таблиц и прочих элементов объекта конфигурации проекта, и представляет собой одну форму. В связи с такой ограниченной функциональностью макроса, работа с ними имеет свою специфику:

  • Все программы, связанные с интерфейсом, который содержится в макросе, необходимо помещать в визуальные события элементов интерфейса макроса. Вызов функций глобальных модулей разрешен.
  • Если элементы макроса, связаны с реквизитами объекта базы данных (к примеру, поля редактирования), в момент инициализации макроса (в событии OnOpen) необходимо использовать функцию BindToProperty, чтобы привязать поле к реквизиту редактируемого объекта. При редактировании макроса в Студии это невозможно сделать по двум причинам: 1. форма макроса не находится внутри объекта, поэтому, его реквизиты при редактировании формы будут недоступны, 2. макрос может быть использован для разных объектов, и, даже в случае когда реквизиты разных объектов называются одинаково, они являются совершенно разными реквизитами для базы данных.
  • Имена визуальных объектов макроса могут совпадать с именами объектов на реальной форме. В этом случае, может получиться ситуация, когда доступ даже к собственным визуальным объектам из макроса будет ограничен. Чтобы обойти эту проблему, приходится применять функцию CurrentEventControl для получения имени объекта макроса. При нахождении визуального элемента с помощью функции Control можно указывать имя макроса, чтобы обратиться к его визуальным элементам по их именам.
  • Вызовы визуальных событий формы OnOpen, OnReopen, OnSaveRequest, OnStatusChange кроме самой формы происходят также для всех макросов, где они заданы. При этом события сначала вызываются для самой формы, потом уже для макросов, которые она содержит.
  • Каждая закладка визуальный элемента группы страниц с закладками (page control) с программной точки значения представляет собой макрос, и обладает многими свойствами макросов.

Имя каждого макроса уникально в пределах проекта, и имеет стандартные ограничения для создания имен (коды символов не могут быть меньше 65 (латинская A), но могут содержать цифры, использование знаков [, ], \, /, {, }, |, ^, ~, ¦, ` запрещено, имя может содержать международные символы).

Ветка Пользовательские компоненты (макросы) (Macros) может содержать вложенную структуру папок любого уровня. Структура папок, в которой находится макрос, никак не влияет на его свойства.

Контекстное меню позволяет добавлять или удалять макросы или папки структуры, в которую они помещены, а также копировать и вставлять их. При вставке скопированного макроса, все свойства нового будут взяты из старого, однако наименование будет изменено (добавлен префикс, чтобы сохранить уникальность имен). Уникальным пунктом контекстного меню является "Найти все формы, использующие макрос".

Макросы имеют только одно свойство в редакторе свойств -- Наименование (Name), которое задает его наименование.

Свободные обработки

Свободные обработки используются для создания отчетов, печатных форм, обработки входящих или выгрузки исходящих данных, как отдельные потоки для обработки входящих HTTP запросов и для любых прикладных задач. Обработку можно вызвать с помощью функции LoadModule, файлами или таблицами внутри обработок можно воспользоваться из других объектов или обработок. Серверный путь к файлам обработок выглядит следующим образом Modules\FreeForms\<Путь к обработке внутри структуры обработок>\<Имя обработки> (к примеру, Modules\FreeForms\УчетныеОтделы\ТранспортныеСредства\ВедомостьПоСтоимостиГСМ). Свободные обработки как и большинство объектов конфигурации проекта, имеют свои модули, формы, электронные таблицы (см. Структура стандартного объекта дерева конфигурации выше). В объект свободной обработки также можно добавлять ini-файлы или другие бинарные файлы. Обработки нельзя открывать в режиме редактирования объекта (OpenObject), так как они не принадлежат к веткам объектов базы данных, однако, формы обработок могут содержать таблицы, привязанные к базе данных, как и любые формы объектов.

Имя каждой обработки уникально в пределах проекта, и имеет стандартные ограничения для создания имен (коды символов не могут быть меньше 65 (латинская A), но могут содержать цифры, использование знаков [, ], \, /, {, }, |, ^, ~, ¦, ` запрещено, имя может содержать международные символы).

Ветка Свободные обработки (FreeForms) может содержать вложенную структуру папок любого уровня. Структура папок, в которой находится обработка, никак не влияет на ее свойства.

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

Обработки имеют только одно свойство в редакторе свойств -- Наименование (Name), которое задает их наименование.

Общие нумераторы

Общие нумераторы не являются объектами базы данных, а служат как указания на правила автоматического формирования или задания ограничений в значениях реквизитов в реальных объектах. Иногда требуется, чтобы поля разных объектов имели уникальное значение между собой (к примеру, нумерация разных документов, используемых в отчетности, как совершенно одинаковые строки таблицы, которые должны иметь разные номера). Так как это разные объекты, при создании значения таких реквизитов, требовался бы сложный и, зачастую медленный код, устанавливающий блокировки на заранее определенный серверный семафор, после чего необходимо было бы выполнить запросы к реквизитам всех объектов, для получения максимального номера. Общие нумераторы позволяют решить эту задачу чуть более удобным образом, без создания дополнительного кода, с использованием стандартных методов системы. Однако, чем больше объектов будет использовать общий нумератор, тем медленнее будет работать процедура создания его значения, так как система автоматически выполняет запросы по всем объектам, использующим общий нумератор. Если нумератор использует слишком большое число объектов, быстрее было бы создать особый справочник с реквизитом, являющимся обычным нумератором и копировать его значения в создаваемые объекты, с реквизитами, требующими общую нумерацию. См. также статью Объект базы данных.

Общий нумератор имеет следующие свойства (задающиеся в диалоге "свойства нумератора"):

  • Тип данных -- нумератор может иметь тип данных строка или число. В случае, если нумератор имеет тип данных строка, система позволяет использовать префиксы при нахождении новых номеров. Префикс -- первые несколько символов номера нумератора могут быть заданы программно в момент нумерации или по умолчанию при создании нумератора в Студии. В случае присутствия префикса новый последовательный номер подбирается среди номеров реквизитов, который также используют подобный префикс. Если в базе данных отсутствуют записи с нумеруемыми реквизитами, имеющими такой префикс, будет создан новый номер -- единица. После указания префикса, обычно следует некоторое количество нулей и сам цифровой номер, с тем, чтобы вся конструкция уместилась в требуемую длину номера. Если следующий найденный номер выходит за пределы длины нумератора с учетом префикса номера (если он присутствует), сервер передает ошибку и система вызовет исключение и отменит текущую операцию, приведшую к нумерации (запись или создание нового объекта в зависимости от режима нумератора).
  • Длина номера -- задается только для текстовых нумераторов. Для цифровых нумераторов используется целое число с размерностью в 64 бита (см. Числа).
  • Контроль длины номера -- задает режим, когда сервер проверяет соблюдение и запрещает сохранение базы данных текстовых номеров, длина которых меньше заданной длины нумератора. Таким образом, производится форсирование корректной длины номеров, которые задаются вручную пользователями, средствами системы.
  • Префикс по умолчанию -- задает префикс номеров нумератора по умолчанию. Обычно это пустая строка или "0", т.е., номера не будут содержать префиксов.
  • Периодичность нумератора -- задает режим, когда наряду с префиксом максимальный номер нумератора ищется среди записей объектов входящих в определенный диапазон дат. Для определения даты записи в каждом из реквизитов, использующих такой нумератор, задается ссылка на реквизит этого же объекта, имеющий тип дата и время. К примеру, для документов удобно, чтобы номера увеличивались в течение года и начинались с единицы в новом году, это позволяет использовать более маленькие и удобные для работы номера и не дает им переполниться после некоторого количества лет. Для этого в реквизитах номера документа задается ссылка на реквизит даты документа и устанавливает периодичность номера равной году. Периодичность номера может иметь следующие режимы: год, месяц, квартал, день, и не зависеть от реквизита даты вообще (режим по умолчанию)
  • Контроль уникальности -- задает дополнительный режим поиска новых номеров нумератора и проверки их уникальности. Параметр может иметь следующие значения:
    • По всем данным -- система будет проверять уникальность нумератора по всем записям с учетом префиксов и периодичности номера. Если устанавливаемый номер не уникален, сервер передает ошибку и система вызовет исключение и отменит текущую операцию. Данный режим является режимом по умолчанию.
    • В пределах родителя -- задает контроль уникальности и поиск записей при нумерации с учетом префиксов и периодичности номера для элементов справочников внутри элемента справочника-родителя. В этом случае, номера всех подчиненные элементы будут начинаться с единицы для нового элемента справочника родителя.
    • В пределах папки -- задает контроль уникальности и поиск записей при нумерации с учетом префиксов и периодичности номера для элементов справочников или строк строчных частей внутри папки, в которую помещены эти элементы или строки.
    • В пределах элемента -- задает контроль уникальности и поиск записей при нумерации с учетом префиксов и периодичности номера для строк строчных частей, элемента или документа. Т.е., строки нового документа будут нумероваться заново. Внимание: это относится к дополнительным реквизитам строк, участвующим в нумерации. Сами строки последовательно пронумерованы особым реквизитом @LINEID, который не имеет отношение дополнительным реквизитам нумерации (к примеру, если строки поменяются местами, их @LINEID изменится, однако, значения реквизитов-нумераторов, присвоенные раньше, останутся прежними).
    • Отсутствует -- равнозначно режиму "по всем данных", однако, без проверки уникальности номеров. В базу можно будет сохранять реквизиты с уже существующими номерами. Система будет по прежнему сама заниматься нумерацией реквизитов, и дублирующиеся значения реквизитов могут появиться только в случае, когда пользователи ввели номера для реквизитов новых объектов самостоятельно.
  • Автонумерация -- режим позволяет задать время резервирования номеров нумераторов в системе. Возможны следующие значения параметра:
    • Нумеровать автоматически при записи -- задает режим по умолчанию, когда система сама будет подбирать номер с учетом всех условий (префикс, периодичность, контроль) в момент, когда объект базы данных с пустым реквизитом нумерации сохраняется в базу данных. Если в момент сохранения реквизит нумерации заполнен (пользователем или ранее самой системой), он пройдет проверку на уникальность (если таковая предусмотрена), но изменен не будет.
    • Нумеровать автоматически при создании -- задает режим, когда система сама будет подбирать номер с учетом всех условий (префикс, периодичность, контроль) в момент, когда создается новый объект базы данных. Такие номера сохраняется в специальной таблице на сервере и при создание второго объекта будет создан другой номер. Реквизиты нумерации можно изменить до сохранения, в любом случае, при сохранении он должен быть заполнен, и пройдет проверку на уникальность (если таковая предусмотрена).
    • Не нумеровать автоматически -- задает режим, когда система не будет пытаться сама подобрать значения нумератора. При сохранении объектов, реквизит с нумератором должен быть уже заполнен.

Имя каждого нумератора уникально в пределах проекта, и имеет стандартные ограничения для создания имен (коды символов не могут быть меньше 65 (латинская A), но могут содержать цифры, использование знаков [, ], \, /, {, }, |, ^, ~, ¦, ` запрещено, имя может содержать международные символы).

Ветка Нумераторы (Numerators) может содержать вложенную структуру папок любого уровня. Структура папок, в которой находится нумератор, никак не влияет на его свойства.

Контекстное меню позволяет добавлять или удалять нумераторы или папки структуры, в которую они помещены, а также копировать и вставлять их. При вставке скопированного нумератора, все свойства нового будут взяты из старого, однако наименование будет изменено (добавлен префикс, чтобы сохранить уникальность имен).

Нумераторы имеют следующие свойства в редакторе свойств:

  • Наименование (Name) -- задает наименование нумератора.
  • Описание (Description) -- используется для описания использования нумератора в проекте для разработчиков, во встроенной помощи, или в программе.
  • Свойства нумератора (Numerator) -- открывает диалог редактирования остальных свойств нумератора, описанных несколькими параграфами выше.

Редактор автоматической регистрации в журнале регистрации событий

Диалог используется для изменения установок автоматической регистрации событий в журнале регистрации событий. Журнал используется для ведения логов базы данных по изменению объектов базы данных, чтобы можно было знать, кто и когда менял определенные объекты или совершал определенные операции. Система может сама записывать информацию в журнал, в моменты изменения или удаления объектов, обработки документов и пр., программа также может самостоятельно создавать записи в журнале с различным содержимым (см. Logs.Write). Для настройки автоматической регистрации событий используется диалог, показанный на рис. 4. Диалог содержит следующие флажки:

  • Интерактивное изменение (запись, удаление и пр.) -- режим создает запись для сохраняемых объектов, открытых для редактирования в виде формы, либо удаляемых из журнала или таблицы справочника с помощью стандартного действия удавления. Такие действия считаются интерактивными, так как непосредственно их инициируется пользователь. Обычно режим рекомендуется к использованию.
  • Интерактивное создание объекта -- режим создает запись новых объектов, создаваемых пользователем в графическом интерфейсе (к примеру, пользователь создает элемент справочника). Режим не рекомендуется для использования, так как подобные события имеют мало смысла.
  • Интерактивное открытие (для чтения или редактирования) -- режим создает запись для объектов, открываемых пользователем интерактивно. Режим не рекомендуется для использования в обычных ситуациях, так как он может создавать большое количество записей, которые будут увеличивать скорость роста базы данных.
  • Программное изменение -- режим создает запись для объектов сохраняемых или удаляемых программно, без участия пользователя. Такие объекты могут меняться с помощью обработок, администратор может менять реквизиты большого количества объектов при необходимости, каждое такое изменение создаст свою запись в журнале регистрации событий. Режим не рекомендуется для использования, так как он может сильно увеличить скорость роста базы данных и замедлить сохранение объектов.
  • Интерактивная обработка документа (отмена обработки) -- режим создает запись для документов, открытых интерактивно в момент их обработки или отмены обработки. Обычно режим рекомендуется к использованию.
  • Программная обработка документа (отмена обработки) -- режим создает запись для документов, которые обрабатывает или отменяет обработку которых программа, без интерактивного открытия в виде формы. Обычно режим рекомендуется к использованию.

Редактор объектов, входящих в журнал и их реквизитов

  • Рис. 6. Диалог редактора объектов, входящих в журнал
  • Рис. 7. Диалог редактора связей реквизита журнала

Для добавления объектов журнал или удаления их из журнала используется диалог редактора объектов, входящих в журнал (рис. 6). Этот диалог вызывается из свойств журнала и позволяет с помощью установки флажков добавить или удалить объект из журнала. Внимание! Добавление нового объекта в журнал вызовет длительный пересчет журнала, если в рабочей базе данных журнал содержит достаточно много записей! Кроме того, если объект участвует сразу во множестве журналов, скорость его сохранения может замедлиться, так как при каждом сохранении необходимо обновлять реквизиты объекта в каждом из журналов.

После добавления объекта в журнал, необходимо также установить, какие из реквизитов объекта будут отражаться в записях журнала, связанных с записями объекта (элементами справочника или документами). Для этого существует диалог редактора связей реквизита журнала с реквизитами объектов (см. рис. 7). Диалог вызывается из свойств реквизита журнала и состоит из двух панелей. В первой панели отображается структура дерева объектов со всеми объектами, входящими в журнал. Флажки рядом с именами объектов означают, что данный реквизит журнала сопоставлен с реквизитом объекта с флажком. Флажки изменяются автоматически по мере работы с диалогом и носят информативную функцию. При выделении любого из объектов в левой панели, в правой откроется список реквизитов объекта, тип данных которых позволяет им быть сопоставленными с текущим реквизитом журнала. В каждом из объектов, входящих в журнал, может быть сопоставлен только один реквизит с одним реквизитом журнала, значение этого реквизита будет скопировано в запись объекта журнала из реквизита объекта при его сохранении. Задача разработчика выбрать и отметить тот реквизит, который будет сопоставлен с текущим реквизитом журнала, чаще всего реквизит имеет такое же наименование, как и сопоставляемый реквизит, поэтому, для ускорения операции в диалоге существует кнопка "Расставить по наименованию", которая сопоставляет автоматически реквизиты объектов, имеющих то же самое наименование, как и текущий реквизит журнала и подходящих по типу данных.