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

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

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


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

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