Ошибка открытия pdf файла в sap r3

Обновлено: 04.07.2024

Ну вот и я решил зарегиться после года чтений, веселого хохота и , даже, иногда до слёз.

Но этот пост будет прямой противоположностью. Этот пост - стон! Этот пост - вымещение злобы с озвучкой на всю страну (Россию-матушку). И , походу , этот пост -антиреклама САПу и реклама родному 1Су :).

Итак, этот пост для понимающих и сочуствующих, для нас, други-офисного планктона, хотя мой друг-технолог :) точно так же кроет матом этот "расчудесный" SAP.

Вопчем, сидим мы второй год на освоении этой чудесной "заграничной, как же" системы в одном из нехилых российских холдингов. Конечно же, в начале нам преподносилась эта система- как "прошареная" и "с готовыми решениями", которую замечательно приспособят под нас и заживем мы с её "гибкими" отчетами, ээээх, да что ты, что ты , что ты говоришь!

В итоге, что же мы имеем, через два года. Вся эта "чертова" уйма специалистов, которые приспосабливали систему под наши условия, так и не смогла довести до ума наши расчеты для получения результатов, которые мы имеем в лёгкую в родном до боли экселе, не смогла предоставить нам удобоваримый интерфейс для работы в SAP (этот веб-интерфейс со сплошным списком операций - полный аут! а работа сразу через EPM - это вообще нечто!).

А ведь это внедряли для облегчения работы с управленческими данными руководству, да они "в шоке", когда им начинаешь объяснять, как добраться до нужной таблицы, при этом постоянно приговаривая, а торопиться не наааадо - система тормозит (это мы пытаемся всей страной работать на московском сервере).

А как бесит система работы с таблицами! Открытие (минуту жди, иногда больше), дальше-сохрани (минуту подожди), пересчитай валюту (ещё подожди от минуты до пяти), обнови (ну ещё минутку, щас всё будет), бляяяя, да у меня же реквизит в шапке автоматически подменился с оглядкой на другую таблицу (это такая, типа , охеренная фишка SAPa, да чтоб её черти взяли!). Ну тогда всё по новой, времени-то вагон.

Я всё это время тщетно ищу хоть одного человека в холдинге, который бы сказал, что этот SAP облегчил ему трудовую деятельность.

Кстати, о друге-технологе, он на заводе другого великого холдинга родины. Внедрение SAPa в производство у них , отобрало у него сутки в его срочном двухсуточном закрытии месячных данных, и вот как хошь - успевай! Оптимизация процессов-хуля!

А соскочить мы , конечно же, уже не можем! Ведь кое-кто выбрал внедрение этой системы, кто-то в Москве имеет KPI, завязанный на успешном окончании процесса. И пыжатся они теперь (бедняги, но не в денежном плане :)), отчитываясь об этапах на совете директоров! Господин великий собственник, так и знайте, деньги выброшены на ветер!

Да хули ж вы не верите в родной и непобедимый 1С! Респект и уважуха своим родным! Они не стоят на месте и тоже развивают ERP-системы!

Короче , к чему я все затеял. Да что бы предупредить и охладить очередные пытливые умы, думающие, что какая-то "заграничная система с громким именем" решит все их проблемы в различных видах учёта. И , надеюсь, что я тем самым, уберегу каких-то своих "собратьев" по офисам и кабинетам от тех страданий , через которые тащимся мы! А потому жду поддерживающих меня комментов, чтобы выразить громкое "фи" забугорным системам. И по-прежнему ищу того, кто распишет ахеренные плюсы , которые он(она, мэй би) поимел(а), благодаря им же.

В данной статье описывается создание pdf документов на основании XML схемы. Статья предназначена для тех, кто уже знаком с технологией формирования pdf документов средствами ABAP, так и для новичков.

В данной статье описывается создание pdf документов на основании XML схемы. Статья предназначена для тех, кто уже знаком с технологией формирования pdf документов средствами ABAP, так и для новичков. В SAP предоставлен инструмент для создания таких документов – транзакция «sfp». Транзакция представляет собой ABAP программу, которая «общается» с десктопным приложением «Adobe LiveCycle Designer» посредством OLE. Поэтому для создания pdf формуляров необходимо установить данную программу на PC. Соответствующий файл для инсталляции можно скачать с SAP Service Marketplace.

