Концептуальные работы
Все статьи раздела
Доступ к данным V7 из других систем. Классы MetaDataStream.
Андрей Малкин (где-то в 2001)
Опять субконто…
Для того, чтобы определиться с именами классов, достаточно всего лишь открыть MMS в любом текстовом редакторе. Далее открываем желтую книжицу на странице с названиями агрегатных типов данных и ищем в файле "Document", "Register", "Reference"…
Стоп, "Reference", то бишь справочник, – не находим. Конечно, справочники описаны, но называются они, – "SbCnts". Я понимаю, что, скорее всего, это название осталось со старых времен, что названия в метасловаре никак не могут повлиять ни на производительность, ни на устойчивость системы. Но вот слово «Субконто» (абсолютно не связанное с реальным миром) должно быть близко многим, кто работал с V7. «Как много в этом слове…» ;-)
Комментарии к таблице
В первой колонке – имена классов. Классы самого верхнего уровня (они выделены отступом) приведены все – даже те, которые в решении поставленной задачи использоваться не будут. Подклассы приведены только в той мере, в которой необходимо. Полностью пропущены формы, отчеты, графы отбора и пр. Наша цель – не имитация интерфейса, и не повторение бизнес-логики системы. Нам нужны только данные (причём первичные данные) и ничего более.
Те классы, которые будут в дальнейшем использоваться выделены жирным (bold).
В таблице не описана первая строка MMS:
{"MainDataContDef","xxxx","yyyy", "zzzzz"}
zzzz используется мной для определения версии ("7107" для 7.5, или "7120" для 7.7), "yyyy" – что-то похожее на указатель компонент V7 (ОУ/БУ/Расчет).
TaskItem – самый первый класс (ID всегда единица). Есть отличия между 7.5 и 7.7: в 7.7 на один параметр больше и присутствуют ссылки на общий журнал. Этот класс используется для получения текстовой информации о конфигурации.
GenJrnlFldDef – общие реквизиты документов. Они понадобятся нам при импорте документов.
DocSelRefObj, DocNumDef, ReportList, Algorithms, RecalcRules, CalcVars, Groups, Document Streams – исключаю из рассмотрения, как избыточные для поставленной задачи.
Consts – константы. В принципе, тоже можно было бы не рассматривать, но есть несколько служебных констант (ТипУчета, НомерРелиза и т.п.) из-за которых всё-таки таблица констант будет создана.
Calendars – проблема с подклассом Holidays (пока не обрабатывается) – с рабочими днями всё в порядке.
Buh – самый монстрообразный и путаный класс. Собственно, в этом классе всегда один объект (кстати говоря, создающийся сразу после TaskItem, его ID=2), не имеющий имени, зато состоящий аж из 49-и реквизитов. И если подклассы/объекты других классов как-то соответствуют «дереву конфигуратора», то здесь не всегда так. Например, реквизиты операций и реквизиты проводок, имеющие в конфигураторе отдельные формы для заполнения, фактически пишут данные непосредственно в объект класса Buh.
Класс |
Описание |
Комментарий |
TaskItem |
Задача |
|
GenJrnlFldDef |
Общие реквизиты документов |
|
DocSelRefObj |
Графы отбора |
|
DocNumDef |
Нумераторы |
|
Consts |
Константы |
|
SbCnts |
Справочники |
|
Params |
Реквизиты справочников |
|
Registers |
Регистры |
|
Props |
Измерения регистров |
|
Figures |
Ресурсы регистров |
|
Flds |
Реквизиты регистров |
|
Documents |
Документы |
|
Head Fields |
Реквизиты шапки документов |
|
Table Fields |
Реквизиты табличной части документов |
|
Journalisters |
Журналы документов |
|
Enumlist |
Перечисления |
|
Enumval |
Значения перечислений |
|
ReportList |
Отчёты |
|
CJ |
Журнал расчётов |
Обрабатывается частично |
CJParams |
Реквизиты журнала расчётов |
|
Calendars |
Календари |
Не обрабатываются "Holidays" |
Days |
Дни календаря |
|
RecalcRules |
Правила перерасчёта |
|
CalcVars |
Обработки |
|
Groups |
Группы расчётов |
|
DocumentStreams |
Последовательности документов |
|
Buh |
Бухучёт, общие параметры |
|
AccParams |
Общие реквизиты для всех счетов |
|
Plans |
Планы счетов |
|
Accounts |
Счета |
|
AccSbCnts |
Субконто счета |
|
ProvParams |
Реквизиты проводок |
не поддерживаются "Представления" |
OperParams |
Реквизиты операций |
|
SbKind |
Виды субконто |
не поддерживаются "Представления" |
TypOpersDef |
Типовые операции |
Только "ID", все имена пустые |
CorrProvsDef |
Корректные проводки |
Только "ID", все имена пустые |
ProvHardFldDef |
Ссылки на план счетов, используемый в качестве основного и справочник, используемый в качестве справочника валют |
Мета-описание в "Buh" |
OperJournal |
Параметры журнала операций – дополнительные графы и т.п. |
Обрабатывается частично |
Следующая таблица – реквизиты (свойства) объектов, описанных выше классов
Позиция в строке – для нахождения данного реквизита среди других в строке свойств объекта, наименование – краткое наименование реквизита (частично из мануала, частично – своё). Краткое наименование и будет использовано в дальнейшем для построения таблиц и запросов – аналогов объектам хранения в 1С. Реквизиты, которые будут использоваться в дальнейшей работе выделены (bold). Естественно, что разобраны не все реквизиты/свойства. Но тех, которые приведены, вполне достаточно для решения поставленной задачи.
Комментарий к таблице
Везде, где специально не указано, первые 4 позиции занимают основные реквизиты:
- ID – Числовой код, уникальный во всей конфигурации
- Sname – Краткое наименование реквизита («идентификатор» в V7)
- Lname – Полное наименование («синоним» в V7)
- Сomment – Комментарий
Аббревиатуры названий типов данных (реквизит Type):
- N-числовой, Len и Dec – соответственно размер и точность поля
- S-строка, Len – длина строки. При Len=0 – строка неограниченной длины, хранящаяся в 1sblob
- D-дата
- B-справочник
- E-перечисление
- O-документ
- T-счет
- P-план счетов
- K-вид субконто
- C-календарь
- A-вид расчета
- U-неопределенный. Source_Id = 0
Типы B, E, O, T, P, K, C, A рассматриваются вместе с Source_Id – ID внешнего объекта, из которого берутся значения. Если Source_Id=0 («позднее связывание») – значения могут браться из любого объекта соответствующего типа.
При детальном разборе типов обнаружилась интересное дополнение. Находятся ID c отрицательными значениями, естественно, не имеющие аналогов в конфигурации. Как оказалось, эти ID ссылаются на предопределенные поля файлов хранения (например "?2568"=SCxxx.Code, "?2569"=SCxxx.Descr). Это применяется при построении "Представлений" в "Реквизитах проводок", "Видах субконто" и др.
Неизвестные или не рассматриваемые реквизиты обозначены как [skip].
Класс |
Пози
ция |
Наименование |
Описание |
Комментарий |
Accounts |
1-4 |
ID,Sname,Lname, comment |
|
Sname формируется системой ("_"&"dummy"&номсчёта&????) |
|
5 |
AccCode |
Полный код счёта |
|
|
6 |
IsCurrensy |
Признак ведения валютного учёта |
|
|
7 |
IsAmount |
Признак ведения количественного учёта |
|
|
8 |
IsSingle |
Признак забалансового счёта |
|
|
9 |
HasSubAccounts |
Признак наличия субсчетов |
|
|
10 |
IsActive |
Тип счёта.
1 – активный
2 – пассивный
3 – активно-пассивный
|
|
AccParams |
1-4 |
ID,Sname,Lname, comment |
|
|
|
5 |
Type |
Тип реквизита |
|
|
6 |
Size |
Размер (для типов N и S) |
|
|
7 |
Dec |
Точность (для типа N) |
|
|
8 |
Source_Id |
ID внешнего объекта, из которого берутся значения (для агрегатных типов) |
|
|
9 |
pr_neotr |
Признак неотрицатеьности значения |
|
|
10 |
pr_triad |
Признак разделения триад при выводе числа |
|
|
11 |
[skip] |
|
|
|
12 |
pr_period |
Признак периодического реквизита (значения берутся из файла 1SConst) |
|
AccSbCnts |
1-4 |
ID,Sname,Lname, comment |
|
Sname формируется системой ("id"&"_"&ID), Lmane и comment всегда пустые |
|
5 |
[skip] |
|
Всегда "U" |
|
6-10 |
[skip] |
|
Всегда "0" |
|
11 |
ID_SbKind |
Ссылка на соотвествующий вид субконто |
|
|
12 |
TurnoversOnly |
Флаг «Только обороты» субконто |
|
|
13 |
AccountingBySum |
Флаг «Учёт по сумме» субконто |
|
|
14 |
AccountingByCurrencySum |
Флаг «Учёт по валютной сумме» субконто |
|
|
15 |
AccountingByAmount |
Флаг «Учёт по количеству» субкконто |
|
Algorithms |
1-4 |
ID,Sname,Lname, comment |
|
|
Buh |
1-4 |
ID,Sname,Lname, comment |
|
Sname, Lmane и comment всегда пустые |
|
5 |
EditAccMethod |
Метод редактирования счетов.
0 – в списке
1 – в диалоге
2 – обоими способами |
|
|
6-7 |
[skip] |
|
|
|
8 |
MaxNameLen |
Максимальная длина наименования счёта |
|
|
9 |
MaxCodeLen |
Максимальная длина кода счёта |
|
|
10 |
MaxSbcntCount |
Максимальное количество субконто |
|
|
11 |
OperDescrLen |
Длина содержания операции (из OperParams) |
поле Descr соответствующего файла |
|
12 |
OperSumLen |
Длина суммы операции (из OperParams) |
поле Sum соответствующего файла |
|
13 |
OperSumDec |
Точность суммы операции (из OperParams) |
поле Sum соответствующего файла |
|
14 |
ProvSumLen |
Длина поля "Сумма" (из ProvParams) |
поле Sum соответствующего файла |
|
15 |
ProvSumDec |
Точность поля "Сумма" (из ProvParams) |
поле Sum соответствующего файла |
|
16 |
ProvCurSumLen |
Длина поля "Валютная Сумма" (из ProvParams) |
поле CurSum соответствующего файла |
|
17 |
ProvCurSumDec |
Точность поля "Валютная Сумма" (из ProvParams) |
поле CurSum соответствующего файла |
|
18 |
ProvAmountLen |
Длина поля "Количество" (из ProvParams) |
поле Amount соответствующего файла |
|
19 |
ProvAmountDec |
Точность поля "Количество" (из ProvParams) |
поле Amount соответствующего файла |
|
20-23 |
[skip] |
|
|
|
24 |
Currency_ID |
ID справочника валют |
|
|
25 |
Rate_ID |
ID поля "курс" в справочнике валют |
|
|
27 |
PrSumOperSelect |
Признак отбора операций по сумме (из OperParams) |
|
|
28 |
PrDescrOperSelect |
Признак отбора операций по содержанию (из OperParams) |
|
|
29 |
OperSumCalcMethod |
Метод расчёта суммы по всем проводкам (из OperParams)
0 – рубли, не рассчитывать
1 – рубли, по всем проводкам
3 – рубли, по первой проводке
2 – валюта, по всем проводкам
4 – валюта, по первой проводке |
|
|
30 |
PrAccSelect |
Признак отбора по счетам (из ProvParams) |
|
|
31 |
MaxLevelSelect |
Количество уровней, до которого будет выполняться отбор по счетам (субсчетам) (из ProvParams)
0 Ѿ по всем счетам |
|
|
32 |
[skip] |
|
|
|
33 |
PrTriadSum |
Признак разделения триад суммы (из ProvParams) |
|
|
34 |
PrTriadCurrSum |
Признак разделения триад Валютной суммы (из ProvParams) |
|
|
35 |
PrTriadAmount |
Признак разделения триад количества (из ProvParams) |
|
|
36 |
PrSumProvSelect |
Признак отбора по сумме в журнале проводок (из ProvParams) |
|
|
37 |
PrCurrProvSelect |
Признак отбора по валюте в журнале проводок (из ProvParams) |
|
|
38 |
PrCurrSumProvSelect |
Признак отбора по валютной сумме в журнале проводок (из ProvParams) |
|
|
39 |
PrAmountProvSelect |
Признак отбора по количеству в журнале проводок (из ProvParams) |
|
|
40 |
Ratio_ID |
ID поля "кратность" в справочнике валют |
|
|
41 |
PrComplAcc |
Признак разрешения ввода сложных проводок при редактировании операции (из ProvParams) |
|
|
42 |
PrSelectCalcMethodByUser |
Признак разрешения выбора пользователем метода расчёта суммы операции (из OperParams) |
|
|
43 |
PrDbCrSelect |
Признак разрешения отбора по дебету/кредиту (из ProvParams) |
|
|
44 |
PrEditOperDoc |
Признак редактирования операций, созданных документами (из ProvParams)
0 – запретить
1 – разрешить
2 – выборочно |
|
|
45 |
[skip] |
|
|
|
46 |
PrAmountByAnalit |
Признак ведения количественного учёта по аналитике |
|
|
47 |
Acc_Separator_ID |
ID разделителя учёта (из ProvParams) |
|
|
48 |
MainPlan_ID |
ID основного плана счетов |
|
|
49 |
[skip] |
|
|
CalcVars |
1-4 |
ID, Lname, Sname, comment |
|
|
Calendars |
1-4 |
ID, Lname, Sname, comment |
|
|
|
5 |
StartDate |
Стартовая дата |
|
CJ |
1-4 |
ID, Lname, Sname, comment |
|
|
|
5 |
IDSbcnts |
Ссылка на соответствующий справочник |
|
|
6 |
Period_size |
Период проведения расчётов
0 – день
1 – неделя
2 – месяц
3 – квартал
4 – год |
|
|
7 |
Period_Date |
Дата отсчёта
-1 – не опеределена
>0 – long |
|
CJParams |
1-4 |
ID, Lname, Sname, comment |
|
|
|
5 |
Type |
|
|
|
6 |
Size |
|
|
|
7 |
Dec |
|
|
|
8 |
source_id |
|
|
|
9 |
pr_neotr |
|
|
|
10 |
pr_triad |
|
|
Const |
1-4 |
ID, Lname, Sname, comment |
|
|
|
5 |
Type |
|
|
|
6 |
Size |
|
|
|
7 |
Dec |
|
|
|
8 |
source_id |
|
|
|
9 |
pr_neotr |
|
|
|
10 |
pr_triad |
|
|
|
11 |
pr_period |
|
|
CorrProvsDef |
1-4 |
ID, Lname, Sname, comment |
|
|
Days |
1-4 |
ID, Lname, Sname, comment |
|
|
|
5 |
DayLen |
Рабочее время за день (ччмм) |
|
Documents |
1-4 |
ID, Lname, Sname, comment |
|
|
|
5 |
DocNumSize |
Длина нумератора документа (если он назначен) |
|
|
6 |
DocNumLim |
Предел автоматической нумерации документа
0 – по всем данного вида
1 – в пределах года
2 – в пределах квартала
3 – в пределах месяца
4 – в пределах дня |
|
|
7 |
DocNumType |
Тип нумератора документа
2 – числовой
1 – текстовый |
|
|
8 |
DocNumAuto |
Автоматическая нумерация документа
2 – включена
1 – отключена |
|
|
9 |
Jrnl_ID |
ID журнала документов |
|
|
10 |
[skip] |
|
|
|
11 |
DocNumUniq |
Контроль уникальности номеров документов (1/0) |
|
|
12 |
DocNumID |
Ссылка на ID нумератора документа (0 если нумератор не назначен) |
|
|
13 |
PrTrade |
Документ может двигать регистры (если установлена компонента ОУ) |
|
|
14 |
PrSalary |
Документ может делать расчёты (если установлена компонента Расчёт) |
|
|
15 |
PrAccnt |
Документ может формировать проводки (если установлена компонента БУ) |
|
Enumlist |
1-4 |
ID, Lname, Sname, comment |
|
|
Enumval |
1-4 |
ID, Lname, Sname, comment |
|
|
|
5 |
Enum_View |
Представление для вывода значения перечисления |
|
Figures |
1-4 |
ID, Lname, Sname, comment |
|
|
|
5 |
Type |
Тип значения |
Только N |
|
6 |
Size |
|
|
|
7 |
Dec |
|
|
|
8 |
source_id |
|
|
|
9 |
pr_neotr |
|
|
|
10 |
pr_triad |
|
|
Flds |
1-4 |
ID, Lname, Sname, comment |
|
|
|
5 |
Type |
|
|
|
6 |
Size |
|
|
|
7 |
Dec |
|
|
|
8 |
source_id |
|
|
|
9 |
pr_neotr |
|
|
|
10 |
pr_triad |
|
|
|
11 |
pr_otbor |
Признак отбора движений (0/1) |
|
GenJrnlFldDef |
1-4 |
ID, Lname, Sname, comment |
|
|
|
5 |
Type |
|
|
|
6 |
Size |
|
|
|
7 |
Dec |
|
|
|
8 |
source_id |
|
|
|
9 |
pr_neotr |
|
|
|
10 |
pr_triad |
|
|
|
11 |
pr_otbor |
Признак отбора движений (0/1) |
|
Head Fields |
1-4 |
ID, Lname, Sname, comment |
|
|
|
5 |
Type |
|
|
|
6 |
Size |
|
|
|
7 |
Dec |
|
|
|
8 |
source_id |
|
|
|
9 |
pr_neotr |
|
|
|
10 |
pr_triad |
|
|
Journalisters |
1-4 |
ID, Lname, Sname, comment |
|
|
OperJournal |
1-4 |
ID, Lname, Sname, comment |
|
|
OperParams |
1-4 |
ID, Lname, Sname, comment |
|
|
|
5 |
Type |
|
|
|
6 |
Size |
|
|
|
7 |
Dec |
|
|
|
8 |
source_id |
|
|
|
9 |
pr_neotr |
|
|
|
10 |
pr_triad |
|
|
|
11 |
pr_otbor |
Признак отбора |
|
Params |
1-4 |
ID, Lname, Sname, comment |
|
|
|
5 |
Type |
|
|
|
6 |
Size |
|
|
|
7 |
Dec |
|
|
|
8 |
source_id |
|
|
|
9 |
pr_neotr |
|
|
|
10 |
pr_triad |
|
|
|
11 |
pr_period |
|
|
|
12 |
pr_useingroup |
Разрешение использование данного реквизита для группы справочника |
|
|
13 |
pr_useinelement |
Разрешение использование данного реквизита для элемента справочника |
|
|
14 |
pr_sort |
Признак сортировки по реквизиту |
|
|
15 |
pr_edithand |
Разрешение ручного редактирования (для периодических реквизитов) |
|
|
16 |
pr_editdoc |
Разрешение изменения документами (для периодических реквизитов) |
|
|
17 |
pr_select |
Признак отбора по реквизиту |
|
Plans |
1-4 |
ID, Lname, Sname, comment |
|
|
|
5 |
Plan_Pattern |
Шаблон счёта |
|
|
6 |
Pattern__ |
Тот же шаблон (м.б., валютный?) |
|
Props |
1-4 |
ID, Lname, Sname, comment |
|
|
|
5 |
Type |
|
|
|
6 |
Size |
|
|
|
7 |
Dec |
|
|
|
8 |
source_id |
|
|
|
9 |
pr_neotr |
|
|
|
10 |
pr_triad |
|
|
|
11 |
pr_otbor_dv |
Признак отбора движений (0/1) |
|
|
12 |
pr_otbor_itog |
Признак отбора итогов (0/1) |
|
ProvHardFldDef |
1-4 |
ID, Lname, Sname, comment |
|
|
ProvParams |
1-4 |
ID, Lname, Sname, comment |
|
|
|
5 |
Type |
|
|
|
6 |
Size |
|
|
|
7 |
Dec |
|
|
|
8 |
source_id |
|
|
|
9 |
pr_neotr |
|
|
|
10 |
pr_triad |
|
|
|
11 |
pr_otbor |
Признак отбора |
|
RecalcRules |
1-4 |
ID, Lname, Sname, comment |
|
|
Registers |
1-4 |
ID, Lname, Sname, comment |
|
|
|
5 |
RegType |
Тип регистра
0 – остатки
1 – обороты |
|
|
6 |
RegPeriod |
Периодичность оборотного регистра (D, M, Y, etc.) |
Для регистра остатков это значение пустое |
|
7 |
RegFast |
Быстрая обработка движений (0/1) |
|
|
8 |
RegUnknown |
непонятный параметр |
|
ReportList |
1-4 |
ID, Lname, Sname, comment |
|
|
Sbcnts |
1-4 |
ID, Lname, Sname, comment |
|
|
|
5 |
Owner_id |
ID владельца |
|
|
6 |
kod_size |
Длина кода (количество позиций для кода элемента справочника) |
|
|
7 |
pr_uniq_kod |
Уникальность кода справочника
1 – во всём справочнике
2 – в пределах подчинения |
|
|
8 |
kod_tip |
Тип кода справочника
1 – числовой
2 – текстовый |
|
|
9 |
ret_tip |
Представление по умолчанию
1 – в виде кода
2 – в виде наименования |
|
|
10 |
naim_size |
Максимально возможная длина наименования справочника |
|
|
11 |
pr_autonum |
Признак автоматической нумерации справочника |
|
|
12 |
pr_edit |
Редактирование справочника
0 – в списке
1 – в диалоге
2 – обоими способами |
|
|
13 |
max_level |
Максимальное количество уровней вложенности справочника |
|
|
14 |
form_element_id |
ID формы редактирования элемента справочника |
|
|
15 |
form_group_id |
ID формы редактирования группы справочника |
|
|
16 |
pr_oneform |
Признак единой формы для редактирования элемента и группы |
|
|
17 |
pr_contr_uniq |
Признак контроя уникальности кодов в справочнике (0/1) |
|
SbKind |
1-4 |
ID, Lname, Sname, comment |
|
|
|
5 |
Type |
Тип значения |
Не может быть U |
|
6 |
Size |
|
|
|
7 |
Dec |
|
|
|
8 |
source_id |
|
|
|
9 |
pr_neotr |
|
|
|
10 |
pr_triad |
|
|
|
11 |
pr_select |
Признак отбора по реквизиту |
|
|
12 |
Price |
Цена субконто (ссылка на ID реквизита справочника, используемого в качестве цены при вычислении суммы проводки) |
|
|
13 |
Currency_price |
Валютная цена субконто (ссылка на ID реквизита справочника, используемого в качестве валютнгй цены при вычислении валютной суммы проводки) |
|
Table Fields |
1-4 |
ID, Lname, Sname, comment |
|
|
|
5 |
Type |
|
|
|
6 |
Size |
|
|
|
7 |
Dec |
|
|
|
8 |
source_id |
|
|
|
9 |
pr_neotr |
|
|
|
10 |
pr_triad |
|
|
|
11 |
Col_total |
Признак вычисления итога по колонке |
|
TaskItem |
1-4 |
ID, Lname, Sname, comment |
|
|
В следующей части будет проведён разбор логической структуры файлов *.dbf базы данных V7. |
Партнеры:
Также может быть интересно:
Канал Россия 1 на http://spbtvonline.ru/
|