Ir para conteúdo
  • Cadastre-se

teocomp

Membros
  • Total de ítens

    23
  • Registro em

  • Última visita

1 Seguidor

Últimos Visitantes

1.074 visualizações

teocomp's Achievements

Explorer

Explorer (4/14)

  • First Post
  • Collaborator Rare
  • Conversation Starter
  • Week One Done
  • One Month Later

Recent Badges

0

Reputação

  1. Boa tarde! Como proceder para que aparece corretamente o valor das retenções federais para NFSe? Estamos preenchendo valor de IR e Valor de CSLL e esses valores serão retidos e tem que constar em Retenções Federais no DANFSe, como proceder neste caso? Desde já agredeço
  2. Bom dia Elton! Nós usamos o Mormot Framework, Na verdade, estamos trabalhando em transformar o sistema legado em um cliente, de um servidor Mormot, que roda MicroServiços SOA, (usando REST e JSON). A conexão é feita pelo Mormot, que busca os dados no banco de dados e devolve em JSON puro. O Mormot possui um método que converte o JSON puro em formato DataSet (Método JSONtoDataset) e o resultado desse processamento colocamos em componentes IBXQuery e UniQuery. Acho que ai que esta o grande problema, como vc disse, objetos e referencia! Na Query em si, não existe "conexão", deixamos elas inclusive Active := False e com a propriedade DataBase := nil, Mas os dados são populados corretamente nelas, porém com essa questão da referencia, não conseguimos acessar as propriedades pelos nomes dos campos (TFields) e isso é usado no programa todo milhares de vezes. Na verdade estamos tentando achar uma forma de não passar milhares de vezes no código do programa legado pra tornar viável essa transformação da aplicação. Será que se a gente processar os dados resultado do Mormot e preencher os datasets manualmente, (Query), sem usar a função JSOntoDataSet do Mormot mas fazendo manualmente mesmo, por laços e preenchando campo a campo.. os DataSets (Query) precisam estar ativos (vai exigir conexão?) Seria esse o caminho? Abraço e obrigado pela ajuda Rodrigo
  3. Ok, Realmente nesse caso a conexão não foi feita, e nem será feita... Nós usaremos o DataSet apenas como um "containner", ele não está diretamente conectado ao banco nesse caso... Ainda não conseguimos sucesso, porém acredito que a grande questão está onde vc nos explicou Elton, que a atribuição a Query inicia uma nova instancia... Aqui UniQuery1 := TransformeemDataset('select id_empresa, nome_empresa from empresas'); Nesse caso, nossa Uniquery1 não funciona da forma que desejamos , pois o sistema passa ela por referencia em diversos métodos, o sistema usa herança tbm, enfim, o fato de criar essa nova instancia da Query tem sido o grande problema .. Vc tem algum material avançado de Datasets, ou mesmo de IBXQuery ou UniQuery para entendermos melhor essa questão da nova instancia, se existe alguma forma de usar o mesmo "objeto" sem criar essa nova referencia? A função pra automatizar a atribuição dos campos ali, tbm não deu certo ainda, mas acreditamos que se o resultado de TransformeEmDataset() ficasse na Uniquery1 que esta em tempo de design (arrastada) no form, ou no datamodule, nossos problemas seriam sanados Onde consigo mais informações sobre isso? Att Rodrigo
  4. Ao alterar pra TField(FindComponent(Nome_Field) não compila, ele diz : Left side cannot be assigned to O problema esta no lado direito da atribuição? Isso aqui então: TUniQuery(FindComponent(Nome_Query)).FieldByName(Aux_Nome[i]) Porque, debugando, essa parte acima vem sempre vazio, retorna um TField vazio...
  5. Ola pessoal, Criamos o seguinte: procedure Data.Mapear_Fields(Nome_Query: String; Tipo_Query: Integer); //Tipo_Query 1 = IBX 2 = Unidac var Aux_Nome: TStrings; i: Integer; Nome_Field: String; begin Aux_Nome := TStringList.Create; if Tipo_Query = 2 then TUniQuery(FindComponent(Nome_Query)).GetFieldNames(Aux_Nome) else TIBQuery(FindComponent(Nome_Query)).GetFieldNames(Aux_Nome); for i := 0 to Aux_Nome.Count-1 do begin Nome_Field := Nome_Query + Trim(Aux_Nome[i]); showmessage(TUniQuery(FindComponent(Nome_Query)).FieldByName(Aux_Nome[i]).AsString); if Tipo_Query = 2 then TField(Nome_Field) := TUniQuery(FindComponent(Nome_Query)).FieldByName(Aux_Nome[i]) else TField(Nome_Field) := TIBQuery(FindComponent(Nome_Query)).FieldByName(Aux_Nome[i]); end; Aux_Nome.Free; end; Compila sem problemas, porém, o resultado nos fields vem vazio.. debugando.. a atribuição a TField(Nome_Field) funciona ok, GetFieldNames tbm funciona ok, a TString é preenchida com a lista de campos corretamente O problema está na atribuição onde tem o FieldByName (Ou Fields[x], tbm testamos e dá o mesmo problema) Ao Chamar a Query direto sem o findcomponent ali dá certo, mas sem o findcomponent ( somente com o nome da variavel ) não dá, e recebemos um AV Resumindo, o problema está em TUniQuery(Findcomponent(Nome_Query)) TUniQuery(Nome_Query) não funciona e o código acima compila mas os campos vem vazios.. Em aux_nome esta tudo correto, e se eu trocar por MinhaQuery.FieldByName(Aux_Nome) tudo ok tbm... Porém, como queremos uma função genérica, isso não é possível... (Desconsiderem o showmessage do código !!! ) Acho que estamos indo pro caminho errado talvez.. talvez uma nova referencia ao DataSet esta sendo alimentada em branco, etc... Qual seria o caminho correto? Como proceder? Desde já agradecemos Rodrigo
  6. Boa tarde pessoal, Alguém pode ajudar? Isso aqui não está compilando, diz que o lado esquerdo não pode ser atribuido: procedure TData.Mapear_Fields(Nome_Query: String; Tipo_Query: Integer); var Aux_Nome: TStrings; i: Integer; begin Aux_Nome := TstringList.Create; TDataSet(Nome_Query).GetFieldNames(Aux_Nome); for i := 0 to Aux_Nome.Count-1 do begin TField((Nome_Query + Trim(Aux_Nome[i]))) := TDataSet(Nome_Query).FieldByName(Aux_Nome[i]); // <<-- Essa linha não compila end; Aux_Nome.Free; end; Alguma luz?
  7. Perfeito eu estava estudando alguma forma Descobri o método GetFieldNames dos TDataSets que retorna uma StringList com o nome dos campos Mas to travado até ai.. Vou continuar os estudos pra tentar elaborar um método que automatize o UniQuery1ID_EMPRESA := UniQuery1.Fields[0]; com um laço For por exemplo, algo do tipo.. recebendo o nome da Query , pegando os campos e tentando fazer essa atribuição.. só não sei como ainda, mas vou estudar Abraço Elton e obrigado pela grande ajuda! Boa viagem! Rodrigo
  8. Obrigado Elton, realmente funciona dessa forma! Porém, uma instrução dessa para cada campo adicionado seria um trabalho enorme... Você disse que existem outras formas... Quais? Existe alguma forma de eu criar um método/função para automatizar esse processo? Como seria? Usando RTTi? Desde já agradeço! Rodrigo
  9. Boa tarde a todos! Pessoal, preciso de um auxílio, Vou explicar a situação: Possuo uma Query (Exemplificando, pode ser do tipo TUniQuery) que possui os TFields adicionados nela. Ela foi "arrastada" para um DataModule, e os TFields adicionados em tempo de design. Um exemplo dessa situação: select id_empresa, nome_empresa from empresas Na UniQuery1 (TUniQuery) tenho dois Fields, ID_EMPRESA e NOME_EMPRESA adicionados, ou seja, UniQuery1ID_EMPRESA Integer e UniQuery1NOME_EMPRESA String Ok, até ai tudo tranquilo: Pra preencher ela, ao invés de usar o Open tradicional por um SQL informado, usamos classes e ORM, objetos e Listas e RTTI de um produto comercial, que transforma os dados colhidos do BD para o formato herdado TDataset Mais ou menos assim: UniQuery1 := TransformeemDataset('select id_empresa, nome_empresa from empresas'); (Simplificando a forma que utilizamos esse produto comercial fechado que não temos acesso ao código fonte para alterar) Esse método traz corretamente os dados para a UniQuery1. Ao acessar UniQuery1.Fields[0].AsInteger em tenho o código, UniQuery1.Fields[2].AsString eu tenho o nome da empresa tbm. Ele também trás propriedades corretas, Como RecNo, RecordCount, etc.. tudo certinho... se eu tiver 4 registros nessa tabela do BD ele traz RecordCount = 4 Também consigo recuperar os dados, usando FieldByName. exemplo: UniQuery1.FieldByName('ID_EMPRESA').AsInteger também retorna corretamente. Porém, ao acessar diretamente o TField da seguinte forma: UniQuery1ID_EMPRESA.AsInteger ou UniQuery1NOME_EMPRESA.AsString, não recebo valor algum. Ai vem a questão... a utilização desse produto comercial fechado é para um projeto legado grande, e a intenção é ter o mínimo possível de trabalho na migração para este produto comercial.. porém, no código fonte do programa legado, 90% das referencias estão da forma direta, UniQuery1ID_EMPRESA.AsInteger... milhares de referencias no código .... E é justo essa forma de chamada que não está funcional Gostaria de pedir ajuda dos mestres, se existe alguma forma de utilizar algum mapeamento de nomes dos TFields, Ou RTTi, ou alguma coisa que torne possível eu trazer para os nomes dos campos nas Querys os valores que já estão nela, de uma forma viável .. Basicamente, os valores estão na Query porém, precisamos acessar de forma direta o TField e isso não estamos conseguindo.. Existe alguma forma de mapear os nomes aos valores, usar ponteiros, Rtti ou coisa do tipo? Alguém pode nos ajudar? Att Rodrigo
  10. Mais informações a respeito desse problema Após usar o método LoadFromFile, em qualquer XML ( Anexei um a esta mensagem ), os seguintes valores estão nas tags: NFE.NotasFiscais.Items[0].NFe.Cobr.Fat ('160235', 557,94, 0, 557,94) NFE.NotasFiscais.Items[0].NFe.Pag (0) NFE.NotasFiscais.Items[0].NFe.Cobr.Dup () A tag Cobr.Dup vem vazia e acredito que outras tags tbm podem vir vazias nessa situação! 35180946919791000159550000000230151005985357-nfe.xml
  11. Pessoal, abri um tópico referente a busca de informações da tag Cobr.Dup após o loadfromfile, e acredito que o problema que enfrento é o mesmo desse tópico aqui! alguém tbm está passando por isso? Já tentei reinstalar conforme citado e o problema persiste
  12. teocomp

    Importar XML NFe Tag Cobr.Dup

    Boa tarde, Na versão 4 da NFe ao importar o XML pelo ACBr, qual a forma correta de acessar a tag Cobr.Dup, pois não estamos conseguindo acessar os valores desta tag após mudarmos para a versão 4.0, nem mesmo pelo demo do ACBr NodePai := trvwNFe.Items.AddChild(Nota, 'Cobr'); Node := trvwNFe.Items.AddChild(NodePai, 'Fat'); trvwNFe.Items.AddChild(Node, 'nFat=' + Cobr.Fat.nFat); trvwNFe.Items.AddChild(Node, 'vOrig=' + FloatToStr(Cobr.Fat.vOrig)); trvwNFe.Items.AddChild(Node, 'vDesc=' + FloatToStr(Cobr.Fat.vDesc)); trvwNFe.Items.AddChild(Node, 'vLiq=' + FloatToStr(Cobr.Fat.vLiq)); for I := 0 to cobr.dup.Count - 1 do begin Node := trvwNFe.Items.AddChild(NodePai, 'Duplicata' + IntToStrZero(I + 1, 3)); with Cobr.Dup.Items[I] do begin trvwNFe.Items.AddChild(Node, 'nDup=' + nDup); trvwNFe.Items.AddChild(Node, 'dVenc=' + DateToStr(dVenc)); trvwNFe.Items.AddChild(Node, 'vDup=' + FloatToStr(vDup)); end; end; Esse código tbm não traz os valores da Tag (código retirado do demo) A forma de pegar esses valores mudou? Como proceder? Abraços Rodrigo
  13. Boa tarde! Existe a possibilidade de um mesmo projeto Delphi ( iniciado no Delphi ) seja compilado pelo Lazarus ( unico código fonte ) , recebendo atualizações no fonte dos dois lados ( Exemplo. Um PC com Delphi Berlin, mandando alterações no mesmo fonte que uma outra estação com Lazarus ) ??? Isso é trabalhoso de conseguir? Att Rodrigo
  14. Também estamos enfrentando o mesmo problema na data de hoje, após realizarmos o SVN Update Realizamos sempre as atualizações do ACBR, uma vez por mês, e dessa vez, não estamos conseguindo compilar o ACBR pelo instalador Segue o Log log_Delphi_10.1_Berlin.txt
  15. Boa tarde Daniel, Vamos atuar em SP, SAT e NFCe acredito, e talvez ECF Estamos com muita dúvida sobre a questão do TEF, se é necessário homologar, etc... Outra dúvida nossa é que nossos companheiros de software (concorrentes) implementam diversas regras de negócios e facilidades em seu sistema, que provavelmente tbm precisaremos ter pra não ficar pra trás.. Um software PDV de qualidade deve ter quais características/recursos em sua opinião? Desde já agradeço Att Rodrigo
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...