Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Expand
titleMOCG009+QG Duplica Itens Entre Empresas - Copia Códigos de Itens de uma empresa para outra
Panel
panelIconId1f321
panelIcon:thermometer:
panelIconText🌡️
bgColor#FFEBE6

Situação:

ITEM COMEÇADO COM 60 NÃO INTEGRA DO SAPE E PRECISA SER CADASTRADO NO TOTVS DIRETO.

Se o código do item começar com 47, na integração, já configura com item faturável no TOTVS

 

MDM (Código diferente do SAPE) - > SAPE          - > TOTVS

10404627                                        - > 39102898 - > 39102898

Existem dois SAPE, o SAPE Governo, integra com a Moderna e o outro SAPE integra com a Santillana.

 

SANTIBR-64116 CADASTRO NA BASE DE SOLUÇÕES

Caros, bom dia! Solicito cadastro na base de soluções do item da planilha em anexo. Origem: Moderna. Destino Soluções. OBS: Material trata-se de uma caixa de Prefeitura.

 

SANTIBR-59278MOCG009 + qg DuplicaItensEntreEmpresas.p - Copia Códigos de Itens de uma empresa para outra - Duplicar Códigos

Tip

Possíveis Soluções:

Solicitar as informações abaixo referente aos itens a serem copiados:

  • Empresa de origem

  • Empresa de destino

  • Código dos Itens

  • Família Comercial que será usado na empresa destino

 

--- Preparar arquivo Excel

Emp Origem

Emp Destino

cod item

Descr Item

Familia Comercial

 

 

Salvar em CSV (MS-DOS) (*.csv) com o nome abaixo para facilitar futuras consultas DuplItemSantibr59278.csv

Obs.: Descrição não precisa, mas o campo tem que estar, porque o qg precisa.

 

Acessar a empresa de origem, abrir o editor e chamar o qg no caminho RW:\ESP2\qgp\DuplicaItensEntreEmpresas.p.

Code Block
/* Programa deve ser excutado na empresa origem  */ 
/* Conectar banco mgcad da empresa destino    */ 

IF NOT CONNECTED ("mgcad1") THEN DO:
FIND FIRST bco_empres WHERE
               bco_empres.cod_empresa   = '8' AND    /* empresa destino */
               bco_empres.cod_bco_logic = "mgcad"  NO-LOCK NO-ERROR.
IF AVAIL bco_empres THEN
      CONNECT -db VALUE(bco_empres.cod_bco_fisic) -ld mgcad1 VALUE(bco_empres.cod_param_conex).
END.

Code Block
DEF TEMP-TABLE tt-item
    FIELD ep-origem         AS INT
    FIELD ep-destino        AS INT
    FIELD it-codigo         LIKE mgcad1.ITEM.it-codigo
    FIELD des-item          LIKE mgcad1.ITEM.desc-item
    FIELD fm-codigo         LIKE mgcad1.ITEM.fm-codigo.

INPUT FROM I:\Leopoldo\Duplica_Item_SANTIBR-65026.csv.
REPEAT:
    CREATE tt-item.
    IMPORT DELIMITER ";" tt-item.
END.
FIND FIRST tt-item WHERE tt-item.it-codigo = "" no-lock NO-ERROR.
IF AVAIL tt-item THEN DELETE tt-item.

DEF BUFFER bf-it-sape-int FOR  modlog.mocd-it-sape-int.

