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

Материал из razgovorov.ru
Версия от 01:10, 23 января 2015; Разговоров Михаил (обсуждение | вклад) (1 версия импортирована)
Перейти к: навигация, поиск

Если Вы хотите перейти на электронный документооборот СБИС, а Ваша информационная система не умеет выгружать ни регламентированные XML файлы , ни в одном из поддерживаемых СБИС Коннект форматах. Но при этом она для печати документов использует 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=…];[Текст ошибки]