Forum
See question

Campos a copiar , ao emitir FT a partir de BO   

14 views
0
♥ 0

Boa tarde

Quando crio nova fatura a partir de Dossier Interno: PROPOSTA , existem campos que não são copiados

Exemplo: pretendo que o campo BO.OBRANOME seja copiado para a nova fatura , campo FT.ENCOMENDA

Como garantir a copia entre o campo BO para FT ?

Faça login para poder traduzir
PHC
Marked as spam
Criado há 21 horas e 29 minutos nunoleito
n
nunoleito Iniciante
2 answers
0
Private answer

A tabela FT não tem o campo "ft.bostamp"

Faça login para poder traduzir
Marked as spam
Criado há 21 horas e 19 minutos nunoleito
n
nunoleito Iniciante
    0
    Private answer



    Boa tarde,

    Na emissão de faturas a partir de Dossiers Internos (BO → FT) o Cegid PHC não permite configurar, de forma standard, um “mapa de campos” de cabeçalho BO → FT como acontece com algumas opções de cópia entre dossiers. Para garantir que o valor de BO.OBRANOME é copiado para FT.ENCOMENDA, terá de recorrer a desenvolvimento (regra/valor por defeito/evento), dependendo se está em CS (Desktop) ou Web.

    Segue uma abordagem típica em Cegid PHC CS (Desktop Enterprise/Advanced); em Web a lógica é equivalente mas implementada em .NET (Framework):

    1. Criar um valor por defeito para FT.ENCOMENDA
    - Em Tabelas → Campos de utilizador / Valores por defeito (ou no configurador equivalente), crie/edite um valor por defeito para o campo FT.ENCOMENDA.
    - Configure para ser executado:
    - No momento da gravação da FT (e, se necessário, também na introdução),
    - Apenas quando a FT é criada por cópia de BO (pode validar pela existência de BO.BOSTAMP/FT.BOSTAMP ou outro campo de ligação).

    2. Exemplo de lógica (valor por defeito em FT.ENCOMENDA – CS)
    A ideia é:
    - Verificar se a fatura tem origem num dossier (BOSTAMP/BISTAMP).
    - Ler o cabeçalho BO correspondente.
    - Copiar BO.OBRANOME para FT.ENCOMENDA.

    Exemplo genérico (a adaptar à sua realidade):

    local m.cEncomenda
    m.cEncomenda = ft.encomenda

    * Só atua se a encomenda estiver vazia
    if empty(m.cEncomenda) .and. !empty(ft.bostamp)
    select bo
    seek ft.bostamp
    if found()
    m.cEncomenda = bo.obranome
    endif
    endif

    return m.cEncomenda

    Pontos a ajustar:
    - Confirmar qual o campo de ligação entre FT e BO na sua base (ft.bostamp, ft.bistamp, etc.).
    - Se quiser que a FT possa alterar manualmente o campo depois, mantenha o valor por defeito apenas “na gravação” e não “na alteração”.

    3. Em Cegid PHC Web
    - O princípio é o mesmo, mas implementado via Framework (evento/valor por defeito em BOForm/FTForm):
    - Obter o BOSTAMP/BISTAMP da fatura,
    - Fazer uma query à tabela BO para ler OBRANOME,
    - Atribuir o valor ao campo ENCOMENDA da FT antes da gravação.

    Exemplo conceptual (a adaptar ao seu ambiente Web):

    Dim bostamp As String = mainformdataset.Tables(0).Rows(0).Item("bostamp")
    If bostamp <> "" Then
    Dim dt As DataTable = cdata.GetDataTable("SELECT obranome FROM bo WHERE bostamp = '" & bostamp & "'")
    If dt.Rows.Count > 0 Then
    mainformdataset.Tables(0).Rows(0).Item("encomenda") = dt.Rows(0).Item("obranome")
    End If
    End If

    4. Notas importantes
    - Não existe, neste momento, um mecanismo standard de “tabela de mapeamento” de campos de cabeçalho BO → FT; é necessário este tipo de lógica personalizada.
    - Se tiver outros campos de BO que queira copiar para a FT, pode aproveitar a mesma regra/valor por defeito e preencher vários campos em simultâneo.

    Se indicar se está a trabalhar em Cegid PHC CS (Desktop) ou Web, posso detalhar o código mais próximo do seu cenário concreto.

    Esta resposta foi gerada pelo Cegid Pulse, com base na base na informação disponível em histórico.

    Ajude-nos a melhorar esta funcionalidade:

    • Se a resposta corresponde à sua questão, assinale-a com "Mark as best answer",

    • Se a resposta estiver incorreta, dê-lhe um voto negativo e aguarde a resposta da comunidade.


    Faça login para poder traduzir
    Marked as spam
    Criado há 21 horas e 28 minutos cegidpulse
    cegidpulse Cegid Pulse Most Valuable Professional