Olá pessoal…
Recentemente, criei uma ferramenta de carga dados genéricos para o Protheus, utilizando ExecAuto, sendo possível importar os principais cadastros do Protheus.
Os cadastros que a rotina tem compatibilidade para importação são:
01 - MATA070 - SA6 - Bancos 02 - MATA030 - SA1 - Clientes 03 - MATA360 - SE4 - Condição de Pagamento 04 - FINA040 - SE1 - Contas a Receber 05 - FINA050 - SE2 - Contas a Pagar 06 - MATA020 - SA2 - Fornecedores 07 - FINA010 - SED - Naturezas 08 - MATA010 - SB1 - Produtos 09 - MATA220 - SB9 - Saldo Inicial 10 - MATA080 - SF4 - TES (Tipo de Entrada e Saída) 11 - MATA230 - SF5 - Tipo Movimentação 12 - MATA050 - SA4 - Transportadoras 13 - OMSA060 - DA3 - Veículos 14 - MATA040 - SA3 - Vendedores
Ao abrir a rotina é mostrado uma tela de log de explicação.
Após isso, será aberto a tela inicial, onde é preenchido o arquivo, o tipo da importação e qual é o caracter de separação.
No combo, é possível definir qual é o tipo de importação que será executada.
Ao clicar no botão Camp.Obrig., é gerado um arquivo com a extensão txt ou csv, com os campos obrigatórios encontrados na SX3 (mas sempre é bom conferir os campos enviados para a importação).
Ao clicar em Importar, será primeiro carregado as informações de cabeçalho da importação (primeira linha do arquivo), sendo que se tiver campos especiais como LINPOS, AUTDELETA, é possível editar o tipo do campo (Caracter, Numérico, Lógico, Data ou Memo). É possível definir também, se o campo chave da tabela, será importado como o arquivo, ou se irá usar a sequência atual do Protheus (SXE/SXF). E se for enviado o campo filial para o layout, é possível definir se será usado a filial contida no arquivo de layout, ou se será usado a filial atual no Protheus (FWxFilial).
Após a importação, se aconteceu algum erro, é mostrado uma tela de erro, contendo o número da linha e o nome do arquivo de log (gravado no diretório temporário do sistema operacional).
Se for clicado no Vis.Erro, é aberto o arquivo de log.
Se quiserem fazer o download do código fonte e dos exemplos, basta acessar meu GitHub, depois clicar em Projetos > Carga Dados Genérico.
Obs.: Para dados numéricos com casas decimais, o separador deve ser ‘.’. Por exemplo 5.20;
Obs. 2: Para dados do tipo Data, utilize o padrão YYYYMMDD ou DD/MM/YYYY.
Obs. 3: No final das linhas, não deve ter o caracter de separação (como por exemplo, o ‘;’).
Caso queira fazer o download do .prw, clique aqui.
Vídeo tutorial de como usar:
Abraços e até a próxima.
Obrigado por compartilhar. Muito útil isso, vai ajudar bastante gente em migrações… tornando-as mais simples, rápidas e seguras!
Muito bom Daniel!
Novamente obrigado!
Leonardo
Boa tarde Leonardo, tudo bem?
Que isso, eu que agradeço.
Um grande abraço.
Boa tarde Atilio.
Compilei o fonte para avaliar , mas me deparei com um erro na importação dos dados. segue:
THREAD ERROR ([268], andre.couto, SPON4783) 14/12/2015 15:19:08
variable does not exist NMODULO on FCONFIRM(ZCARGAGEN.PRW) 27/11/2015 22:37:20 line : 195
[TOTVS build: 7.00.131227A-20150911 NG]
Called from FCONFIRM(ZCARGAGEN.PRW) 27/11/2015 22:37:20 line : 195
Called from {||fConfirm(1)}(ZCARGAGEN.PRW) 27/11/2015 22:37:20
Called from { || FWSetShowKeys( .F. ), Eval( bAction, @lEnd ),lEnd := .t. , FWSetShowKeys( .T. ), oDlgModal:Deactivate() }(MSPROCES.PRW) 15/05/2015 11:54:38
Boa noite André, tudo bem?
Você executou diretamente no início do smartclient, ou entrou pelo fórmulas acessando algum menu?
A variável nModulo é uma variável padrão do Protheus que é criada quando o usuário loga em algum módulo, como por exemplo, ao abrir o SIGAMDI, e depois entrar no Estoque / Custos, a variável nModulo será igual a 4.
Fico no aguardo.
Abraços.
Obrigado pelo retorno. Estava utilizando direto pelo IDE.
Agora deu certo.
Você e fera!!! Ótimo Programa
Boa noite André.
Eu que agradeço jovem.
Um grande abraço.
Cara Muito Show a ferramenta, Parabéns! (Vou testar)
Boa noite Sandro.
Muito obrigado.
Um grande abraço.
Ótima essa rotina, mesmo sendo antiga ainda é muito útil.
Queria sugerir melhorias como novos cadastro e melhorar performance como a mudança da Processa pra MsnewProcess que é mais rápida.
Boa noite Atila, tudo bem?
Primeiramente obrigado pelo interesse.
Caso queira adaptar e depois me enviar, eu reviso e coloco no site XD.
Um grande abraço.
Cara, a rotina funciona perfeitamente, parabéns de verdade!
Muito útil, valeu!!!
Ahooo Zézinho.
Muito obrigado jovem.
Abraços.
Parabéns pela Rotina, está me ajudando bastante. troquei alguns execautos como por exemplo movimentos internos. mas fiquei com uma duvida. essa sua rotina dá para adaptar para cadastros modelo2?
Boa noite Decilio tudo bem?
Rapaz, acho que dá para adaptar para Modelos 2 (1 tabela só, ex.: Pedido de Compras) e para Modelos 3 (2 tabelas, ex.: Pedidos de Venda), porém acho que vai dar um pouco de trabalho na adaptação, pois a rotina foi inteira desenvolvida pensando em tabelas de cadastro.
Caso queira, eu montei uma rotina para importação de poder de terceiros, e nela eu importo cadastros com 2 tabelas (as Modelo 3). Segue o link:
https://terminaldeinformacao.com/2016/11/08/rotina-de-importacao-da-sb6-em-advpl/
Um grande Abraço.
Parabéns Dan pela iniciativa de criar videos fica bem mais claro e fácil o entendimento. Abs.
Obrigado Rone.
Para os projetos maiores pretendo sempre criar para ajudar no entendimento.
Um grande abraço.
Desculpa a ignorância, mas como faço para utilizar essa rotina? sou novo com o protheus. Obrigado.
Bom dia, tudo bem?
Você precisa ter um arquivo csv ou txt com os dados, e depois rodar a importação, similar ao que é mostrado no vídeo.
Abraços.
Olá, primeiramente parabéns pelo trabalho, ajuda muito quem esta começando com o ADVPL e Protheus!!
Ao fazer as importações dos arquivos (04_se1_teste, 05_se2_teste) .csv, os mesmos estão dando esse retorno.
Tipo: 05
Usuí¡rio: Administrador
Ambiente: —
Data: 16/10/2020
Hora: 16:32:16
—-
HELP: E2_NATUREZ
Código da natureza. Utilizado para identificar a procedência dos títulos, permitindo a consolidação por este ítem e o controle orçamentário.
Tabela SE2 16/10/2020 16:32:18
No. Titulo – E2_NUM := CP0000001
Tipo – E2_TIPO := PA
Natureza – E2_NATUREZ := N000000TST < — Invalido Fornecedor – E2_FORNECE := 000001 Loja – E2_LOJA := 01 DT Emissao – E2_EMISSAO := 22/11/2015 Vencimento – E2_VENCTO := 26/11/2015 Vencto Real – E2_VENCREA := 26/11/2015 Vlr.Titulo – E2_VALOR := 100 Vencto Orig – E2_VENCORI := 26/11/2015 Vlr R$ – E2_VLCRUZ := 100 ——————————————————————————–
Bom dia jovem, tudo bem?
Verifique que ele esta acusando Inválido no campo E2_NATUREZ, isso pode ser:
1. Natureza não existe no Protheus
2. Validação de usuário no campo E2_NATUREZ feita com alguma User Function customizada
3. Gatilhos que zeram ou alteram outros campos envolvendo o E2_NATUREZ
O que eu recomendo fazer é, tentar criar manualmente esse título no Protheus, com o mesmo código, natureza, emissão, vencimentos, valor, etc.
Boa tarde,
Existe limite de colunas? estou usando um outro fonte seu (zQry2Excel) para gerar o CSV, utilizei um SELECT * FROM SF4, por exemplo. no arquivo gerado constam 295 colunas, porém neste fonte zCargaGen são apesentadas apenas 102 colunas, e o último campo é cortado. Poderia me ajudar?
Boa tarde Alan.
Não tem limite, acontece que, na função que você deu um SELECT *, ele está buscando todas as colunas da tabela.
Já no Carga Dados Genérico, ele gera um CSV dos campos que são obrigatórios, mas muitos desses campos tem preenchimento via gatilho ou via funções internas.
O ideal é você abrir o Protheus, clicar em incluir e ver quais campos teve que informar, ai esses campos você colocaria no seu csv.
Bom dia Dan,
Desde que postei essa dúvida, fiquei pesquisando e descobri que a função FT_FREADLN() não transporta string maior que 1MB, devido a uma limitação de memória da função, o transporte de variáveis só ocorre até o 1.024º caractere. Existe esta documentação falando sobre: https://centraldeatendimento.totvs.com/hc/pt-br/articles/360036519113-MP-FRAME-FT-FREADLN-N%C3%83O-TRANSPORTA-STRING-MAIOR-QUE-1-MB
Agora estou quebrando um pouco a cabeça para corrigir, já consegui ajustar para levar o cabeçalho corretamente, mas nas linhas está dando problema ainda.
Att.:
Bom dia Alan.
No caso, você pode tentar adaptar a rotina, pois as FT* são muito antigas.
Tente usar a classe mais nova – FWFileReader.
Aqui tem um link de exemplo: https://terminaldeinformacao.com/knowledgebase/fwfilereader/
Bom dia!!
Funciona para alteraçao dos dados do cadastro?
Bom dia Caroline.
Você teria que mudar na linha do ExecAuto, ao invés de 3 (inclusão), você precisaria passar 4 (alteração).