Примеры к статье "Прямой доступ к 1С"
Автор: Рудюк С.А.
Internet: rudjuk.kiev.ua
В данной статье я приведу примеры прямого доступа к различным таблицам базы данных 1С: Предприятие.
Для доступа к dbf-файлам используем компоненты DegisyData. Их Вы можете взять на сайте http://www.degisy.com.
Текст программной реализации и фргмента базы данных Вы можете скачать тут (131 Кб).
В каталоге 1S_Base находится фрагмент базы данных 1С, который используется в программах.
Просмотр плана счетов
Информацию о структуре таблицы планов счетов смотрим в файле 1С7.DD видим:
....
#==TABLE no 148 : Счета
# Name |Descr |Type[A/S/U]|DBTableName|ReUsable
T=1SACCS |Счета |A |1SACCS |1
#-----Fields-------
# Name |Descr |Type|Length|Precision
F=ID |Account Id |C |9 |0
F=PLANID |Plan Id |C |4 |0
F=SCHKOD |Account code(number)|C |7 |0
F=SCHIM |Account description |C |128 |0
F=SCHV |Flag Currency enable|N |1 |0
F=SCHKOL |Flag Amount enable |N |1 |0
F=SCHSINGLE |Flag no need corresp|N |1 |0
F=ISFOLDER |Flag Have child acco|N |1 |0
F=ISMARK |Flag Object is Marke|C |1 |0
F=LEVEL |Level of Account |N |3 |0
F=MDID |Metadata Id |C |4 |0
F=ACTIVE |Flag Active |N |1 |0
F=VERSTAMP |Version stamp |C |6 |0
F=SC0 | |C |4 |0
F=OSC0 | |N |1 |0
F=FSC0 | |N |1 |0
F=SC1 | |C |4 |0
F=OSC1 | |N |1 |0
F=FSC1 | |N |1 |0
F=SC2 | |C |4 |0
F=OSC2 | |N |1 |0
F=FSC2 | |N |1 |0
#----Indexes------
# Name |Descr |Unique|Indexed fields |DBName
I=ID1 |of ID |0 |ID |ID1
I=CODE |of CODE |0 |PLANID,SCHKOD |CODE
I=SUBACC |of SubAcc |0 |LEVEL,PLANID,SCHKOD |SUBACC ....
|
Назначения полей видим из скрипта.
ID - ID счёта.
PlanID - ID плана счетов. Можно создавать несколько различных планов счетов.
SchKod - Код плана счетов.
SchIm - Описание плана счетов.
IsFolder - указывает является запись каталогом или элементом. Если 1 - каталог, 2- значит элемент.
Level - уровень счёта.
Metadata ID - ID счёта в метаданных.
Пример программной реализации Вы можете найти в каталоге Schet.
Просмотр ТМЦ
В файле 1С7.DD видим:
....
#=============
#==TABLE no 27 : Справочник ТМЦ
# Name |Descr |Type[A/S/U]|DBTableName|ReUsable
T=SC92 |Справочник ТМЦ |A |SC92 |1
#-----Fields-------
# Name |Descr |Type|Length|Precision
F=ID |ID object |C |9 |0
F=PARENTID |ID parent obj |C |9 |0
F=CODE |object code |C |5 |0
F=DESCR |object description |C |25 |0
F=ISFOLDER |Flag - Is Line - Fol|N |1 |0
F=ISMARK |Flag Object is Marke|C |1 |0
F=VERSTAMP |Version stamp |C |6 |0
F=SP93 |(P)ПолнНаименование |C |64 |0
F=SP94 |(P)ШтрихКод |C |12 |0
F=SP96 |(P)Вид |C |9 |0
F=SP97 |(P)Валюта_Прод |C |9 |0
F=SP98 |(P)Цена1 |N |13 |2
F=SP99 |(P)Цена2 |N |13 |2
F=SP100 |(P)Цена3 |N |13 |2
F=SP101 |(P)Валюта_Прих |C |9 |0
F=SP102 |(P)Цена_Прих |N |13 |2
F=SP103 |(P)СтавкаНДС |C |9 |0
F=SP104 |(P)БазЕдиница |C |9 |0
F=SP105 |(P)СтарыйПолныйКод |C |20 |0
F=SP106 |(P)Транспорт |C |9 |0
F=SP1123 |(P)ВидЗатрат |C |9 |0
F=SP1124 |(P)СчетЗатрат |C |13 |0
F=SP1142 |(P)Счет |C |13 |0
#----Indexes------
# Name |Descr |Unique|Indexed fields |DBName
I=IDD |of ID |0 |ID |IDD
I=PCODE |of PARENT and |0 |PARENTID,ISFOLDER,CODE(UPPER) |PCODE
I=PDESCR |of PARENT and |0 |PARENTID,ISFOLDER,DESCR(UPPER) |PDESCR
I=CODE |of CODE |0 |CODE(UPPER) |CODE
I=DESCR |of DESCR |0 |DESCR(UPPER) |DESCR
I=VI94 |VI94 |0 |SP94(UPPER=128) |VI94
I=VIP94 |VIP94 |0 |PARENTID,ISFOLDER,SP94(UPPER=128) |VIP94
I=VI105 |VI105 |0 |SP105(UPPER=128) |VI105
I=VIP105 |VIP105 |0 |PARENTID,ISFOLDER,SP105(UPPER=128) |VIP105
#
....
|
Информация о ТМЦ хранится в таблице SC92.
Значения полей:
ID - ID объекта ТМЦ.
ParentID - предок записи. Если 0 - то запись находится в корне.
Code - код объекта.
Descr - описание позиции ТМЦ.
IsFolder - указывает является ли строка объектом. Если 1 - каталог, 2- значит элемент.
SP93 - Название ТМЦ.
SP94 - Штрих-код.
SP96 - Вид ТМЦ.
SP97 - Валюта продажи.
SP98 - 1-я цена.
SP99 - 2-я цена.
SP100 - 3-я цена.
SP101 - Валюта прихода.
SP102 - Цена прихода.
SP103 - Ставка НДС.
SP104 - Базовая единица измерения.
SP1124 - Счёт затрат.
SP1142 - Счёт.
Программную реализацию доступа Вы можете посмотреть в каталоге TMC.
Просмотр справочника фирм
Информация о фирмах записана в двух таблицах: о внутренней фирме - в таблице SC2325, о клиентах - в SC72. Просмотрим файл 1С7.DD с информацией о этих таблицах:
....
#==TABLE no 29 : Справочник Фирмы
# Name |Descr |Type[A/S/U]|DBTableName|ReUsable
T=SC2325 |Справочник Фирмы |A |SC2325 |1
#-----Fields-------
# Name |Descr |Type|Length|Precision
F=ID |ID object |C |9 |0
F=CODE |object code |C |3 |0
F=DESCR |object description |C |25 |0
F=ISMARK |Flag Object is Marke|C |1 |0
F=VERSTAMP |Version stamp |C |6 |0
F=SP2326 |(P)ПолнНаименование |C |70 |0
F=SP2329 |(P)ПрефиксНомера |C |2 |0
F=SP2330 |(P)Кассы |C |9 |0
F=SP2331 |(P)Телефоны |C |30 |0
F=SP2332 |(P)ОКПО |C |10 |0
F=SP2333 |(P)ИНН |C |12 |0
F=SP2334 |(P)НомерСвидетельств|C |12 |0
F=SP2335 |(P)РС |C |9 |0
F=SP2336 |(P)Адрес |C |64 |0
F=SP2337 |(P)ВС |C |9 |0
F=SP2338 |(P)ДатаРегистрации |D |8 |0
F=SP2339 |(P)НомерРегистрации |C |40 |0
F=SP2340 |(P)КемЗарегистрирова|C |80 |0
F=SP2352 |(P)КодНалоговойИнспе|C |32 |0
F=SP2353 |(P)ОтделНалоговойИнс|C |64 |0
...
|
Из скрипта видим, назначение полей:
ID - ID фирмы,
SP2326 - Полное наименование фирмы,
Descr - Описание фирмы,
SP2331 - Телефоны,
SP2332 - ОКПО,
SP2333 - ИНН,
SP2334 - Номер свидетельства,
SP2335 - Расчётный счёт,
SP2336 - Адрес,
SP2338 - Дата регистрации,
SP2339 - Номер регистрации,
SP2340 - Кем зарегистрирована,
SP2352 - Код налоговой инспекции,
SP2353 - Отдел налоговой инспекции.
....
#==TABLE no 13 : Справочник Клиенты
# Name |Descr |Type[A/S/U]|DBTableName|ReUsable
T=SC72 |Справочник Клиенты |A |SC72 |1
#-----Fields-------
# Name |Descr |Type|Length|Precision
F=ID |ID object |C |9 |0
F=PARENTID |ID parent obj |C |9 |0
F=CODE |object code |C |5 |0
F=DESCR |object description |C |32 |0
F=ISFOLDER |Flag - Is Line - Fol|N |1 |0
F=ISMARK |Flag Object is Marke|C |1 |0
F=VERSTAMP |Version stamp |C |6 |0
F=SP73 |(P)ПолнНаименование |C |64 |0
F=SP74 |(P)Адрес |C |64 |0
F=SP2930 |(P)ФизАдрес |C |64 |0
F=SP75 |(P)Телефоны |C |30 |0
F=SP76 |(P)Директор |C |40 |0
F=SP77 |(P)ОКПО |C |10 |0
F=SP78 |(P)ИНН |C |12 |0
F=SP79 |(P)НомерСвидетельств|C |12 |0
F=SP83 |(P)ВалютаВзаиморасче|C |9 |0
F=SP88 |(P)ТипЦен |C |9 |0
F=SP89 |(P)СтарыйПолныйКод |C |20 |0
F=SP90 |(P)ВидТорговли |C |9 |0
F=SP2924 |(P)Менеджер |C |9 |0
#----Indexes------
# Name |Descr |Unique|Indexed fields |DBName
I=IDD |of ID |0 |ID |IDD
I=PCODE |of PARENT and |0 |PARENTID,ISFOLDER,CODE(UPPER) |PCODE
I=PDESCR |of PARENT and |0 |PARENTID,ISFOLDER,DESCR(UPPER) |PDESCR
I=CODE |of CODE |0 |CODE(UPPER) |CODE
I=DESCR |of DESCR |0 |DESCR(UPPER) |DESCR
I=VI77 |VI77 |0 |SP77(UPPER=128) |VI77
I=VIP77 |VIP77 |0 |PARENTID,ISFOLDER,SP77(UPPER=128) |VIP77
I=VI89 |VI89 |0 |SP89(UPPER=128) |VI89
I=VIP89 |VIP89 |0 |PARENTID,ISFOLDER,SP89(UPPER=128) |VIP89
...
|
Из скрипта видим назначение полей:
ID - ID клиента.
ParentID - ID предыдущей ветви. Если 0, то фирма находится в корне.
IsFolder - указывает является ли запись каталогом. Если 1 - каталог, 2- значит элемент.
Descr - Описание клиента.
SP73 - Полное наименование клиента.
SP74 - Адрес.
SP2930 - Физический адрес.
SP75 - Телефоны.
SP76 - Директор.
SP78 - ИНН.
SP79 - Номер свидетельства.
SP83 - Валюта взаиморасчётов.
SP2929 - Менеджер.
Программную реализацию доступа к справочникам Вы можете увидеть в каталоге Firms.
Заключение
Как видите, доступ к базе данных напрямую значительно проще и более информативнее, чем доступ к базе данных через OLE. При этом скорость доступа к базе данных значительно выше, надёжнее, т.к. исключается лишняя прослойка программных средств в виде 1С, доступ к базе более стандартизованный и меньше нужно писать программного кода (часто вообще не нужно :) ).
Анонс
В следующей своей статье по 1С я опишу как реализовать экспорт/импорт между 1С и базой данных Interbase (Firebird).
Обсудить на форуме
|