FOR EACH tt-item:

   /* verifica se item ja existe na empresa destino */
   FIND mgcad1.ITEM WHERE mgcad1.ITEM.it-codigo = tt-item.it-codigo NO-LOCK NO-ERROR.
   IF AVAIL mgcad1.ITEM  THEN  DO:
      MESSAGE tt-item.it-codigo + " Item ja existe na empresa destino"
         VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.
      UNDO, RETRY.
   END.

   /* Consulta cadastro para gerar registro de integração */
   FIND mgcad.ITEM WHERE mgcad.ITEM.it-codigo = tt-item.it-codigo NO-LOCK NO-ERROR.
   IF NOT AVAIL mgcad.ITEM  THEN DO:
      MESSAGE "Nao localizado na empresa origem o item " + tt-item.it-codigo
          VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.
      UNDO, RETRY.
   END.

  FIND LAST modlog.mocd-it-sape-int WHERE modlog.mocd-it-sape-int.acao = "I" AND
                                          modlog.mocd-it-sape-int.empresa = string(tt-item.ep-origem) AND
                                          modlog.mocd-it-sape-int.campo1 = tt-item.it-codigo NO-LOCK NO-ERROR.
  IF AVAIL modlog.mocd-it-sape-int THEN DO:
     CREATE bf-it-sape-int.
     BUFFER-COPY modlog.mocd-it-sape-int EXCEPT empresa dt-recebido campo8 ident hr-recebido dt-processado hr-processado l-processado TO bf-it-sape-int.
     ASSIGN bf-it-sape-int.dt-recebido = TODAY
            bf-it-sape-int.hr-recebido = STRING(TIME, "hh:MM")
            bf-it-sape-int.l-processado = NO
            bf-it-sape-int.empresa = string(tt-item.ep-destino)
            bf-it-sape-int.campo5 = tt-item.fm-codigo.

       DISP bf-it-sape-int.campo1 FORMAT "x(25)".

   END.
   ELSE DO:

      /* criando integração do item  */
      FIND mgcad.ITEM WHERE mgcad.ITEM.it-codigo = tt-item.it-codigo NO-LOCK NO-ERROR.
      FIND FIRST moe-item WHERE moe-item.it-codigo = tt-item.it-codigo   NO-LOCK NO-ERROR.
      FIND FIRST item-lanc WHERE item-lanc.it-codigo = tt-item.it-codigo NO-LOCK NO-ERROR.
      FIND FIRST item-agrupa WHERE item-agrupa.it-codigo = tt-item.it-codigo NO-LOCK NO-ERROR.

      CREATE mocd-it-sape-int.
      ASSIGN mocd-it-sape-int.nome   = "LIVRO"
             mocd-it-sape-int.acao   = "I"

             mocd-it-sape-int.campo1 = mgcad.ITEM.it-codigo
             mocd-it-sape-int.campo2 = mgcad.ITEM.desc-item
             mocd-it-sape-int.campo4 = mgcad.ITEM.fm-codigo
             mocd-it-sape-int.campo9 = IF AVAIL item-agrupa THEN item-agrupa.item-volume ELSE ""

             mocd-it-sape-int.campo14 = IF AVAIL moe-item THEN string(moe-item.cod-mdm) ELSE ""
             mocd-it-sape-int.campo17 = IF AVAIL moe-item THEN moe-item.cod-tipo-livro ELSE ""
             mocd-it-sape-int.campo6  = IF AVAIL moe-item THEN string(moe-item.editoria) ELSE ""

             mocd-it-sape-int.campo7  = IF AVAIL item-lanc THEN STRING(YEAR(item-lan.dt-prev-lanc),"9999")  + "-" +
                                                                STRING(MONTH(item-lanc.dt-prev-lanc),"99") + "-" +
                                                                STRING(DAY(item-lanc.dt-prev-lanc),"99")    ELSE ""
             mocd-it-sape-int.campo10 = IF AVAIL item-lanc THEN STRING(YEAR(item-lan.dt-lim-venda),"9999")  + "-" +
                                                                STRING(MONTH(item-lanc.dt-lim-venda),"99") + "-" +
                                                                STRING(DAY(item-lanc.dt-lim-venda),"99")    ELSE ""
             mocd-it-sape-int.campo11 = IF AVAIL item-lanc THEN STRING(YEAR(item-lan.dt-distrato),"9999")  + "-" +
                                                                STRING(MONTH(item-lanc.dt-distrato),"99") + "-" +
                                                                STRING(DAY(item-lanc.dt-distrato),"99")    ELSE ""
             mocd-it-sape-int.campo12 = IF AVAIL item-lanc THEN item-lanc.it-titulo ELSE ""
             mocd-it-sape-int.campo13 = IF AVAIL item-lanc THEN item-lanc.situ-projeto ELSE ""

             mocd-it-sape-int.dt-recebido = TODAY
             mocd-it-sape-int.hr-recebido = STRING(TIME, "hh:MM")
             mocd-it-sape-int.l-processado = NO
             mocd-it-sape-int.empresa = string(tt-item.ep-destino)
             mocd-it-sape-int.campo5 = tt-item.fm-codigo.

   END.

   IF NOT tt-item.it-codigo BEGINS "22" AND NOT tt-item.it-codigo BEGINS "23" THEN DO:

      FIND item-agrupa WHERE item-agrupa.it-codigo = tt-item.it-codigo NO-LOCK NO-ERROR.
      IF NOT AVAIL item-agrupa THEN DO:
         MESSAGE "Não localizado cadastro do volume para o item " tt-item.it-codigo
             VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.
         UNDO, RETRY.
      END.

      /* Criando Integração do volume */
      IF CAN-FIND(FIRST mgcad1.ITEM WHERE mgcad1.ITEM.it-codigo = item-agrupa.item-volume) THEN DO:
         MESSAGE "Volume do item ja cadastrado " + item-agrupa.item-volume
           VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.

      END.
      ELSE DO:

         FIND mgcad.ITEM WHERE mgcad.ITEM.it-codigo = item-agrupa.item-volume NO-LOCK NO-ERROR.
         FIND FIRST moe-item WHERE moe-item.it-codigo = item-agrupa.item-volume NO-LOCK NO-ERROR.
         FIND FIRST item-lanc WHERE item-lanc.it-codigo = item-agrupa.item-volume NO-LOCK NO-ERROR.

         CREATE mocd-it-sape-int.
         ASSIGN mocd-it-sape-int.nome   = "LIVRO"
                mocd-it-sape-int.acao   = "I"
                mocd-it-sape-int.campo1 = mgcad.ITEM.it-codigo
                mocd-it-sape-int.campo2 = mgcad.ITEM.desc-item
                mocd-it-sape-int.campo4 = mgcad.ITEM.fm-codigo
                mocd-it-sape-int.campo9 = item-agrupa.item-volume

                mocd-it-sape-int.campo14 = IF AVAIL moe-item THEN string(moe-item.cod-mdm) ELSE ""
                mocd-it-sape-int.campo17 = IF AVAIL moe-item THEN moe-item.cod-tipo-livro ELSE ""
                mocd-it-sape-int.campo6  = IF AVAIL moe-item THEN string(moe-item.editoria) ELSE ""

                mocd-it-sape-int.campo7  = IF AVAIL item-lanc THEN STRING(YEAR(item-lan.dt-prev-lanc),"9999")  + "-" +
                                                                   STRING(MONTH(item-lanc.dt-prev-lanc),"99") + "-" +
                                                                   STRING(DAY(item-lanc.dt-prev-lanc),"99")    ELSE ""
                mocd-it-sape-int.campo10 = IF AVAIL item-lanc THEN STRING(YEAR(item-lan.dt-lim-venda),"9999")  + "-" +
                                                                   STRING(MONTH(item-lanc.dt-lim-venda),"99") + "-" +
                                                                   STRING(DAY(item-lanc.dt-lim-venda),"99")    ELSE ""
                mocd-it-sape-int.campo11 = IF AVAIL item-lanc THEN STRING(YEAR(item-lan.dt-distrato),"9999")  + "-" +
                                                                   STRING(MONTH(item-lanc.dt-distrato),"99") + "-" +
                                                                   STRING(DAY(item-lanc.dt-distrato),"99")    ELSE ""
                mocd-it-sape-int.campo12 = IF AVAIL item-lanc THEN item-lanc.it-titulo ELSE ""
                mocd-it-sape-int.campo13 = IF AVAIL item-lanc THEN item-lanc.situ-projeto ELSE ""

                mocd-it-sape-int.dt-recebido = TODAY
                mocd-it-sape-int.hr-recebido = STRING(TIME, "hh:MM")
                mocd-it-sape-int.l-processado = NO
                mocd-it-sape-int.empresa = string(tt-item.ep-destino)
                mocd-it-sape-int.campo5 = tt-item.fm-codigo.
      END.
   END.
