Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Bloco de código
languagejava
themeMidnight
titleSPED1601
linenumberstrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "TOPCONN.ch" 

User Function SPED1601()

	Local aReg1601  := {}
	Local dDataDe   := Iif(Len(paramixb) >= 1 , paramixb[1], ctod("  /  /  "))
	Local dDataAte  := Iif(Len(paramixb) >= 2 , paramixb[2], ctod("  /  /  "))
	Local cQuery    := ""
	Local cAliasTrb  := GetnextAliasGetNextAlias()


    // COD_PART_IP - COD_PART_IT - TOT_VS - TOT_ISS - TOT_OUTROS
    // Exemplo do Array  
    // aAdd (aReg1601, {"CODIGO_CLIENTE_ADM_CARTAO","CODIGO_INTERMEDIADOR",0,0,0})
    // OBS: 
    // COD_PART_IP: O valor informado deve existir no campo COD_PART do registro 0150.
    // COD_PART_IT: O valor informado deve existir no campo COD_PART do registro 0150.
    // TOT_VS : o valor deve ser preenchido com o total bruto de vendas que tiveram escrituração de ICMS , inclusive como ICMS Isento ou Outros
    // TOT_ISS: o valor deve ser preenchido com o total bruto de prestação de serviços que tiveram incidência de ISS.
    // TOT_OUTROS : o valor de ser preenchido com o total bruto das operações que não estejam no campo de incidência do ICMS ou ISS.

    cQuery := " SELECT "
	cQuery += " 	F2_FILIAL AS FILIAL,"
	cQuery += " 	AE_CODCLI + AE_LOJCLI AS COD_PART_IP,"
	cQuery += " 	F2_CODA1U AS INTERMEDIADOR,"
	cQuery += " 	CASE WHEN SUM(SF2.F2_VALICM) <> 0 THEN SUM(F2_VALBRUT) ELSE 0 END AS TOT_VS,"
	cQuery += " 	CASE WHEN SUM(SF2.F2_VALISS) <> 0 THEN SUM(F2_VALBRUT) ELSE 0 END AS TOT_ISS,"
	cQuery += " 	CASE WHEN SUM(SF2.F2_VALISS) = 0 AND SUM(SF2.F2_VALICM)= 0 THEN SUM(F2_VALBRUT) ELSE 0 END AS TOT_OUT "
	cQuery += " FROM "+RetSQLName("SF2")+" SF2 "

	cQuery += " INNER JOIN "+RetSQLName("SL1")+" SL1 "
	cQuery += " 	ON L1_FILIAL        = F2_FILIAL"
	cQuery += " 	AND L1_DOC          = F2_DOC"
	cQuery += " 	AND L1_SERIE        = F2_SERIE"
	cQuery += " 	AND L1_CLIENTE      = F2_CLIENTE"
	cQuery += " 	AND L1_LOJA         = F2_LOJA"
	cQuery += " 	AND SL1.D_E_L_E_T_  = ' ' "

	cQuery += " INNER JOIN "+RetSQLName("SL4")+" SL4 "
	cQuery += " 	ON L4_FILIAL        = L1_FILIAL"
	cQuery += " 	AND L4_NUM          = L1_NUM"
	cQuery += " 	AND SL4.D_E_L_E_T_  = ' ' "
	
	cQuery += " INNER JOIN "+RetSQLName("SAE")+" SAE "
	cQuery += " 	ON AE_FILIAL        = '"+ xFilial("SAE") +"'"
	cQuery += " 	AND SAE.AE_COD      = SUBSTRING(SL4.L4_ADMINIS,1,3)"
	cQuery += " 	AND SAE.D_E_L_E_T_  = ' ' "

	cQuery += " WHERE F2_EMISSAO BETWEEN '" + DTOS(dDataDe) + "' AND '" + DTOS(dDataAte) + "' "
	cQuery += " 	AND SF2.D_E_L_E_T_ = ' ' "

	cQuery += " GROUP BY F2_FILIAL, AE_CODCLI, AE_LOJCLI, F2_CODA1U "

    /*
    No modulo SIGAFAT não há o controle de Administradoras de Cartão para poder fazer amarração, portanto a ideia é fazer um DEPARA com a condição de pagamento
    e ter um registro na tabela SA1 que corresponda a operadora.
    Ex.: Foi criado a Condição de Pagamento "CC1002" que corresponde as vendas de Cartão de Credito, também foi criado um registro na tabela SA1 com as informações 
    da operadora de Cartão de Credito. 
    Sugestão para montagem da Consulta no banco de Dados:
*/


    cQuery := " SELECT "
    cQuery += " F2_FILIAL FILIAL, " 
    cQuery += " F2_COND COD_PART_IP,  "
    cQuery += " F2_CODA1U INTERMEDIADOR, "
    cQuery += " CASE WHEN SUM(SF2.F2_VALICM) <> 0 THEN SUM(F2_VALBRUT) ELSE 0 END AS TOT_VS,  "
    cQuery += " CASE WHEN SUM(SF2.F2_VALISS) <> 0 THEN SUM(F2_VALBRUT) ELSE 0 END AS TOT_ISS, "
    cQuery += " CASE WHEN SUM(SF2.F2_VALISS) = 0 AND SUM(SF2.F2_VALICM)= 0 THEN SUM(F2_VALBRUT) ELSE 0 END AS TOT_OUT "
    cQuery += " FROM "+RetSQLName("SF2")+" SF2 , "+RetSQLName("SE4")+" SE4 "
    cQuery += " WHERE F2_EMISSAO BETWEEN '" + DTOS(dDataDe) + "' AND '" + DTOS(dDataAte) + "' "
    cQuery += " AND F2_COND = E4_CODIGO AND E4_FORMA IN ('CC','CD') "
    cQuery += " AND SF2.D_E_L_E_T_ = '' "
    cQuery += " GROUP BY F2_FILIAL, F2_COND , F2_CODA1U "
    */

	cQuery := ChangeQuery( cQuery )
	DbUseArea( .T., 'TOPCONN', TcGenQry(,,cQuery), cAliasTrb, .T., .F. )

	While !(cAliasTrb)->( Eof() )

	cCodAdm := Iif ((        // Fica a critério do cliente a melhor maneira de realização a amarração dos cadastros
        // No entanto, deve-se observar que esta informação deve ser enviada com o código do CLIENTE + LOJA com todos os caracteres
        
        If (cAliasTrb)->COD_PART_IP == 'CC1' , "001"CC1"
            cCodAdm := "C09   ", "00201"
        Else
       ") // Fica a critério docCodAdm cliente a melhor maneira de realização a amarração dos cadastros

	aAdd := (cAliasTrb)->COD_PART_IP
        EndIf

		aADD(aReg1601, {(cAliasTrb)->FILIAL,cCodAdm,(cAliasTrb)->INTERMEDIADOR,(cAliasTrb)->TOT_VS,(cAliasTrb)->TOT_ISS,(cAliasTrb)->TOT_OUT})
        
		(cAliasTrb)->(DbSkip())
End	EndDo

	(cAliasTrb)->(DbCloseArea())                            			

Return aReg1601
 

05. DEMAIS INFORMAÇÕES

...