«Adobe LiveCycle Designer» (далее «LiveCycle») – программа, предоставляемая компанией Adobe, для создания pdf документов, использующая различные интерфейсы (XML схема, простой XML файл, модель данных Adobe, WSDL файл, OLEDB) описания данных для наполнения шаблона pdf файла.

При разработке сложных формуляров рекомендуется напрямую использовать программу. Путь к исполняемому файлу «C:\Program Files (x86)\Adobe\Designer «Version»\ FormDesigner.exe». (Рис.1.) В этой статье версия программы «Version 10.4.0».


Рис. 1 Вид «Adobe LiveCycle Designer» при запуске исполняемого файла .exe

Основным преимуществом использования исполняемого файла программы является увеличение скорости разработки за счет отсутствия активации формуляра. При активации происходит перенос формуляра из программы на PC в SAP и проверка безопасности SAP GUI (например, доступ к файлам, необходимым программе - рис. 2).


Рис. 2 Безопасность SAP GUI при правке pdf формуляра в транзакции «sfp»

При этом установка флага «Запомнить мое решение» не помогает скрыть периодическое отображение диалогового окна. Проверку безопасности можно отключить («Настр. локал. формата(Alt+F12)» - «Опции…» - «Безопасность» - «Настройки безопасности» - «Статус: Деактивировано»), а вот скорость переноса формуляра из программы в SAP увеличить нельзя (OLE никогда не был быстрым). Поэтому в данной статье рассматривается создание формуляра через исполняемый файл программы «LiveCycle» на PC.

В случае создания pdf формуляра через транзакцию «sfp» необходимо указать интерфейс данных и создать сам шаблон разметки расположения данных. Интерфейс может быть представлен как:

  • Интерфейс на основе ABAP-словаря;
  • Интерфейс на основе схемы XML;
  • Совместимый со смарт-формуляра интерфейс.

Например, при использовании интерфейса на основе ABAP-словаря, весь интерфейс будет переконвертирован внутри SAP из данных ABAP-словаря в XML схему с использованием библиотеки iXML. То есть, в конечном итоге любой интерфейс данных в SAP представляет собой XML схему, так как программа «LiveCycle» поддерживает такой тип интерфейса. Локальные таблицы с данными также будут переконвертированы в XML.

В этом разделе далее рассмотрен пример выгрузки стандартного тестового формуляра «FP_TEST_03» (программа «FP_TEST_03») и запуск его в «LiveCycle» на PC.

Данные в конечном итоге представляют собой XML файл. Сам формуляр состоит из интерфейса и формата разметки шаблона формуляра. Расширение файла формуляра «.XDP», интерфейса – «.XSD». В транзакции «sfp» можно загрузить/выгрузить интерфейс и шаблон формуляра (рис. 3). Для выгрузки интерфейса необходимо выбрать «Выгрузить схему данных». Откроется диалог с выбором директории сохранения файла с расширением «.XSD». Для выгрузки/загрузки шаблона разметки данных формуляра необходимо выбрать «Выгрузить/Загрузить формат», расширение «.XDP» (Рис.3.).


Рис. 3 Выгрузка интерфейса и формуляра

Для загрузки интерфейса на основе «.XSD» файла необходимо перейти в интерфейс, на вкладке «Свойства» указать тип интерфейса как «Интерфейс на основе схемы XML», XML-схема – источник – «Файл», Файл – путь к файлу «.XSD».

Выгруженные файлы можно открыть в программе «LiveCycle».

Открытие формуляра (Рис.4.):


Рис. 4 Вид и иерархия формуляра

Открытие интерфейса данных:

  • Для нового интерфейса: «File» - «New Data Connection…» - Выбор одного из типов интерфейса
  • Для импортированного формуляра: «Window» («Palettes») - «Data View» - Клик правой кнопкой мыши по родительскому узлу интерфейса данных - «Connection Properties…» - «Далее» - Выбор «.XSD» файла интерфейса – «Готово» (рис. 5).


Рис. 5 Открытие интерфейса данных в программе «LiveCycle»

