Проверки и замещения в бухгалтерских документах. Всё о GGB0 и GGB1

Назначение

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

Под катом много текста и картинок.

1. Задать источник для поиска подпрограмм

Путь по меню в SPRO:

Финансы (нов.) => Специальные регистры => Основные параметры настройки => Ведение пользовательских программ, зависящих от манданта

Она же транзакция GCX2, она же таблица T80D

Определение основной программы

Обычное дело: берут стандартную программу RGGBR000 копируют в ZRGGBR000, RGGBS000 копируют в ZRGGBS000. В дальнейшем весь требуемый ABAP-код будет писаться именно в этих двух файлах.

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

2. Настройка проверок и замещений

В меню настройки SPRO находятся эти пункты вот тут:

Финансы (нов.) => Специальные регистры => Инструменты => Ведение проверки/замещения/правил => Ведение проверки / Ведение замещения

Прямые транзакции: GGB0 – Проверки / GGB1 – Замещения. Основная работа происходит именно в этих транзакциях.

Отличие одного от другого – в последствиях. Первое предполагает после выполнения определённых условий только вывод предупреждающего или запрещающего сообщения.

Пример: если счёт главной книги = 7080, то финансовая позиция должна равняться 151 или 152. Если проверка не выполнена, то следует показать текст ошибки “Для счета 7080 следует указать ФП 151 или 152”.

Второе – предполагает изменение каких-либо данных.

Пример: Если счёт главной книги = 7430, то в поле МВЗ следует присвоить головное МВЗ для БЕ.

Раздел по финансовой бухгалтерии содержит три основных подраздела:

  • Заголовок документа
  • Позиция документа
  • Документ полностью

У этих подразделов вполне понятные различия как по моменту срабатывания, так и по доступным данным. Например: в подразделе “Позиция документа” правила срабатывают раздельно по каждой позиции последовательно в процессе ввода, и в каждый отдельный момент видна только одна-единственная строка всего документа.

Подраздел может содержать один или несколько логических блоков. Каждый блок содержит один или несколько шагов.

Есть разница: иметь два блока по одному шагу или иметь один блок с двумя шагами. Поэтому при формировании блоков и шагов принимайте внимание следующее:

  • блоки переносятся только целиком, со всеми содержащимися правилами
  • активировать и деактивировать можно только блок целиком
  • последовательностью срабатывания блоков прямо управлять нельзя
  • последовательность шагов прямо задаётся и строго соблюдается
  • перенос блока должен сопровождаться переносом исходного кода подпрограмм

 

2.1. Проверка

Шаг или этап проверки состоит из трёх частей:

  • задаётся предпосылка для срабатывания правила
  • задаётся само проверяемое правило
  • задаётся показываемая ошибка (при проверке) или действие (для замещения)

Проверка GGB0

При этом сообщения следует создать в транзакции SE91, желательно в отдельном выделенном классе ошибок.

Если проверку нельзя задать в виде простого условия, то уже можно прибегнуть к ABAP-разработке. В этом случае вместо условия проверки задаётся заранее подпрограмма.

2.2. Подпрограммы к проверке

2.2.1. Регистрация подпрограммы

В программе ZRGGBR000 в подпрограмме GET_EXIT_TITLES нужно задать по образцу код по заполнению. Пример:

exits-name  = ‘U100’.                            “Subroutine name
exits-param = c_exit_param_none.        "Complete data used in exit
exits-title = text-101.                            "Posting date check
append exits.

2.2.2. Реализация подпрограммы

Теперь описанную программу нужно реализовать:

form u100  using b_result.
  if sy-datum = bkpf-budat.
    b_result  = b_true.
  else.
    b_result  = b_false.
  endif.
endform.       

Программа может использовать структуры BSEG и BKPF, и должна вернуть значение ИСТИНА или ЛОЖЬ. В данном случае  B_TRUE = T, B_FALSE = F. Вот такие занятные константы.

2.3. Замещения

Там всё очень похоже, но не то же:

Замещение GGB1

Есть два вида способа классифицировать режим замещения:

  • Любое поле может быть замещено
  • Указывается одно или несколько замещаемых полей

Это может быть дело вкуса, но я бы наглядности рекомендовал точно указывать замещаемые поля.

Если выбраны конкретные поля, то можно выбрать метод замещения:

Метод замещения

Использование констант и присвоений – просто и наглядно, но далеко не всегда выручает.

Если любое поле может быть замещено, то можно указать только пользовательскую подпрограмму.

2.4. Подпрограммы к замещению

Всё очень похоже на проверки:

Сначала регистрируем подпрограмму:

exits-name  = ‘U701’.
exits-param = c_exit_param_field.
exits-title = ‘Замещение для поля Текст при F-44’.
append exits.

Затем описываем саму программу:

form u701 using e_sgtxt type bseg-sgtxt.
  if bseg-hkont = ‘0074300000’ or bseg-hkont = ‘0063400000’.
    e_sgtxt = ‘Курсовая разница’.
  endif.
endform.   

Есть один хитрый момент: код зависит от выбранного метода замещения.

Например: режим замещения по любому полю делается уже так:

exits-name  = ‘U702’.
exits-param = c_exit_param_none.
exits-title = ‘Замещения для памятных позиций’.
append exits.

И тогда в шапке подпрограммы не следует указывать параметры:

form u702.
  if lines( lt_lfbk ) = 1.
    read table lt_lfbk index 1.
    bseg-bvtyp =  lt_lfbk-bvtyp.
  endif.
endform.

 

3. Присвоение к БЕ

Путь по меню в SPRO:

Финансы (нов.) => Параметры настройки: Финансы (нов.) => Инструменты =>
Проверка/замещение => Проверка в бухгалтерских документах / Замещение в бухгалтерских документах

Это таблицы T001D/T001Q, прямые транзакции для настройки OB28/OBBH.

Обратите внимание, каждый логический блок активируется отдельно для каждой БЕ, поэтому есть противопоказания на большое количество блоков, особенно при большом количестве БЕ.

4. Особые случаи

4.1. Перегенерация

Все созданные правила ведут к генерации ABAP-кода. Если в результате ваших изощрённых действий в системе этот код стал вдруг неактуален, то следует запустить программу перегенерации RGUGBR00. Она всё расставит на места:

Перегенерация RGUGBR00

Можно все галочки расставить. Работает программа быстро, а что-то ухудшить – никогда не должна.

4.2. Видимость подпрограмм

Бывает, что из настройка не видит только что разработанную подпрограмму. Этому можно помочь, передёрнув затвор:

Создать заново список объектов

4.3. Удаление блока

Так как формирование запроса на перенос происходит вручную в нужные моменты, то может случиться так, что блок удалили и переносить вроде бы уже нечего. Но в продуктивную систему что-то нести надо.

Один из способов:

  • Удалить все шаги из блока
  • Включить блок в запрос
  • Удалить блок
  • Деблокировать запрос и перенести

В этом случае блок будет полностью удалён в целевой системе.

4.4. Дополнительные поля к замещению

Если поле не входит в список доступных к замещению, но очень хочется, то этому горю можно помочь. Таблица GB01, ракурс ведения VWTYGB01.

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

Поля к замещению

4.5. Ссылки

Основная официальная информация сосредоточена в ноте 842318 — Frequently asked questions about validations and substitutions.

Comment (1)

  1. Иван, спасибо за статью — уже не впервый раз случайно натыкаюсь на этот сайт, но очень полезно.

Добавить комментарий

Ваш адрес email не будет опубликован.