Андрей Малкин где-то в 2001 Планы счетов
1SACCS.DBF содержит список бухгалтерских счетов всех планов счетов.
- ID [int] PKey таблицы 1SACCS, значение в 36/64-ричной
системе (в зависимости от версии V7), нумеруется с единицы. Тип Char(9).
- PLANID [int] ID плана счетов (ID объекта класса Buh.Plans).
Тип Char(4).
- SCHKOD код счета, отформатированный по шаблону счета (Plan.Plan_Pattern).
Тип Char. Размер поля определяется Buh.MaxCodeLen.
- SCHIM наименование счета. Тип Char. Размер поля определяется
реквизитом Buh.MaxNameLen.
- SCHV признак разрешения валютного учета по счету (0/1). Тип Numeric(1,0).
- SCHKOL признак разрешения количественного учета по счету (0/1).
Тип Numeric(1,0).
- SCHSINGLE признак забалансового счета (0/1). Тип Numeric(1,0).
- ISFOLDER счет может иметь субсчета (0/1). Тип Numeric(1,0).
- ISMARK пометка на удаление. Тип Char(1). Если запись помечена
в этом поле "*" (chr(42)).
- LEVEL уровень счета/субсчета. Для верхнего уровня 1. Тип
Numeric(3,0).
- MDID [int] ID счета/субсчета из метаданных (Buh.Accounts)
для счетов, созданных в конфигураторе. Для счетов, созданных вне конфигуратора 0. Тип Char(4).
- ACTIVE признак активный/пассивный/активно-пассивный. Соответственно: 1/2/3. Тип
Numeric(1,0).
- VERSTAMP похоже на Verstamp в справочниках. Но не факт. Тип Char(6),
отсутствует в 7.5.
- SCx [int] ID вида субконто (объекта класса Buh.SbKind). Количество полей
SCx (FSCx, OSCx) в таблице соответствует максимальному количеству субконто (Buh.MaxSbcntCount).
Поля нумеруются, начиная с нуля. Тип Char(4).
- OSCx признак «Только обороты» субконто. Тип Numeric(1,0).
Отсутствует в 7.5.
- FSCx комбинация признаков «Учет по сумме» (1),
«Учет по валютной сумме» (2), «Учет по количеству» (4). Тип Numeric(1,0).
Отсутствует в 7.5.
- SPyyy (+TSPyyy для неопределенных типов) поля содержат общие реквизиты для всех
счетов всех планов счетов (объекты класса Buh.AccParams). Формирование значений в этих полях аналогично
SPyyy в таблицах справочников. Допускаются и строки неограниченной длины, и признак
«периодический», в общем, всё по полной программе ;-).
Бухгалтерские проводки.
Бухгалтерские проводки хранятся в файле 1SENTRY.DBF. Таблица связана с таблицей операций
(1SOPER.DBF) отношением 1:M со стороны «многие» по ключу DOCID.
- DOCID [int] ссылка на поле DOCID документа (операции) по которой
создаются проводки. FKey для 1SOPER.DOCID. Тип Char(9).
- NUMBER номер проводки (номер строки) в операции, число (нумеруются с нуля).
Тип Numeric(5,0).
- CORNO номер корреспонденции (для сложных проводок). Тип Numeric(5,0).
- DATE дата проводки. Тип Date(8).
- TIME [int] время документа в секундах*10000 с 00:00:00. Тип Char(6).
- ACCDTID [int] счетДТ FKey для 1SACCS.ID.
Тип Char(9).
- ACCKTID [int] счетКТ FKey для 1SACCS.ID. Тип Char(9).
- SUM сумма проводки. Тип Numeric, длина и точность определяются
значениями Buh.ProvSumLen и Buh.ProvSumDec.
- CURRID [int] валюта проводки. FKey справочника валют: SCxxx.ID.
xxx=Buh.Currency_ID (ID справочника валют). Тип Char(9).
- CURSUM сумма проводки в валюте. Тип Numeric, длина и точность
определяются значениями Buh.ProvCurSumLen и Buh.ProvCurSumDec.
- AMOUNT значение количества проводки. Тип Numeric, длина и точность
определяются значениями Buh.ProvAmountLen и Buh.ProvAmountDec.
- PROVKIND только для сложных проводок. Значения поля "D"
или "K". Тип Char(1).
- ACTIVE проводка включена/выключена. При выключенной проводке ACTIVE="*"
(chr(42)). Тип Char(1).
- DTFLAGS комбинация признаков дебетового счета: Валютный (1), Количественный (2),
Забалансовый (4). Тип Numeric(1,0).
- KTFLAGS комбинация признаков кредитового счета: Валютный (1), Количественный (2),
Забалансовый (4). Тип Numeric(1,0).
- DOCLINENO по-видимому, номер строки документа, создавшего проводку.
Не уверен. Тип Numeric(4,0).
- PLANID [int] ID плана счетов (объекта класса Buh.Plans).
Тип Char(4).
- VDTSCx [int] ID вида субконто дебетового счета. Количество полей
VDTSCx (DTSCx, ODTSCx) в таблице соответствует максимальному количеству субконто (Buh.MaxSbcntCount).
Поля нумеруются, начиная с нуля. Тип Char(4).
- DTSCx Значение (либо ссылка на значение) субконто. Тип Char(13).
- ODTSCx признак «Только обороты» субконто. Тип Numeric(1,0).
- VKTSCx/KTSCx/OKTSCx аналогично.
- SPyyy (+TSPyyy для неопределенных типов) значения полей определенных, как
общие реквизиты для всех счетов всех планов счетов (объекты класса Buh.AccParams). Формирование значений
в этих полях аналогично SPyyy в таблицах справочников (см. главу IV).
Регистры.
Файлы RAxxx.DBF и RGxxx.DBF хранят в V7 данные по движениям и итогам регистров (объектов
класса Registers). На каждый регистр создается два файла.
RAxxx содержит движения регистра конкретного вида c Registers.ID=xxx.
Таблица связана с таблицей журналов (1SJOURN.DBF) отношением 1:M со стороны
«многие» по ключу IDDOC.
- IDDOC [int] ссылка на PKey документа, вызвавшего данное движение (FKey для 1SJOURN).
PKey документа, такой же, как в DHxxx и DTxxx. Тип Char(9).
- LINENO номер строки документа, вызвавший данное движение. Тип Numeric(4,0).
- ACTNO номер действия (движения) для данного документа (один документ может вызывать
несколько движений регистра). Похоже, что тесно связано с полем 1SJOURN.ACTCNT. Тип Numeric(6,0).
- DEBKRED признак прихода/расхода (0/1). Тип Numeric(1,0).
- IDDOCDEF [int] ссылка на ID объекта-таблицы Documents.ID.
Тип Char(4).
- DATE дата документа. Тип Date(8).
- TIME [int] время документа в секундах*10000 с 00:00:00. Тип Char(6).
- Spyyy (+TSPyyy для неопределенных типов) значения измерений, ресурсов и
реквизитов (объекты классов Registers.Props, Registers.Figures, Registers.Flds). Нет ни периодических
реквизитов, ни строк неограниченной длины. Формирование значений в этих полях аналогично SPyyy
в таблицах справочников (см. главу IV).
RGxxx содержит итоги регистра конкретного вида (остатки для регистров остатков,
обороты для оборотных регистров). Не имеет никаких связей с другими таблицами информационной базы V7.
- Period дата определяет период итогов. Тип Date(8).
- Spyyy (+TSPyyy для неопределенных типов) суммы значений ресурсов,
сгруппированные по измерениям (объекты классов Registers.Props, Registers.Figures).
Красавица и чудовище.
Речь пойдет об «общих» таблицах V7: 1SCONST.DBF и 1SBLOB.DBF.
Каждый, кто когда-нибудь проектировал СУБД, обязательно сталкивался с проблемой реализации хранения и
выборки данных, изменяющихся во времени (периодических в терминах V7). Возможность работы с такими данными,
встроенная в ядро системы, встречается не часто. И именно простота в работе с периодическими реквизитами привлекла
в своё время моё внимание к V7, а желание узнать, как это работает, привело, в конечном счёте, к написанию данного
опуса (через несколько лет).
Реализация, в принципе, достаточно простая: все периодические данные собраны в одном файле 1SCONST.DBF,
он связан отношением 1:M со стороны M со всеми остальными единицами хранения. Естественно, есть поле
даты для определения актуальности данных. Поле для хранения самого значения фиксированной длины, достаточной
для размещения простых типов и ссылок на объекты. Для текстовых строк длины большей, чем размер поля хранения,
предусмотрено их разбиение на несколько частей.
- OBJID [int] ссылка на PKey таблицы, в которой должно храниться «периодическое» значение.
Для констант равен нулю (так как хранятся они здесь же). Тип Char(9).
- ID [int] ID объекта метаданных, который должен храниться. Тип Char(4).
- DATE дата актуальности (начала действия) значения. Тип Date(8).
- PARTNO номер части значения: строки, длиной больше, чем 23 символа (20 для 7.5),
разбиваются на несколько частей, которые хранятся в отдельных записях таблицы. Нумерация с нуля. Тип
Numeric(3,0).
- VALUE поле для хранения самого значения (для простых типов) либо ссылки на значение
(см. главу IV). Хранение строк неограниченной длины не предусмотрено.
Тип Char(23) ((20) в 7.5).
- DOCID [int] ссылка на PKey документа, вызвавшего изменение значения (FKey для
1SJOURN.IDDOC). Тип Char(9).
- TIME [int] время в секундах*10000 с 00:00:00. Берется из документа. Тип
Char(6).
- ACTNO номер движения, вызванного данным документом (см. описание регистров).
Тип Numeric(6,0).
- LINENO номер строки документа, вызвавшего изменение. Тип Numeric(4,0).
- TVALUE ???. Отсутствует в 7.5 Тип Char(3).
А теперь о «чудовище». Это 1SBLOB.DBF. Документация по поводу этой таблицы гласит:
Содержит значения реквизитов справочников, документов, счетов имеющих тип "Строка неограниченной длины". Также
содержит описания шаблонов типовых операций".
В общем-то, это ни что иное, как самопальный memo-файл. И механизмы те же: строка, состоящая из
размера (16-ричное число в первых 9-ти байтах первого блока) плюс сам текст в блоках по
80 байт. И всё бы ничего, да вот реализовано всё это не как отдельный механизм, а как записи в DBF!
С трудом можно поверить, что в движке, который 1С покупала (лицензировала!) для V7, не было поддержки memo-полей.
Эта таблица используется не как место для хранения строк переменной длины, а как самая настоящая свалка. Некуда было
пристроить типовые операции (ну очень длинные строки, имеющие формат MMS) положили именно сюда.
- FIELDID [int] ID объекта метаданных, который должен храниться. Тип Char(4).
- OBJID [int] ссылка на PKey записи таблицы, в которой должно храниться длинное значение.
Тип Char(9).
- BLOCKNO номер блока. Нумеруются с нуля. Тип Numeric(4,0).
- BLOCK сам блок для хранения информации. В нулевом блоке первые 9 байт
длина строки в 16-ричной системе счисления. Тип Char(80).
Остались неохваченными таблицы компоненты Расчет. Несмотря на это, можно начинать делать то, из-за чего всё и
затевалось: строить модель доступа к системе хранения информации в V7.
В главах I-V использовались материалы:
- описание встроенного языка + книжка по конфигурированию и администрированию от фирмы 1С
- публикация «Форматы данных 1С:Т 7.5 DBF» (Vladimir Tomashev, 1998 г.)
- описание к программе «Шлюз 1С Торговля-MS Acces» Дмитрия Любимкова
- таблица 1ctables.xls, автор, к сожалению, неизвестен. Взята на просторах Сети.
- материалы по дополнению к языку V7 Моисеенко П.П., Новосибирск
- исходные тексты библиотеки Rainbow
- «Хранение объектов конфигурации: описание и методы обработки» by Павел Шемякин
- описание стpуктуpы MD от Maxim Shentsev (fido7.ru.f1csoft 2001-03-22)
Отдельное спасибо: Google за Google,
Microsoft за MSDN, и fido7.ru.f1csoft за удовольствие при чтении.
|