Для просмотра конечного pdf файла необходим XML файл с данными. Также необходимо установить программу «Adobe Acrobat Reader», после установки которой появится дополнительная вкладка «Preview PDF». (Рис.6.) В статье используется версия 17.3072.


Рис. 6 Дополнительная вкладка «Preview PDF»

Управление отображением вкладок можно осуществить через клик правой клавиши на панели вкладок и проставить/убрать галку у требуемой вкладки.

Данные можно получить с помощью генерации тестовых данных в «LiveCycle» (кнопка «Generate Preview Data…» на рис. 9), либо взять из SAP (при условии существования реализации вывода pdf файла). Для этого нужно:

1. Выбрать «очень подробная трассировка» («Утилиты» - «Параметры настройки…») на первом экране редактора формуляров (транзакция «sfp») (рис. 7).


Рис. 7 Подробная трассировка pdf

2. Вывести pdf файл на просмотр. Выбрать файл с данными «XFD.xml» (рис. 8). Для включения панели «Вложенные файлы» нужно кликнуть в любом месте pdf файла правой кнопкой и нажать «Показать кнопки области навигации».


Рис. 8 XML файл с данными из SAP

Также данный XML файл можно выгрузить из отладки. Для этого необходимо поставить точку прерывания после вызова динамического ФМа, который генерируется для формуляра, и выгрузить данные из поля «XML» структуры «/1BCDWB/FORMOUTPUT» как двоичные (например, вызов ФМа «lv_fm_name» из листинга 6).

XML файл с данными необходимо подать на вход программе: «File» - «Form Properties…» - «Preview» - «Data File» - путь к XML файлу с данными (рис. 9).


Рис. 9 Добавление данных для «Preview PDF»

При нажатии «Preview PDF» отобразится конечный файл pdf с данными (Рис.10.):


Рис. 10 Конечный pdf файл

Для определенного вида задач удобнее использовать интерфейс формуляра на основании XML схемы, чем на основе ABAP-словаря. Например, при работе с данными в формате XML (например, возвращаемыми веб-сервисами) или формировании динамических таблиц, когда количество столбцов заранее неизвестно.

Далее рассмотрен пример по отображение курсов валют ЦБ РФ в таблице pdf файла. В зависимости от выбранных валют динамически формируется таблица с данными.

Схема данных представляет собой «.XSD» файл (XML Schema Definition – язык описания структуры XML документа).


Рис. 11 Котировки валют на заданный день

На основе данного XML файла можно сформировать схему данных без обработки (парсинга и создания нового файла) XML. Но для упрощения понимания формирования pdf на основании XML схемы, упростим модель данных до вида:


где «TABLE» – отдельная таблица, «ROW» – отдельная строка данной таблицы, «VALUE» - множественный набор значений (динамические столбцы). Первая запись c тегом «ROW» будет являться заголовком таблицы, последующие записи – телом таблицы. Например, вид таблицы для данной модели из трех строк и шести столбцов в формате XML (Рис.12.):


Рис. 12 Таблица с данными в формате XML (3 строки, 6 столбцов)

Для данной модели данных схема имеет вид (Листинг 1, Листинг 2):

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

<xs:element name="DOCUMENT">

<xs:element name="TABLE" minOccurs="0" maxOccurs="unbounded">

<xs:element name="ROW" minOccurs="0" maxOccurs="unbounded">

<xs:element ref="VALUE" minOccurs="0" maxOccurs="unbounded" />

<xs:element name="VALUE" type="xs:string" />

Листинг. 1 XML схема данных в виде дерева

Также схему можно представить через отдельно стоящий узел, ссылающий на другие нижестоящие:

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

<xs:element name="DOCUMENT">

<xs:element ref="TABLE" minOccurs="0" maxOccurs="unbounded" />

<xs:element name="TABLE">

<xs:element ref="ROW" minOccurs="0" maxOccurs="unbounded" />

<xs:element name="ROW">

<xs:element ref="VALUE" minOccurs="0" maxOccurs="unbounded" />

<xs:element name="VALUE" type="xs:string" />

Листинг. 2 XML схема данных в виде отдельных узлов, соединенных через ссылки

