Hare.ru @ Коллективный разум / Hare.ru @ Дикое место

Архив hare.ru 
Мысли, конвертированные в текст

Концептуальные работы


Все статьи раздела

Доступ к данным 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/
   
 Сайт поддерживается за счет партнеров:
:::... Сайт содержит архив двух версий hare.ru Карта сайта