Отчеты в Альта-ГТД, создание сценариев для автоматического создания отчетности: различия между версиями

Материал из Alta-Soft Wikipedia
Перейти к навигации Перейти к поиску
м (Запуск выгрузки отчета с помощью файла сценария)
м (Выгрузка по расписанию)
Строка 116: Строка 116:
 
Пример такого bat-файла с генерацией файла сценария, запускающего построение отчета за последние 3 дня от текущей даты:
 
Пример такого bat-файла с генерацией файла сценария, запускающего построение отчета за последние 3 дня от текущей даты:
  
<code>@echo off</code>
+
<source lang=bat>
 +
@echo off
 +
&SETLOCAL
 +
SET "days=3"
 +
SET "report=report31.dat"
 +
SET "dir={00000000-0000-0000-0000-000000000000}"
 +
SET "saveto=C:\tmp1\report31.csv"
 +
SET "till=%date%"
  
<code>&SETLOCAL</code>
+
CALL:DateToJDN %till% tillNo
  
<code>SET "days=3"</code>
+
SET /a fromNo=tillNo-days+1
  
<code>SET "report=report31.dat"</code>
+
CALL:JDNToDate %fromNo% from
  
<code>SET "dir={00000000-0000-0000-0000-000000000000}"</code>
+
del "scen.ini"
  
<code>SET "saveto=C:\tmp1\report31.csv"</code>
+
echo [Count] >>scen.ini
 +
echo Forms=%report% >>scen.ini
 +
echo [saveto] >>scen.ini
 +
echo %report%=%saveto% >>scen.ini
 +
echo [Filter.%report%] >>scen.ini
 +
echo GetDV.From_Date = %from% >>scen.ini
 +
echo GetDV.To_Date = %till% >>scen.ini
 +
echo REGISTER=1 >>scen.ini
 +
echo EDDOCS=1 >>scen.ini
 +
echo [folder] >>scen.ini
 +
echo %report%=%dir% >>scen.ini
  
<code>SET "till=%date%"</code>
+
TIMEOUT /T 1
  
<code>CALL:DateToJDN %till% tillNo</code>
+
start "" "c:\alta\GtdRep.exe" "/sc:\tmp1\testbat\scen.ini"
  
<code>SET /a fromNo=tillNo-days+1</code>
+
GOTO:EOF
  
<code>CALL:JDNToDate %fromNo% from</code>
+
rem Convert the date to Julian Day Number
  
<code>del "scen.ini"</code>
+
:DateToJDN dd.mm.yyyy jdn=
  
<code>echo [Count] >>scen.ini</code>
+
setlocal
 +
set date=%1
 +
set /A yy=%date:~-4%, mm=1%date:~-7,2% %% 100, dd=1%date:~-10,2% %% 100
 +
set /A a=mm-14, jdn=(1461*(yy+4800+a/12))/4+(367*(mm-2-12*(a/12)))/12-(3*((yy+4900+a/12)/100))/4+dd-32075 endlocal & set %2=%jdn%
 +
exit /B rem Convert Julian Day Number back to date
  
<code>echo Forms=%report% >>scen.ini</code>
+
:JDNToDate jdn dd.mm.yyyy=
  
<code>echo [saveto] >>scen.ini</code>
+
setlocal
 +
set /A l=%1+68569,n=(4*l)/146097,l=l-(146097*n+3)/4,i=(4000*(l+1))/1461001,l=l-(1461*i)/4+31,j=(80*l)/2447,dd=l-(2447*j)/80,l=j/11,mm=j+2-(12*l),yy=100*(n-49)+i+l if %dd% lss 10 set dd=0%dd%
  
<code>echo %report%=%saveto% >>scen.ini</code>
+
if %mm% lss 10 set mm=0%mm%
  
<code>echo [Filter.%report%] >>scen.ini</code>
+
endlocal & set %2=%dd%.%mm%.%yy%
  
<code>echo GetDV.From_Date = %from% >>scen.ini</code>
+
exit /B
  
<code>echo GetDV.To_Date = %till% >>scen.ini</code>
+
endlocal  
 
+
</source>
<code>echo REGISTER=1 >>scen.ini</code>
 
 
 