На основе модели и схемы данных, необходимо сформировать XML файл с данными как на рис. 12, используя данные рис. 11.


Для этого получаем данные котировок валют из ЦБ РФ на заданный период (Листинг 3):

TABLES: tcurr.

TYPES: BEGIN OF ts_table,

date TYPE char10,

char_code TYPE string,

nominal TYPE string,

curr_name TYPE string,

curr_value TYPE string,

END OF ts_table,

tt_table TYPE TABLE OF ts_table.

gv_xxml TYPE xstring,

gv_full_xml TYPE string,

gv_url TYPE string,

gv_rfcoptions TYPE rfcdes-rfcoptions,

gv_date TYPE dats,

gv_url_date TYPE string,

gv_code TYPE sy-subrc,

gt_table TYPE tt_table,

gv_xml TYPE xstring.

PARAMETERS: p_url TYPE flag DEFAULT 'X',

p_date TYPE dats DEFAULT sy-datum,

p_days TYPE i DEFAULT 7.

SELECT-OPTIONS: s_curr FOR tcurr-fcurr.

IF p_url = 'X'.

EXPORTING

url = gv_url

IMPORTING

client = go_client

EXCEPTIONS

OTHERS = 99

ELSE.

EXPORTING

IMPORTING

client = go_client

EXCEPTIONS

OTHERS = 99

ENDIF.

CHECK go_client IS BOUND.

gv_date = p_date.

DO p_days TIMES.

CLEAR gv_xxml.

CONCATENATE gv_url '?date_req= ' gv_date+6(2) '/' gv_date+4(2) '/' gv_date(4) INTO gv_url_date.

gv_date = gv_date + 1.

go_client->request->set_content_type( 'text/xml' ).

