Выгрузка данных

Вопросы связанные с ситемой платного доступа ski2
Правила форума
Прочитайте перед тем, как задать вопрос: F.A.Q. и F.A.Q. по БД

Выгрузка данных

Сообщение Rybkin Sergey » 07 июн 2010, 19:06

Подскажите, каким образом можно обеспечить выгрузку каких-либо данных из БД? Можно ли настраивать эти выгрузки без хирургического вмешательства? На данный момент интересует выгрузка из СПД, конкретно платежи, возвраты и Z-отчеты.
Rybkin Sergey
Внедренец
 
Сообщений: 101
Зарегистрирован:
01 фев 2010, 19:53
Организация: Эртел

Re: Выгрузка данных

Сообщение vik » 08 июн 2010, 17:22

Данные возможно забирать из нашей системы по средствам обращения напрямую к БД, структура БД открыта и документирована.
Аватар пользователя
vik
Разработчик
 
Сообщений: 381
Зарегистрирован:
02 дек 2009, 15:07
Организация: ООО "НПФ СТЕЛЛА"

Re: Выгрузка данных

Сообщение wait » 09 июн 2010, 12:11

В БД есть процедуры для генерации xml файлов, например:
Код: выделить все

select RESULT from XML$HEADER('root')
union all
select RESULT from XML$NODE_OPEN('ADM_VARIABLES')
union all
select (select RESULT from XML$GEN_NODE('record', 'name|value|comment', v.NAME||'|'||coalesce(v.VARIABLE_VALUE,'(null)')||'|'||coalesce(v.COMMENT,'(null)'), '|', null, 1)) from ADM_VARIABLES v
union all
select RESULT from XML$NODE_CLOSE('ADM_VARIABLES')
union all
select RESULT from XML$NODE_CLOSE('root')

результат:
Код: выделить все
<?xml version="1.0" encoding="Windows-1251"?>
<root>
<ADM_VARIABLES>
<record name="STRUCVER"  value="76"  comment="Текущая версия структуры" />
<record name="CLIENTVER"  value="5.32"  comment="Текущая версия клиента" />
<record name="OS"  value="WINDOWS"  comment="Операционная система" />
<record name="PROJECT"  value="GUARD"  comment="Проект" />
<record name="DATE_CREATE"  value="2010-05-26 17:31:40.5640"  comment="Дата создания базы данных" />
<record name="DEBUG"  value="OFF"  comment="Запись отладочной информации" />
<record name="ALARM_WND"  value="ON"  comment="Состояние окна тревог" />
<record name="EXT_REP"  value="ON"  comment="(null)" />
<record name="ZLS$DEVICES"  value="ON"  comment="Управление устройствами 2008" />
<record name="RESTORE_COUNTER"  value="1"  comment="Счетчик восстановлений базы данных" />
<record name="PHRASE_OF_DAY"  value="Когда-нибудь Вам повезет"  comment="фраза дня по умолчанию" />
<record name="GD"  value="ON"  comment="Графические дизайны" />
<record name="ZLS$VERSION"  value="2.5"  comment="Версия клиентских приложений кодовой базы ZLS" />
<record name="MAX_SHIFT"  value="2"  comment="Максимальная продолжительность смены" />
<record name="LEVEL"  value="ENTERPRISE"  comment="Конфигурация программного комплекса" />
<record name="SECURITY"  value="LOW_SECURITY"  comment="Настройка без выделенной службы безопасности" />
<record name="BADGE"  value="ON"  comment="Система подготовки пропусков" />
<record name="GUESTS"  value="ON"  comment="Система разовых пропусков" />
<record name="FILTERS"  value="ON"  comment="Подсистема фильтрации" />
<record name="METRO_MODE"  value="ON"  comment="Режим метро" />
<record name="TRUSTED_CHECK_MODE"  value="NOT_PLACEMENT"  comment="Способ проверки нахождения ответственных лиц" />
<record name="USE_PLACEMENT"  value="ON"  comment="Ведение таблицы текущего нахождения сотрудников" />
<record name="FILTER_ROLE"  value="OFF"  comment="Проверка прав на фильтры" />
<record name="SHOW_SHIFT_PARAM"  value="0"  comment="Вывод текущей смены сотрудника в монитор охраника" />
<record name="CHECK_FI"  value="ON"  comment="Вычисление точной причины неверного времени прохода" />
<record name="DEP_FILTERS"  value="OFF"  comment="Автосоздание фильтров подразделений" />
<record name="MULTIPLE_MAPS"  value="OFF"  comment="Режим множественных планов доступа" />
<record name="BARCODE_TYPE"  value="14"  comment="Тип штрихкода (14 - CodeEAN13, 3 - Code39)" />
<record name="TBL"  value="ON"  comment="(null)" />
<record name="SHIFT_START_BARRIER"  value="1.125"  comment="Минимальное начало интервала (3 часа следующих суток)" />
<record name="SHIFT_END_BARRIER"  value="0.5"  comment="Временной порог для определения считать ли данный день рабочим (12 часов)" />
<record name="MAX_TIME_DELAY"  value="0.001388889"  comment="Не записывать замечание при опоздании меньше чем (2 минуты)" />
<record name="MAX_TIME_EARLY"  value="0.001388889"  comment="Не записывать замечание при уходе раньше времени менее чем (2 минуты)" />
<record name="INTEGRATION_BOSS"  value="ON"  comment="Поддержка интеграции с БОСС-Кадровик" />
</ADM_VARIABLES>
</root>


