Концептуальные работы
Все статьи раздела
Доступ к данным V7 из других систем. Логическая структура (часть II).
Андрей Малкин (где-то в 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 за удовольствие при чтении. |
Партнеры:
Также может быть интересно:
Канал Россия 1 на http://spbtvonline.ru/
|