Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет.doc
Скачиваний:
36
Добавлен:
18.04.2015
Размер:
386.56 Кб
Скачать

2. Знакомство с языком abap

Прежде чем начать выполнение, поставленных передо мной задач, я стал изучать новый для себя язык программирования ABAP, который используется в системе SAP ERP. Язык ABAP - внутренний язык программирования высокого уровня немецкой софтверной компании SAP. Синтаксис наиболее близок к языку программирования COBOL. Название ABAP расшифровывается как Advanced Business Application Programming [1]. АВАР считается развитым языком программирования коммерческих приложений. В отличие от приложений, созданных на других языках программирования, программу, разработанную на АВАР, можно читать как обычный текст, написанный на английском языке. Лежащая в основе такого подхода концепция кажется очень простой: нельзя делать программу скоплением загадочных формул, понятных только автору и компилятору, — ее должен суметь прочесть каждый, кто проявил к ней интерес. Эта концепция обеспечивает программам АВАР долгую жизнь. Она делает функциональное расширение программных текстов несложным. Текст программы на АВАР строится из операторов, каждый из них заканчивается точкой. Оператор начинается с зарезервированного ключевого слова, за которым следуют дополнительные параметры и объекты данных. Можно объединять последовательность операторов, имеющих одинаковую начальную часть (одни и те же ключевые слова, иногда параметры и объекты данных), в один оператор, используя символы двоеточия и запятой и располагая идентичную часть оператора перед символом двоеточия. Например, два оператора объявления целых переменных

DATA х TYPE i.

DATA y TYPE i.

могут быть сокращены до одного оператора:

DATA: x TYPE i,

у TYPE i.

Пример простейшей программы на языке ABAP:

REPORT first_programm.

WRITE / 'Hello World'.

3. Решение поставленных задач

Задание1

15 размер шрифта отличается от 14 только тем, что расстояние между символами больше, а размер букв не меняется. При печати 14 шрифтом в строчку помещается 132 символа. Если же изменить шрифт на 15, то в строчку будет помещаться всего 120 символов. Соответственно если увеличить шрифт до 15, то содержимое документа не будет помещаться по ширине. Программа имеет следующий вид. По номеру накладной ищется в таблицах необходимая информация по товарам. Делаются необходимые расчеты. Затем выводится необходимая информация на экран с помощью обычных “WRITE”. Документ помимо текста с различными выравнивания, содержит и таблицы. Ширину строк выводимых на печать уменьшил до 120 символов. Но выводимые данные могут превышать 120 символов. Поэтому был предусмотрен перенос на следующую строку или строки, в зависимости от того на сколько превышает количество символов. Также имеется фрагмент документа, в котором информация выводится в две колонки. Здесь тоже предусмотрены переносы на новые строки. В документе также имеется одна или две таблицы, которые занимают в ширину 132 символа. В таблице имеется 13 столбцов. Мне необходимо было выбрать какие столбцы и на сколько уменьшить в ширину, чтобы вся таблица стала занимать 120 символов. В каждом столбце необходимо было наладить перенос на следующую строчку в случае, если данные выводимые в данный столбец превышают ширину столбца. С помощью необходимых запросов получаю текущее имя сотрудника, который оформляет заказ, и получаю номера заказов, имеющихся в накладной. В одной из таблиц, хранящих данные о заказах, есть поле, которые показывает время, которое заказ может находиться на складе для получения после оформления. На основе этого рассчитывал дату, до которой товар действителен для получения на складе, прибавив к дате заказа время, которое товар может храниться на складе до получения. Вывожу полученные данные на печать. После окончания работы с этой программой проводил наблюдение. Засекал время, которое понадобится для распечатки 14 шрифтом и 15 шрифтом. Документ, выбранный для наблюдения, помещался на 2 страницы. В итоге получилось, что 15 шрифтом документ печатается примерно на 40 секунд быстрее, чем 14 шрифтом. Полученная разница, оказалась довольно существенной.

Пример кода программы, который отвечает за распечатку иготов по таблице:

WRITE: AT 01(29) 'Итого' RIGHT-JUSTIFIED NO-GAP INTENSIFIED ON, AT 37(10) ls_header-total_quan NO-GROUPING NO-GAP INTENSIFIED ON, AT 77(10) ls_header-total_tax_amount NO-GROUPING NO-GAP INTENSIFIED ON, AT 59(10) ls_header-total_sum_nt NO-GROUPING NO-GAP INTENSIFIED ON, AT 88(10) ls_header-total_sum NO-GROUPING NO-GAP INTENSIFIED ON.

Результат выполнения программы в приложениях 1 и 2.

Задание 2

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

Задание 3

Для начала рассмотрим принцип, по которому производится работа с формулярами. Есть программа, которая производит все необходимые расчеты. Эти расчеты записываются в таблицу. Затем данные этой таблицы передаются в формуляр, на котором полям этой таблицы соответствуют области на листе. Чтобы добавить вывод нового элемента в формуляр нужно создать в таблице, которая передается в формуляр, соответствующее поле. В программе для формуляра происходит запрос необходимых данных, их преобразование и запись в созданное поле. В формуляре создается область, которой будет соответствовать новое поле. Затем привязывается к этой области нужное поле. Для добавления в формуляр заявление на возврат вывода кладовщика, необходимо создать в передаваемой в формуляр таблице поле, в котором будет храниться фамилия кладовщика. С помощью запросов находится фамилия кладовщика в базе данных. Затем записывается полученная информация в созданное поле. В формуляре создается область, которой будет соответствовать фамилия кладовщика. Аналогично в формуляр товарная накладная для альбомной и книжной ориентации добавляется вывод номеров заказов.

Задание 4

Формуляр для печати ценников содержит 7 шаблонов ценников. Эти шаблоны отличаются друг от друга только размерами. Самый маленький шаблон размером 5х3, а самый большой занимает весь лист. В каждом шаблоне есть таблица, которая содержит 3 строчки. Будет выбираться первая строчка, если в формуляр передается одна цена, вторая – если две цены, третья – если три цены. Ну и конечно в зависимости от того сколько цен передается в формуляр будет создаваться столько же строк таблицы. Если цена только одна, то высоту строки с ценой можно сделать в три раза больше, чем ширина строк для трех цен. Максимально возможная цена ценника может содержать 6 цифр. Из расчета, того что цена может быть 6 цифр, подбирается для каждого варианта количества цен наибольший размер шрифта, при котором цена помещалась бы выделенную для нее область. Это проделывается для всех шаблонов. После этого были распечатаны пробные экземпляры ценников и показаны заказчику, которые его не совсем устроили. Было необходимо еще увеличить размер шрифта. Для цен, состоящих из 6 цифр увеличение размера шрифта невозможно, а вот если цифр меньше, то и шрифт можно больше сделать. Причем чем меньше количество цифр в ценах, тем больше можно сделать размер шрифта. Предварительно мы не знаем, какая цена будет в формуляре и размер оптимального шрифта, тоже не можем задать. Значит размер шрифта должен задаваться после того как были переданы данные в формуляр. Для этого в формулярах на событие инициализации таблицы прописывается скрипт. Скрипт можно писать на одном из двух языков. Это Javascript или FormCalc. Мною для написания скриптов был выбран язык FormCalc. Скрип выглядел следующим образом. В нем рассматривается цена и в зависимости от количества цифр в цене, в нужном поле программно настраивается оптимальный размер шрифта, предварительно подобранный для этого случая. Такие скрипты прописываются для всех шаблонов. Для возможности печати на альбомной ориентации необходимо создать аналогичные 7 шаблонов, только расположить их на листе с альбомной ориентацией. Сделать подобные начальным шаблонам настройки. Прописать аналогичные скрипты. Далее необходимо прописать скрипт, в котором выбирается шаблон с нужной ориентацией. Если в программе печати ценников стоит галочка “для альбомной ориентации” то будут печататься ценники в альбомной ориентации. Также была предусмотрена печать ценников всех по одной цене, которая задается пользователем перед запуском печати. Если такая цена написана, то и в формулярах будет эта цена. Для рассмотрения этой ситуации пишется еще один скрипт. Распечатал ценники и проверил, чтобы с каждого вида ценников можно было считать штрих-код. На самых маленьких шаблонах штрих-коды не считывались. Чтобы исправить эту ситуацию, нужно подобрать минимальный размер штрих-кода, которой бы считывался. Для этого распечатываю на отдельном листе штрих-коды, постепенно увеличивая их размер. После распечатки, начинаю попытки считывания штрих-кода, начиная с самого маленького размера. Таким образом, выясняю минимальный размер штрих-кода. После этого в шаблонах, в которых штрих-код не считывается, увеличиваю его размеры до необходимого. Для того, чтобы ценники не печатались друг к другу вплотную, нужно поместить весь шаблон в контейнер, который будет в дальнейшем выполнять роль рамочки. Настроил внутри этого контейнера расположение шаблона.

