вторник, 17 июля 2012 г.

Подпрограммы

Подпрограммы, по сравнению с макросами, обладают рядом преимуществ:
  • подпрограммы, определённые в одной программе,  можно запустить из другой программы;
  • в каждой подпрограмме можно объявить свой набор переменных, доступный только внутри этой подпрограммы, но, тем не менее, мы не теряем доступ к глобальным переменным;
  • в отличие от макросов, подпрограммы доступны для отладчика, соответственно, в теле подпрограмм можно строить сложную логику выполнения.
Работа с подпрограммами не лишена и своих нюансов. Основной из них – после подпрограмм не должно быть никакого программного кода. Поэтому подпрограммы объявляются в конце основного кода программы.
Кстати, в подпрограмме можно объявить макрос, который будет доступен только в теле этой подпрограммы.

Объявление и вызов подпрограммы

Общий вид подпрограммы выглядит следующим образом:
FORM form_name [TABLES tab STRUCTURE struc]
               [USING var1]
               [CHANGING var2].
* Тело подпрограммы
ENDFORM.
Строки, указанные в квадратных скобках, не обязательны при объявлении подпрограмм. Сами квадратные скобки не пишутся.

Назначение дополнений:

  • TABLES используется для передачи таблиц и структур в подпрограмму;
  • USING/CHANGING используется для передачи переменных в подпрограмму. Как таковой, разницы между этими двумя операторами нет, просто с помощью них определяется, какие переменные будут изменены на выходе из подпрограммы. На данный момент использование оператора CHANGING считается устаревшим, но я рекомендую его использовать, чтобы потом не путаться в коде.
Вызов подпрограмм осуществляется при помощи оператора PERFORM:
PERFORM form_name [TABLES tab]
                  [USING var1]
                  [CHANGING var2].
Операторы TABLES, USING и CHANGING ставятся в порядке, соответствующем объявлению подпрограммы.
Для вызова подпрограммы, объявленной в другой программе, используется следующая конструкция:
PERFORM form_name(program_name).
Подводя итог всему выше сказанному, приходим к следующим выводам:
  • макросы применяются для упрощения выполнения небольших рутинных операций с простой логикой. Связано это с невозможностью отладки макросов;
  • подпрограммы используются для выполнения алгоритмов любой сложности (в пределах разумного, естественно; не стоит включать в подпрограмму весь код программы) и доступны для вызова из других программ.

понедельник, 16 июля 2012 г.

Макросы


Макрос объявляется в любой части программного кода и после объявления доступен из любой части программы.
Объявление макроса происходит внутри операторов DEFINE..END-OF-DEFINITION. Общий синтаксис:
DEFINE macro_name.
* тело макроса
END-OF-DEFINITION.
В теле макроса может быть представлен любой код за исключением объявления переменных, типов, классов, указателей (field-symbols), диапазонов и других элементов, которые могут быть объявлены в программе лишь один раз. Почему? Потому что, вызывая макрос в программе, мы как будто вставляем тело макроса в ту часть кода, где его вызываем. Соответственно, если мы вызовем его два раза и более, тело макроса будет продублировано, и при генерации программы система выдаст ошибку синтаксиса.

Вызов макроса и передача данных в макрос

Для того, чтобы вызвать макрос, достаточно просто указать его имя в коде программы:
macro_name
Если в макрос необходимо передать какое-либо значение, в теле макроса нужно указать специальные символы: &1, &2, &3 и т. д.
Пример: макрос проверяет, не пустое ли значение 1 и выводит на листинг значение 1 и значение 2.
DEFINE write_data.
  IF NOT ( &1 IS INITINAL ).
    WRITE &1, &2.
  ENDIF.
END-OF-DEFINITION.
Сами значения для передачи в макрос пишутся после его вызова через пробел:
write_data var1 ‘Значение2’.

Использование макросов

Макросы стоит применять для выполнения небольших, но часто повторяющихся операций, таких как: заполнение диапазонов (ranges) или просто внутренних таблиц, вывод на листинг элементов разметки страницы, массовой очистки переменных и т. д. Тело макроса должно содержать максимально простой код с минимумом логики, ветвлений, циклов и пр. Это связано с главной особенности и главной их слабостью – макросы не обрабатывает отладчик.Если в теле макроса затаится ошибка, её будет тем сложнее отыскать, чем больше и сложнее макрос. Все сложные логические операции, которые необходимо выполнять не один раз в ходе работы программы, мы переносим в подпрограммы.

среда, 23 мая 2012 г.

Всплывающее окно с тремя кнопками


Функциональный модуль POPUP_TO_CONFIRM. Данный ФМ  вызывает всплывающее окошко с тремя кнопками:
1. Yes
2. No
3. Cancel

CALL FUNCTION 'POPUP_TO_CONFIRM'
* EXPORTING
* TITLEBAR = ' '
* DIAGNOSE_OBJECT = ' '
* TEXT_QUESTION = ' '
* TEXT_BUTTON_1 = 'Ja'(001)
* ICON_BUTTON_1 = ' '
* TEXT_BUTTON_2 = 'Nein'(002)
* ICON_BUTTON_2 = ' '
* DEFAULT_BUTTON = '1'
* DISPLAY_CANCEL_BUTTON = 'X'
* userdefined_f1_help = ' '
* START_COLUMN = 25
* START_ROW = 6
* POPUP_TYPE =
* IV_QUICKINFO_BUTTON_1 = ' '
* IV_QUICKINFO_BUTTON_2 = ' '
* IMPORTING
* ANSWER =
* TABLES
* PARAMETER =
* EXCEPTIONS
* TEXT_NOT_FOUND = 1
* OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

Export parameter:
Title bar -Название всплывающего окна
Text Question - Сообщение.

Import parameter:
Answer - он держит действий пользователя   
   Да = 1          
   Нет = 2        
   Отмена = A

вторник, 22 мая 2012 г.

Модули SAP


Финансы (FI). Модуль предназначен для организации основной бухгалтерской отчетности, отчетности по дебиторам, кредиторам и вспомогательной бухгалтерии. Он включает в себя: Главную книгу, Бухгалтерию дебиторов, Бухгалтерию кредиторов, Финансовое управление, Специальный регистр, Консолидацию и Информационную систему учета и отчетности.
Контроллинг (CO). Модуль обеспечивает учет затрат и прибыли предприятия и включает в себя: Учет затрат по местам их возникновения (центры затрат), Учет затрат по заказам, Учет затрат по проектам, Калькуляцию затрат, Контроль прибыльности (результатов), Контроль мест возникновения прибыли (центров прибыли), Учет выработки, Контроллинг деятельности предприятия.
Управление основными средствами (AM). Модуль предназначен для учета основных средств и управления ими. Ключевые элементы модуля: Техническое управление основными средствами, Техобслуживание и ремонт оборудования, Контроллинг инвестиций и продажа активов, Традиционный бухучет основных средств, Замена основных средств и амортизация, Управление инвестициями.
Управление проектами (PS). Прикладной модуль PS поддерживает планирование, управление и мониторинг долгосрочных проектов с высоким уровнем сложности. Ключевые элементы прикладного модуля PS: Контроль финансовых средств и ресурсов, Контроль качества, Управление временными данными, Информационная система управления проектами, Общие модули.
Производственное планирование (PP). Модуль используется для организации планирования и контроля производственной деятельности предприятия. Ключевые элементы прикладного модуля: Спецификации (BOM), Технологические карты, Рабочие центры (места), Планирование сбыта (SOP), Производственное планирование (MPS), Планирование потребности в материалах (MRP), Управление производством (SFC), Производственные заказы, Калькуляция затрат на изделие, Учет затрат по процессам, Серийное производство, Канбан (Just in time), Планирование непрерывного производства.
Управление материальными потоками (MM). Модуль поддерживает функции снабжения и управления запасами, используемые в различных хозяйственных операциях. Ключевые элементы: Закупка материалов, Управление запасами, Управление складами, Контроль счетов, Оценка запасов материала, Аттестация поставщика, Обработка работ и услуг, Информационная система закупок и информационная система управления запасами.
Сбыт (SD). Модуль решает задачи распределения, продаж, поставок и выставления счетов. Ключевые элементы: Предпродажная поддержка, Обработка запросов, Обработка предложений, Обработка заказов, Обработка поставок, Выставление счетов (фактурирование), Информационная система сбыта.
Управление качеством (QM). Этот модуль включает в себя информационную систему и систему управления качеством. Он обеспечивает поддержку планирования качества, проверку и контроль качества при производстве и закупках. Ключевые элементы: Проверка качества, Планирование качества, Информационная система контроля качества (QMIS).
Техобслуживание и ремонт оборудования (PM). Модуль помогает учитывать затраты и планировать ресурсы на техобслуживание и ремонт. Ключевые элементы: Незапланированный ремонт, Управление сервисом, Планово-профилактический ремонт, Ведение спецификаций, Информационная система техобслуживания и ремонта.
Управление персоналом (HR). Полностью интегрированная система для планирования и управления работой персонала. Ключевые элементы: Администрирование персонала, Расчет зарплаты, Управление временными данными, Расчет командировочных расходов, Льготы, Набор новых сотрудников, Планирование и повышение квалификации персонала, Использование рабочей силы, Управление семинарами, Организационный менеджмент, Информационная система персонала.
Управление информационными потоками (WF). Эта часть системы связывает интегрированные прикладные модули с общими для всех приложений технологиями, сервисными средствами и инструментами. Управление потоком операций (workflow) автоматизирует хозяйственные процессы в соответствии с заранее определенными процедурами и правилами. Модуль включает многофункциональную офисную систему с встроенной электронной почтой, систему управления документами, универсальный классификатор и систему интеграции с САПР. Когда происходит определенное событие, запускается соответствующий процесс, и диспетчер потока операций инициирует единицу потока операций (Workflow Item). Данные и документы объединяются и обрабатываются на каждом шаге в соответствии с определенной логикой.
Отраслевые решения (IS). Объединяет прикладные модули SAP SAP R/3 и дополнительную функциональность, специфичную для отрасли. Сегодня имеются отраслевые решения для промышленности: авиационной и космической, оборонной, автомобильной, нефтяной и газовой, химической, фармацевтической, машиностроительной, товаров народного потребления, электронной и непроизводственной сферы: банки, страхование, государственные органы, телекоммуникации, коммунальное хозяйство, здравоохранение, розничная торговля.
Базисная система. Служит основой системы SAP R/3 и гарантирует интеграцию всех прикладных модулей и независимость от аппаратной платформы. Базисная система обеспечивает возможность работы в многоуровневой распределенной архитектуре клиент-сервер. Система SAP R/3 функционирует на серверах UNIX, AS/400, Windows NT, S/390 и с различными СУБД (Informix, Oracle, Microsoft SQL Server, DB2). Пользователи могут работать в среде Windows, OSF/Motif, OS/2 или Macintosh.
Необходимо отметить, что здесь перечислены только основные функции системы SAP R/3 и не упомянуты обширные возможности работы в Internet/intranet, доступ внешних систем к логике SAP R/3 через интерфейсы BAPI (Business Application Programming Interface) и т.д.

Количество записей в таблице

Вычислить количество записей в таблице, не используя LOOP, можно следующими спосабами:
1. DESCRIBE TABLE tab LINES lv_count_line
2. lv_count_line = LINES (tab)
3. Используя агрегативную функцию: SELECT COUNT (*) INTO (lv_count).  Полезна  при подсчете количества записей таблицы с определенным условием.

Разные ALV на основе одного GRID

Для того, чтобы вывести два различных ALV в одном контейнере, используя один GRID (обект, родителем которого является контейнер), необходимо очистить контейнер. 

Для этого вызывается метод go_cont->free, а затем free go_cont.

Очистка selection-screen


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

START-OF-SELECTION.
  FIELD-SYMBOLS : <fs>  .
  ASSIGN ('(RSDBRUNT)MEMKEY-INT_MODE') TO <fs> .
  IF sy-subrc = 0 .
    <fs> = '01' .
  ENDIF.

суббота, 12 мая 2012 г.

Определения SAP


Система R/3, разработанная на базе трехуровневой архитектуры, предназначена для реализации распределенных вычислений в среде клиент/сервер. R/3 содержит 3 логических уровня:
·        уровень базы данных, на котором осуществляется хранение и поиск данных бизнес-приложения;
·        уровень приложения, на котором реализована логика исполнения;
·        уровень представления информации с использованием GUI.


Мандант в мире SAP - это отдельная бизнес-единица или элемент внутри отдельных SAP систем. Мандант хранит свою собственную отдельную запись и свой собственный набор таблиц.


Репозитарий  является независящим от манданта объектом. Он содержит все объекты АВАР Cловаря (таблицы, элементы данных и домены), а также ABAP-программы, меню, экраны и т.п.



ABAP-словарь предназначен для создания и управления определениями данных. Он позволяет описать все данные, используемые в системе, взаимоотношения между ними, а также обеспечивает централизованное и упорядоченное хранение этих данных.  Механизм активации гарантирует, что любые изменения выполненные в ABAP-словаре, будут немедленно задействованы во всех релевантных системных компонентах.

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

Элемент данных представляет собой семантическое определение поля таблицы и может содержать краткое описание поля, например, при нажатии функциональной клавиши F1. Начиная с версии 4.6 технические атрибуты поля могут быть определены в элементе данных и нет неободимости использовать домен.

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