Меню

Сортировать:

Новое Популярное
SAP Gateway oData: 8 полезных заметок на ход ноги (3)

Комментарий от  

Олег Башкатов

  |  26 декабря 2023, 16:08

Вадим Новацкий 25 декабря 2023, 08:59

А файл-презентация тут не будет? Обычно выкладывают к видео, а тут пусто

Презентации в ходе блиц-вебинара не было.
Материалы, по которым проводился вебинар частично опубликованы:
1. Про CDS : olegbash.ru/f1/pW8
2. Про объединение и расширение сервисов и сброс кэша:  olegbash.ru/f1/aQ8
 
3. Также в скором времени будет опубикована статья, которая содержит больше материала, чем в блиц-вебинаре в рамках колонки ( sappro.sapland.ru/author-column/20772 )
 
4. Если что-то недосказано про OData, но хотелось бы услышать: можете также написать в ABAPclub:  t.me/ABAPclub
 

SAP Gateway oData: 8 полезных заметок на ход ноги (3)

Комментарий от  

Ирина Дауева

  |  26 декабря 2023, 12:27

Вадим Новацкий 25 декабря 2023, 08:59

А файл-презентация тут не будет? Обычно выкладывают к видео, а тут пусто

По данному вебинару есть только видеозапись.
Транзакция LSMW инструкция по применению. Часть 3 (4)

Комментарий от  

Олег Башкатов

  |  19 декабря 2023, 11:08

Елена Карагодина 17 декабря 2023, 11:51

Добрый день. Не получается в одной из систем SAP сделать LSMW на создание БУХ.РАКУРСОВ в ОЗМ. При создании LSMW методом BATCH IMPUT выходит ошибка: выберите хотя бы один ракурс. При этом на ракурсы : Основные данные, Сбыт, LSMW создалось.

Елена, добрый день,
 
Комментарий Вы сделали под статьей про использование метода BAPI почему-то :-). Собственно, я бы Вам и рекомендовал его (метода BAPI, а не BATCH INPUT) использовать для загрузки ОЗМ по материалам.
 
Предположение по описанному Вами недочёту с BATCH INPUT и бух.ракурсу - "просто не проскролили" :-) .
Бухгалтерский ракурс может находится за пределами экрана, где нужно его выбирать и поэтому он считается не выбранным.
 
Попробуйте прогнать (повторить) BATCH INPUT в ВИДИМОМ режиме (в SM35 выделить сессию и нажать Process / Выполнить).
 
Но повторюсь: что для ОЗМ надежнее использовать BAPI-метод.
 
disk.yandex.ru/i/954Z6LfvK0ZuFA   ( ответ с картинками сохранил в pdf (так как что-то не прикрепляются) )
 
«Отладка АВАР ​​— это просто» (1)

Комментарий от  

Вячеслав Шиболов

  |  14 сентября 2023, 10:48

Вебинар представляет собой анонс курса по отладке. Для тех кто хочет посмотреть: из полезного рассказывается про точки прерывания/наблюдения. Остальное просто вода/анонс.
Загрузка «длинных» текстов основных записей материалов при помощи транзакции LSMW. Часть 2. (17)

Комментарий от  

Олег Башкатов

  |  18 января 2023, 19:41

Ирина Михайлова 18 января 2023, 10:33

Теперь вопрос, как извлечь эти данные, где они хранятся?

На вопрос как извлечь данные:
с помощью функционального модуля READ_TEXT.
(этот самый универсальный способ для длинных текстов любых объектов).
То есть если в удобном виде выгружать на постоянной основе - то придется написать свою custom-программу с использованием ФМ READ_TEXT.
чтобы точно установить параметры ФМа: поставьте точку останова в начале модуля READ_TEXT и зайдите в материал с длинным текстом и откройте экран с длинным текстом; таким образом, увидите параметры.
Для примера из статьи
OBJECT  - Константа MATERIAL
NAME - Номер материала (если материал цифровой - то с ведущими нулями впереди)
ID - Константа GRUN (для текстов из основных данных)
SPRAS - для языка RU - R, для EN - E; для остальных языков перекодировка в таблице T002
 
