Ir para conteúdo
Fórum Script Brasil

Jhonas

Monitores
  • Total de itens

    9.657
  • Registro em

Posts postados por Jhonas

  1. Usando o seu exemplo ficaria assim;

    VAR  condicao, varSinal, S  : STRING;
    begin
       condicao := 'ativo';
    
       If condicao = 'ativo' then
          varSinal := '+'
       else varSinal := '-';
    
       S := 'SELECT A ' + varSinal +' B AS RESULTADO FROM TABELA';
    
       Query1.Active := false;
       Query1.SQL.Clear;
       Query1.SQL.Append(S);
       Query1.Active := true;
    
       showmessage(s);
       showmessage(FLOATTOSTR(Query1RESULTADO.Value));
    end;

    Obs: o mesmo código se aplica ao  ZQuery

    abraço

  2. Se quiser um conselho, sugiro que voce crie um email no BOL ou ZIPMAIL onde o numero de caracteres do seu Email seja maior que 15 e a senha contenha 9 ou mais caracteres (entre  maiusculas, minusculas, numeros e caracteres especiais )

    dessa maneira voce não vai ter o incomodo de ficar recebendo Spans e os programas hackers atuais não conseguem quebrar a senha .

    OBS: Voce não ouviu falar do Golpe dos Boletos ?   Pelo numero do código de barras, voce pode ficar sabendo qual é o banco, o valor e na conta de quem está indo esse valor.

    Será que fui alvo de um golpe de dentro da empresa?

    Se quiser ter certeza, peça para gerar um boleto na propria empresa e depois compare com o que voce esta recebendo por email.

    abraço

     

  3. O único lugar que aparece os valores normais (que foram declarados originalmente como VARCHAR , FLOAT etc.. ) é na barra de STATUS  inferior de apresentação do resultado do SQL.   ESTRANHO ?!?!

    A tabela  tbResult quando é criada tem os  nomes dos campos e tipos relacionados   dessa maneira

    id          int(11)
    num_nc      int(11)
    data        date
    val1        double(11,2)
    val2        double(11,2)
    val3        double(11,2)
    nome_item   varchar(50)
    qde         int(5)
    preco_un    double(11,2)
    idNC        int(5)
    tot_item    double(19,2)
    tot_custos  double(19,2)
    tot_coluna_item    double(19,2)
    custo_item  double(19,2)
    val_med_fin double(19,2)

    voce não precisa mudar nada...  então veja o que voce está fazendo de errado

    Dica: para que não ocorra erros,  carregue os campos dessa tabela ou na Zquery ou num ClientDataSet

    No Select da Query voce coloca: Select * from tbresult ... não tem erro

    abraço

     

  4. experimente:

    minOccurs="0" maxOccurs="unbounded"

    Isso é especificado configurando o atributo maxOccurs do elemento "item" como "ilimitado", o que significa que pode haver tantas ocorrências do elemento "item" quanto o autor desejar.

    ou pode limitar o numero de ocorrencias

    exemplo:

    
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified">
    
    <xs:element name="persons">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="person" maxOccurs="unbounded">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="full_name" type="xs:string"/>
                <xs:element name="child_name" type="xs:string"
                minOccurs="0" maxOccurs="5"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    
    </xs:schema> 

     

  5. A construção do webservice que não está correta.

    o webservice é seu ou de terceiros ... se é seu basta alterar o código para funcionar como voce precisa, mas se não foi voce que o construiu, então  não dá para fazer nada.

    Tem idéia de como criar um webservice ?

    https://www.google.com.br/search?source=hp&ei=nIKnXpa4EcXI5OUP5o6a0Ao&q=criar+webservice+delphi&o que=criar+webservice&gs_lcp=CgZwc3ktYWIQARgEMgIIADICCAAyAggAMgIIADICCAAyAggAMgIIADICCAAyAggAMgQIABAKOgUIABCDAVD0CViOJGCsOGgAcAB4AYABlASIAcojkgEMMC4xMC4wLjEuMy4zmAEAoAEBqgEHZ3dzLXdperABAA&sclient=psy-ab

    , onde um nodo possua limite?

    o limite é voce quem define no código ....

    pode me mostrar como é que voce cria o xml para envio ?

    voce tem um ambiente ( endereço ) para testes ?

     

     

  6. tenho que interfacear esta TBRESULT criando uma novo DataSet (Zquery) que apesar de tabela ser temporaria a ZQuery vai entender?

    Na verdade a tabela é temporaria até que voce execute novamente 

    DROP TABLE IF EXISTS tbresult;
    CREATE TABLE tbresult 

    Trate a tabela como se fosse outra tabela do seu banco de dados. voce pode fazer com ela tudo o que precisar.

    use normalmente os componentes de acesso à tabelas, não vai ter problema nenhum

    abraço

  7. Esse código foi gerado usando o  MYSQL_Front e esse código pode ser colocado dentro de um componente ZQuery ( Zeos ) com acesso a tabela gerada no MYSQL

    -----------------------------------------------------------------

    ok ...no seu caso, se voce conseguiu fazer essa parte...

    DROP TABLE IF EXISTS tbresult;
    CREATE TABLE tbresult 
    SELECT A.id, num_nc, data, val1, val2, val3, 
    nome_item, qde, preco_un, idNC, 
    (qde * preco_un) AS tot_item,
    B.val1 + B.val2 + B.val3 AS  tot_custos
    FROM tboperacao AS A
    JOIN  tbnota AS B ON (B.id = A.idNC);
    
    ALTER TABLE tbresult ADD tot_coluna_item double(19,2) DEFAULT NULL; 
    ALTER TABLE tbresult ADD custo_item double(19,2) DEFAULT NULL; 
    ALTER TABLE tbresult ADD val_med_fin double(19,2) DEFAULT NULL; 

    ... não precisa necessariamente fazer a outra via SQL

    voce pode construir uma procedure no Lazarus e fazer a mesma coisa usando os comandos do Lazarus/Delphi

    Exemplo:

    procedure Calcular_Valores(Sender: TObject);
    Var i, reg, cc, counter : integer;
    begin
    
       TbResult_IB.Active := false;
       CDS_TbResult.Active := false;
       TbResult_IB.Active := true;
       CDS_TbResult.Active := true;
       CDS_TbResult.Refresh;
    
       For i := 1 to CDS_TbResult.RecordCount do
         begin
           ///  outros comandos
    
         end;
    end;

    abraço

  8. O código que eu quero que voce compare é esse

    // ************************************************************************ //
    // The types declared in this file were generated from data read from the
    // WSDL File described below:
    // WSDL     : http://35.247.246.18/wslh/ScriptBrasil.dll/wsdl/IiTeste
    // Version  : 1.0
    // (25/4/2020 11:16:39 - 1.33.2.5)
    // ************************************************************************ //
    
    unit IiTeste1;
    
    interface
    
    uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;
    
    type
    
      // ************************************************************************ //
      // The following types, referred to in the WSDL document are not being represented
      // in this file. They are either aliases[@] of other types represented or were referred
      // to but never[!] declared in the document. The types from the latter category
      // typically map to predefined/known XML or Borland types; however, they could also
      // indicate incorrect WSDL documents that failed to declare or import a schema type.
      // ************************************************************************ //
      // !:string          - "http://www.w3.org/2001/XMLSchema"
      // !:date            - "http://www.w3.org/2001/XMLSchema"
      // !:boolean         - "http://www.w3.org/2001/XMLSchema"
    
      TItem                = class;                 { "urn:iTesteIntf" }
      TPedido              = class;                 { "urn:iTesteIntf" }
      tnew                 = class;                 { "urn:iTesteIntf" }
      TFinal               = class;                 { "urn:iTesteIntf" }
    
    
    
      // ************************************************************************ //
      // Namespace : urn:iTesteIntf
      // ************************************************************************ //
      TItem = class(TRemotable)
      private
        Fnome: WideString;
        Ffilial: WideString;
      published
        property nome: WideString read Fnome write Fnome;
        property filial: WideString read Ffilial write Ffilial;
      end;
    
    
    
      // ************************************************************************ //
      // Namespace : urn:iTesteIntf
      // ************************************************************************ //
      TPedido = class(TRemotable)
      private
        Fcodigo: WideString;
        FData: TXSDate;
        Fitem: TItem;
      public
        destructor Destroy; override;
      published
        property codigo: WideString read Fcodigo write Fcodigo;
        property Data: TXSDate read FData write FData;
        property item: TItem read Fitem write Fitem;
      end;
    
    
    
      // ************************************************************************ //
      // Namespace : urn:iTesteIntf
      // ************************************************************************ //
      tnew = class(TItem)
      private
      published
      end;
    
      Item_array = array of tnew;                   { "urn:iTesteIntf" }
    
    
      // ************************************************************************ //
      // Namespace : urn:iTesteIntf
      // ************************************************************************ //
      TFinal = class(TPedido)
      private
        Fx: Item_array;
      public
        destructor Destroy; override;
      published
        property x: Item_array read Fx write Fx;
      end;
    
    
      // ************************************************************************ //
      // Namespace : urn:iTesteIntf-IiTeste
      // soapAction: urn:iTesteIntf-IiTeste#efetuarPedido
      // transport : http://schemas.xmlsoap.org/soap/http
      // style     : rpc
      // binding   : IiTestebinding
      // service   : IiTesteservice
      // port      : IiTestePort
      // URL       : http://35.247.246.18/wslh/ScriptBrasil.dll/soap/IiTeste
      // ************************************************************************ //
      IiTeste = interface(IInvokable)
      ['{4AAAB37A-05B4-EC30-B6BA-0CB935687988}']
        function  efetuarPedido(const pedido: TFinal): Boolean; stdcall;
      end;
    
    function GetIiTeste(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): IiTeste;
    
    
    implementation
    
    function GetIiTeste(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IiTeste;
    const
      defWSDL = 'http://35.247.246.18/wslh/ScriptBrasil.dll/wsdl/IiTeste';
      defURL  = 'http://35.247.246.18/wslh/ScriptBrasil.dll/soap/IiTeste';
      defSvc  = 'IiTesteservice';
      defPrt  = 'IiTestePort';
    var
      RIO: THTTPRIO;
    begin
      Result := nil;
      if (Addr = '') then
      begin
        if UseWSDL then
          Addr := defWSDL
        else
          Addr := defURL;
      end;
      if HTTPRIO = nil then
        RIO := THTTPRIO.Create(nil)
      else
        RIO := HTTPRIO;
      try
        Result := (RIO as IiTeste);
        if UseWSDL then
        begin
          RIO.WSDLLocation := Addr;
          RIO.Service := defSvc;
          RIO.Port := defPrt;
        end else
          RIO.URL := Addr;
      finally
        if (Result = nil) and (HTTPRIO = nil) then
          RIO.Free;
      end;
    end;
    
    
    destructor TPedido.Destroy;
    begin
      if Assigned(FData) then
        FData.Free;
      if Assigned(Fitem) then
        Fitem.Free;
      inherited Destroy;
    end;
    
    destructor TFinal.Destroy;
    var
      I: Integer;
    begin
      for I := 0 to Length(Fx)-1 do
        if Assigned(Fx[I]) then
          Fx[I].Free;
      SetLength(Fx, 0);
      inherited Destroy;
    end;
    
    initialization
      InvRegistry.RegisterInterface(TypeInfo(IiTeste), 'urn:iTesteIntf-IiTeste', '');
      InvRegistry.RegisterDefaultSOAPAction(TypeInfo(IiTeste), 'urn:iTesteIntf-IiTeste#efetuarPedido');
      RemClassRegistry.RegisterXSClass(TItem, 'urn:iTesteIntf', 'TItem');
      RemClassRegistry.RegisterXSClass(TPedido, 'urn:iTesteIntf', 'TPedido');
      RemClassRegistry.RegisterXSClass(tnew, 'urn:iTesteIntf', 'tnew');
      RemClassRegistry.RegisterXSInfo(TypeInfo(Item_array), 'urn:iTesteIntf', 'Item_array');
      RemClassRegistry.RegisterXSClass(TFinal, 'urn:iTesteIntf', 'TFinal');
    
    end.

    Veja se tem alguma diferença com o código gerado na versão Delphi 10.3

  9. Acho que voce por não ter experiencia, ficaria dificil para voce montar a procedure para calcular os demais campos

    então segue o código completo

    DROP TABLE IF EXISTS tbresult;
    CREATE TABLE tbresult 
    SELECT A.id, num_nc, data, val1, val2, val3, 
    nome_item, qde, preco_un, idNC, 
    (qde * preco_un) AS tot_item,
    B.val1 + B.val2 + B.val3 AS  tot_custos
    FROM tboperacao AS A
    JOIN  tbnota AS B ON (B.id = A.idNC);
    
    ALTER TABLE tbresult ADD tot_coluna_item double(19,2) DEFAULT NULL; 
    ALTER TABLE tbresult ADD custo_item double(19,2) DEFAULT NULL; 
    ALTER TABLE tbresult ADD val_med_fin double(19,2) DEFAULT NULL; 
    
    DROP PROCEDURE IF EXISTS P;
    CREATE PROCEDURE p(increment INT)
    BEGIN
      DECLARE reg INT DEFAULT 0; 
      DECLARE cc INT DEFAULT 1; 
      DECLARE counter INT DEFAULT 1;
      
      SET @nreg = (SELECT MAX(ID) AS nreg FROM tbresult);
      SET reg = @nreg ;
      
      WHILE counter < reg DO
        -- ... do work ...
        
        SET @TOT := (SELECT SUM(QDE*PRECO_UN) FROM tbresult WHERE idnc = cc);
        
        SET @CUSTO := (SELECT (((val1 + val2 + val3) / ((SUM(qde * preco_un ))) * 100  
    *  ((qde * preco_un) / 100))) FROM tbresult WHERE idnc = cc);
    
        UPDATE tbresult
        SET tot_coluna_item = @TOT, custo_item = @CUSTO
        WHERE idNC = cc;
    
        SET @VALMED = (SELECT SUM(QDE*PRECO_UN) + custo_item FROM tbresult WHERE idnc = cc);
        
        UPDATE tbresult
        SET val_med_fin = @VALMED
        WHERE idNC = cc;
       
        SET counter = counter + increment;
        SET cc = cc + 1;
      
      END WHILE;
    END;
    
    
    CALL P(1);

    resultado

    "id"	"num_nc"	"data"	"val1"	"val2"	"val3"	"nome_item"	"qde"	"preco_un"	"idNC"	"tot_item"	"tot_custos"	"tot_coluna_item"	"custo_item"	"val_med_fin"
    1	961	2020-04-01	0.09	0.57	0.00	"ITEM-X1"	1	525.30	       2	525.30	            0.66	3123.35	                    0.11	3123.46
    2	961	2020-04-01	0.09	0.57	0.00	" ITEM-B2 "	15	103.87	       2	1558.05             0.66	3123.35	                    0.11	3123.46
    3	961	2020-04-01	0.09	0.57	0.00	" ITEM-B2 "	10	104.00	       2	1040.00	            0.66	3123.35	                    0.11	3123.46
    4	1	2020-05-17	10.00	1.00	3.00	"ITEM-C3"	41	452.00	       1	18532.00           14.00	20014.00	           12.96	20026.96
    5	1	2020-05-17	10.00	1.00	3.00	"ITEM-C3B"	15	98.80	       1	1482.00	           14.00	20014.00	           12.96	20026.96

    agora o resto é com voce

    abraço

  10. Uma outra duvida que veremos mais a frente (criar outra tabela com este resultado gerado). 

    DROP TABLE IF EXISTS tbresult;
    CREATE TABLE tbresult 
    SELECT A.id, num_nc, data, val1, val2, val3, 
    nome_item, qde, preco_un, idNC, 
    (qde * preco_un) AS tot_item,
    B.val1 + B.val2 + B.val3 AS  tot_custos
    FROM tboperacao AS A
    JOIN  tbnota AS B ON (B.id = A.idNC);
    
    ALTER TABLE tbresult ADD tot_coluna_item double(19,2) DEFAULT NULL; 
    ALTER TABLE tbresult ADD custo_item double(19,2) DEFAULT NULL; 

    RESULTADO:  ( TBRESULT )

    "id"	"num_nc"	"data"	"val1"	"val2"	"val3"	"nome_item"	"qde"	"preco_un"	"idNC"	"tot_item"	"tot_custos"	"tot_coluna_item"	"custo_item"
    1	961	     2020-04-01	0.09	0.57	0.00	  "ITEM-X1 "	 1	   525.30	      2	525.30	         0.66		
    2	961	     2020-04-01	0.09	0.57	0.00	  "ITEM-B2 "	15	   103.87	      2	1558.05	         0.66		
    3	961	     2020-04-01	0.09	0.57	0.00	  "ITEM-B2 "	10         104.00	      2	1040.00	         0.66		
    4	1	     2020-05-17	10.00	1.00	3.00	  "ITEM-C3 "	41	   452.00	      1	18532.00        14.00		
    5	1	     2020-05-17	10.00	1.00	3.00	  "ITEM-C3B"	15	    98.80	      1	1482.00	        14.00		

    Obs: Isso vai criar uma tabela no seu banco de dados com todos os campos que voce precisa e com os resultados parciais.

    os ultimos 2 campos, basta voce criar uma procedure para calcular e pronto.

    Voce só não resolve agora se não quiser ( está mamão com açucar ..rs )

  11. Cheguei aos valores que voce mencionou

    "Id","num_nc","data","val1","val2","val3","Id","nome_item","qde","preco_un","idNC","tot_coluna_item","tot_item","tot_custos","CUSTO_ITEM"
    2,961,2020-04-01,0.09,0.57,0.00,1,"ITEM-X1",1,525.30,2,3123.35,525.30,0.66,0.111002

    Me lembrei que quando voce usa a função SUM dentro de um JOIN , ele agrega os registros, mostrando apenas um registro na saida.

    Para que mostre os demais registros, vai ter que ser diferente

    SELECT * ,  
    (qde * preco_un) AS tot_item,
     B.val1 + B.val2 + B.val3 AS  tot_custos              
    FROM tboperacao AS A
    JOIN  tbnota AS B ON (B.id = A.idNC)

    Resultado

    "Id","nome_item","qde","preco_un","idNC","Id","num_nc","data","val1","val2","val3","tot_item","tot_custos"
    1,"ITEM-X1 ", 1,525.30,2,2,961,2020-04-01, 0.09,0.57,0.00,  525.30, 0.66
    2,"ITEM-B2 ",15,103.87,2,2,961,2020-04-01, 0.09,0.57,0.00, 1558.05, 0.66
    3,"ITEM-B2 ",10,104.00,2,2,961,2020-04-01, 0.09,0.57,0.00, 1040.00, 0.66
    4,"ITEM-C3 ",41,452.00,1,1,  1,2020-05-17,10.00,1.00,3.00,18532.00,14.00
    5,"ITEM-C3B",15, 98.80,1,1,  1,2020-05-17,10.00,1.00,3.00, 1482.00,14.00

    A partir dai, voce monta um código para calcular o  tot_coluna_item e o custo_item

    ou usa campo calculado no dbgrid

     

     

  12. ok... facilitou

    SELECT  A.id, idNC, B.data AS data_FK, B.num_nc AS nota_FK, nome_item, qde, preco_un,  
    (qde * preco_un) AS tot_item,
     B.val1 + B.val2 + B.val3 AS  tot_custos,              
    SUM(qde * preco_un ) AS tot_coluna_item,
    (((B.val1 + B.val2 + B.val3)/IFNULL((SUM(qde * preco_un )),0) * 100  
    *  ((qde * preco_un) / 100)))   AS   CUSTO_ITEM     
    FROM tboperacao AS A
    LEFT OUTER JOIN  tbnota AS B ON (B.id = A.idNC)
    GROUP BY id

    o Resultado foi esse

    "id","idNC","data_FK","nota_FK","nome_item","qde","preco_un","tot_item","tot_custos","tot_coluna_item","CUSTO_ITEM"
    1,2,2020-04-01,2,"ITEM-X1",1,525.30,525.30,,525.30,
    2,2,2020-04-01,2," ITEM-B2 ",15,103.87,1558.05,,1558.05,
    3,2,2020-04-01,2," ITEM-B2 ",10,104.00,1040.00,,1040.00,
    4,1,2020-05-17,1,"ITEM-C3",41,452.00,18532.00,14.00,18532.00,14.000000
    5,1,2020-05-17,1,"ITEM-C3B",15,98.80,1482.00,14.00,1482.00,14.000000

    Obs: Era isso que voce queria ?

    Veja que coloquei no GROUP BY  id

    se voce colocar idNC só vão aparecer 2 registros :

     ITEM-C3  ( 1 ) 

    ITEM-X1 ( 2 )

    os demais registros não aparecem porque estão dentro do grupo e tem o mesmo valor de idNC.

  13. ok... agora quero que voce me passe  suas tabelas com todos os campos e com alguns registros, da maneira como voce passou

                                           TBNOTA  (master)

    id    num_nc             data             val1      val2     val3

    1       0001           2020-05-17    10.0       1.0      3.0
    2       9619           2020-04-01     0.09      0.57    0.0
    3       0003           2020-03-15     7.36      1.13    0.0
    AUTO                   

              

                                              TBOPERACAO   (detalhes)

     id                nome_item_             qde         preco_un         idNC

    1                 ITEM-X1                      1.0            525.3             2
    2                 ITEM-B2                      15.0         103.87           2
    3                 ITEM-B2                      10.0         104.0             2
    4                 ITEM-C3                       41.0        452.0             1
    5                 ITEM-C3B                    15.0           98.8             1
    Auto         

    Coloque com valores para que eu possa montar essas tabelas aqui e testar

  14. ok... vamos ver se chegamos a uma solução

    quantos campos voce tem na tabela Master e na tabela Detalhes ?

    a relação entre as 2 tabelas é pelo campo id ?

    os calculos são efetuados depois da seleção dos registros ?

    quantos campos da tabela são resultado de calculos ( ou seja vão receber um valor de calculo ) ?

    qual a quantidade aproximada de registros, depois do select ?

  15. exemplo de interpolação linear no mysql

    10.2.5. Classe LineString
    
    Uma LineString é uma Curve com interpolação linear entre pontos. 

    Se puderem me dar um vislumbre, sou grato.

    Te passei o link do Manual de Referencia do MYSQL para fazer isso

    ------------------------------------------------------------------------------------

    Se quiser exemplos:

    https://www.google.com.br/search?ei=sAyaXqfjBeXF5OUPk7GygAw&q=linestring+mysql+exemplos&o que=linestring+mysql+exemplos&gs_lcp=CgZwc3ktYWIQAzoECAAQRzoGCAAQFhAeOgUIABDNAjoFCCEQoAE6BAghEBU6BwghEAoQoAFQkAtY_i1g3jRoAHACeAGAAdgCiAG-EJIBBzAuMy40LjKYAQCgAQGqAQdnd3Mtd2l6&sclient=psy-ab&ved=0ahUKEwin--fgofDoAhXlIrkGHZOYDMAQ4dUDCAs&uact=5

     

    abraço

  16. Voce não acha que seria muito mais simples, selecionar os registros que voce quer das tabelas, jogar em um dbgrid e depois proceder aos calculos dos registros ?

    A vantagem disso é que a performance fica mais rapida. Se voce acha que fazer os calculos ficaria lento, então voce pode optar em usar ( Threads  -  para efetuar os calculos em segundo plano )  ...  o usuario nem vai perceber.

    Quando eu monto tudo isso no programa eu  consigo ver os outros detalhes se eu selecionar manualmente um  ítem da tabela master, então aparece todos os detalhes da nota escolhida e todos os cálculos corretos

    Se voce quer ver todos os campos de um registro, os mesmos deverão aparecer na Select.

    Sugestão: use o sqlite expert  ( Gerenciador de Banco de Dados)  ... com ele voce pode construir Selects utilizando as suas tabelas e testá-las em tempo real.

    Uma vez criada e testada a Select, voce pode usá-la no seu programa.

    http://www.sqliteexpert.com/download.html

    ou o SQLite Studio

    https://sqlitestudio.pl/index.rvt

    abraço

  17. então onde fica o erro?

    O erro está justamente no momento de como passar o valor da data para o parametro dentro da select.

    DATEDIFF(dtf,dti) as qtd_dias
    DATEDIFF('2020-03-09','2020-01-01') as qtd_dias

     

    Abraço

×
×
  • Criar Novo...