Выгрузка электронных документов через FastReport VCL

Материал из razgovorov.ru
Перейти к: навигация, поиск

Если Вы хотите перейти на электронный документооборот СБИС, но Ваша информационная система не умеет выгружать электронные документы, при этом для печати документов она использует FastReport VCL то этот способ для Вас.

Дело в том, что файлы готовых отчетов FastReport (fp3) по сути являются XML файлами, а значит их можно Конвертировать в XML документы при помощи СБИС Коннект.

Для этого есть два варианта:

  1. Ваша система самостоятельно выгружаете fp3 файлы в каталог Отправленные СБИС Коннект и далее они обрабатываются по соответствующему регламенту. Единственное ограничение, Вы должны сделать комплексный отчет, чтобы все документы в рамках одного Пакета попали в один готовый отчет.
  2. Воспользуетесь утилитой SbisFastLoader, которая вызовет указанные Вами отчеты FastReport по отобранному списку документов и сохранит на диск в виде одного XML файла.


Описание интеграции при помощи SbisFastLoader:

Обычно для печати комплекта документов используется несколько отчетов, в худшем случае при массовой печати это выглядит следующим образом: сначала печатают например фактуры, затем накладные и счета, после чего получившиеся три стопки бумаги разбирают и группируют пакеты документов для отправки. Мы разработали комплекс программного обеспечения позволяющий автоматически сгруппировать отчеты в один пакет и отправить в электронном виде.

Преимущества над другими способами интеграции:

  • Для выгрузки используются те же отчеты, что и для печати - не нужно дублировать логику при формировании электронного документа (как правило она не простая в сложных отчетах).
  • Все документы выгружаются формализованными в xml формате - Ваш контрагент их сможет автоматически обработать, существенно сокращается размер документа и увеличивается скорость выгрузки и обмена (в сравнении с pdf)
  • Минимум доработок на Вашей стороне – если Ваша система не умеет удобно (ведь это надо будет регулярно кому то делать) выгружать данные в каком либо формализованном виде, то это самый быстрый и простой способ интеграции.
  • Упрощается процедура выгрузки документов – формирование пакета и отправка осуществляются за одну операцию (два клика)


Как это работает:

Комплекс состоит из двух windows приложений:

  • SbisFastLoader – выгружает на локальный диск отчеты FastReport в формате XML объединенные в пакеты.
  • СБИС Коннект – конвертирует XML файлы FastReport в XML файлы формата ФНС, подписывает и отправляет Вашим контрагентам.

SbisFastLoader Scheme.png

Например, Вы обычно в начале месяца всем клиентам один раз в месяц выставляете счет + акт + фактуру, и для этого у Вас имеется три отчета «Счет.fr3» «Акт выполненных работ.fr3» и «Счет-фактура.fr3», которые Вы для печати вызываете по списку клиентов. А в середине месяца всем клиентам печатаете счет на предоплату «Счет.fr3».

«Акт выполненных работ.fr3» и «Счет-фактура.fr3» имеют единственный входной параметр «id», а счет «Счет.fr3» имеет два входных параметра «id» и «avans» (true – если надо напечатать счет на предоплату, и false – если это обычный счет).

Для решения такой задачи необходимо:

1. Прописать в SbisFastLoader.ini местонахождение отчетов и присвоить им коды.
sfakt=\\server\Финансовые\Счет-фактура.fr3
akt=\\server\Финансовые\Акт выполненных работ.fr3
shet=\\server\Финансовые\ Счет.fr3
2. Написать два sql запроса, каждый из которых поместить в отдельный файл. Один для подготовки счетов на предоплату, назовем его «Счета на предоплату.sql», а второй «СчФактура_Акт_Счет.sql» для подготовки обычных пакетов.

Sql запрос надо написать таким образом, чтобы в результате получался список, каждая строка которого содержала список параметров всех отчетов одного пакета. Особое значение имеют названия столбцов, они должны формироваться по маске [код отчета]_[имя параметра отчета]. В нашем случае sql запросы могут выглядеть так:

  • СчФактура_Акт_Счет.sql
SELECT … AS sfakt_id, … AS akt_id, … AS shet_id, false AS schet_avans FROM ….
  • Счета на предоплату.sql
SELECT  … AS shet_id, true AS schet_avans FROM ….

В результате запроса «СчФактура_Акт_Счет.sql» мы получим список:

sfakt_id akt_id shet_id schet_avans
1123 4214 2344 False
2123 4215 4234 False
3324 5216 Null Null

