понедельник, 17 февраля 2014 г.

Загрузка банков с сайта ЦБ РФ

Частые запросы пользователей добавить в систему банк клиента, который отсутствует в системе вынудили написать программу, позволяющая массового актуализировать справочник кредитных организаций в SAP.
В качестве источника информации по кредитным организациям взят справочник с сайта ЦБ РФ.
Алгоритм работы программы следующий:
- Скачать с сайта ЦБ РФ каталог архивов с дампами БД (файлы .DBF) по кредитным организациям;
- Выбрать последний актуальный архив;
- Распаковать архив в память;
- Распарсить дампы БД во внутренние таблицы;
- Обновить данные в справочнике SAP.

Под катом много кода, если кому интересно - велком =)
PS: КПЗ "Справочник"

 

воскресенье, 19 января 2014 г.

Отключение визуализации работы макросов в VBA

Небольшая процедурка, которая умеет вкл/выкл визуализацию работы макроса.
Очень помогает сократить время отработки макроса на больших объемах данных.
Код
Sub Vis(flag As Boolean)     With Application         .Calculation = IIf(flag, xlCalculationAutomatic, xlCalculationManual)         .ScreenUpdating = flag         .EnableEvents = flag         .DisplayStatusBar = flag         .DisplayAlerts = flag     End With End Sub

Пример вызова
Call Vis(False) Call Vis(True)

Ну и кусок кода для вывода информационного сообщения в статус бар.
Код
Application.StatusBar = "Текст сообщения" DoEvents

среда, 25 декабря 2013 г.

Класс для динамического создания таблиц

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

  • table - ссылка на таблицу
  • line - ссылка на структуру таблицы
  • lvc_scat - структура каталога полей
  • lvc_tcat - таблица каталога полей

и методы:

  • create_with_alv_table_create - Создание таблицы через метод cl_alv_table_create=>create_dynamic_table
  • create_with_rtts - Создание таблицы через RTTS (Run Time Type Services), начиная с версии ABAP 6.40
  • create_with_gen_subr_pool - Создание таблицы через генерацию программы (GENERATE SUBROUTINE POOL). Используется в старых системах

Ниже сам инклуд.

понедельник, 25 ноября 2013 г.

Создание/обновление делового партнера (тр.BP) через BAPI

Ниже будет много кода с вызовами BAPI по редактированию делового партнера.
Перечень используемых BAPI:
BAPI_BUPA_FS_CREATE_FROM_DATA2
BAPI_BUPA_CENTRAL_CHANGE
BAPI_BUPA_ADDRESSES_GET
BAPI_BUPA_ADDRESS_ADD
BAPI_BUPA_ADDRESS_REMOVE
BAPI_INDUSTRYSECTOR_ADD
BAPI_INDUSTRYSECTORDETAILS_GET
BAPI_INDUSTRYSECTOR_REMOVE
BAPI_BUPA_TAX_ADD
BAPI_BUPA_TAX_GETDETAIL
BAPI_BUPA_TAX_REMOVE
BAPI_BUPA_BANKDETAIL_ADD
BAPI_BUPA_BANKDETAILS_GET
BAPI_BUPA_BANKDETAIL_REMOVE
BAPI_BUPA_ROLES_GET_2
BAPI_BUPA_ROLE_REMOVE
BAPI_BUPA_ROLE_ADD_2
ФМ Z_BP_CUSTOMER_CREATE,Z_BP_VENDOR_CREATE и Z_BP_VENDOR_CHANGE - пакетники на транзакции XD01, XK01 и XK02 соответственно.
А теперь сам код:

пятница, 25 октября 2013 г.

Чтение XML средствами ABAP

Сегодня будем разбирать XML используя класс cl_xml_document и интерфейсы if_ixml_node, if_ixml_node_iterator, if_ixml_node_filter.

пятница, 18 октября 2013 г.

Курсы валют. Часть 2.

В первой части было описано как можно грузить курсы валют с сайта ЦБ РФ. Но иногда случаются ситуации, когда сервер ЦБ РФ временно перестает отвечать на запросы. В таком случае необходим другой источник курсов, т.к. ждать когда вновь поднимут сервер можно долго. Поиск в google навел на скромный API сайта РБК, который позволяет так же ежедневно грузить курсы валют.Ниже представлена реализация загрузки в SAP.

понедельник, 14 октября 2013 г.

Определение символа разделения дробной части

Может пригодиться при загрузке данных из Excel средствами OLE
Код
type-pools ole2. start-of-selection. data: curseparator. *------------перформа для определения знака разделения дробной части perform get_excel_decimal_separator using curseparator. write curseparator. *&---------------------------------------------------------------------* *& Form get_excel_decimal_separator *&---------------------------------------------------------------------* form get_excel_decimal_separator using result. data: app type ole2_object, usesystemseparators(10). create object app 'Excel.Application'. if sy-subrc = 0. get property of app 'UseSystemSeparators' = usesystemseparators. call function 'FLUSH'. if sy-subrc <> 0 or ( sy-subrc = 0 and usesystemseparators <> 0 ). perform get_system_decimal_separator using result. else. get property of app 'DecimalSeparator' = result. call function 'FLUSH'. endif. free object app. call function 'FLUSH'. endif. endform. "GET_EXCEL_DECIMAL_SEPARATOR *&---------------------------------------------------------------------* *& Form get_system_decimal_separator *&---------------------------------------------------------------------* form get_system_decimal_separator using result. data: hkey_current_user type i value 1. call function 'GUI_GET_REGVALUE' exporting root = hkey_current_user key = 'Control Panel' value_name = 'sDecimal' changing string = result exceptions registry_error = 1. endform. "GET_SYSTEM_DECIMAL_SEPARATOR