<code>echo EDDOCS=1 >>scen.ini</code>
 
 
 
<code>echo [folder] >>scen.ini</code>
 
 
 
<code>echo %report%=%dir% >>scen.ini</code>
 
 
 
<code>TIMEOUT /T 1</code>
 
 
 
<code>start "" "c:\alta\GtdRep.exe" "/sc:\tmp1\testbat\scen.ini"</code>
 
 
 
<code>GOTO:EOF</code>
 
 
 
<code>rem Convert the date to Julian Day Number</code>
 
 
 
<code><nowiki>:</nowiki>DateToJDN dd.mm.yyyy jdn=</code>
 
 
 
<code>setlocal</code>
 
 
 
<code>set date=%1</code>
 
 
 
<code>set /A yy=%date:~-4%, mm=1%date:~-7,2% %% 100, dd=1%date:~-10,2% %% 100</code>
 
 
 
<code>set /A a=mm-14, jdn=(1461*(yy+4800+a/12))/4+(367*(mm-2-12*(a/12)))/12-(3*((yy+4900+a/12)/100))/4+dd-32075
 
endlocal & set %2=%jdn%</code>
 
 
 
<code>exit /B
 
rem Convert Julian Day Number back to date</code>
 
 
 
<code><nowiki>:</nowiki>JDNToDate jdn dd.mm.yyyy=</code>
 
 
 
<code>setlocal</code>
 
 
 
<code>set /A l=%1+68569,n=(4*l)/146097,l=l-(146097*n+3)/4,i=(4000*(l+1))/1461001,l=l-(1461*i)/4+31,j=(80*l)/2447,dd=l-(2447*j)/80,l=j/11,mm=j+2-(12*l),yy=100*(n-49)+i+l
 
if %dd% lss 10 set dd=0%dd%</code>
 
 
 
<code>if %mm% lss 10 set mm=0%mm%</code>
 
 
 
<code>endlocal & set %2=%dd%.%mm%.%yy%</code>
 
 
 
<code>exit /B</code>
 
 
 
<code>endlocal</code>
 

Версия 10:12, 20 апреля 2020

Запуск выгрузки отчета с помощью файла сценария

Запуск осуществляется командой:

C:\Alta\GtdRep.exe /sC:\Temp\scen.ini

где

"C:\Alta\" – путь к каталогу, где установлена программа Альта ГТД

"C:\Temp\scen.ini" – путь к файлу сценария

Формат файла сценария:

[Count]
Forms=Report1.dat,Report2.dat,...   ; имена форм отчетов

[SaveTo]
Report1.dat=С:\отчет1.xls   ; имена файлов куда сохранить
Report2.dat=D:\отчет2.htm

...

[MailTo]
Report1.dat=test@test.ru
Report2.dat=test@test.ru

...

[Folder]
Report1. dat ={00000000-0000-0000-0000-000000000000}  ;здесь указан основной каталог
Report2. dat ={00000000-0000-0000-0000-000000000000}

...

[Filter.Report1.dat]; параметры фильтра
7_1.Date.From_Date=01-01-2020
7_1.Date.To_Date=31-12-2020
7_1.Post=10210100
REGISTER=1
EDDOCS=1
ENDRES=1

[Filter.Report2.dat]
...


Подробное описание файла сценария

В разделе Count указываются имена форм отчетов через запятую.

Имя файла отчета можно увидеть в самом приложении при выборе нужного отчета

Filename of report.jpg

В разделе SaveTo необходимо указать путь и формат выгрузки каждого отчета.

При необходимости, в разделе MailTo можно указать почту, на которую необходимо отправить выгруженный отчет.

При этом нужно настроить параметры электронной почты в настройках приложения.

Mail settings.jpg

Если отправка отчета по электронной почте не нужна, соответствующий раздел в файле сценария можно не указывать.

В разделе Folder необходимо указать каталог, по которому будет строиться отчет. Можно указывать несколько каталогов через запятую.

Каталог с ключом {00000000-0000-0000-0000-000000000000} – это основной каталог.

