Статьи‎ > ‎

Разработка печатной формы "счет-фактура" в формате pdf для сайта на php (tcpdf)

По большому счёту, web-разработкой я не занимаюсь, но иногда приходится "на коленке" писать отдельные модули. Последние полгода я занимаюсь созданием web-фронтэнда к учётной базе 1С для клиентов своего работодателя. О взаимодействии "web-сервисов" 1С и сайта я сейчас распространяться не планирую - может быть напишу отдельную заметку, а сейчас хотел поделиться своим опытом освоения вполне логичной темы развития клиентского портала, а именно - формированием печатных форм документов.

Так как клиентский портал я решил писать на PHP (просто из-за того, что этот язык был мне более-менее знаком по моим предыдущим наработкам), то и библиотеки формирования pdf пришлось выбирать из доступных для этого языка. Из всего множества проектов я остановил свой выбор на tcpdf, во-первых, данный проект бесплатен (и для коммерческого использования), во-вторых, для базового "Hello, World!" достаточно написать буквально пару строк "обвязки".

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

Особенность формирования печатной формы обусловлена форматом данных, приходящих от 1С - параметры приходят в виде SOAP-сериализованного объекта, содержащего массив параметров; табличная часть приходит в виде элемента массива параметров, содержащего массив (таблицу) массивов (строк таблицы); на стороне 1С данные формируются таким образом, что каждый конкретный атрибут занимает строго определённый индекс получаемого массива; парсинг ответа 1С в планарный массив я здесь рассматривать не буду (он реализован в функции GetSFParams, подключаемой из внешнего файла), т.к. во-первых, он создан для нетиповой конфигурации, а во-вторых, он даже на мой взгляд весьма "костыльный". Основной профит с моей разработки заключается в том, что мной уже вычислены практически все параметры печатной формы, являющейся "Приложением №1 к постановлению Правительства Российской Федерации от 26.12.2011 № 1137", в ней предусмотрена многостраничная печатная форма (что, к слову, никак не оговаривается в том самом "постановлении"), и она может быть доработана под собственные нужды достаточно легко.

Вопросам настройки tcpdf для работы с русским языком я особого внимания не уделяю - на эту тему материалов и так достаточно (мне хватило упомянутой выше статьи).

Итак, условный файл sf.php: при вызове ему передаётся уникальный идентификатор требуемого документа методом GET (для удобства сохранения/копирования ссылки); контроль прав доступа, аналогично получению и парсингу реквизитов, реализован в подключаемом файле init.php.

В принципе, данный скрипт можно "обернуть" в функцию и вызывать, передавая реквизиты в виде массива, просто мне было удобнее именно так - передавать идентификатор СФ и получать данные из 1С из скрипта.

По такому же принципу генерируются и "Акт выполненных работ" и "Счёт на оплату". Если кому-то нужны - пишите, тоже выложу.

ċ
fonts.zip
(4522k)
Пётр Бубнов,
13 февр. 2018 г., 02:22
Ċ
sf.pdf
(140k)
Пётр Бубнов,
25 дек. 2015 г., 04:37
ċ
sf.php
(16k)
Пётр Бубнов,
25 дек. 2015 г., 04:06
Comments