SbisFastLoader для каждой строки:

  1. Через FastReport выполнит отчет с кодом sfakt (Счет-фактура.fr3) и передаст ему один параметр (id=1123 для первой строки).
  2. Через FastReport выполнит отчет с кодом akt (Акт выполненных работ.fr3) и передаст ему один параметр (id=4214 для первой строки).
  3. Через FastReport выполнит отчет с кодом akt (shet.fr3) и передаст ему два параметра (id=2344, avans=false для первой строки).
  4. Если все отчеты выполнились корректно, то результаты их выполнения (готовые отчеты в формате FP3) помещаются в один xml файл и выгружаются в каталог указанный в параметре КаталогОтчетов. В противном случае делается запись об ошибке в лог файл, а процесс выгрузки продолжается.
  5. Если все параметры одного отчета равны Null – то этот отчет не будет включен в состав пакета (например по строке 3 счет выгружен не будет)

При запуске, Вам необходимо выбрать тип выгрузки ( sql файл) и указать период.

SbisFastLoader Interface.png

Настройка SbisConnect:

Скачиваете и устанавливаете в соответствии с документацией http://help.sbis.ru/exchange/integration/other_directory Для предотвращения проблем с превышением максимальной длинны пути и имени файла в windows (254 символа) рекомендуем устанавливать SbisConnect в корень диска. По умолчанию это: C:\СБИС Коннект\

Настройка SbisFastLoader:

1. Распаковываете архив SbisFastLoader.zip в каталог с установленным SbisConnect
2. В подкаталоге «Запросы» создаете файлы SQL запросов.
3. Редактируем SbisFastLoader.ini
a. Указываем параметры подключения к базе данных:
i. Для MSSQL: Тип=MSSQL, Сервер, БД
ii. Для Oracle: Тип=Oracle, Схема. Авторизация будет запрошена средствами системы, у пользователя должно быть достаточно для прав выполнения указанных Вами отчетов и написанных Вами sql запросов.
b. Указываем местоположение папки куда будут выгружаться фалы и папки где находятся файлы с sql запросами. По умолчанию это:
КаталогЗапросов=C:\СБИС Коннект\SbisFastReport\Запросы\
КаталогОтчетов= C:\СБИС Коннект\Отправляемые\
c. Указываем местоположение всех отчетов FastReport использущихся в SQL запросах.

Ограничения:

  1. Поддерживается FastReport VCL версии 3 и 4 (возможно и другие версии, где отчеты хранятся в формате FR3, а готовые отчеты в формате FP3)
  2. Поддерживается только базы данных MS SQL и Оracle (по требованию список может быть расширен).
  3. Код отчета в ini файле не должен содержать символа подчеркивание.
  4. Если Вы используете FastReport VCL версии 2, то вы можете для работы программы создать копию Ваших отчетов, после чего сконвертировать их в версию 3 и использовать для работы со SbisFastLoader.
http://www.fast-report.com/ru/forum/index.php?showtopic=3042

Пример sql файла для системы техносбыт:

declare @dt1 datetime, @dt2 datetime
set @dt1=:dt1
set @dt2=:dt2
select   invoice_id as sfakt_id1, bill_id as akt_id1, bill_id as shet_id1 
from bills 
where 
rperiod_beg = @dt1
and advtype <> 1 and isnull(takedDebt,0) = 0 
and isnull(percBill_type,0) = 0
and sbill_id>0

Пример файла SbisFastLoader.ini:

[Отчеты]
sfakt=\\server\Финансовые\sfakt.fr3
akt=\\server\Финансовые\akt.fr3
shet=\\server\Финансовые\shet.fr3
[Настройки]
Логин=***
БД=***
Сервер=***
КаталогЗапросов=C:\СБИС Коннект\SbisFastReport\sql\
КаталогОтчетов= C:\СБИС Коннект\Отправляемые\

Пример результирующего xml

<xml server=[название сервера из ini] Database=[название базы данных из ini]>
<document  type=’sfakt’ id1=[ id] >
…..тело fp3 файла…..
</document>
<document type=’akt’ id1=[ id]>
…..тело fp3 файла…..
</document>
<document type=’schet’ id1=[ id]>
<source lang="ini">
…..тело fp3 файла…..
</document>
</xml>

Пример log.txt

13.02.2014 14:13:12 Начало выгрузки; c:\Все отчеты за период.sql; 01.12.2013; 31.12.2013; Всего ХХ пакетов
13.02.2014 14:13:15 Выгрузили: akt_id=123; sfakt_id=23; в файл=4324asdasd243.xml
13.02.2014 14:13:16 Закончили выгрузку

Пример error.txt

13.02.2014 14:13:16 c:\qweqweqw.fr3; [param1=…];[param2=…];[Текст ошибки]