также есть программа ftp://ftp.stella-npf.ru/pub/util/xml_transformer.exe для простой выгрузки в файл из командной строки
для выгрузки результата запроса:
Код: выделить все
xml_transformer -database server:db -user SYSDBA -password masterkey -query qry.sql -output result.xml

для отображения всех поддерживаемых параметров запустите
Код: выделить все
xml_transformer -help
wait
 
Сообщений: 101
Зарегистрирован:
02 дек 2009, 17:51
Организация: ООО "НПФ СТЕЛЛА"

Re: Выгрузка данных

Сообщение Evgen » 21 июн 2010, 18:11

Вопрос: как можно загрузить данные в базу?
Данные по сотрудникам
в каком виде должны быть эти данные?
Evgen
 
Сообщений: 5
Зарегистрирован:
03 фев 2010, 15:13
Организация: ООО "ЭРТЕЛ"

Re: Выгрузка данных

Сообщение wait » 01 июл 2010, 12:10

для загрузки данных в базу СКД используется XML + XLS -> SQL преобразование
шаблон xsl:
Код: выделить все
<?xml version="1.0"?>

<!--

Шаблон подготовки скрипта вставки сотрудников с заменой повторяющихся табельных
номеров по принципу XXXXXX -> XXXXXX(1).
Обрабатываются входные документы следующего вида:

<?xml version="1.0" encoding="windows-1251"?>
<people>
<empl ID="1115" NUM_TAB="1117" NAME_F="МИХАЙЛОВСКАЯ" NAME_I="ЕКАТЕРИНА" NAME_O="АНАТОЛЬЕВНА" NAME_APP="Ст.экономист по планированию и анализу произв.-хоз.  деятельн" NAME_STR="Планово-экономический отдел" D_FROM="1998-01-08 00:00:00.000" D_TO="1900-01-01 00:00:00.000" SEX="F" DBD="1963-11-27"/>
<empl ID="1127" NUM_TAB="1130" NAME_F="МАРКОВА" NAME_I="ВЕРА" NAME_O="МИХАЙЛОВНА" NAME_APP="Заместитель главного бухгалтера" NAME_STR="Бухгалтерия" D_FROM="1968-07-16 00:00:00.000" D_TO="1900-01-01 00:00:00.000" SEX="F" DBD="1950-11-24"/>
<empl ID="1177" NUM_TAB="1117" NAME_F="КАЛИЕВА" NAME_I="ЗЕЙНЕП" NAME_O="УАЛИЕВНА" NAME_APP="Технолог колбасного цеха" NAME_STR="Отдел главного технолога" D_FROM="1998-02-01 00:00:00.000" D_TO="1900-01-01 00:00:00.000" SEX="F" DBD="1962-01-16"/>
</people>

-->

<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<xsl:output method="text"/>

<xsl:template match="/">
<!-- Параметры коннекта к базе данных -->
set names WIN1251;
connect 'localhost:guard' user 'SYSDBA' password 'masterkey';
<xsl:apply-templates/>
<!-- Подтверждение транзакции -->
commit work;
</xsl:template>

