1С В какой таблице находится справочник Контрагенты

1С В какой таблице находится справочник Контрагенты

Справочники

Начинаем со справочников: именно в этих структурах могут храниться фактически все типы данных, кроме того, именно справочники являются базовым понятием и для некоторых других объектов (например, для видов субконто, расчётов и т.п). В описании будут встречаться ссылки на объекты метаданных и их реквизиты, приведенные в таблицах в предыдущих главах статьи.

1С В какой таблице находится справочник Контрагенты

Справочники

Начинаем со справочников: именно в этих структурах могут храниться фактически все типы данных, кроме того, именно справочники являются базовым понятием и для некоторых других объектов (например, для видов субконто, расчётов и т.п). В описании будут встречаться ссылки на объекты метаданных и их реквизиты, приведенные в таблицах в предыдущих главах статьи.

Некоторые поля в таблицах содержат числовые значения в системе счисления, отличной от десятичной: 16/36/64-ричной. К наименованиям таких полей будет добавляться суффикс [int] (internal).

Кроме этого, в качестве сокращений будут употребляться PKey (PrimaryKey) и FKey (ForeignKey).

SCxxxx.DBF – таблица справочника, где xxx – ID объекта-справочника.

"Содержит данные справочника конкретного вида. Каждый справочник хранится в отдельном файле." [© 1С].

 

  • ID [int] – PKey таблицы, значение в 36/64-ричной системе (в зависимости от версии V7), нумеруется с единицы. Тип – Char(9). Обращение к справочнику происходит всегда именно по ID. Справочник «отдает» при этом обращении либо код, либо наименование (в зависимости от значения Sbcnts.ret_tip в MMS).
  • CODE – код справочника. Тип – всегда Char, вне зависимости от реквизита Sbcnts.kod_tip, определенного в MMS. Длина поля – Sbcnts.kod_size.
  • DESCR – наименование справочника. Тип – Char. Длина поля – Sbcnts.naim_size.
  • ISMARK – пометка на удаление. Тип – Char(1). Если запись помечена – в этом поле "*" (chr(42)). При пометке на удаление поддерживается ссылочная целостность: все подчиненные записи (как в этой, так и в других таблицах) также помечаются.
  • VERSTAMP [int] – количество изменений записи. Изменением считается любое действие "Изменить (открыть)" + действия при изменении структуры. Появилось в 7.7.
  • ISFOLDER и PARENTID [int] – поля, моделирующие иерархическую структуру справочника. Типы, соответственно, Numeric(1,0) и Char(9). ISFOLDER принимает значения 1 (признак группы) или 2 (признак элемента). PARENTID – ссылка (FKey) на ID записи о группе в этой же таблице. В 7.5 – эти поля присутствовали в любом справочнике, в 7.7 – только в тех, у которых Sbcnts.max_level>1.
  • PARENTEXT [int] – ссылка (FKey) на ID «владельца» в другом справочнике. Тип – Char(9). Владелец определяется Sbcnts.Owner_id. Поле присутствует в 7.7 в зависимости от наличия Sbcnts.Owner_id, в 7.5 – всегда.
  • SPyyy – эти поля полностью определяются подклассом Sbcnts.Params.yyy=Params.ID, тип поля соответствует Params.Type, size и dec – также определяется соответствующими реквизитами. Если Params.Type=N/S/D – в поле хранятся непосредственно значения. При строковом типе и Size=0 – строка неограниченной длины, хранится в 1SBLOB.DBF. Для остальных типов – в поле хранятся ссылки на значения из других таблиц или метаданных.

    В случае типа=B/O/T/C/A (значения которых хранятся в таблицах), в поле SPyyy хранится ссылка на соответствующую таблицу. Если на момент формирования структуры хранения известен конкретный источник данных (т.е. Params.Source_Id<>0) – поле SPyyy содержит только номер записи (PKey) соответствующей таблицы (9 знаков [int]).

    Если же на момент формирования структуры хранения Params.Source_Id=0 – например «справочник вообще» – поле SPyyy содержит, помимо 9-и байтового номера записи ещё и ID [int] соответствующего этой таблице объекта метаданных (в первых 4-х байтах).

    Значения для типов E/P/K не хранятся в таблицах, а выбираются непосредственно из метаданных по своему уникальному во всей системе ID, поэтому значением поля SPyyy является всегда является ссылка на ID [int] необходимого объекта (хотя и размещается эта ссылка не в 4-х, а в 9-и байтах).

    В случае, если Params.Type=U (значение неопределенного типа) – поле SPyyy имеет длину 23 байта и содержит в первых 2-х символах информацию о фактически хранящемся типе значения (например N для Numeric, B1 для типа B, E1 для типа E, и т.п.), в остальных символах – аналогично предыдущему (4+9).

    Любое поле SPyyy неопределенного типа (U) сопровождается полем TSPyyy типа Char(3), с назначением которого я не разобрался (похоже что оно всегда empty, если поле SPyyy пусто).

    При отсутствии значений в полях определенного типа они имеют вид "  0  0", поле неопределенного типа – "U"&space(22).

    Всё, кроме полей неопределенного типа, присутствует и в 7.5 (только разбивка полей не 4+9, а 4+8). Полей неопределенного типа, как и полей TSPyyy в 7.5 нет (хотя значения неопределенного присутствуют во многих таблицах).

    Остался нерассмотренным ещё один реквизит поля SPyyy из Sbcnts.Params: признак периодического поля (Params.pr_period). Значения полей, имеющих этот признак, хранятся в файле 1SCONST.DBF, который связан с таблицами SCxxx отношением 1:M со стороны M. Значения, имеющие структуру, описанную ранее, хранятся в поле 1SCONST.Value, номер записи справочника [int] в поле 1SCONST.OBJID, а идентификатор справочника [int] – в поле 1SCONST.ID. Об 1SCONST, однако, чуть позже.