SAP L_TO_CANCEL не отменяет транспортный заказ - PullRequest
0 голосов
/ 20 января 2019

Я использую функциональный модуль SAP L_TO_CANCEL через pyrfc и python для отмены транспортных заказов пополнения запаса (TO). Это хорошо работает для некоторых ТЗ, но для других (также для пополнения) выдает ошибку Отрицательный запас для хранилища типа X не допускается. Хотя это действительно так, TO не работал. Нет удаления запаса из исходного типа хранения еще. Таким образом, отмена не должна приводить к отрицательному запасу в типе хранилища назначения, что в данном случае указано в сообщении об ошибке Как бы то ни было, это проблема или почему я думаю, что есть проблема. Если я запускаю L_TO_CANCEL из SE37 через SAP GUI, передавая те же параметры I_LGNUM, I_TANUM, I_CANCL, он отменяет рассматриваемый TO, даже когда TO совпадает с TO, так как вызов rfc не удалось отменить, и полученный отрицательный запас не разрешает отправку сообщения.

s = RfcConnection(sysrfc="QE2")
result = s.delete_to(lgnum="220", tanum="9592250", cancl="X", commit_work="X")

def delete_to(self, lgnum=None, tanum=None, solex=None, cancl=None, subst=None, qname=username, update_task=None, commit_work=None, t_ltap_cancl=None):
    return_msg = None
    assert (lgnum is not None and tanum is not None), "Warehouse number as lgnum and Transfer Order as tanum are required for function delete_to"
    if cancl is None:
        cancl = "X"
    try:
        if t_ltap_cancl is None:
            return_msg = self.conn.call("L_TO_CANCEL",
                                        I_LGNUM=lgnum,
                                        I_TANUM=pad(tanum, 10, "0"),
                                        I_CANCL=cancl)
        elif t_ltap_cancl is not None:
            return_msg = self.conn.call("L_TO_CANCEL",
                                        I_LGNUM=lgnum,
                                        I_TANUM=pad(tanum, 10, "0"),
                                        T_LTAP_CANCL=t_ltap_cancl)
    except pyrfc._exception.ABAPApplicationError as e:
        if e.msg_class == "L3" and e.msg_number == "354":
            return_msg = self.get_error_code(Language="EN", Area=e.msg_class, Message=e.msg_number)[0][0].replace("&", "{}".format(tanum))
        else:
            return_msg = self.get_error_code(Language="EN", Area=e.msg_class, Message=e.msg_number)
    except pyrfc._exception.ABAPRuntimeError as e:
        if e.msg_class == "L3" and e.msg_number == "037":
            return_msg = self.get_error_code(Language="EN", Area=e.msg_class, Message=e.msg_number)[0][0].replace("&", "{}".format(e.msg_v1))
        else:
            return_msg = self.get_error_code(Language="EN", Area=e.msg_class, Message=e.msg_number)
    except Exception as e:
        return_msg = e
    return return_msg
...