hnt-sap-nf-caixas 0.0.6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- hnt_sap_nf/__init__.py +1 -0
- hnt_sap_nf/common/sap_status_bar.py +13 -0
- hnt_sap_nf/common/session.py +60 -0
- hnt_sap_nf/common/tx_result.py +18 -0
- hnt_sap_nf/hnt_sap_exception.py +13 -0
- hnt_sap_nf/hnt_sap_gui.py +49 -0
- hnt_sap_nf/j1b1n_transaction.py +84 -0
- hnt_sap_nf_caixas-0.0.6.dist-info/METADATA +14 -0
- hnt_sap_nf_caixas-0.0.6.dist-info/RECORD +11 -0
- hnt_sap_nf_caixas-0.0.6.dist-info/WHEEL +5 -0
- hnt_sap_nf_caixas-0.0.6.dist-info/top_level.txt +1 -0
hnt_sap_nf/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .hnt_sap_gui import *
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import re
|
|
3
|
+
|
|
4
|
+
logger = logging.getLogger(__name__)
|
|
5
|
+
|
|
6
|
+
def sbar_extracted_text(patter, full_text):
|
|
7
|
+
regex = re.compile(patter , re.IGNORECASE)
|
|
8
|
+
text_list = regex.search(full_text)
|
|
9
|
+
if text_list is None:
|
|
10
|
+
return None
|
|
11
|
+
text = text_list[1]
|
|
12
|
+
logger.info(f"Extracted text: '{text}', from full_text: '{full_text}'")
|
|
13
|
+
return text
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
from functools import wraps
|
|
2
|
+
import os
|
|
3
|
+
import logging
|
|
4
|
+
|
|
5
|
+
from hnt_sap_nf.hnt_sap_exception import HntSapException
|
|
6
|
+
|
|
7
|
+
logger = logging.getLogger(__name__)
|
|
8
|
+
|
|
9
|
+
def sessionable(original_function):
|
|
10
|
+
@wraps(original_function)
|
|
11
|
+
def wrapped(*args, **kwargs):
|
|
12
|
+
this = args[0]
|
|
13
|
+
try:
|
|
14
|
+
_open(this)
|
|
15
|
+
response = original_function(*args, **kwargs)
|
|
16
|
+
_close(this)
|
|
17
|
+
return response
|
|
18
|
+
except HntSapException as hntEx:
|
|
19
|
+
_close(this)
|
|
20
|
+
raise hntEx
|
|
21
|
+
except Exception as ex:
|
|
22
|
+
logger.error(msg=str(ex))
|
|
23
|
+
if this.session.findById("wnd[0]/sbar", False) != None:
|
|
24
|
+
msg = this.session.findById("wnd[0]/sbar").Text
|
|
25
|
+
logger.error(f"SAP Status bar: '{msg}'")
|
|
26
|
+
raise HntSapException(msg, ex.args)
|
|
27
|
+
|
|
28
|
+
if isinstance(ex.args[0], str) and ex.args[0].endswith("object has no attribute 'sapapp'"):
|
|
29
|
+
raise ex
|
|
30
|
+
_close(this)
|
|
31
|
+
return wrapped
|
|
32
|
+
|
|
33
|
+
def _open(sap_gui):
|
|
34
|
+
logger.info("enter _open")
|
|
35
|
+
sap_gui.connect_to_session()
|
|
36
|
+
|
|
37
|
+
sap_gui.open_connection(os.getenv("SAP_NFE_OPEN_CONNECTION"))
|
|
38
|
+
|
|
39
|
+
sap_gui.session.findById("wnd[0]/usr/txtRSYST-MANDT").text = os.getenv("SAP_NFE_MANDANTE")
|
|
40
|
+
sap_gui.session.findById("wnd[0]/usr/txtRSYST-BNAME").text = os.getenv("SAP_NFE_USERNAME")
|
|
41
|
+
sap_gui.session.findById("wnd[0]/usr/pwdRSYST-BCODE").text = os.getenv("SAP_NFE_PASSWORD")
|
|
42
|
+
sap_gui.session.findById("wnd[0]/usr/txtRSYST-LANGU").text = os.getenv("SAP_NFE_LANGUAGE")
|
|
43
|
+
sap_gui.send_vkey(0)
|
|
44
|
+
if sap_gui.session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2", False) != None:
|
|
45
|
+
sap_gui.session.findById("wnd[1]/usr/radMULTI_LOGON_OPT2").select()
|
|
46
|
+
sap_gui.session.findById("wnd[1]/tbar[0]/btn[0]").press()
|
|
47
|
+
if sap_gui.session.findById("wnd[1]/tbar[0]/btn[0]", False) != None:
|
|
48
|
+
sap_gui.session.findById("wnd[1]/tbar[0]/btn[0]").press()
|
|
49
|
+
elif sap_gui.session.findById("wnd[1]/tbar[0]/btn[0]", False) != None:
|
|
50
|
+
sap_gui.session.findById("wnd[1]/tbar[0]/btn[0]").press()
|
|
51
|
+
logger.info("leave _open")
|
|
52
|
+
|
|
53
|
+
def _close(sap_gui):
|
|
54
|
+
logger.info("enter _close")
|
|
55
|
+
sap_gui.session.findById("wnd[0]").close()
|
|
56
|
+
if sap_gui.session.findById("wnd[1]/usr/btnSPOP-OPTION1", False) != None:
|
|
57
|
+
sap_gui.session.findById("wnd[1]/usr/btnSPOP-OPTION1").press()
|
|
58
|
+
elif sap_gui.session.findById("wnd[2]/usr/btnSPOP-OPTION1", False) != None:
|
|
59
|
+
sap_gui.session.findById("wnd[2]/usr/btnSPOP-OPTION1").press()
|
|
60
|
+
logger.info("leave _close")
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class TxResult:
|
|
5
|
+
def __init__(self, sap_docnum, sbar=None) -> None:
|
|
6
|
+
self.sap_docnum = sap_docnum
|
|
7
|
+
self.sbar = sbar
|
|
8
|
+
self.created_at = datetime.now().strftime("%Y%m%d%H%M%S")
|
|
9
|
+
|
|
10
|
+
def to_dict(self):
|
|
11
|
+
return {
|
|
12
|
+
'sap_docnum': self.sap_docnum,
|
|
13
|
+
'sbar': self.sbar,
|
|
14
|
+
'created_at': self.created_at,
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
def __str__(self):
|
|
18
|
+
return f"TxResult instance with sap_docnum: '{self.sap_docnum}', sbar: '{self.sbar}', created_at:'{self.created_at}'"
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
class HntSapException(Exception):
|
|
2
|
+
def __init__(self, message, cause=None):
|
|
3
|
+
self.message = message
|
|
4
|
+
self.cause = cause
|
|
5
|
+
|
|
6
|
+
def __str__(self):
|
|
7
|
+
if self.cause:
|
|
8
|
+
return f'HFNTException: {self.message} caused by {self.cause}'
|
|
9
|
+
else:
|
|
10
|
+
return f'HFNTException: {self.message}'
|
|
11
|
+
|
|
12
|
+
def __cause__(self):
|
|
13
|
+
return self.cause
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import locale
|
|
3
|
+
import time
|
|
4
|
+
from SapGuiLibrary import SapGuiLibrary
|
|
5
|
+
|
|
6
|
+
from hnt_sap_nf.common.tx_result import TxResult
|
|
7
|
+
from hnt_sap_nf.j1b1n_transaction import J1b1nTransaction
|
|
8
|
+
from .common.session import sessionable
|
|
9
|
+
from dotenv import load_dotenv
|
|
10
|
+
logger = logging.getLogger(__name__)
|
|
11
|
+
|
|
12
|
+
class SapGui(SapGuiLibrary):
|
|
13
|
+
def __init__(self) -> None:
|
|
14
|
+
SapGuiLibrary.__init__(self, screenshots_on_error=True)
|
|
15
|
+
locale.setlocale(locale.LC_ALL, ('pt_BR.UTF-8'))
|
|
16
|
+
load_dotenv()
|
|
17
|
+
pass
|
|
18
|
+
def format_float(self, value):
|
|
19
|
+
return locale.format_string("%.2f", value)
|
|
20
|
+
|
|
21
|
+
@sessionable
|
|
22
|
+
def run_j1b1n(self, nf):
|
|
23
|
+
logger.info(f"Enter execute run_j1b1n nf:{nf}")
|
|
24
|
+
result = {
|
|
25
|
+
"j1b1n": None,
|
|
26
|
+
"error": None
|
|
27
|
+
}
|
|
28
|
+
try:
|
|
29
|
+
j1b1n = J1b1nTransaction().execute(self, nf)
|
|
30
|
+
result['j1b1n'] = j1b1n.to_dict()
|
|
31
|
+
except Exception as ex:
|
|
32
|
+
logger.error(str(ex))
|
|
33
|
+
result["error"] = str(ex)
|
|
34
|
+
logger.info(f"Leave execute run_j1b1n result:{', '.join([str(result[obj]) for obj in result])}")
|
|
35
|
+
return result
|
|
36
|
+
|
|
37
|
+
@sessionable
|
|
38
|
+
def run_j1b1n_mock(self, nf):
|
|
39
|
+
logger.info(f"Enter execute run_j1b1n_mock nf:{nf}")
|
|
40
|
+
epoch_now = int(time.time())
|
|
41
|
+
result = {
|
|
42
|
+
"j1b1n": {
|
|
43
|
+
"sap_docnum": f"MOCK_{epoch_now}",
|
|
44
|
+
"sbar": "MOCKsbar1234567"
|
|
45
|
+
},
|
|
46
|
+
"error": None
|
|
47
|
+
}
|
|
48
|
+
logger.info(f"Leave run_j1b1n_mock:{result}")
|
|
49
|
+
return result
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from datetime import datetime
|
|
3
|
+
from hnt_sap_nf.common.tx_result import TxResult
|
|
4
|
+
logger = logging.getLogger(__name__)
|
|
5
|
+
from hnt_sap_nf.common.sap_status_bar import sbar_extracted_text
|
|
6
|
+
MSG_SAP_NOTA_FISCAL_CRIADA = "^Nota fiscal ([0-9]+) criada$"
|
|
7
|
+
IMPOSTOS = [
|
|
8
|
+
'ICM0',
|
|
9
|
+
'ICON',
|
|
10
|
+
'IPSN',
|
|
11
|
+
'IPI0'
|
|
12
|
+
]
|
|
13
|
+
class J1b1nTransaction:
|
|
14
|
+
def __init__(self) -> None:
|
|
15
|
+
pass
|
|
16
|
+
|
|
17
|
+
def execute(self, sapGuiLib, nf):
|
|
18
|
+
logger.info(f"Enter lançar nf:{nf}")
|
|
19
|
+
sapGuiLib.run_transaction('/nJ1B1N')
|
|
20
|
+
|
|
21
|
+
sapGuiLib.session.findById("wnd[0]/usr/ctxtJ_1BDYDOC-NFTYPE").Text = nf['categoria_nf'] #Planilha: Cat NF | SAP: Ctg.nota fiscal
|
|
22
|
+
sapGuiLib.session.findById("wnd[0]/usr/ctxtJ_1BDYDOC-BUKRS").Text = nf['empresa'] #Planilha: Empresa | SAP: Empresa
|
|
23
|
+
sapGuiLib.session.findById("wnd[0]/usr/ctxtJ_1BDYDOC-BRANCH").Text = nf['local_negocio'] #Planilha: Unidade | SAP: Local de negócios
|
|
24
|
+
sapGuiLib.session.findById("wnd[0]/usr/cmbJ_1BDYDOC-PARVW").Key = nf['funcao_parceiro'] #SAP: NF função parceiro*
|
|
25
|
+
sapGuiLib.session.findById("wnd[0]/usr/ctxtJ_1BDYDOC-PARID").Text = nf['sap_cod_fornecedor'] #Planilha: Código Fornecedor | SAP: ID parceiro
|
|
26
|
+
|
|
27
|
+
sapGuiLib.send_vkey(0)
|
|
28
|
+
if nf['categoria_nf'] == 'YS':
|
|
29
|
+
sapGuiLib.session.findById("wnd[0]/usr/subNF_NUMBER:SAPLJ1BB2:2002/txtJ_1BDYDOC-NFENUM").Text = nf['nro_nf'] #Planilha: Nº NF | SAP: Nº da NF-e
|
|
30
|
+
sapGuiLib.session.findById("wnd[0]/usr/txtJ_1BDYDOC-SERIES").Text = nf['serie_nf'] # Série NF Planilha: Nº Série | SAP: Nº da NF-e (campo 2)
|
|
31
|
+
sapGuiLib.session.findById("wnd[0]/usr/ctxtJ_1BDYDOC-DOCDAT").Text = nf['data_emissao'] #Planilha: Data emissão | SAP: Data documento
|
|
32
|
+
elif nf['categoria_nf'] == 'YZ':
|
|
33
|
+
data_atual = datetime.now()
|
|
34
|
+
sapGuiLib.session.findById("wnd[0]/usr/ctxtJ_1BDYDOC-DOCDAT").Text = data_atual.strftime("%d.%m.%Y") #Data corrente, ex. 10.12.2025
|
|
35
|
+
|
|
36
|
+
#------------------------------------------------------------------------------------------------
|
|
37
|
+
#INCLUSÃO DE MATERIAIS
|
|
38
|
+
for i, item in enumerate(nf['itens']):
|
|
39
|
+
sapGuiLib.session.findById(f"wnd[0]/usr/tabsTABSTRIP1/tabpTAB1/ssubHEADER_TAB:SAPLJ1BB2:2100/tblSAPLJ1BB2ITEM_CONTROL/ctxtJ_1BDYLIN-ITMTYP[1,{i}]").Text = item['tipo'] #Planilha: Tipo item NF | SAP: Tipo de item NF
|
|
40
|
+
sapGuiLib.session.findById(f"wnd[0]/usr/tabsTABSTRIP1/tabpTAB1/ssubHEADER_TAB:SAPLJ1BB2:2100/tblSAPLJ1BB2ITEM_CONTROL/ctxtJ_1BDYLIN-MATNR[3,{i}]").Text = item['cod_material_sap'] #Planilha: Código Material | SAP: Material
|
|
41
|
+
sapGuiLib.session.findById(f"wnd[0]/usr/tabsTABSTRIP1/tabpTAB1/ssubHEADER_TAB:SAPLJ1BB2:2100/tblSAPLJ1BB2ITEM_CONTROL/ctxtJ_1BDYLIN-WERKS[2,{i}]").Text = item['centro'] #Planilha: CD | SAP: Centro
|
|
42
|
+
sapGuiLib.session.findById(f"wnd[0]/usr/tabsTABSTRIP1/tabpTAB1/ssubHEADER_TAB:SAPLJ1BB2:2100/tblSAPLJ1BB2ITEM_CONTROL/txtJ_1BDYLIN-MENGE[4,{i}]").Text = item['quantidade'] #Planilha: Quantidade | SAP: Quantidade
|
|
43
|
+
sapGuiLib.session.findById(f"wnd[0]/usr/tabsTABSTRIP1/tabpTAB1/ssubHEADER_TAB:SAPLJ1BB2:2100/tblSAPLJ1BB2ITEM_CONTROL/ctxtJ_1BDYLIN-MEINS[5,{i}]").Text = item['unidade_medida'] #Planilha: Un Med | SAP: Unidade de medida
|
|
44
|
+
sapGuiLib.session.findById(f"wnd[0]/usr/tabsTABSTRIP1/tabpTAB1/ssubHEADER_TAB:SAPLJ1BB2:2100/tblSAPLJ1BB2ITEM_CONTROL/txtJ_1BDYLIN-NETPR[6,{i}]").Text = sapGuiLib.format_float(float(item['preco'])) #Planilha: Valor UN | SAP: Preço
|
|
45
|
+
sapGuiLib.session.findById(f"wnd[0]/usr/tabsTABSTRIP1/tabpTAB1/ssubHEADER_TAB:SAPLJ1BB2:2100/tblSAPLJ1BB2ITEM_CONTROL/ctxtJ_1BDYLIN-CFOP[9,{i}]").Text = item['cfop'] #Planilha: CFOP Entrada | SAP: CFOP
|
|
46
|
+
sapGuiLib.session.findById(f"wnd[0]/usr/tabsTABSTRIP1/tabpTAB1/ssubHEADER_TAB:SAPLJ1BB2:2100/tblSAPLJ1BB2ITEM_CONTROL/ctxtJ_1BDYLIN-TAXLW1[10,{i}]").Text = item['dir_fiscal'] #Planilha: Dir Fiscal | SAP: Dir.fisc.: ICMS
|
|
47
|
+
sapGuiLib.send_vkey(0)
|
|
48
|
+
sapGuiLib.send_vkey(0)
|
|
49
|
+
|
|
50
|
+
sapGuiLib.session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpTAB1/ssubHEADER_TAB:SAPLJ1BB2:2100/btn%#AUTOTEXT004").press() #Botão "Selecionar tudo"
|
|
51
|
+
sapGuiLib.session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpTAB1/ssubHEADER_TAB:SAPLJ1BB2:2100/btn%#AUTOTEXT001").press() #Botão "DetalhItem"
|
|
52
|
+
sapGuiLib.session.findById("wnd[0]/usr/tabsITEM_TAB/tabpTAX").Select() #Seleciona aba Impsotos
|
|
53
|
+
for i, item in enumerate(nf['itens']):
|
|
54
|
+
for i, imposto in enumerate(IMPOSTOS):
|
|
55
|
+
sapGuiLib.session.findById(f"wnd[0]/usr/tabsITEM_TAB/tabpTAX/ssubITEM_TABS:SAPLJ1BB2:3200/tblSAPLJ1BB2TAX_CONTROL/ctxtJ_1BDYSTX-TAXTYP[0,{i}]").Text = imposto
|
|
56
|
+
sapGuiLib.session.findById(f"wnd[0]/usr/tabsITEM_TAB/tabpTAX/ssubITEM_TABS:SAPLJ1BB2:3200/tblSAPLJ1BB2TAX_CONTROL/txtJ_1BDYSTX-OTHBAS[7,{i}]").Text = sapGuiLib.format_float(float(item['valor_produto']))
|
|
57
|
+
|
|
58
|
+
sapGuiLib.session.findById("wnd[0]/usr/tabsITEM_TAB/tabpTAX/ssubITEM_TABS:SAPLJ1BB2:3200/btnPB_NEXT").press()
|
|
59
|
+
|
|
60
|
+
sapGuiLib.send_vkey(0)
|
|
61
|
+
sapGuiLib.session.findById("wnd[0]/tbar[0]/btn[3]").press()
|
|
62
|
+
|
|
63
|
+
if nf['categoria_nf'] == 'YS':
|
|
64
|
+
sapGuiLib.session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpTAB8").Select() #Seleciona aba DadosNF-e
|
|
65
|
+
sapGuiLib.session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpTAB8/ssubHEADER_TAB:SAPLJ1BB2:2800/subRANDOM_NUMBER:SAPLJ1BB2:2801/ctxtJ_1BNFE_DOCNUM9_DIVIDED-TPEMIS").Text = nf['dados_nfe']['tipo_emissao'] #Planilha: Tipo de emissão | SAP: Tp.emissão
|
|
66
|
+
sapGuiLib.session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpTAB8/ssubHEADER_TAB:SAPLJ1BB2:2800/subRANDOM_NUMBER:SAPLJ1BB2:2801/txtJ_1BNFE_DOCNUM9_DIVIDED-DOCNUM8").Text = nf['dados_nfe']['nro_aleatorio'] #Planilha: Nº aleatorio | SAP: Nº aleatório
|
|
67
|
+
sapGuiLib.session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpTAB8/ssubHEADER_TAB:SAPLJ1BB2:2800/subRANDOM_NUMBER:SAPLJ1BB2:2801/txtJ_1BNFE_ACTIVE-CDV").Text = nf['dados_nfe']['digito_verificador'] #Planilha: Dig verificador | SAP: Díg.verif.
|
|
68
|
+
sapGuiLib.session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpTAB8/ssubHEADER_TAB:SAPLJ1BB2:2800/subTIMESTAMP:SAPLJ1BB2:2803/subAUTHCODE_AREA:SAPLJ1BB2:2805/txtJ_1BDYDOC-AUTHCOD").Text = nf['dados_nfe']['nro_log'] #Planilha: Numero Doc | SAP: Nº do log
|
|
69
|
+
sapGuiLib.session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpTAB8/ssubHEADER_TAB:SAPLJ1BB2:2800/subTIMESTAMP:SAPLJ1BB2:2803/ctxtJ_1BDYDOC-AUTHDATE").Text = nf['dados_nfe']['data_emissao'] #Planilha: Data emissão | SAP: Hora procmto.
|
|
70
|
+
sapGuiLib.session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpTAB8/ssubHEADER_TAB:SAPLJ1BB2:2800/subTIMESTAMP:SAPLJ1BB2:2803/ctxtJ_1BDYDOC-AUTHTIME").Text = nf['dados_nfe']['hora_emissao'] # Planilha: Hora de emissão | SAP: Hora procmto.
|
|
71
|
+
elif nf['categoria_nf'] == 'YZ':
|
|
72
|
+
sapGuiLib.session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpTAB4").Select() #Seleciona aba Mensagens
|
|
73
|
+
sapGuiLib.session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpTAB4/ssubHEADER_TAB:SAPLJ1BB2:2400/tblSAPLJ1BB2MESSAGE_CONTROL/txtJ_1BDYFTX-MESSAGE[0,2]").Text = f"NOTA DE PRODUTOR {nf['nro_nf']}-{nf['serie_nf']}"
|
|
74
|
+
sapGuiLib.send_vkey(0)
|
|
75
|
+
sapGuiLib.session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpTAB5").Select() #Seleciona aba Transporte
|
|
76
|
+
sapGuiLib.session.findById("wnd[0]/usr/tabsTABSTRIP1/tabpTAB5/ssubHEADER_TAB:SAPLJ1BB2:2500/ctxtJ_1BDYDOC-MODFRETE").Text = nf['dados_nfe']['modalid_fret'] #SAP: Modalid.fret
|
|
77
|
+
|
|
78
|
+
sapGuiLib.send_vkey(0)
|
|
79
|
+
sapGuiLib.session.findById("wnd[0]/tbar[0]/btn[11]").press() #Salvar
|
|
80
|
+
sbar = sapGuiLib.session.findById("wnd[0]/sbar").Text
|
|
81
|
+
sap_docnum = sbar_extracted_text(MSG_SAP_NOTA_FISCAL_CRIADA, sbar)
|
|
82
|
+
result = TxResult(sap_docnum, sbar)
|
|
83
|
+
logger.info(f"Leave lançar nf:{result}")
|
|
84
|
+
return result
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: hnt_sap_nf_caixas
|
|
3
|
+
Version: 0.0.6
|
|
4
|
+
Summary: Lib to access sap gui to run transactions
|
|
5
|
+
Author: Pepe
|
|
6
|
+
License: MIT License
|
|
7
|
+
Keywords: nota_fiscal
|
|
8
|
+
Requires-Dist: python-dotenv
|
|
9
|
+
Requires-Dist: robotframework-sapguilibrary
|
|
10
|
+
Dynamic: author
|
|
11
|
+
Dynamic: keywords
|
|
12
|
+
Dynamic: license
|
|
13
|
+
Dynamic: requires-dist
|
|
14
|
+
Dynamic: summary
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
hnt_sap_nf/__init__.py,sha256=iRIRFTwSzwswJBUiRfoftg0JLT7s4DJSddu4FYYZ1f0,26
|
|
2
|
+
hnt_sap_nf/hnt_sap_exception.py,sha256=g1eyHDmWW2BSZ9NhvDE6SRKKScURrQRFyhAd8SYCxMM,388
|
|
3
|
+
hnt_sap_nf/hnt_sap_gui.py,sha256=2J4uTjV1wXc3_NdNsF-9yCIJmMYMxgaEwOsn8Nc4UJU,1592
|
|
4
|
+
hnt_sap_nf/j1b1n_transaction.py,sha256=OskXjI3CVfcC26-lbFVYvGJyNAa_QvTRTgo8QjsMDd4,8069
|
|
5
|
+
hnt_sap_nf/common/sap_status_bar.py,sha256=hgY4YZgCwMOEJPypC8jqg4T39ECyttcSIiLv5_XcrGY,368
|
|
6
|
+
hnt_sap_nf/common/session.py,sha256=lmHVFxqYrBmX9PWAzqH2VT9dUzehbkm7kr-Iblo0HV0,2604
|
|
7
|
+
hnt_sap_nf/common/tx_result.py,sha256=4NmSeowvG933MSqdwxNmxOGNk-odmxy1IFCBoaG3H7k,565
|
|
8
|
+
hnt_sap_nf_caixas-0.0.6.dist-info/METADATA,sha256=0YusTtFjmwOWOKsPOjVG9d3-LlgFfJhSkXdreXzaA6s,346
|
|
9
|
+
hnt_sap_nf_caixas-0.0.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
10
|
+
hnt_sap_nf_caixas-0.0.6.dist-info/top_level.txt,sha256=XhHtox9cuPFwp-ii-cZEd0O7W2rndE5C3WwMO1PuSWM,11
|
|
11
|
+
hnt_sap_nf_caixas-0.0.6.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
hnt_sap_nf
|