<xsl:template match="empl">
  <!-- Приведение полей -->
  <!-- Подразделение varchar(60) -->
  <xsl:variable name="DEP">'<xsl:value-of select="substring(@NAME_STR,1,60)"/>'</xsl:variable>
  <!-- Идентификатор integer -->
  <xsl:variable name="ID_EMP"><xsl:value-of select="@ID"/></xsl:variable>
  <!-- Фамилия varchar(25) -->
  <xsl:variable name="FNAME">'<xsl:value-of select="substring(@NAME_F,1,25)"/>'</xsl:variable>
  <!-- Имя varchar(25) -->
  <xsl:variable name="MNAME">'<xsl:value-of select="substring(@NAME_I,1,25)"/>'</xsl:variable>
  <!-- Отчество varchar(25) -->
  <xsl:variable name="LNAME">'<xsl:value-of select="substring(@NAME_O,1,25)"/>'</xsl:variable>
  <!-- Табельный номер varchar(12) -->
  <xsl:variable name="TABEL">'<xsl:value-of select="@NUM_TAB"/>'</xsl:variable>
  <!-- Должность varchar(60) -->
  <xsl:variable name="RANG">'<xsl:value-of select="substring(@NAME_APP,1,60)"/>'</xsl:variable>
  <!-- Пол char(1) F/M-->
  <xsl:variable name="SEX">'<xsl:value-of select="substring(@SEX,1,1)"/>'</xsl:variable>
  <!-- Дата рождения timestamp -->
  <xsl:variable name="DATE_BORN">'<xsl:value-of select="substring(@DBD,1,10)"/>'</xsl:variable>
  <!-- Дата приема timestamp -->
  <xsl:variable name="DATE_BEGIN">'<xsl:value-of select="substring(@D_FROM,1,10)"/>'</xsl:variable>
  <!-- Дата увольнения timestamp если 1900-01-01 то null -->
  <xsl:variable name="DATE_END">
    <xsl:choose>
      <xsl:when test="substring(@D_TO,1,10) = '1900-01-01'">null</xsl:when>
      <xsl:otherwise>'<xsl:value-of select="substring(@D_TO,1,10)"/>'</xsl:otherwise>
    </xsl:choose>
  </xsl:variable>
  <!-- Чужой сотрудник smallint 0/1 -->
  <xsl:variable name="ALIEN">0</xsl:variable>
  <!-- Адрес varchar(200) -->
  <xsl:variable name="ADDRESS">'<xsl:value-of select="substring(@ADDRESS,1,200)"/>'</xsl:variable>
  <!-- Примечание varchar(200) -->
  <xsl:variable name="COMMENT">'<xsl:value-of select="substring(@COMMENT,1,200)"/>'</xsl:variable>

  <!-- Дополнительные настройки и запросы -->
  <!-- Системный идентификатор подразделения (получаем с помощью генератора) -->
  <xsl:variable name="GEN_DEP">gen_id(GEN_DEP,1)</xsl:variable>
  <!-- Запрос получения идентификатора подразделения по имени -->
  <xsl:variable name="ID_DEP">(select ID_DEP from DEPARTMENTS where NAME = <xsl:value-of select="$DEP"/>)</xsl:variable>
  <!-- Получение измененного табельного номера для вставки -->
  <xsl:variable name="INS_TABEL">(select case count(*) when 0 then <xsl:value-of select="$TABEL"/> else <xsl:value-of select="$TABEL"/>||'('||count(*)||')' end from EMPLOYEE where TABEL starting with <xsl:value-of select="$TABEL"/>||'(' or TABEL = <xsl:value-of select="$TABEL"/>)</xsl:variable>
<!-- Вставка подразделения исли такового нет -->
/* Добавление сотрудника: <xsl:value-of select="concat($FNAME, ' ', $MNAME, ' ', $LNAME, ' в ', $DEP)"/> */
insert into DEPARTMENTS(ID_DEP, NAME, COMMENT)
  select gen_id(GEN_DEP,1), <xsl:value-of select="$DEP"/>, <xsl:value-of select="$DEP"/>
  from RDB$DATABASE
  where not exists (select * from DEPARTMENTS where NAME = <xsl:value-of select="$DEP"/>);
<!-- Вставка сотрудника исли такового нет -->
insert into EMPLOYEE(ID_DEP, ID_EMP, TABEL, SEX, ALIEN, FNAME, MNAME, LNAME, RANG,
                     DATE_BEGIN, DATE_END, DATE_BORN, ADDRESS, COMMENT)
  select <xsl:value-of select="$ID_DEP"/>,
         <xsl:value-of select="$ID_EMP"/>,
         <xsl:value-of select="$INS_TABEL"/>,
         <xsl:value-of select="$SEX"/>,
         <xsl:value-of select="$ALIEN"/>,
         <xsl:value-of select="$FNAME"/>,
         <xsl:value-of select="$MNAME"/>,
         <xsl:value-of select="$LNAME"/>,
         <xsl:value-of select="$RANG"/>,
         <xsl:value-of select="$DATE_BEGIN"/>,
         <xsl:value-of select="$DATE_END"/>,
         <xsl:value-of select="$DATE_BORN"/>,
         <xsl:value-of select="$ADDRESS"/>,
         <xsl:value-of select="$COMMENT"/>
  from RDB$DATABASE
  where not exists (select ID_EMP from EMPLOYEE where ID_EMP = <xsl:value-of select="$ID_EMP"/>);
  </xsl:template>
