Презентация - Корпорация ПАРУС

Download Report

Transcript Презентация - Корпорация ПАРУС

Новые возможности по поиску и
верификации документов в
ПП «ПАРУС – Предприятие 8» с
использованием QR – кодов
Миндияров Илья Гафурович
Главный специалист по программному
обеспечению
Центра информационных технологий и
консалтинга «ПАРУС»
[email protected]
2014
Рассматриваемые задачи
• примеры бизнес-процессов, когда оправдано
использование QR-кодов в документах
• примеры написания пользовательских отчетов, в
которых генерируются QR-коды
• управление жизненным циклом настроек
оптимизации
В архиве находятся файлы, используемые в презентации. Чтобы их
открыть нужно:
1. Открыть PowerPoint
2. Открыть файл этой презентации
3. На текущем слайде 2 раза нажать кнопку мыши на иконке файла
Примеры бизнес-процессов
1. Когда у сотрудников мало времени на исполнение
бизнесс-процесса. QR-коды помогают быстро найти
документ для дальнейших действий в системе.
Например: выдача заработной платы на предприятии
всегда 5 числа месяца, а табели отработанного времени
подразделения могут сдать только 2 числа, причем табелей
500 штук. Выгружать сразу все табели в ФОВ это довольно
смелая операция. Расчетчики должны проверить хотя бы
наличие подписанных документов, т.к. табель является
оправдательным документом для бухгалтера при расчете
заработной платы.
Примеры бизнес-процессов
2. Когда в Парус 8 документ один сотрудник
подготавливает, а утверждает (отрабатывает) другой и
необходимо убедиться, что содержание напечатанного
документа соответствует содержанию данных в
системе.
Т.е. если документ создается в Парус 8, а потом этот документ по
бизнес-процессу должен быть обработан несколькими людьми .
Примеры бизнес-процессов
Например:
• отдел кадров создает и отрабатывает приказ о приеме
работника, т.к. им неудобно ждать когда директор распишется
на приказе.
• кадровик устанавливает в ФОТ приказа оклад 15000 рублей,
печатает приказ и отдает в секретариат.
• табельщик видит новое исполнение должности и выполняет
действие “Корректировать список исполнений” и исполнение
должности добавляется в табель
•директор смотрит приказ и говорит исправьте на 17000 рублей.
• идут к табельщику, говорят ему удалить табель, а табельщик
отказывается
• идут к программисту, программист удаляет “неправильное”
исполнение из табеля
• отдел кадров снимет отработку с приказа, исправляют ФОТ на
17000 руб.
• отрабатывают приказ.
Примеры бизнес-процессов
Меняем бизнес-процесс на правильный:
• кадровик создает приказ на прием, но отработать приказ не
может, - у него нет прав
• кадровик печатает приказ и отдает в секретариат
• потом к кадровику приходит начальник отдела и говорит,
поменяй должность
• кадровик меняет должность и снова печатает приказ, и снова
отдает в секретариат
• а директор уже подписал приказ с неправильной должностью
• секретарь по QR-коду видит, что документ был изменен и не
отрабатывает приказ, ждет когда принесут правильный
• приносят правильный приказ, директор его подписывает,
секретарь отрабатывает
• все экономят время, и к программисту ходить не надо
Примеры бизнес-процессов
Поскольку пользовательское приложение из этой презентации
универсальное, то секретарь может и не разбираться в том, что
он отрабатывает: приказ, счет, договор и т.д.
Главное что документ в системе существует и не менялся с
момента печати.
А все сотрудники организации знают, что если документ
отработан, значит точно есть подписанный директором документ.
Это экономит время.
Демонстрация
Установка
Установите Zbar for Windows.
Сейчас дистрибутив доступен по адресу
http://sourceforge.net/projects/zbarw/
Установка
Устанавливаем
Установка
Если на компьютере установлено несколько видеокамер, то меняем устройство на
/dev/video1, /dev/video2 и .т.д.
Установка
Проверяем:
Выполняем C:\ZBar\bin\zbarcam.bat
Я сканировал сначала пачку сигарет, а затем отчет Т-12
Установка
Рекомендуется посмотреть документацию
Установка
Из архива второго слайда этой презентации выполните в sqlplus файл create.sql
Например: sqlplus parus@forum @create.sql
Посмотрите файл create.log на предмет ошибок, которых быть не должно.
Под пользователем SYS выполните
grant execute on DBMS_CRYPTO to parus;
Установка
Загрузите пользовательское приложение qrcode.vbs
Свяжите действие с разделами в которых будет выполняться сканирование.
Пользовательское приложение универсальное, но архитектура пользовательских
приложений в Парус 8 предполагает привязку к разделам
Установка
Создайте дополнительный словарь с мнемокодом QRCODEUNITS
Формат данных у этого словаря будет таким:
Значение – код раздела
Примечание – процедура PL/SQL, которая будет управлять последовательным
показом форм при обработке QR-кодов
Примечание: процедуру UDO_P_QR_TimeBoards и UDO_F_MD5_TMBOARD
возьмите из архива второго слайда.
Как это работает
В пользовательском приложении
Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTMP = objFSO.GetSpecialFolder(2)
on Error Resume Next
ZbarDir=objShell.RegRead("HKLM\SOFTWARE\Zbar\InstallDir")
if Err.Number<>0 then
msgbox "Приложение ZBar for Windows не найдено. Сначала
установите это приложение"
exit sub
end if
on Error Goto 0
Set objExec = objShell.exec(ZbarDir&"\bin\zbarcam.bat")
Как это работает
В пользовательском приложении
dim strOut
dim strRes
strOut = ""
strRes = ""
do while not objExec.StdOut.AtEndOfStream
strOut = objExec.StdOut.ReadLine()
if mid(strOut,1,14)="QR-Code:PARUS8" then
strRes=strOut
objExec.Terminate
end if
loop
Set objShell = Nothing
Set objExec = Nothing
'что-то пошло не так, может окно с камерой закрыли
if mid(strRes,1,14)<>"QR-Code:PARUS8" then
exit sub
end if
Как это работает
Собственно этого кода достаточно, чтобы
самостоятельно начать писать пользовательские
приложения по работе с QR-кодами.
Все, что будет описано в дальнейшем, это
описание универсального решения.
Как это работает
Из пакета UDO_PKG_QRCODE начинает выполняться процедура, которая
привязана к разделу указанному в дополнительном словаре QRCODEUNITS.
Раздел берется из текста QR-кода, а не из раздела в котором выполняется
пользовательское приложение. Что позволяет из любого раздела
обрабатывать любой документ.
Процедура, указанная в дополнительном словаре в нашем случае
UDO_P_QR_TimeBoards через пакет UDO_PKG_QRCODE заполняет 2 таблицы
UDO_T_QRCODE_FORMCTL и UDO_T_QRCODE_FORMCTLSP
И устанавливает значение пакетной переменной SSTATUS
UDO_PKG_QRCODE.set_STATUS('SHOW1');
Таблицы заполняются примерно так
Как это работает
Таблицы заполняются примерно так
nTOPPOS := nTOPPOS + 25;
-UDO_PKG_QRCODE.INSERT_TLABEL(NPOS
SCTLNAME => 'lbDesc1',
left
=> 10,
Top
=> nTOPPOS,
FontSize => 11,
FontStyle => '1',
AutoSize => 'true',
Caption => 'Описание:',
NRN
=> NTMP);
=> null,
Это означает добавить на форму элемент управления TLabel
Как это работает
Из заполненных таблиц в UDO_PKG_QRCODE.get_FORMCTLSP_CLOB
Получается текст на VBScript
Например:
…
.frmForm.Left="10"
.frmForm.Top="10"
.frmForm.BorderStyle="3"
.frmForm.FormStyle="3"
.frmForm.Width="800"
.frmForm.Height="250"
.lbinfo.Left="10"
.lbinfo.Top="10"
.lbinfo.Font.size="11"
.lbinfo.AutoSize="true"
.lbinfo.Caption="QR-Code:PARUS8 TimeBoards 026675CBBE748343548A44FBD7E355C8
01.12.2014 16:14:46 2014-1"
.frmForm.Width=Eval("frmForm.lbinfo.Width+30")
…
Как это работает
Т.е. элементы управления, какие необходимо показать на
форме, были заданы в процедуре PL/SQL.
К сожалению нельзя сгенерировать и привязать к элементам управления
обработчиков событий.
Как это работает
Пользовательское приложение после того как будут нажаты кнопка “ОК”
сообщит пакету UDO_PKG_QRCODE значения TEdit, TDateTimePicker, TComboBox .
Затем пользовательское приложение уничтожит форму.
И через UDO_PKG_QRCODE снова вызовет UDO_P_QR_TimeBoards
Критерием выхода из цикла вызовов UDO_P_QR_TimeBoards служитат либо пустые
таблицы, т.е. нет элементов управления для показа, либо, если в элементе
управления типа TComboBox будет установлено значение ="Перейти на запись"
…
if ctrl.SCTLTYPE="TComboBox" then
if ctrl.control.Text="Перейти на запись" then
canExit=true
frmForm.Free
set frmForm=nothing
…
Затем вызывется
showDocument.
showDocument – это новый способ управлять клиентом
Парус 8 из пользовательских приложений
Как это работает
Вот текст основного тела процедуры UDO_P_QR_TimeBoards
begin
SFORM := UDO_PKG_QRCODE.get_SFORM;
nCOMPANY := GET_SESSION_COMPANY();
-if UDO_PKG_QRCODE.get_STATUS = 'INIT'
then
STATUS_INIT_FILLFORM;
--после INIT
UDO_PKG_QRCODE.set_STATUS('SHOW1');
return;
end if;
if UDO_PKG_QRCODE.get_STATUS = 'SHOW1'
then
STATUS_SHOW1;
return;
end if;
if UDO_PKG_QRCODE.get_STATUS = 'EXIT'
then
UDO_PKG_QRCODE.CLEAR_FORM;
return;
end if;
end;
Как это работает
Приступаем к самой трудоемкой задаче - написанию функции
UDO_F_MD5_TMBOARD, которая отвечает за генерацию MD5-суммы всего отчета.
Именно от нее зависит, как будет проверяться, менялся документ или нет.
Как это работает
Вот текст последних строк UDO_F_MD5_TMBOARD
sMD5 := RAWTOHEX(SYS.DBMS_CRYPTO.hash( cDATA,
SYS.DBMS_CRYPTO.HMAC_MD5) );
-- insert into file_buffer(rn,ident,authid,filename,data)
-- values (gen_id(),gen_id(),utilizer(),'UDO_F_MD5_TMBOARD',cDATA);
DBMS_LOB.FREETEMPORARY( cDATA );
return sMD5;
end;
Как это работает
Вот примерное содержание cDATA
Цех №1
01.10.2014
31.10.2014
Основной
2014-1
26.11.2014
116564
Иванов Иван Иванович
01.10.2014
Я
8.0
02.10.2014
Я
8.0
03.10.2014
Я
8.0
04.10.2014 РВ
Н
2.0
04.10.2014 РВ
Я
8.0
06.10.2014
Я
8.0
….
116564 – это RN – исполнения должности
примеры написания пользовательских отчетов
Пример пользовательского отчета MS Excel
….
DBMS_LOB.createtemporary(bQRCODE, true);
begin
bQRCODE := F_QRCODE_ENCODE(sTEXT => 'PARUS8 TimeBoards ' ||
udo_f_md5_tmboard(RECT.RN) || ' ' ||
to_char(sysdate,
'dd.mm.yyyy hh24:mi:ss') || ' ' ||
RECT.SDOCNUMB,
sECLEVEL => 'H',
nSIZE => 50);
PRSG_EXCEL.CELL_VALUE_WRITE(CELL_QRCODE, 0, IDETAIL_1IDX, bQRCODE);
exception
when others then
null;
end;
DBMS_LOB.freetemporary(bQRCODE);
….
примеры написания пользовательских отчетов
Пример пользовательского отчета XSL-FO
….
bQRCODE := F_QRCODE_ENCODE(sTEXT => 'PARUS8 TimeBoards ' ||
udo_f_md5_tmboard(RECT_RN) || ' ' ||
to_char(sysdate,
'dd.mm.yyyy hh24:mi:ss') || ' ' ||
SDOCNUMB,
sECLEVEL => 'H',
nSIZE => NQRCODESIZE2);
cQRCODE := UDO_F_ENCODE_BASE64(bQRCODE);
DBMS_LOB.APPEND(C,
'
<fo:block-container absolute-position="absolute"
bottom="' || to_char(NQRCODESIZE2 + 1) ||
'px" left="1px" top="1px" right="' ||
to_char(NQRCODESIZE2 + 1) || 'px"
overflow="error-if-overflow">
');
примеры написания пользовательских отчетов
Пример пользовательского отчета XSL-FO
DBMS_LOB.APPEND(C, '<fo:block>');
DBMS_LOB.APPEND(C,
'<fo:external-graphic content-width="' ||
to_char(NQRCODESIZE2) || 'px" content-height="' ||
to_char(NQRCODESIZE2) ||
'px" scaling="non-uniform" src="url(&quot;data:image/jpeg;base64,');
DBMS_LOB.APPEND(C, cQRCODE);
DBMS_LOB.APPEND(C, '&quot;)" />');
DBMS_LOB.APPEND(C, '</fo:block>');
DBMS_LOB.APPEND(C, '</fo:block-container>');
exception
when others then
null;
end;
DBMS_LOB.freetemporary(bQRCODE);
DBMS_LOB.freetemporary(cQRCODE);
….
Примечание: достаточно одного тэга <fo:external-graphic >
управление жизненным циклом настроек оптимизации
В QR-коде, как вы уже заметили, присутствует время
печати.
Это на случай, если отчет поменяется, например,
добавится новая значимая колонка в таблице данных.
Тогда, скопируйте функцию типа UDO_F_MD5_TMBOARD в
UDO_F_MD5_TMBOARD_2.
Исправляйте уже UDO_F_MD5_TMBOARD_2.
Затем в процедуре типа UDO_P_QR_TimeBoards
анализируйте на основании времени печати какую
функцию проверки вызывать UDO_F_MD5_TMBOARD или
UDO_F_MD5_TMBOARD_2.
СПАСИБО ЗА ВНИМАНИЕ
«Корпорация ПАРУС»,
129366, Москва, ул. Ярославская, д.10 корп.4,
(495) 797-89-90, 797-89-91
[email protected]
www.parus.com