По большому счёту, web-разработкой я не занимаюсь, но иногда
приходится "на коленке" писать отдельные модули. Последние полгода я
занимаюсь созданием web-фронтэнда к учётной базе 1С для клиентов своего
работодателя. О взаимодействии "web-сервисов" 1С и сайта я сейчас
распространяться не планирую - может быть напишу отдельную заметку, а
сейчас хотел поделиться своим опытом освоения вполне логичной темы
развития клиентского портала, а именно - формированием печатных форм
документов.Так как клиентский портал я решил писать на PHP
(просто из-за того, что этот язык был мне более-менее знаком по моим
предыдущим наработкам), то и библиотеки формирования pdf пришлось
выбирать из доступных для этого языка. Из всего множества проектов я
остановил свой выбор на tcpdf,
во-первых, данный проект бесплатен (и для коммерческого использования),
во-вторых, для базового "Hello, World!" достаточно написать буквально
пару строк "обвязки".
Предлагаемые мной "бланки печатных форм" являются плодом моих размышлений, обмеров линейкой параметров бумажных печатных форм, чтения официальной документации и примеров с сайта проекта, а также помогла статья из первой десятки поисковой выдачи гугла по настройке кириллических шрифтов.
Итак, устанавливаем из репозитория `epel` (как его подключить я уже писал) пакет 'php-tcpdf' банальным
Особенность формирования печатной формы обусловлена форматом данных, приходящих от 1С - параметры приходят в виде SOAP-сериализованного объекта, содержащего массив параметров; табличная часть приходит в виде элемента массива параметров, содержащего массив (таблицу) массивов (строк таблицы); на стороне 1С данные формируются таким образом, что каждый конкретный атрибут занимает строго определённый индекс получаемого массива; парсинг ответа 1С в планарный массив я здесь рассматривать не буду (он реализован в функции GetSFParams, подключаемой из внешнего файла), т.к. во-первых, он создан для нетиповой конфигурации, а во-вторых, он даже на мой взгляд весьма "костыльный". Основной профит с моей разработки заключается в том, что мной уже вычислены практически все параметры печатной формы, являющейся "Приложением №1 к постановлению Правительства Российской Федерации от 26.12.2011 № 1137", в ней предусмотрена многостраничная печатная форма (что, к слову, никак не оговаривается в том самом "постановлении"), и она может быть доработана под собственные нужды достаточно легко.
Вопросам настройки tcpdf для работы с русским языком я особого внимания не уделяю - на эту тему материалов и так достаточно (мне хватило упомянутой выше статьи).
Итак, условный файл sf.php: при вызове ему передаётся уникальный идентификатор требуемого документа методом GET (для удобства сохранения/копирования ссылки); контроль прав доступа, аналогично получению и парсингу реквизитов, реализован в подключаемом файле init.php.
В принципе, данный скрипт можно "обернуть" в функцию и вызывать, передавая реквизиты в виде массива, просто мне было удобнее именно так - передавать идентификатор СФ и получать данные из 1С из скрипта.
Пример результата работы скрипта: сгенерированная печатная форма.
UPD 2018-02-13: Загрузил пакет адаптированных шрифтов на сайты Google, так как столкнулся с невозможностью повторения "руссификации" tcpdf по статье из ссылки в шапке. Содержимое архива надо распаковать в папку со шрифтами tcpdf (в моём случае это /usr/share/php/tcpdf/fonts)
Предлагаемые мной "бланки печатных форм" являются плодом моих размышлений, обмеров линейкой параметров бумажных печатных форм, чтения официальной документации и примеров с сайта проекта, а также помогла статья из первой десятки поисковой выдачи гугла по настройке кириллических шрифтов.
Итак, устанавливаем из репозитория `epel` (как его подключить я уже писал) пакет 'php-tcpdf' банальным
yum install php-tcpdf
и начинаем наше "колдунство".Особенность формирования печатной формы обусловлена форматом данных, приходящих от 1С - параметры приходят в виде SOAP-сериализованного объекта, содержащего массив параметров; табличная часть приходит в виде элемента массива параметров, содержащего массив (таблицу) массивов (строк таблицы); на стороне 1С данные формируются таким образом, что каждый конкретный атрибут занимает строго определённый индекс получаемого массива; парсинг ответа 1С в планарный массив я здесь рассматривать не буду (он реализован в функции GetSFParams, подключаемой из внешнего файла), т.к. во-первых, он создан для нетиповой конфигурации, а во-вторых, он даже на мой взгляд весьма "костыльный". Основной профит с моей разработки заключается в том, что мной уже вычислены практически все параметры печатной формы, являющейся "Приложением №1 к постановлению Правительства Российской Федерации от 26.12.2011 № 1137", в ней предусмотрена многостраничная печатная форма (что, к слову, никак не оговаривается в том самом "постановлении"), и она может быть доработана под собственные нужды достаточно легко.
Вопросам настройки tcpdf для работы с русским языком я особого внимания не уделяю - на эту тему материалов и так достаточно (мне хватило упомянутой выше статьи).
Итак, условный файл sf.php: при вызове ему передаётся уникальный идентификатор требуемого документа методом GET (для удобства сохранения/копирования ссылки); контроль прав доступа, аналогично получению и парсингу реквизитов, реализован в подключаемом файле init.php.
В принципе, данный скрипт можно "обернуть" в функцию и вызывать, передавая реквизиты в виде массива, просто мне было удобнее именно так - передавать идентификатор СФ и получать данные из 1С из скрипта.
Пример результата работы скрипта: сгенерированная печатная форма.
UPD 2018-02-13: Загрузил пакет адаптированных шрифтов на сайты Google, так как столкнулся с невозможностью повторения "руссификации" tcpdf по статье из ссылки в шапке. Содержимое архива надо распаковать в папку со шрифтами tcpdf (в моём случае это /usr/share/php/tcpdf/fonts)
Привет!
ОтветитьУдалитьГугл направил меня на https://sites.google.com/, но я героически нашел ссылку на этот сайт на предыдущем гугловском.
Ламповый блог, какие уже очень редко делают.
Вопросы:
1. Какую версию tcpdf использовали?
2. Если это возможно, хотелось бы получить:
a) Cгенерированный вами шрифт Arial
б) "Акт выполненных работ" и "Счёт на оплату"
Благодарю за внимание.
Жду ответ здесь, либо на andres.website@yandex.ru
Спасибо!!!
ОтветитьУдалитьСкачал скрипт на http://www.bubnov.su/ , подредактировал под себя, все супер. Шрифт заменил на свой, только уменьшил немного размер, что бы все влазило. Выдавало ошибку на методе GetStringHeight (наверное версия у меня старая), закоментировал ее - все нормально работает и на длинных названиях тоже.
Огромное СПАСИБО, завтра дедлайн, и осталась куча времени поспать и не провалить сроки