</xsl:stylesheet>


результат:
Код: выделить все

set names WIN1251;
connect 'localhost:guard' user 'SYSDBA' password 'masterkey';

/* Добавление сотрудника: 'МИХАЙЛОВСКАЯ' 'ЕКАТЕРИНА' 'АНАТОЛЬЕВНА' в 'Планово-экономический отдел' */
insert into DEPARTMENTS(ID_DEP, NAME, COMMENT)
  select gen_id(GEN_DEP,1), 'Планово-экономический отдел', 'Планово-экономический отдел'
  from RDB$DATABASE
  where not exists (select * from DEPARTMENTS where NAME = 'Планово-экономический отдел');

insert into EMPLOYEE(ID_DEP, ID_EMP, TABEL, SEX, ALIEN, FNAME, MNAME, LNAME, RANG,
                     DATE_BEGIN, DATE_END, DATE_BORN, ADDRESS, COMMENT)
  select (select ID_DEP from DEPARTMENTS where NAME = 'Планово-экономический отдел'),
         1115,
         (select case count(*) when 0 then '1117' else '1117'||'('||count(*)||')' end from EMPLOYEE where TABEL starting with '1117'||'(' or TABEL = '1117'),
         'F',
         0,
         'МИХАЙЛОВСКАЯ',
         'ЕКАТЕРИНА',
         'АНАТОЛЬЕВНА',
         'Ст.экономист по планированию и анализу произв.-хоз.  деятель',
         '1998-01-08',
         null,
         '1963-11-27',
         '',
         ''
  from RDB$DATABASE
  where not exists (select ID_EMP from EMPLOYEE where ID_EMP = 1115);
 
/* Добавление сотрудника: 'МАРКОВА' 'ВЕРА' 'МИХАЙЛОВНА' в 'Бухгалтерия' */
insert into DEPARTMENTS(ID_DEP, NAME, COMMENT)
  select gen_id(GEN_DEP,1), 'Бухгалтерия', 'Бухгалтерия'
  from RDB$DATABASE
  where not exists (select * from DEPARTMENTS where NAME = 'Бухгалтерия');

insert into EMPLOYEE(ID_DEP, ID_EMP, TABEL, SEX, ALIEN, FNAME, MNAME, LNAME, RANG,
                     DATE_BEGIN, DATE_END, DATE_BORN, ADDRESS, COMMENT)
  select (select ID_DEP from DEPARTMENTS where NAME = 'Бухгалтерия'),
         1127,
         (select case count(*) when 0 then '1130' else '1130'||'('||count(*)||')' end from EMPLOYEE where TABEL starting with '1130'||'(' or TABEL = '1130'),
         'F',
         0,
         'МАРКОВА',
         'ВЕРА',
         'МИХАЙЛОВНА',
         'Заместитель главного бухгалтера',
         '1968-07-16',
         null,
         '1950-11-24',
         '',
         ''
  from RDB$DATABASE
  where not exists (select ID_EMP from EMPLOYEE where ID_EMP = 1127);
 
/* Добавление сотрудника: 'КАЛИЕВА' 'ЗЕЙНЕП' 'УАЛИЕВНА' в 'Отдел главного технолога' */
insert into DEPARTMENTS(ID_DEP, NAME, COMMENT)
  select gen_id(GEN_DEP,1), 'Отдел главного технолога', 'Отдел главного технолога'
  from RDB$DATABASE
  where not exists (select * from DEPARTMENTS where NAME = 'Отдел главного технолога');

insert into EMPLOYEE(ID_DEP, ID_EMP, TABEL, SEX, ALIEN, FNAME, MNAME, LNAME, RANG,
                     DATE_BEGIN, DATE_END, DATE_BORN, ADDRESS, COMMENT)
  select (select ID_DEP from DEPARTMENTS where NAME = 'Отдел главного технолога'),
         1177,
         (select case count(*) when 0 then '1117' else '1117'||'('||count(*)||')' end from EMPLOYEE where TABEL starting with '1117'||'(' or TABEL = '1117'),
         'F',
         0,
         'КАЛИЕВА',
         'ЗЕЙНЕП',
         'УАЛИЕВНА',
         'Технолог колбасного цеха',
         '1998-02-01',
         null,
         '1962-01-16',
         '',
         ''
  from RDB$DATABASE
  where not exists (select ID_EMP from EMPLOYEE where ID_EMP = 1177);
 
commit work;
wait
 
Сообщений: 101
Зарегистрирован:
02 дек 2009, 17:51
Организация: ООО "НПФ СТЕЛЛА"


Вернуться в Система платного доступа (SKI2)

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron