SAPPER SETTINGS - Настройки списков

Материал из razgovorov.ru
Версия от 15:48, 16 марта 2018; Чижов Виталий (обсуждение | вклад) (GET_CHILD_VBFA)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Настройка списков

Настройки списков отвечают за:

  • формирование списка документов которые видит пользователь перейдя в соответствующий раздел, в т.ч. ограничения видимости и фильтры
  • состав отправляемых пакетов документов (какие документы SAP должны использоваться для формирования пакета электронных документов)

Файл с настройками LO_* списка содержит информацию о классе получения списка документов, общих настройках для реестра в СБИС, такие как регламент, название реестра, указание на файл выгрузки самого документа DO_*, запрос списка связанных документов, исключения из выборки. В зависимости от версии BASIS системы различаются принципы построения списков – использование статических методов выборки или построение динамического select’a. За формирование списка документов отвечает метод GET_LIST_API2_PACKET класса указанного в параметре "ПолучениеДанных_Класс". Для разделов Продажа по умолчанию этим классом является /SBIS/CL_SAP_DATA_[700/740], он зависим от версии BASIS и поэтому поставляется в разных пакетах.

Структура настройки списков:

  • [основные параметры, см. ниже]
  • [ЗапросСпискаСвязанныхДокументов] (тип List) - массив параметров для получения списка связанных документов
    • [Метод класса для построения списка связанных документов] - в качестве значения передается список параметров

Общие параметры для версий 700 и 740

  • ПолучениеДанных_Класс – класс получения данных для построения списка документов
  • Реестр1С_Название, Реестр1С_Тип – классификаторы пакета документов
  • РеестрСБИС_Тип – тип входящего реестра СБИС
  • Регламент_Название – название регламета СБИС
  • Реестр_СБИС – название входящего реестра СБИС
  • НазваниеДокумента – отображаемое название документа
  • ИсклСторноДатаСовпадает – исключение сторно документа из списка, если дата совпадает
  • ИсклСторноДатаНеСовпадает – исключение сторно документа из списка, если дата не совпадает
  • ИсклСторноМесяцСовпадает – исключение сторно документа из списка, если месяц совпадает
  • ИсклСторноМесяцНеСовпадает – исключение сторно документа из списка, если месяц не совпадает

Построение запроса получения списка документов

Список документов получается путем выполнения запроса к базе данных, для BASIS >= 7.40 это динамический SELECT текст которого указан в настройках, для более ранних версий код запроса вызывается непосредственно в модуле и изменение запроса осуществляется наследованием класса и переопределением необходимых методов.

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

Строка таблицы соответствует структуре /SBIS/S_LIST_DOC и содержит:

  • Идентификатор базового документа (нужен для группировки пакета)
    • BUKRS
    • GJAHR
    • BELNR - номер документа
  • Идентификатор документа на данных которого будет формироваться электронный документ (может быть равен базовому)
    • XBLNR - номер документа, пока предполагается что BUKRS и GJAHR такой же как у базового документа.
  • Идентификатор настроек, которые будут использоваться для формирования электронного документа (программа печати, параметры вызова, маппинг параметров программы печати)
    • INI_NAME - имя настройки выгрузки документа DO_* указывается явно в запросе
  • Реквизиты документа для отображения в списке - параметры для формирования названия документа, по умолчанию шаблон формирования имени документа следующий: [значение параметра НазваниеДокумента] №[XBLNR] от [DATE] на сумму [SUM][WAERS]
    • DATE
    • SUM
    • WAERS
    • PARTNER_NAME
    • ORG_NAME
    • USER_NAME
  • Дополнительные реквизиты которые можно использовать в отборе при необходимости
    • PARAM1
    • PARAM2
    • PARAM3
  • Текущий статус документа - в select не заполняются, заполняются для каждой записи по данным таблицы /SBIS/STATUS_DOC, код реализован в том же классе
    • STATUS_NAME
    • STATUS_CODE
    • STATUS_NOTE
    • STATUS_MSG
    • STATUS_MSG_DETAIL

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

Предположим у нас есть комплект документов реализации состоящий из двух документов, накладной № 0080000227 и счет-фактуры № 0090000244 которые необходимо отправить одним пакетом. Основным документом является документ, от которого строится список и который есть всегда (иначе пакет не сформируется), в нашем случае это будет накладная. В результате выполнения запроса должен получиться список пакетов реализации. Часть результирующей таблицы содержащей наш комплект должна выглядеть следующим образом:

BELNR XBELNR INI_NAME
0080000227 0080000227 'DP_TOVTORGPR_1175010'
0080000227 0090000244 'ON_SCHFDOPPR_1115125'

Если предположим, в пакет нужно добавить ещё один документ, например из накладной необходимо сформировать и отправить в этом же пакете ТТН, то в результат необходимо добавить ещё одну строку содержащую соответствующий код настроек. В общем виде можно сказать, что количество строк для пакета равно количеству вызовов программ печати необходимых для формирования форм документов комплекта. Стоит заменить, что конечный состав пакета документов не всегда по количеству равен документам которые пользователь видит в списке, т.к. данным одного вызова программы печати может быть за раз сформировано несколько электронных документов, например по данным фактуры можно сформировать сразу весь комплект. Содержимое пакета документов, которое будет отправлено можно посмотреть в окне просмотра.

BASIS 7.00 (/SBIS/CL_SAP_DATA_700)

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

  1. ПолучениеДанныхВложения – указание на документ выгрузки DO_*
  2. ЗапросСпискаСвязанныхДокументов – содержит ссылки на документы-вложения, в поле Имя указывается метод класса для получения связанных документов. Также указывается имя документа для отображения и связанный файл получения вложения DO_*.

Варианты параметра "ПолучениеДанных_Класс":

  • /SBIS/CL_SAP_DATA_700_LIKP - возвращает накладные SD
  • /SBIS/CL_SAP_DATA_700_VBRK - возвращает фактуры SD
  • /SBIS/CL_SAP_DATA_700_VBRK_USL - возвращает фактуры SD на услуги - акты выполненных работ
  • /SBIS/CL_SAP_DATA_700_LIKP_NF - возвращает неотфактурованные накладные SD (без фактур)
  • /SBIS/CL_SAP_DATA_700_ERDK - возвращает документы печати из одноименной таблицы

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

  • GET_CHILD_VBFA_SFAKT - получить связанные с основным документом через таблицу VBFA счет-фактуры SD
  • GET_CHILD_VBFA_NAKL - получить связанные с основным документом через таблицу VBFA накладные SD

пример LO_РеализацияТоваров версии 700 с получением связанного документа счет-фактура


{
  "ПолучениеДанных_Класс": {
    "Значение": "/SBIS/CL_SAP_DATA_700_LIKP" //класс получения данных
  },
  "Реестр1С_Название": {
    "Значение": "Реализация товаров"
  },
  "Реестр1С_Тип": {
    "Значение": "'РеализацияТоваров'"
  },
  "РеестрСБИС_Тип": {
    "Значение": "'ДокОтгрИсх,НакладнаяИсх,Исходящие'"
  },
  "Регламент_Название": {
    "Значение": "Реализация"
  },
  "Реестр_СБИС": {
    "Значение": "ДокОтгрИсх"
  },
  "НазваниеДокумента": {
    "Значение": "Накладная"
  },
  "ПолучениеДанныхВложения": {
    "Значение": "DO_DP_TOVTORGPR_1175010" //указание на выгрузку документа DO_*
  },
  "РеестрПоУмолчанию": {
    "Значение": "'1'"
  },
  "ЗапросСпискаСвязанныхДокументов": {
    "Тип": "List",
    "Значение": [
      {
        "Имя": "GET_CHILD_VBFA_SFAKT", //метод класса получения данных
        "Значение": [
          {
            "Имя": "НазваниеДокумента",
            "Значение": "Счет-фактура"
          },
          {
            "Имя": "ПолучениеДанныхВложения",
            "Значение": "DO_ON_SCHFDOPPR_1115125" //указание на выгрузку документа DO_*
          }
        ]
      }
    ]
  },
  "ИсклСторноДатаСовпадает": {
    "Значение": "X"
  },
  "ИсклСторноДатаНеСовпадает": {
    "Значение": "X"
  },
  "ИсклСторноМесяцСовпадает": {
    "Значение": "X"
  },
  "ИсклСторноМесяцНеСовпадает": {
    "Значение": "X"
  }
}

BASIS 7.40 (/SBIS/CL_SAP_DATA_740)

Списки документов строятся на основании динамического select’а. Текст запроса содержится в параметрах:

  • ЗапросСпискаДокументов – содержит тип запроса: select, select_groupby, select_distinct.
    • Тело запрос разбито на 5 подстрок длиной 255 символов, а именно:
      • ЗапросСпискаДокументов_select_1 ... ЗапросСпискаДокументов_select_5
      • ЗапросСпискаДокументов_from_1 ... ЗапросСпискаДокументов_from_5
      • ЗапросСпискаДокументов_groupby_1 ... ЗапросСпискаДокументов_groupby_5
      • ЗапросСпискаДокументов_having_1 ... ЗапросСпискаДокументов_having_5
      • ЗапросСпискаДокументов_where_1 ... ЗапросСпискаДокументов_where_5
  • ЗапросСпискаСвязанныхДокументов – массив настроек отвечающий за добавление связанных документов. Для каждой записи будет выполнен поиск всех указанных документов.

Запрос Списка Связанных Документов

GET_CHILD_VBFA

Метод GET_CHILD_VBFA позволяет взять связанный через VBFA документ.

Список настроек выглядит как динамический select c параметрами (тело запрос разбито на подстроки длиной 255 символов):

  • ЗапросСпискаСвязанныхДокументов_select_1 ... ЗапросСпискаСвязанныхДокументов_select_5
  • ЗапросСпискаСвязанныхДокументов_from_1 ... ЗапросСпискаСвязанныхДокументов_from_5
  • ЗапросСпискаСвязанныхДокументов_where_1 ... ЗапросСпискаСвязанныхДокументов_where_5
  • ЗапросСпискаСвязанныхДокументовСторно_select_1 ... ЗапросСпискаСвязанныхДокументовСторно_select_5
  • ЗапросСпискаСвязанныхДокументовСторно_from_1 ... ЗапросСпискаСвязанныхДокументовСторно_from_5
  • ЗапросСпискаСвязанныхДокументовСторно_where_1 ... ЗапросСпискаСвязанныхДокументовСторно_where_5

пример запроса списка связанных документов для версии 740 через GET_CHILD_VBFA


   {
        "Имя": "GET_CHILD_VBFA", //метод класса получения данных
        "Значение": [
          {
            "Имя": "НазваниеДокумента",
            "Значение": "Счет-фактура"
          },
          {
            "Имя": "ЗапросСпискаСвязанныхДокументов_select_1",
            "Значение": "'DO_ON_SCHFDOPPR_1115125' as ini_name, vbrk~bukrs AS bukrs, vbfa~vbeln AS belnr, "
          },
          {
            "Имя": "ЗапросСпискаСвязанныхДокументов_select_2",
            "Значение": "vbrk~vbeln AS xblnr, vbrk~fkdat AS date, vbfa~waers AS waers,"
          },
          {
            "Имя": "ЗапросСпискаСвязанныхДокументов_select_3",
            "Значение": "( vbrk~netwr + vbrk~mwsbk ) AS sum,"
          },
          {
            "Имя": "ЗапросСпискаСвязанныхДокументов_select_4",
            "Значение": "( kna1~name1 && kna1~name2 && kna1~name3 && kna1~name4 ) AS partner_name,"
          },
          {
            "Имя": "ЗапросСпискаСвязанныхДокументов_select_5",
            "Значение": "vbtyp_n AS subtype"
          },
          {
            "Имя": "ЗапросСпискаСвязанныхДокументов_from_1",
            "Значение": "vbfa AS vbfa"
          },
          {
            "Имя": "ЗапросСпискаСвязанныхДокументов_from_2",
            "Значение": "INNER  JOIN vbrk AS vbrk ON vbfa~vbeln = vbrk~vbeln"
          },
          {
            "Имя": "ЗапросСпискаСвязанныхДокументов_from_3",
            "Значение": "INNER  JOIN kna1 AS kna1 ON vbrk~kunrg = kna1~kunnr"
          },
          {
            "Имя": "ЗапросСпискаСвязанныхДокументов_where_1",
            "Значение": "vbelv = @is_list_base_doc-belnr AND vbfa~vbtyp_n IN ('M', 'O', 'P')"
          },
          {
            "Имя": "ЗапросСпискаСвязанныхДокументов_select_20170716",
            "Значение": "'DO_ON_SCHFDOPPR_1115125' as ini_name, vbrk~bukrs AS bukrs, vbfa~vbeln AS belnr, bkpf~belnr AS xblnr, vbrk~fkdat AS date, vbfa~waers AS waers, ( vbrk~netwr + vbrk~mwsbk ) AS sum, ( kna1~name1 && kna1~name2 && kna1~name3 && kna1~name4 ) AS partner_name, vbtyp_n AS subtype"
          },
          {
            "Имя": "ЗапросСпискаСвязанныхДокументов_from_20170716",
            "Значение": "vbfa AS vbfa INNER  JOIN vbrk AS vbrk ON vbfa~vbeln = vbrk~vbeln INNER  JOIN kna1 AS kna1 ON vbrk~kunrg = kna1~kunnr INNER JOIN bkpf as bkpf ON bkpf~bukrs = vbrk~bukrs AND bkpf~awkey = vbrk~vbeln AND bkpf~awtyp = 'VBRK'"
          },
          {
            "Имя": "ЗапросСпискаСвязанныхДокументов_where_20170716",
            "Значение": "vbfa~vbtyp_n IN ('M', 'N', 'O', 'P') AND vbelv = @is_list_base_doc-belnr"
          },
          {
            "Имя": "ЗапросСпискаСвязанныхДокументовСторно_select_1",
            "Значение": "vbrk~vbeln AS belnr, vbrk~fkdat AS date"
          },
          {
            "Имя": "ЗапросСпискаСвязанныхДокументовСторно_from_1",
            "Значение": "vbfa AS vbfa INNER  JOIN vbrk AS vbrk ON vbfa~vbelv = vbrk~vbeln OR vbfa~vbeln = vbrk~vbeln"
          },
          {
            "Имя": "ЗапросСпискаСвязанныхДокументовСторно_where_1",
            "Значение": "( vbfa~vbtyp_v = 'M' AND vbfa~vbtyp_n = 'N' AND vbfa~vbeln = @ls_list_related_doc-belnr )"
          },
          {
            "Имя": "ЗапросСпискаСвязанныхДокументовСторно_where_2",
            "Значение": "OR ( vbfa~vbtyp_n = 'N' AND vbfa~vbtyp_v = 'M' AND vbfa~vbelv = @ls_list_related_doc-belnr )"
          },
          {
            "Имя": "ЗапросСпискаСвязанныхДокументовСторно_where_3",
            "Значение": "AND vbrk~vbeln <> @ls_list_related_doc-belnr"
          }
        ]
      }

GET_SELF

Метод GET_SELF позволяет взять тот же документ, но использовать другую программу печати. В этом случае параметры передаются в структуру S_LIST_DOC.

пример запроса списка связанных документов для версии 740 через GET_SELF


{
        "Имя": "GET_SELF",
        "Значение": [
          {
            "Имя": "НазваниеДокумента",
            "Значение": "Счет-фактура"
          },
          {
            "Имя": "doc_ini_name",
            "Значение": "DO_ON_SCHFDOPPR_1115125"
          },
          {
            "Имя": "doc_bukrs",
            "Значение": "bukrs"
          },
          {
            "Имя": "doc_gjahr",
            "Значение": "gjahr"
          },
          {
            "Имя": "doc_belnr",
            "Значение": "belnr"
          },
          {
            "Имя": "doc_xblnr",
            "Значение": "param1"
          },
          {
            "Имя": "doc_date",
            "Значение": "date"
          },
          {
            "Имя": "doc_sum",
            "Значение": "sum"
          },
          {
            "Имя": "doc_waers",
            "Значение": "waers"
          },
          {
            "Имя": "doc_user_name",
            "Значение": "user_name"
          },
          {
            "Имя": "doc_partner_name",
            "Значение": "partner_name"
          },
          {
            "Имя": "doc_org_name",
            "Значение": "org_name"
          }
        ]
      }