END.

Verificar se a empresa destino está informada corretamente, que neste caso é a 8 e rodar o qg para conectar os bancos  empresa de origem e destino e rodar a parte do programa que está selecionado a baixo.

  

 

Depois que rodar o programa, comentar o trecho do programa como abaixo

 

 

Descomentar o programa a linha DEF TEMP-TABLE até o final do programe e informar o local onde o arquivo *csv está gavado para que o qg possa acessá-lo, como exemplo abaixo e executar o programa.

 

 

Acessar a empresa de destino e rodar o mocg009 e executar

Deve abrir um arquivo de log informando os itens que foram importados, com a letra I de importados, como abaixo

Letra A é referente a advertência e E de erros

OBS: QG da Cristina Jorge

 Pode rodar o qg G:\Leopoldo\Consulta_Mocd_It_Sape_Int.p para verificar se os itens foram criados na tabela para o mocg009 importar.

 Se o item não copiar de primeira, pode consultar se o item está na tabela , mocd-it-sape-in

 

Code Block
qg-consulta-item-sape-dts.p

FOR EACH mocd-it-sape-int
    WHERE campo1 = '46801074':
    DISP mocd-it-sape-int
        EXCEPT desc-erro log-env-sape
        WITH WIDTH 300 1 COLUMN.
END

dt-recebido > 08/11/2023  // mm/dd/aaaa

/*     WHERE campo1 = '46801074' OR campo1 = '10224720':  */

/* MOCG009 */

Se estiver e estiver com sim no campo l-processado, rodar este qg, para mudar o item para não processado para então rodar o mocg009 novamente. As vezes, tenta importar o item, antes do volume.

Code Block
FOR EACH mocd-it-sape-int WHERE campo1 = "120003585":
l-processado = NO.
END.

 

Rodar o mocg009 novamente

 

Code Block
************************* Consultar da Lista os itens que foram integrados

DEF TEMP-TABLE tt-item
    FIELD itens LIKE item.it-codigo.

INPUT FROM "I:\Leopoldo\item.csv". // Lista de códigos de pedidos e código dos emitentes

REPEAT:
    CREATE tt-item.
    IMPORT DELIMITER ";" tt-item.
END.

INPUT CLOSE.

OUTPUT TO I:\Leopoldo\itens_importados.csv.

PUT UNFORMATTED
               "itens" SKIP.

FOR EACH tt-item WHERE
         tt-item.itens <> "": //Diferente de branco na tt-pedido

    PROCESS EVENTS. // Para não travar a tela quando lê muitos dados

    FIND FIRST ITEM WHERE // find first ler o primeiro item da tabela
               ITEM.it-codigo = tt-item.itens NO-LOCK NO-ERROR.

    IF AVAIL ITEM  THEN DO:
        PUT UNFORMATTED                    
                        ITEM.it-codigo SKIP.    
    END.
END.

OUTPUT CLOSE.

...