Общий вид формуляра для ценников:

Формуляр и написанный скрипт:

Написанные скрипты на инициализацию таблицы и инициализацию отдельных строк в таблице:

----- data.Main.Tags.Tag_A4.Frame.Content.Table::initialize: - (FormCalc, client) ------------------

 

var maximum = 0

 

for i = $.Row[0].nodes.length -1 downto 1 do

    var name = $.Row[0].nodes.item(i).name

    maximum = max(maximum, $.Row[0].nodes.item(i).Rub)

    if (name == "Row1") then

        if (maximum >= 100000) then

            $.Row[0].nodes.item(i).Rub.font.size = "92 pt"

        elseif (maximum >= 10000) then

            $.Row[0].nodes.item(i).Rub.font.size = "108 pt"

        elseif (maximum >= 1000) then

            $.Row[0].nodes.item(i).Rub.font.size = "132 pt"

        else

            $.Row[0].nodes.item(i).Rub.font.size = "160 pt"

        endif

    endif

    if (name == "Row2") then

        if (maximum >= 100000) then

            $.Row[0].nodes.item(i).Rub.font.size = "92 pt"

        elseif (maximum >= 10000) then

            $.Row[0].nodes.item(i).Rub.font.size = "108 pt"

        elseif (maximum >= 1000) then

            $.Row[0].nodes.item(i).Rub.font.size = "132 pt"

        else

            $.Row[0].nodes.item(i).Rub.font.size = "160 pt"

        endif

    endif

    if (name == "Row3") then

        if (maximum >= 100000) then

            $.Row[0].nodes.item(i).Rub.font.size = "92 pt"

        elseif (maximum >= 10000) then

            $.Row[0].nodes.item(i).Rub.font.size = "108 pt"

        else

            $.Row[0].nodes.item(i).Rub.font.size = "112 pt"

        endif

    endif

endfor

 

----- data.Main.Tags.Tag_A4.Frame.Content.Table.Row.Row1.Kop::initialize: - (FormCalc, client) -----

 

$.h = "120mm"

 

----- data.Main.Tags.Tag_A4.Frame.Content.Table.Row.Row2.Kop::initialize: - (FormCalc, client) -----

 

$.h = "60mm"

 

----- data.Main.Tags.Tag_A4.Frame.Content.Table.Row.Row3.Kop::initialize: - (FormCalc, client) -----

 

$.h = "40mm"

Результат выполнения программы в приложениях 3 и 4.

Задание 5

В системе тестирования создаю заказы в количестве 20. В заказы добавляю товары из каталога доступных для продажи товаров. Указываю количество. По этим заказам будет тестироваться новое оборудование. Оборудование работает следующим образом. Считывается штрих-код, по которому автоматически происходит печать товарной накладной. Во время тестирования необходимо было проверять совпадение штрих-кодов распечатанных экземпляров с исходными штрих-кодами. Также необходимо было фиксировать все возникшие проблемы, ситуации, в которых происходил отказ работы оборудования. Необходимо было устранять возникшие проблемы. Проблема. С которой я столкнулся – зажевывание бумаги в принтере. Было распечатано около 50 экземпляров накладных. После тестирования отчитывался о работе оборудования. Описывал возникшие проблемы, способы их решения и на сколько оперативно эти проблемы мне удалось решить.