Посмотреть ключ для нужного каталога можно в программе Альта ГТД. Необходимо открыть любой документ (например, ДТ), находящийся в данном каталоге. Далее в меню ДТ(ГТД) – Информация о документе – скопировать данный ключ из параметра «GUID папки».

Info.jpg

Для каждого отчета необходимо добавить свой раздел Filter с именем файла отчета (например, Filter.Report1.dat).

Имена фильтров необходимо смотреть в файле отчета в разделе [Filter]

Filter names.jpg

Для фильтров типа Date есть возможность указания как конкретной даты, так и поименованного периода.

Например:

7_1.Date = TODAY

Тут возможны варианты: TODAY, YESTERDAY, CURWEEK, LASTWEEK, CURMONTH, LASTMONTH, CURYEAR, LASTYEAR (сегодня, вчера, тек. неделя, прошлая неделя, тек. месяц, прошлый месяц, тек. год, прошлый год)

Либо конкретные даты:

7_1.Date.From_Date=01-01-2020

7_1.Date.To_Date=31-12-2020

Даты в формате [ДД-ММ-ГГГГ]

Фильтры EDDOCS, REGISTER, ENDRES – это дополнительные фильтры для ограничения выборки

Filter window.jpg

Выгрузка по расписанию

Для выгрузки отчета по расписанию необходимо воспользоваться стандартным функционалом операционной системы Windows - Планировщик заданий

В Планировщике необходимо добавить новую задачу, указав на вкладке «Действия» путь и параметры исполняемого файла.

Plan.jpg

Если файл сценария нужно создавать динамически на основе каких-то данных, например, каждый день строить отчет за последние 3 дня относительно текущей даты, то для этого можно воспользоваться стандартным функционалом Windows – пакетным файлом (файл .bat)

Т.е. необходимо сформировать bat-файл, который будет генерировать файл сценария и запускать выгрузку отчета по этому файлу сценария.

В планировщик при этом необходимо будет добавлять задачу с указанием пути к данному bat-файлу.

Пример такого bat-файла с генерацией файла сценария, запускающего построение отчета за последние 3 дня от текущей даты:

@echo off
&SETLOCAL
SET "days=3"
SET "report=report31.dat"
SET "dir={00000000-0000-0000-0000-000000000000}"
SET "saveto=C:\tmp1\report31.csv"
SET "till=%date%"

CALL:DateToJDN %till% tillNo

SET /a fromNo=tillNo-days+1

CALL:JDNToDate %fromNo% from

del "scen.ini"

echo [Count] >>scen.ini
echo Forms=%report% >>scen.ini
echo [saveto] >>scen.ini
echo %report%=%saveto% >>scen.ini
echo [Filter.%report%] >>scen.ini
echo GetDV.From_Date = %from% >>scen.ini
echo GetDV.To_Date = %till% >>scen.ini
echo REGISTER=1 >>scen.ini
echo EDDOCS=1 >>scen.ini
echo [folder] >>scen.ini
echo %report%=%dir% >>scen.ini

TIMEOUT /T 1

start "" "c:\alta\GtdRep.exe" "/sc:\tmp1\testbat\scen.ini"

GOTO:EOF

rem Convert the date to Julian Day Number

:DateToJDN dd.mm.yyyy jdn=

setlocal
set date=%1
set /A yy=%date:~-4%, mm=1%date:~-7,2% %% 100, dd=1%date:~-10,2% %% 100
set /A a=mm-14, jdn=(1461*(yy+4800+a/12))/4+(367*(mm-2-12*(a/12)))/12-(3*((yy+4900+a/12)/100))/4+dd-32075 endlocal & set %2=%jdn%
exit /B rem Convert Julian Day Number back to date

:JDNToDate jdn dd.mm.yyyy=

setlocal
set /A l=%1+68569,n=(4*l)/146097,l=l-(146097*n+3)/4,i=(4000*(l+1))/1461001,l=l-(1461*i)/4+31,j=(80*l)/2447,dd=l-(2447*j)/80,l=j/11,mm=j+2-(12*l),yy=100*(n-49)+i+l if %dd% lss 10 set dd=0%dd%

if %mm% lss 10 set mm=0%mm%

endlocal & set %2=%dd%.%mm%.%yy%

exit /B

endlocal