Статьи

Элементы файла DDS.

В этом файле хранится информация о соответствии объектов метаданных и SQL объектов. Сам файл текстовый и структура его достаточно прозрачна.
Из всего множества записей для нас представляет интерес лишь несколько, а именно, наименование объекта метаданных, наименование SQL объекта, а для хранимых процедур еще и поле "Source", которое позволит проанализировать ее назначение.
Например, создадим в конфигураторе новый справочник "Справочник1" с единственным реквизитом "Реквизит1". После сохранения конфигурации, просматривая файл по вхождению "Справочник1", мы увидим, что наш справочник хранится в таблице SC12, а реквизиту "Реквизит1" соответствует поле SP14 этой таблицы. Далее просматривая файл по вхождению "SC12" можно заметить, что 1С для нового справочника создала несколько служебных хранимых процедур:
  • _1sp_SC12_ByID - процедура предназначена для получения информации о записи с заданным идентификатором;
  • _1sp_SC12_MaxID - данная процедура, совместно с _1sp_SC12_MaxRowID, участвует в алгоритме формирования нового элемента справочника;
  • _1sp_SC12_TLock и _1sp_SC12_TLockX - реализуют алгоритм блокировок 1С.
Просматривая DDS файл после создания в конфигурации нового документа можно заметить, что для документов создаются только процедуры вида TLock и TLockX, так как за ввод новых документов отвечает таблица _1SJOURN.
Хранимые процедуры, создающиеся при создании нового регистра, мы рассмотрим статье, посвященной регистрам.
Еще следует упомянуть несколько служебных процедур:
  • _1sp_GetNextPeriod, _1sp_GetEndOfPeriod, _1sp_GetBeginOfPeriod - данные процедуры предназначены для получения дат в зависимости от настроек 1С.
  • _1sp_DBReindex (в файле DDS не указана) - процедура предназначена для переиндексации базы данных. Небольшое замечание: если в базе данных будет присутствовать пользовательская таблица (не созданная самой 1С) с длиной имени более 32 символов (данное ограничение пришло с SQL Server 6.5), то процедура будет работать не корректно. А именно пользовательские таблицы не будут переиндексироваться. Для исправления необходимо заменить строку "DECLARE @TableName char(32)" на строку "DECLARE @TableName sysname".
Hosted by uCoz