Если нужно единоразово для материалов (например, просто для проверки) - то можно использовать программу RMDATGEN и на селекционном экране указать выгрузка файл на ПК.
 

 
На вопрос "где хранятся":
Информация о длинных текстах хранится в двух системных таблица STXH и STXL. Сами длинные хранятся в таблице STXL, но через SE16(N/H/*) Вы их не увидите, так как сами данные в бинарном виде.
Загрузка «длинных» текстов основных записей материалов при помощи транзакции LSMW. Часть 2. (17)

Комментарий от  

Ирина Михайлова

  |  18 января 2023, 10:33

Ирина Михайлова 18 января 2023, 10:31

Спасибо, сделала загрузку LSMW, все работает!

Теперь вопрос, как извлечь эти данные, где они хранятся?
Загрузка «длинных» текстов основных записей материалов при помощи транзакции LSMW. Часть 2. (17)

Комментарий от  

Ирина Михайлова

  |  18 января 2023, 10:31

Спасибо, сделала загрузку LSMW, все работает!
Обучение ABAP продолжается. Enumeration (1)

Комментарий от  

Сергей Баранов

  |  20 октября 2022, 08:38

Благодарю за урок!
Обучение АВАР. Передача параметров по ссылке и по значению (2)

Комментарий от  

Максим Столяров

  |  10 августа 2022, 09:55

Всем добрый день.
 
Ваши вэбинары, Василий, конечно же познавательны, но на видео картинка с примерами программ и кодов вообще не читальбельна, т.е. практически ничего не видно.
REDUCE: не помнИ типизацию, а пОмни про нее (4)

Комментарий от  

Олег Башкатов

  |  03 апреля 2022, 23:07

Виталий Глущенко 03 апреля 2022, 21:13

>>нет. получаемый ответ будет 604, а точный ответ 602.25.
>>PS. Слово "правильный" я бы заменил на точный/неточный. если требуемая точность - до сотен, то все варианты "правильные".
 
да, правильный/неправильный - плохая формулировка, но и точный/неточный тоже не хочу называть, потому что иногда в задаче требуется получить неточный результат, но он правильный по требованиям задачи.
 
Поясню, что я имел ввиду выше. В описанных примерах рассматривается ситуация когда из-за незнания как работает reduce можно получить несколько конвертаций и на каждой из них потерять точность сильнее, чем это ожидалось.
Грубо говоря конвертации у нас происходят:
  1. в строке next к типу переменной _rX_tot_am приводится тип переменной _ord_lineX-netwr;
  2. на выходе из reduce результат расчета в переменной _rX_tot_am приводится к типу указанному после reduce ...( );
  3. при присвоении переменной lv_total_amount результат шага 2 приводится к типу переменной lv_total_amount;
Предположим, что тип _ord_lineX-netwr и тип lv_total_amount у меня указан правильно(он может быть одинаковым, а может быть разным). Обычно моя задача выполнить все калькуляции и конвертацию с максимальной точностью. В таком случае хорошо, когда на шагах 1 и 2 и 3 все операции выполняются с одиним и тем же типом и лучше всего, когда это тип переменной lv_total_amount. Это важно потому что делает конструкцию менее капризной к смене типов переменных и таким образом избежать "детских" ошибок при модификации кода в будущем, когда в одном месте тип поменяли, а в другом забыли.
 
Иногда бывает, что нужно выполнять вычисления с большей точностью, чем мы потом будем хранить результат, в там случае в конструкции
    init _r4_tot_am = value #( )
я бы заменил # на явно заданный тип большей точности, но только там, а остальное оставил бы как есть, по той же самой причине, что бы конвертаций было как можно меньше.
 
>>нет. подсчет идет точный, но результат 6.0225000000000000E+02 уж очень странный для переменной total_amount )))
Почему? вполне нормальный результат, типичная экспоненциальная запись. В SAP в целом не часто используется тип float, но если в рамках задачи это требуется, то почему нет, в точности мы тут не потеряли, хотя могли и существенно.
 
>>а что подразумеваете под "2 и 3 считают неправильно"?
развернуто ответил выше, если кратко неправильным считаю, то что при смене типа его приходится менять в 3-х местах, что в будущем может привести к ошибкам.

Во 1ых, спасибо за развернутый комментарий.
 
Но в одном месте - я не совсем понял его.
Вы говорите, как я Вас понял (и я с Вами полностью согласен), что калькуляцию нужно выполнить с максимальной точностью, а вот дать результат в том формате, который запрашивается.
Но ведь, если мы будем зависеть от исходной переменной lv_total_amount, то мы как раз-таки и рискуем "понизить" нашу точность вычислений. и вот целочисленное решение задачи в статье должно быть 602, а не 604. Потому что точное 602.25  и из него int = 602, а если мы "унаследуем неявно" целочисленный тип из lv_total_amount, то получим 604.
 
Вы какой подход поддерживаете:
1) неявное наследование типа из запрашиваемой переменной
2) явное указание типизации при вычислениях
3) возвращаемый тип из reduce делаем наследуемым (после ключевого слова reduce берем из целевого результата через #), а внутри повышаем точность до разумного уровня явной типизацией.
REDUCE: не помнИ типизацию, а пОмни про нее (4)

Комментарий от  

Олег Башкатов

  |  31 марта 2022, 20:57

Виталий Глущенко 31 марта 2022, 20:09

я бы написал вот так
lv_total_amount = reduce #(
    init _r4_tot_am = value #( )
    for _ord_line4 in lt_order_line
    next _r4_tot_am = _r4_tot_am + _ord_line4-netwr
).
break-point.
 
потому что если в определении переменой lv_total_amount поменять тип на i, то тест 1 начинает работать правильно, а 2 и 3 считают неправильно, а если меняем тип на f, то все 3 варианта не работают. В данном же коде тип определяется на основании типа lv_total_amount.

Спасибо!
Ваш подход классный! и здорово дополняет копилку тонкостей reduce )
 
>>> lv_total_amount поменять тип на i, то тест 1 начинает работать правильно
нет. получаемый ответ будет 604, а точный ответ 602.25.
PS. Слово "правильный" я бы заменил на точный/неточный. если требуемая точность - до сотен, то все варианты "правильные".
 
>>> а 2 и 3 считают неправильно, а если меняем тип на f
нет. подсчет идет точный, но результат 6.0225000000000000E+02 уж очень странный для переменной total_amount )))
а что подразумеваете под "2 и 3 считают неправильно"?
Обработка строк в контексте чистого кода ABAP (1)

Комментарий от  

Александр Носов

  |  31 января 2022, 07:43

Забавно, информации об авторах больше чем полезной нагрузки.
BADI – Технология внедрения бизнес расширений / дополнений (2)

Комментарий от  

Алексей Герасименко

  |  07 января 2022, 14:36

Добрый день!
 
Подскажите, пожалуйста, не совсем понял: о какой проблеме хранения глобальных переменных, которую не решало Classic BAdI и смогло решить New BAdI, идёт речь.
 
И, если можно, более подробно вот об этом предложении про Classic BAdI: "...однако проблемы в одной из наследуемых реализаций могли поломать работу всех пользовательских расширений." Это же и для New BAdI справедливо, разве нет?
Чистый ABAP. Учёт исторических особенностей ABAP для обратной совместимости (2)

Комментарий от  

Олег Башкатов

  |  26 ноября 2021, 00:04

Олег Башкатов 25 ноября 2021, 23:56

в каком бы регистре не именовать counter - уже можно использовать конструкции вида
COUNTER += 1.

появляется с 754 (в том числе для строк && )
help.sap.com/doc/abapdocu_754_index_htm
Введение в безопасность системы SAP* (10)

Комментарий от  

Мади Татубаев

  |  02 ноября 2021, 20:35

Всем привет.
Кто подскажет. Есть полный перевод данной книги?
Практика освоения ABAP CDS для непрограммистов. Часть 5 (2)

Комментарий от  

Евгения Клепцова

  |  29 октября 2021, 08:12

"По агрегированным данным, пришедшим из композитного ракурса ...."
 
Где мне можно таких слов нахвататься? Агрегированные, композитные. Это для кого статьи? Я просто кодер на Vanilla JS. А тут написано, что вообще: не для программистов. Прощай работа в САПе, и это при том что нет конкуренции на рынке труда! Даже учиться не хочется!
Рассылка извещений о создании/изменении заказа на перемещение (8)

Комментарий от  

Лебедев Сергей

  |  16 сентября 2021, 15:54

Ирек, спасибо за добрые слова =)
Рад слышать, что труды прошлых лет до сих пор приносят пользу
Рассылка извещений о создании/изменении заказа на перемещение (8)

Комментарий от  

Ирек Абдуллин

  |  06 сентября 2021, 18:43

Лебедев Сергей 06 сентября 2021, 14:26

К заявке не привязать выходного документа:

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

Сергей, наслышан о вас на заводе Электромашина (Челябинск), вас вспоминают очень и ваши инструкции до сих пор меня выручают (LSMW), рад, что есть такие классные специалисты.
Параллельное программирование c использованием ABAP Concurrency API (12)

Комментарий от  

Александр Носов

  |  15 августа 2021, 10:17

Появилась задача на распараллеливание, решил попробовать библиотеку на практике. Делюсь впечатлениями.
Из плюсов:
1. не надо заморачиваться с созданием ГФ и ФМ для обработки задач
2. не надо заморачиваться с инициализацией группы серверов и следить за наличием ресурсов
3. работать можно не выходя из ОО контекста
Что показалось неудобным:
1. Класс задачи нужно наследовать от базового, это не всегда удобно. Лучше имплементировать интерфейс с методом EXECUTE, содержащий логику выполнения.
2. На мой взгляд много избыточных сущностей: ZCL_CAPI_COLLECTION, ZCL_CAPI_MESSAGE_HANDLER, ZCL_CAPI_EXECUTORS, итератор для чтения результата, контекст....
3. Неудобно что для контекста задачи нужно создавать отдельный класс. Можно ведь брать из контекст из состояния задачи
 
Пожелание на улучшение. Было бы удобнее чтобы код выглядел примерно так :
DATA lo_tasks TYPE REF TO zcl_capi_collection.
DATA lo_task TYPE REF TO zif_capi_abstract_task. " Содержит только метод EXECUTE
 
lo_tasks = NEW #( ).
DO 10 TIMES.
  lo_task = NEW lcl_task( sy-index ). " LCL_TASK имплементирует ZIF_CAPI_ABSTRACT_TASK
  lo_tasks->add_task( lo_task ).
ENDLOOP.
lo_tasks->invoke( ). " Вызывает EXECUTE всех задач, изменяет состояние LCL_TASK
WRITE / lo_tasks->get_result( ). " Измененный результат из состояния LCL_TASK
Интеграция Central Finance с не-SAP системами-источниками на примере 1С (1)

Комментарий от  

Farid Gattal

  |  28 июля 2021, 15:57

Отличная статья с уникальным контентом для рынка СНГ!