go_client->request->set_header_field(

EXPORTING

name = '

value = 'GET'

go_client->send( EXCEPTIONS OTHERS = 99 ).

CHECK sy-subrc = 0.

go_client->receive( EXCEPTIONS OTHERS = 99 ).

CHECK sy-subrc = 0.

go_client->response->get_status( IMPORTING code = gv_code ).

IF gv_code = 200.

gv_xxml = go_client->response->get_data( ).

PERFORM parse_xml USING gv_xxml

CHANGING gt_table.

ENDIF.

go_client->close( ).

ENDDO.

PERFORM create_xml USING gt_table

CHANGING gv_xml.

PERFORM create_pdf USING gv_xml.

Листинг. 3 Получение данных котировок валют из ЦБ РФ

Парсим данные в таблицу gt_table (Листинг 4):

FORM parse_xml USING pv_xxml TYPE xstring

pv_date TYPE dats

CHANGING ct_table TYPE tt_table.

DATA: lo_ixml TYPE REF TO if_ixml,

lo_streamfactory TYPE REF TO if_ixml_stream_factory,

lo_parser TYPE REF TO if_ixml_parser,

lo_istream TYPE REF TO if_ixml_istream,

lo_document TYPE REF TO if_ixml_document,

lo_filter TYPE REF TO if_ixml_node_filter,

lo_node TYPE REF TO if_ixml_node,

lo_item TYPE REF TO if_ixml_node,

lv_name TYPE string,

lv_value TYPE string,

lo_iterator TYPE REF TO if_ixml_node_iterator,

lo_iterator_child TYPE REF TO if_ixml_node_iterator,

lv_sxml TYPE string,

lo_nodes TYPE REF TO if_ixml_node_list,

ls_table TYPE ts_table,

lv_date TYPE dats.

lv_date = pv_date - 1.

lo_ixml = cl_ixml=>create( ).

lo_streamfactory = lo_ixml->create_stream_factory( ).

lo_istream = lo_streamfactory->create_istream_xstring( string = pv_xxml ).

lo_document = lo_ixml->create_document( ).

lo_parser = lo_ixml->create_parser(

stream_factory = lo_streamfactory

istream = lo_istream

document = lo_document ).

lo_parser->parse( ).

IF lo_parser->is_dom_generating( ) EQ 'X'.

lo_node ?= lo_document.

CHECK lo_node IS NOT INITIAL.

lo_filter = lo_document->create_filter_name( name = 'Valute' ).

lo_iterator = lo_node->create_iterator_filtered( lo_filter ).

lo_node = lo_iterator->get_next( ).

WHILE lo_node IS NOT INITIAL.

lo_nodes = lo_node->get_children( ).

lo_iterator_child = lo_nodes->create_iterator( ).

Продукты Acrobat раньше открывали файл PDF, ожидая встретить в нем заголовок %PDF-header в любом месте первых 1024 байтов файла. Для внешних байтов перед заголовком %PDF-header никакие проверки не выполнялись. Однако обновления 10.1.5 и 11.0.01 улучшают защиту с помощью более строгого анализа заголовка PDF. Продукт теперь не позволяет открывать небольшую часть файлов PDF, которые не начинаются с заголовка «%PDF-' header» и возникает ошибка:

Ошибка. Документ поврежден и не может быть восстановлен. Adobe Reader не может открыть файл, поскольку формат файла не поддерживается или файл был поврежден (например, отправлен по e-mail как вложение и декодирован неправильно).

Программы для создания PDF-файлов

Если вы управляете или администрируете программным обеспечением, которое автоматически создает PDF-файлы, измените способ создания PDF-файлов. Убедитесь, что посторонние байты не появляются в начале файла перед %PDF.

Получатели PDF: корпоративные администраторы и пользователи

Если вы являетесь пользователем или корпоративным IT-профессионалом , можете отключить проверку заголовка на компьютерах, настроив соответствующие параметры. Можете настроить эти параметры на уровне каждого пользователя в HKCU или на уровне компьютера — для всех пользователей, в HKLM. Можете использовать подобный метод и на Mac OS, изменяя ту же настройку plist. Если ключ AVGeneral не существует, создайте его вручную.

Путь HKLM имеет примерно такой вид:

Например, чтобы изменить поведение Acrobat 11.0, создайте DWORD вот здесь: HKLM\SOFTWARE\Adobe\Adobe Acrobat\11.0\AVGeneral\bValidateBytesBeforeHeader=dword:00000000

Путь HKCU имеет примерно такой вид:

Например, чтобы изменить поведение Reader 10.0, создайте DWORD вот здесь: HKCU\SOFTWARE\Adobe\Acrobat Reader\10.0\AVGeneral\bValidateBytesBeforeHeader=dword:00000000

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

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

То, что вы не можете работать с таким распространенным форматом, как PDF на вашем смартфоне это довольно разочаровывает. К счастью, легко определить обе причины, по которым это происходит, и найти немедленное решение вашей проблемы.

Архив PDF

Причины, по которым вы не можете открыть PDF на Android

  • Документ PDF поврежден: документы PDF не могут быть открыты даже на компьютерах, не только на вашем мобильном телефоне, если они повреждены. Ошибка сохранения или некоторый код в формате файла может привести к тому, что документ станет несовместимым с устройством. Обычно это происходит, когда файл загружен неправильно, и лучший способ узнать, есть ли проблема в файле или на вашем мобильном телефоне, - это попытаться открыть его на другом устройстве.
  • PDF документ зашифрован: для его открытия иногда требуются средства дешифрования или пароль. Игнорирование этого приведет к пустому окну, или вы не сможете открыть файл.
  • Приложение не поддерживает форматы файлов PDF. - Иногда приложения мешают основным функциям телефона, мешая ему работать должным образом.

архив pdf

Решение проблемы

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

Обычный запуск PDF-файлы открываются прямо из диспетчера загрузок вашего телефона, но есть альтернативы для просмотра их как Google Drive или One Drive, одно из приложений Google, совместимых с этим типом файлов. Для этого вам просто нужно найти загруженный файл из файлового менеджера, выбрать его и в параметрах приложения выбрать, с помощью какого приложения вы хотите его открыть.

PDF Android

Тем не менее, решение всех ваших проблем в Adobe Acrobat Reader приложение, программа по преимуществу для просмотр PDF-файлов на любом компьютере. Если у вас установлено приложение на вашем мобильном телефоне, и вы по-прежнему не можете открыть PDF-файл, первым делом необходимо обновить приложение до последней версии и, если сбой не устранен, загрузить файл еще раз, поскольку по пути был поврежден.

Читайте также: