La validarea cu erori se genereaza <xml>_explicat.txt: un rand pe eroare (pagina, pozitie, partener/cont identificat, explicatie) + sectiunea "Cum rezolvati". Erorile fictive TaxCode "nu se afla in lista" (bug DUKIntegrator) sunt separate si ignorabile. Se deschid ambele fisiere, raportul explicat deasupra; chatbot-ul primeste doar erorile reale. Mesajul separat de parteneri respinsi + exportul Excel eliminate din flux. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ExTWMJbKantwNvL6AtEwzH
6725 lines
271 KiB
Plaintext
6725 lines
271 KiB
Plaintext
* 27.05.2022
|
|
* wSalesPurchaseInvoices corectare valoare InvoiceLineAmount (valoare in loc de pret unitar)
|
|
|
|
*!* 23.02.2023
|
|
*!* oSalesInvoices - corectare cont venit pentru articolele din gestiune si facturare
|
|
|
|
*!* 10.05.2023
|
|
*!* oPurchaseInvoices - includere bonuri fiscale
|
|
|
|
*!* 15.05.2023
|
|
*!* do_genereaza_xml - se asteapta maxim 30 secunde pentru validare xml
|
|
|
|
*!* 07.07.2023
|
|
*!* oSalesInvoices - se genereaza linii cu articole pentru notele contabile suplimentare fata de articolele din gestiune/facturare
|
|
*!* tratare cont 667 = 4111 la diferente contabilitate fata de gestiune/facturare
|
|
|
|
*!* 21.07.2023
|
|
*!* oSalesInvoices - se genereaza linii cu diferente contabilitate - gestiune/facturare doar daca sunt diferente pe taxcode, nu si pe cont
|
|
*!* se poate modifica contul in contabilitate, dar in facturare se citeste din nota contabila
|
|
|
|
*!* 31.08.2023
|
|
*!* oPurchaseInvoices - se ia curs valutar, id_valuta din rulaj, in loc de RON
|
|
|
|
*!* 15.09.2023
|
|
*!* oPurchaseInvoices - se includ si tip_doc = "INV" pentru facturile de achizitie din import
|
|
|
|
*!* 03.11.2023
|
|
*!* oSalesInvoices - nu mai completez contul pe articole cu 707 daca nu gasesc in politici de preturi sau note contabile
|
|
*!* completez cu contul din registrul jurnal
|
|
|
|
*!* 19.12.2023
|
|
*!* oSalesInvoices - se scade discountul unitar din pretul unitar
|
|
|
|
*!* 30.04.2024
|
|
*!* oAssets - calculare Amortizare precedenta la inceputul perioadei din prima inregistrare.
|
|
*!* calculare amortizare totala la sfarsitul perioadei din ultima inregistrare
|
|
*!* este posibil ca amortizarea precedenta sa se reevalueze, si amortizarea totala era diferita de amortizarea precedenta de la inceputul perioadei + amortizarea din perioada
|
|
*!* VerificareImobilizari: corectie verificare amortizare la inceputul perioadei, la sfarsitul perioadei
|
|
*!* VerificareImobilizari: aquisitionandproductioncostend nu era egala cu valoarea de inventar daca existau reevaluari (+ reevaluare pozitiva-reevaluare negativa)
|
|
|
|
*!* 04.10.2024
|
|
*!* do_verifica_tva - se verifica inregistrarile contabile D406 conturi TVA 442x care au taxa. Nu trebuie sa aiba taxa
|
|
|
|
*!* 28.11.2024
|
|
*!* wSalesPurchaseInvoices - nu se mai scrie nimic daca sunt 0 facturi
|
|
|
|
*!* 21.01.2025
|
|
*!* wGeneralLedgerEntries - completare customerId pentru contul 463
|
|
|
|
*!* 25.04.2025
|
|
*!* wPayments - tratare caz fara plati
|
|
|
|
*!* 16.06.2025
|
|
*!* CompletareCodTaxaPlata - se completeaza pentru perioada curenta (ex: trimestru) in loc de luna curenta
|
|
|
|
*!* 25.06.2025
|
|
*!* oSalesInvoices, oPurchaseInvoices - se iau doar facturile cu data inregistrarii din luna in care au fost emise
|
|
*!* la SAFT Trimestrial, aveam facturi cu TVA Incasare care apareau in mai multe luni si se duplicau
|
|
|
|
*!* 27.06.2025
|
|
*!* wHeader - corectare nume firma cu caractere speciale
|
|
|
|
*!* 27.08.2025
|
|
*!* wHeader - limitare nume firma la 70 caractere
|
|
|
|
|
|
|
|
*!* 30.01.2026
|
|
*!* Robert
|
|
*!* opayments - sa nu mai selecteze conturile de tip 512x/531x/542x/581 = 512x/531x/542x/581
|
|
*!* adaugat procedura do_verifica_solduri - face toate verificarile (balanta, registru jurnal, clienti, furnizori)
|
|
|
|
*!* 03.02.2026
|
|
*!* do_verifica_plati - Mesaj randuri plati fara cont de terti - probabil nu sunt plati/incasari catre terti
|
|
|
|
*!* 21.05.2026
|
|
*!* oAssets - am tratat o eroare la join cAmortizareLunara daca nu avea nici o inregistrare (firma fara imobilizari nu avea completat an si luna)
|
|
*!* do_verifica_imobilizari - salvare in 4 fisiere xlsx, dar aleg o singura data directorul de salvare
|
|
|
|
|
|
*!* 01.072026
|
|
*!* oSalesInvoices - se facea join dublu vanzari - jv2007 in cazul facturilor cu tva la incasare
|
|
|
|
*!* 27.07.2026
|
|
*!* do_erori_saft, do_ident_saft - raport erori validator pe intelesul utilizatorului (fisierul <xml>_explicat.txt): pagina, pozitie, partener/cont identificat, explicatie scurta si sectiunea "Cum rezolvati"
|
|
*!* erorile fictive TaxCode "nu se afla in lista" (bug DUKIntegrator) sunt separate si ignorabile; chatbot-ul primeste doar erorile reale; mesajul separat de parteneri respinsi (do_erori_partener_saft) eliminat din flux
|
|
|
|
* saft_D406
|
|
Procedure viz_saft_d406
|
|
loD406 = Createobject("D406")
|
|
m.loD406.List()
|
|
Endproc && viz_saft_d406
|
|
|
|
Define Class d406 As Custom
|
|
Perioada = 1
|
|
oForm = Null && formular D406
|
|
oUnitate = Null
|
|
TipDescriere = 'LUNAR'
|
|
Tip = 'L'
|
|
SegmentIndex = 1
|
|
TotalSegmentsInSequence = 1
|
|
TaxAccountingBasis = 'A'
|
|
TaxEntity = 'Company'
|
|
|
|
CaleFisierPDF = '' && director fisier pdf
|
|
|
|
Procedure List
|
|
Local loFrm
|
|
Local loDecl As Form
|
|
Local lcPerioadaTVA, lcSelect, lcTip, lcTipDescriere, lnCustSupType
|
|
*!* loFrm = CREATEOBJECT("frm_saft_d406")
|
|
|
|
Private poResponsabil
|
|
Private pounitate
|
|
|
|
poResponsabil = Null
|
|
|
|
lcSelect = Select()
|
|
|
|
If Type('gofirma.codfiscalfro') = 'U'
|
|
AddProperty(gofirma, 'codfiscalfro', ALLTRIM(Strtran(Alltrim(gofirma.cod_fiscal), 'RO', '')))
|
|
Endif
|
|
|
|
pounitate = Createobject("empty")
|
|
AddProperty(m.pounitate, "tva_incasare", goCalendar.tva_incasare)
|
|
|
|
AddProperty(m.pounitate, "an1", m.gnAn)
|
|
AddProperty(m.pounitate, "an2", m.gnAn)
|
|
AddProperty(m.pounitate, "luna1", m.gnLuna)
|
|
AddProperty(m.pounitate, "luna2", m.gnLuna)
|
|
|
|
lcPerioadaTVA = Upper(Nvl(citeste_optiune('PERIOADA_TVA'), ''))
|
|
If Empty(m.lcPerioadaTVA)
|
|
AMESSAGEBOX('Configurati optiunea "PERIOADA_TVA" in Definirea Companiei!', 0 + 48, _Screen.Caption)
|
|
lcPerioadaTVA = 'LUNAR'
|
|
Endif
|
|
lcTipDescriere = Iif(!Inlist(m.lcPerioadaTVA, 'LUNAR', 'TRIMESTRIAL', 'ANUAL', 'LA CERERE'), 'LUNAR', m.lcPerioadaTVA)
|
|
|
|
lcTip = Iif(lcTipDescriere = 'LUNAR', 'L', Iif(lcTipDescriere = 'TRIMESTRIAL', 'T', Iif(lcTipDescriere = 'ANUAL', 'A', Iif(lcTipDescriere = 'LA CERERE', 'C', 'L'))))
|
|
AddProperty(m.pounitate, "perioada_tva", m.lcPerioadaTVA) && tip LUNAR/TRIMESTRIAL/SEMESTRIAL/ANUAL
|
|
AddProperty(m.pounitate, "tip", m.lcTip) && tip L/T/A/C/NL/NT (Lunar/Trimestrial/Anual/Cerere/Nerezidenti lunar/Nerezidenti trimestrial)
|
|
AddProperty(m.pounitate, "tipDescriere", m.lcTipDescriere) && tip lung
|
|
|
|
AddProperty(m.pounitate, "codi", ALLTRIM(Strtran(Strtran(Alltrim(Upper(Nvl(gofirma.cod_fiscal, ''))), 'RO', ''), 'R', '')))
|
|
AddProperty(m.pounitate, "deni", Nvl(Alltrim(gofirma.firma), ''))
|
|
AddProperty(m.pounitate, "adr", Nvl(Alltrim(gofirma.adresa), ''))
|
|
AddProperty(m.pounitate, "tel", Nvl(Alltrim(gofirma.telefon), ''))
|
|
AddProperty(m.pounitate, "fax", Nvl(Alltrim(gofirma.fax), ''))
|
|
AddProperty(m.pounitate, "email", Nvl(Alltrim(gofirma.email), ''))
|
|
|
|
AddProperty(m.pounitate, "taraR", "")
|
|
AddProperty(m.pounitate, "codiR", "")
|
|
AddProperty(m.pounitate, "deniR", "")
|
|
AddProperty(m.pounitate, "adrR", "")
|
|
AddProperty(m.pounitate, "telR", "")
|
|
AddProperty(m.pounitate, "faxR", "")
|
|
AddProperty(m.pounitate, "emailR", "")
|
|
|
|
AddProperty(m.pounitate, "numeD", "")
|
|
AddProperty(m.pounitate, "functieD", "")
|
|
|
|
AddProperty(m.pounitate, "tvaincasare", goCalendar.tva_incasare)
|
|
lnCustSupType = INT(VAL(Alltrim(citeste_optiune('D406_CUST_SUP_TYPE'))))
|
|
lnCustSupType = IIF(INLIST(m.lnCustSupType,9999,2020,2021,2022,2023,2024,2025), m.lnCustSupType, 9999) && 9999 = Toti clientii/furnizorii/ 2022 = Incepand cu anul 2022 (intreprinderi mari), 2023 = 2023 (intreprinderi mijlocii), 2025 = 2025 (intreprinderi mici)
|
|
AddProperty(m.pounitate, "CustSupType", m.lnCustSupType)
|
|
|
|
********************************
|
|
AddProperty(m.pounitate, "FunctieContact", Alltrim(citeste_optiune('D406_FUNCTIE_CONTACT')))
|
|
AddProperty(m.pounitate, "PrenumeContact", Alltrim(citeste_optiune('D406_PRENUME_CONTACT')))
|
|
AddProperty(m.pounitate, "NumeContact", Alltrim(citeste_optiune('D406_NUME_CONTACT')))
|
|
With m.pounitate
|
|
.PrenumeContact = Iif(!Empty(Nvl(.PrenumeContact, '')), .PrenumeContact, Alltrim(Nvl(gofirma.prenume_declarant, '')))
|
|
.NumeContact = Iif(!Empty(Nvl(.NumeContact, '')), .NumeContact, Alltrim(Nvl(gofirma.nume_declarant, '')))
|
|
.FunctieContact = Iif(!Empty(Nvl(.FunctieContact, '')), .FunctieContact, Alltrim(Nvl(gofirma.functie, '')))
|
|
Endwith
|
|
*******************************
|
|
AddProperty(m.pounitate, "MasterFiles", .T.)
|
|
AddProperty(m.pounitate, "GeneralLedgerEntries", .T.)
|
|
AddProperty(m.pounitate, "SourceDocuments", .T.)
|
|
|
|
AddProperty(m.pounitate, "GeneralLedgerAccounts", .F.)
|
|
AddProperty(m.pounitate, "Customers", .F.)
|
|
AddProperty(m.pounitate, "Suppliers", .F.)
|
|
AddProperty(m.pounitate, "TaxTable", .F.)
|
|
AddProperty(m.pounitate, "UOMTable", .F.)
|
|
AddProperty(m.pounitate, "AnalysisTypeTable", .F.)
|
|
AddProperty(m.pounitate, "MovementTypeTable", .F.)
|
|
AddProperty(m.pounitate, "Products", .F.)
|
|
AddProperty(m.pounitate, "PhysicalStock", .F.)
|
|
AddProperty(m.pounitate, "Owners", .F.)
|
|
AddProperty(m.pounitate, "Assets", .F.)
|
|
|
|
AddProperty(m.pounitate, "SalesInvoices", .F.)
|
|
AddProperty(m.pounitate, "PurchaseInvoices", .F.)
|
|
AddProperty(m.pounitate, "Payments", .F.)
|
|
AddProperty(m.pounitate, "MovementofGoods", .F.)
|
|
AddProperty(m.pounitate, "AssetTransactions", .F.)
|
|
|
|
|
|
*****************************************************************************************************
|
|
*!* AddProperty(pounitate, "TipRepr", Alltrim(citeste_optiune('D406_TIP_REPREZ')))
|
|
*!* AddProperty(pounitate, "TelRepr", Alltrim(citeste_optiune('D406_TEL_REPREZ')))
|
|
*!* AddProperty(pounitate, "FaxRepr", Alltrim(citeste_optiune('D406_FAX_REPREZ')))
|
|
*!* AddProperty(pounitate, "EmailRepr", Alltrim(citeste_optiune('D406_EMAIL_REPREZ')))
|
|
|
|
*!* AddProperty(pounitate, "DenIntocmit", Alltrim(citeste_optiune('D406_DEN_INTOCMIT')))
|
|
*!* AddProperty(pounitate, "CuiIntocmit", Alltrim(citeste_optiune('D406_CUI_INTOCMIT')))
|
|
*!* AddProperty(pounitate, "PJIntocmit", Int(Val(Nvl(citeste_optiune('D406_PJ_INTOCMIT'), '1'))) )
|
|
*!* AddProperty(pounitate, "CalitateIntocmit", Alltrim(citeste_optiune('D406_CALITATE_INTOCMIT')))
|
|
*!* AddProperty(pounitate, "Calitate2Intocmit", Alltrim(citeste_optiune('D406_CALITATE2_INTOCMIT')))
|
|
*!* AddProperty(pounitate, "FunctieIntocmit", Alltrim(citeste_optiune('D406_FUNCTIE_INTOCMIT')))
|
|
|
|
This.oUnitate = m.pounitate
|
|
|
|
Do Form frm_decl406_saft Name m.loDecl Linked Noshow
|
|
This.oForm = m.loDecl
|
|
loDecl.oParent = This
|
|
m.loDecl.Show()
|
|
|
|
scrie_optiune('D406_FUNCTIE_CONTACT', pounitate.FunctieContact, 'D406 functie contact')
|
|
scrie_optiune('D406_PRENUME_CONTACT', pounitate.PrenumeContact, 'D406 prenume contact')
|
|
scrie_optiune('D406_NUME_CONTACT', pounitate.NumeContact, 'D406 nume contact')
|
|
|
|
scrie_optiune('D406_CUST_SUP_TYPE', pounitate.CustSupType, 'D406 tip clienti, furnizori: 1=Toti;2=2022;3=2023;4=2025')
|
|
|
|
*!* scrie_optiune('D406_TIP', pounitate.TIP, 'Tip declaratie 394: LUNAR/TRIMESTRIAL/SEMESTRIAL/ANUAL')
|
|
Endproc && List
|
|
|
|
|
|
* Intoarce fragment xml
|
|
Function wxml
|
|
Lparameters tcTag, tcValue, tlForce
|
|
* tcTag: StreetName (obligatoriu)
|
|
* tcValue: alabala (optional)
|
|
* tlForce: (optional, implicit .F.) daca se scrie tag-ul indiferent daca exista sau nu valoarea
|
|
Local lcText, lcValue, llValue, llForce
|
|
llForce = m.tlForce
|
|
lcText = ''
|
|
IF ISNULL(tcValue)
|
|
lcValue = ''
|
|
ELSE
|
|
lcValue = TRANSFORM(m.tcValue)
|
|
ENDIF
|
|
|
|
If !Empty(m.lcValue) Or m.tlForce
|
|
* daca s-a transmis parametrul valoare sau tag-ul trebuie afisat indiferent daca are sau nu valoare
|
|
lcText = [<nsSAFT:] + m.tcTag + [>] + m.lcValue + [</nsSAFT:] + m.tcTag + [>]
|
|
Endif
|
|
Return m.lcText
|
|
Endfunc && wxml
|
|
|
|
Procedure do_genereaza_xml
|
|
LPARAMETERS tlTest
|
|
* tlTest: .T. D406T, .F. D406
|
|
|
|
Local lcCustomers, lcGeneralLedgerAccounts, lcHeader, lcSuppliers, lcXML
|
|
Local lcAnalysisTypeTable, lcMovementTypeTable, lcGeneralLedgerEntries, lcPayments, lcPurchaseInvoices, lcSalesInvoices
|
|
Local lcTaxTable, lcTipDeclaratie
|
|
LOCAL lnBytes, llSucces
|
|
Local lcAssetTransactions, lcAssets, lcCaleFisier, lcComunPath, lcConfigDir, lcFileName
|
|
Local lcFisierExplicat, lcFisierRaspuns, lcMovementofGoods, lcNumeFisier, lcOwners, lcParams, lcPhysicalStock
|
|
Local lcProducts, lcUOMTable, lcValidator, lcXMLTemp, lnFileHandle, lnSec, lcSufixCale, lcSufixFisier
|
|
LOCAL lcMessage, loChatBot, lcMesajErori
|
|
LOCAL lnAn1, lnAn2, lnLuna1, lnLuna2, lnEroriFictive, lnEroriReale
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
DO CASE
|
|
CASE goFirma.id_forma_juridica = 13
|
|
This.TaxAccountingBasis = 'ONG' && asociatii, organizatii nonguvernamentale
|
|
OTHERWISE
|
|
This.TaxAccountingBasis = 'A' && societati comertiale
|
|
ENDCASE
|
|
|
|
lcCaleFisier = m.gcBasePath + IIF(m.tlTest, "D406T\", "D406\") && D:\ROA\D406\
|
|
If !Directory(m.lcCaleFisier)
|
|
Md (m.lcCaleFisier)
|
|
Endif
|
|
|
|
lcTip = UPPER(This.Tip) && L/T/A/C
|
|
lcSufixCale = IIF(m.lcTip = 'A', 'anual\', IIF(m.lcTip = 'C', 'cerere\', ''))
|
|
lcSufixFisier = IIF(m.lcTip = 'A', '_anual', IIF(m.lcTip = 'C', '_cerere', ''))
|
|
|
|
lcCaleFisier = m.lcCaleFisier + Alltrim(Str(gnAn)) + "_" + Padl(Alltrim(Str(gnLuna)), 2, "0") + "\" && D:\ROA\D406\2022_01\
|
|
If !Directory(m.lcCaleFisier)
|
|
Md (m.lcCaleFisier)
|
|
Endif
|
|
|
|
lcCaleFisier = m.lcCaleFisier + Strtran(gcFirma, [ ], [_]) + "\" + m.lcSufixCale && D:\ROA\D406\2022_01\firma\
|
|
If !Directory(m.lcCaleFisier)
|
|
Md (m.lcCaleFisier)
|
|
ENDIF
|
|
|
|
lcNumeFisier = IIF(m.tlTest, 'd406t_', 'd406_') + gofirma.codfiscalfro + "_" + Alltrim(Str(gnAn)) + "_" + Padl(gnLuna, 2, "0")
|
|
lcFileName = m.lcCaleFisier + lcNumeFisier + m.lcSufixFisier + '.xml'
|
|
lcFisierRaspuns = m.lcFileName + '.txt'
|
|
|
|
IF FILE(m.lcFileName)
|
|
DELETE FILE (m.lcFileName)
|
|
ENDIF
|
|
|
|
IF FILE(m.lcFisierRaspuns)
|
|
DELETE FILE (m.lcFisierRaspuns)
|
|
ENDIF
|
|
|
|
WAIT WINDOW 'Generare Header ' NOWAIT
|
|
lcHeader = This.wHeader()
|
|
|
|
WAIT WINDOW 'Generare GeneralLedgerAccounts' NOWAIT
|
|
lcGeneralLedgerAccounts = This.wGeneralLedgerAccounts()
|
|
|
|
WAIT WINDOW 'Generare Customers ' NOWAIT
|
|
lcCustomers = This.wCustomersSuppliers('customers')
|
|
|
|
WAIT WINDOW 'Generare Suppliers ' NOWAIT
|
|
lcSuppliers = This.wCustomersSuppliers('suppliers')
|
|
|
|
WAIT WINDOW 'Generare TaxTable ' NOWAIT
|
|
lcTaxTable = This.wTaxTable()
|
|
|
|
WAIT WINDOW 'Generare UOMTable ' NOWAIT
|
|
lcUOMTable = This.wUOMTable()
|
|
|
|
WAIT WINDOW 'Generare AnalysysTypeTable ' NOWAIT
|
|
lcAnalysisTypeTable = This.wAnalysisTypeTable()
|
|
|
|
WAIT WINDOW 'Generare GeneralLedgerEntries ' NOWAIT
|
|
lcGeneralLedgerEntries = This.wGeneralLedgerEntries()
|
|
|
|
WAIT WINDOW 'Generare Sales Invoices ' NOWAIT
|
|
lcSalesInvoices = IIF(This.oUnitate.SalesInvoices, This.wSalesInvoices(), '')
|
|
|
|
WAIT WINDOW 'Generare Purchase Invoices ' NOWAIT
|
|
lcPurchaseInvoices = IIF(This.oUnitate.PurchaseInvoices, This.wPurchaseInvoices(), '')
|
|
|
|
WAIT WINDOW 'Generare Payments ' NOWAIT
|
|
lcPayments = IIF(This.oUnitate.Payments, This.wPayments(), '')
|
|
|
|
WAIT WINDOW 'Generare MovementTypeTable ' NOWAIT
|
|
lcMovementTypeTable = IIF(This.oUnitate.MovementTypeTable, This.wMovementTypeTable(), '')
|
|
|
|
WAIT WINDOW 'Generare Products ' NOWAIT
|
|
lcProducts = This.wProducts()
|
|
IF EMPTY(m.lcProducts) And This.oUnitate.Products
|
|
TEXT TO m.lcProducts NOSHOW
|
|
|
|
<nsSAFT:Product>
|
|
<nsSAFT:ProductCode>7493049347</nsSAFT:ProductCode>
|
|
<nsSAFT:GoodsServicesID>01</nsSAFT:GoodsServicesID>
|
|
<nsSAFT:Description>Product 1</nsSAFT:Description>
|
|
<nsSAFT:ProductCommodityCode>25261000</nsSAFT:ProductCommodityCode>
|
|
<nsSAFT:UOMBase>58</nsSAFT:UOMBase>
|
|
<nsSAFT:UOMStandard>58</nsSAFT:UOMStandard>
|
|
<nsSAFT:UOMToUOMBaseConversionFactor>1.0</nsSAFT:UOMToUOMBaseConversionFactor>
|
|
</nsSAFT:Product>
|
|
|
|
ENDTEXT
|
|
ENDIF
|
|
|
|
WAIT WINDOW 'Generare PhysicalStock ' NOWAIT
|
|
lcPhysicalStock = This.wPhysicalStock()
|
|
|
|
WAIT WINDOW 'Generare MovementofGoods ' NOWAIT
|
|
lcMovementofGoods = This.wMovementofGoods()
|
|
|
|
WAIT WINDOW 'Generare Owners ' NOWAIT
|
|
lcOwners = This.wOwners()
|
|
|
|
WAIT WINDOW 'Generare Assets ' NOWAIT
|
|
lcAssets = This.wAssets()
|
|
|
|
WAIT WINDOW 'Generare AssetTransactions ' NOWAIT
|
|
lcAssetTransactions = This.wAssetTransactions()
|
|
|
|
|
|
lcTipDeclaratie = IIF(m.tlTest, 'd406t', 'd406')
|
|
|
|
WAIT WINDOW 'Scriere XML Header...' NOWAIT
|
|
lcXML = ""
|
|
|
|
lnFileHandle = FCREATE(m.lcFileName)
|
|
|
|
WAIT WINDOW 'Scriere XML Header...' NOWAIT
|
|
|
|
Text To m.lcXMLTemp Textmerge NOSHOW
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<nsSAFT:AuditFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:nsSAFT="mfp:anaf:dgti:<<m.lcTipDeclaratie>>:declaratie:v1">
|
|
|
|
<<m.lcHeader>>
|
|
<nsSAFT:MasterFiles>
|
|
ENDTEXT
|
|
lcXML = m.lcXMLTemp
|
|
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcXMLTemp)
|
|
|
|
|
|
WAIT WINDOW 'Scriere XML GeneralLedgerAccounts...' NOWAIT
|
|
lcXMLTemp = [<nsSAFT:GeneralLedgerAccounts>] + CHR(13) + CHR(10) + m.lcGeneralLedgerAccounts + [</nsSAFT:GeneralLedgerAccounts>]
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcXMLTemp)
|
|
|
|
|
|
WAIT WINDOW 'Scriere XML Customers...' NOWAIT
|
|
lnBytes = FPUTS(m.lnFileHandle, [<nsSAFT:Customers>])
|
|
IF This.oUnitate.Customers
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcCustomers)
|
|
ENDIF
|
|
lnBytes = FPUTS(m.lnFileHandle, [</nsSAFT:Customers>])
|
|
|
|
|
|
WAIT WINDOW 'Scriere XML Suppliers...' NOWAIT
|
|
lnBytes = FPUTS(m.lnFileHandle, [<nsSAFT:Suppliers>])
|
|
IF This.oUnitate.Suppliers
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcSuppliers)
|
|
ENDIF
|
|
lnBytes = FPUTS(m.lnFileHandle, [</nsSAFT:Suppliers>])
|
|
|
|
|
|
WAIT WINDOW 'Scriere XML TaxTable...' NOWAIT
|
|
lnBytes = FPUTS(m.lnFileHandle, [<nsSAFT:TaxTable>])
|
|
IF This.oUnitate.TaxTable
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcTaxTable)
|
|
ENDIF
|
|
lnBytes = FPUTS(m.lnFileHandle, [</nsSAFT:TaxTable>])
|
|
|
|
|
|
WAIT WINDOW 'Scriere XML UOMTable...' NOWAIT
|
|
lnBytes = FPUTS(m.lnFileHandle, [<nsSAFT:UOMTable>])
|
|
IF This.oUnitate.UOMTable
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcUOMTable)
|
|
ENDIF
|
|
lnBytes = FPUTS(m.lnFileHandle, [</nsSAFT:UOMTable>])
|
|
|
|
|
|
WAIT WINDOW 'Scriere XML AnalysisTypeTable...' NOWAIT
|
|
lcXMLTemp = this.wxml("AnalysisTypeTable", m.lcAnalysisTypeTable, This.oUnitate.AnalysisTypeTable)
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcXMLTemp)
|
|
|
|
WAIT WINDOW 'Scriere XML MovementTypeTable...' NOWAIT
|
|
lcXMLTemp = this.wxml("MovementTypeTable", m.lcMovementTypeTable, .T.)
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcXMLTemp)
|
|
|
|
WAIT WINDOW 'Scriere XML Products...' NOWAIT
|
|
lnBytes = FPUTS(m.lnFileHandle, [<nsSAFT:Products>])
|
|
IF This.oUnitate.Products
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcProducts)
|
|
ENDIF
|
|
lnBytes = FPUTS(m.lnFileHandle, [</nsSAFT:Products>])
|
|
|
|
WAIT WINDOW 'Scriere XML PhysicalStock...' NOWAIT
|
|
IF This.oUnitate.PhysicalStock
|
|
lnBytes = FPUTS(m.lnFileHandle, [<nsSAFT:PhysicalStock>])
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcPhysicalStock)
|
|
lnBytes = FPUTS(m.lnFileHandle, [</nsSAFT:PhysicalStock>])
|
|
ENDIF
|
|
|
|
WAIT WINDOW 'Scriere Owners...' NOWAIT
|
|
lnBytes = FPUTS(m.lnFileHandle, [<nsSAFT:Owners>])
|
|
IF This.oUnitate.Owners
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcOwners)
|
|
ENDIF
|
|
lnBytes = FPUTS(m.lnFileHandle, [</nsSAFT:Owners>])
|
|
|
|
|
|
WAIT WINDOW 'Scriere XML Assets...' NOWAIT
|
|
lnBytes = FPUTS(m.lnFileHandle, [<nsSAFT:Assets>])
|
|
IF This.oUnitate.Assets
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcAssets)
|
|
ENDIF
|
|
lnBytes = FPUTS(m.lnFileHandle, [</nsSAFT:Assets>])
|
|
|
|
|
|
Text To m.lcXMLTemp Textmerge NOSHOW
|
|
</nsSAFT:MasterFiles>
|
|
ENDTEXT
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcXMLTemp)
|
|
|
|
WAIT WINDOW 'Scriere XML GeneralLedgerEntries...' NOWAIT
|
|
lnBytes = FPUTS(m.lnFileHandle, [<nsSAFT:GeneralLedgerEntries>])
|
|
IF This.oUnitate.GeneralLedgerEntries
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcGeneralLedgerEntries )
|
|
ENDIF
|
|
lnBytes = FPUTS(m.lnFileHandle, [</nsSAFT:GeneralLedgerEntries>])
|
|
|
|
|
|
WAIT WINDOW 'Scriere XML SourceDocuments...' NOWAIT
|
|
lcXMLTemp = '<nsSAFT:SourceDocuments>'
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcXMLTemp)
|
|
|
|
WAIT WINDOW 'Scriere XML SalesInvoices...' NOWAIT
|
|
lnBytes = FPUTS(m.lnFileHandle, [<nsSAFT:SalesInvoices>])
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcSalesInvoices)
|
|
lnBytes = FPUTS(m.lnFileHandle, [</nsSAFT:SalesInvoices>])
|
|
|
|
WAIT WINDOW 'Scriere XML PurchaseInvoices...' NOWAIT
|
|
lnBytes = FPUTS(m.lnFileHandle, [<nsSAFT:PurchaseInvoices>])
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcPurchaseInvoices)
|
|
lnBytes = FPUTS(m.lnFileHandle, [</nsSAFT:PurchaseInvoices>])
|
|
|
|
WAIT WINDOW 'Scriere XML Payments...' NOWAIT
|
|
lnBytes = FPUTS(m.lnFileHandle, [<nsSAFT:Payments>])
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcPayments)
|
|
lnBytes = FPUTS(m.lnFileHandle, [</nsSAFT:Payments>])
|
|
|
|
WAIT WINDOW 'Scriere XML MovementOfGoods...' NOWAIT
|
|
lnBytes = FPUTS(m.lnFileHandle, [<nsSAFT:MovementOfGoods>])
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcMovementOfGoods)
|
|
lnBytes = FPUTS(m.lnFileHandle, [</nsSAFT:MovementOfGoods>])
|
|
|
|
WAIT WINDOW 'Scriere XML AssetTransactions...' NOWAIT
|
|
IF this.oUnitate.AssetTransactions
|
|
lnBytes = FPUTS(m.lnFileHandle, [<nsSAFT:AssetTransactions>])
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcAssetTransactions)
|
|
lnBytes = FPUTS(m.lnFileHandle, [</nsSAFT:AssetTransactions>])
|
|
ENDIF
|
|
|
|
Text To m.lcXMLTemp Textmerge NOSHOW
|
|
</nsSAFT:SourceDocuments>
|
|
</nsSAFT:AuditFile>
|
|
Endtext
|
|
lnBytes = FPUTS(m.lnFileHandle, m.lcXMLTemp)
|
|
|
|
WAIT WINDOW 'Salvare fisier XML...' NOWAIT
|
|
|
|
* scriu fisierul xml
|
|
llSucces = FCLOSE(m.lnFileHandle)
|
|
|
|
WAIT WINDOW 'Validare fisier ' + m.lcFileName NOWAIT
|
|
|
|
* validez xml
|
|
lcComunPath = m.gcBasePath + Iif(gcAppName = "CONCONT", "COMUNCONTAFIN\", "COMUNROA\")
|
|
lcValidator = m.lcComunPath + [dist] + IIF(m.tlTest, [406], []) + [\DUKIntegrator.jar] && ROA\COMUNROA\DIST[406]\DUKIntegrator.jar
|
|
IF !FILE(m.lcValidator)
|
|
open_default_app('https://static.anaf.ro/static/10/Anaf/Informatii_R/saf_t.htm')
|
|
AMESSAGEBOX('Nu exista fisierul: "' + m.lcValidator + '"!' + CHR(13) + CHR(10) + ;
|
|
'Pentru validare xml D406, instalati validatorul D406 in directorul: "' + JUSTPATH(m.lcValidator) + '"',0+48, _screen.Caption)
|
|
ELSE
|
|
lcConfigDir = m.lcComunPath + [dist] + IIF(m.tlTest, [406], []) + [\config]
|
|
lcParams = ' -c "' + m.lcConfigDir + '" -v ' + IIF(m.tlTest, 'D406T', 'D406') + ' "' + m.lcFileName + '" "' + m.lcFisierRaspuns + '"' + " $ $ an=" + ALLTRIM(STR(m.lnAn2)) + " luna=" + ALLTRIM(STR(m.lnLuna2))
|
|
|
|
_cliptext = m.lcValidator + " " + m.lcParams
|
|
|
|
OPEN_DEFAULT_APP(m.lcValidator, m.lcParams)
|
|
|
|
lnSec = 0
|
|
DO WHILE !(File(m.lcFisierRaspuns) OR m.lnSec > 30)
|
|
Wait Window Timeout 1 ""
|
|
lnSec = lnSec + 1
|
|
ENDDO
|
|
|
|
If File(m.lcFisierRaspuns)
|
|
IF LOWER(FILETOSTR(m.lcFisierRaspuns)) = "ok"
|
|
AMESSAGEBOX('Validare fara erori fisier: ' + m.lcFileName,0+48,_screen.Caption)
|
|
DELETE FILE(m.lcFisierRaspuns)
|
|
|
|
* Lansare validator pentru creare PDF
|
|
lcParams = ' "' + m.lcFileName + '"'
|
|
OPEN_DEFAULT_APP(m.lcValidator, m.lcParams)
|
|
|
|
ELSE
|
|
*!* 27.07.2026 un singur raport compact cu erorile explicate si identificate, erorile fictive de TaxCode (bug DUKIntegrator) separate
|
|
lnEroriReale = 0
|
|
lnEroriFictive = 0
|
|
lcMesajErori = ''
|
|
lcFisierExplicat = This.do_erori_saft(m.lcFisierRaspuns, @lnEroriReale, @lnEroriFictive, @lcMesajErori)
|
|
OPEN_DEFAULT_APP(m.lcFisierRaspuns)
|
|
IF !EMPTY(m.lcFisierExplicat)
|
|
OPEN_DEFAULT_APP(m.lcFisierExplicat)
|
|
ENDIF
|
|
IF AMESSAGEBOX('Validare cu erori fisier: ' + m.lcFileName + CHR(13) + CHR(10) + ;
|
|
'Erori de rezolvat: ' + ALLTRIM(STR(m.lnEroriReale)) + ;
|
|
IIF(m.lnEroriFictive > 0, ' (+' + ALLTRIM(STR(m.lnEroriFictive)) + ' fictive - bug validator, se pot ignora)', '') + CHR(13) + CHR(10) + CHR(13) + CHR(10) + ;
|
|
'Doriti sa interogati chatbot-ul de suport tehnic?',0+4+48,_screen.Caption) = 6
|
|
lcMessage = EVL(m.lcMesajErori, FILETOSTR(m.lcFisierRaspuns))
|
|
loChatBot = CREATEOBJECT("oChatBotLaunch", m.lcMessage)
|
|
loChatBot.Launch()
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
AMESSAGEBOX('Nu s-a creat fisierul raspuns ' + m.lcFisierRaspuns + ' dupa validare!', 0+48,_screen.Caption)
|
|
|
|
* Lansare validator pentru creare PDF
|
|
lcParams = ' "' + m.lcFileName + '"'
|
|
OPEN_DEFAULT_APP(m.lcValidator, m.lcParams)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
*** deschid explorer in directorul de export
|
|
OPEN_DEFAULT_APP(m.lcCaleFisier)
|
|
|
|
RETURN m.lcFileName
|
|
Endproc && do_genereaza_xml
|
|
|
|
* Rapoarte verificare
|
|
|
|
*********************************
|
|
* verific daca toate notele 512/531/542 si toate notele 4xx = x/ x = 4xx au cod plata
|
|
*********************************
|
|
PROCEDURE do_verifica_plati
|
|
Local lcSql, llOk, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2, lnDif
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
* 1 = Inregistrarile tip 512/531/542 = x sau x = 512/531/542 fara Cod Plata
|
|
* 2 = Inregistrari tip plati 40x/462/4xx = x sau x = 41x/461/4xx fara Cod Plata
|
|
* 3 = Inregistrari cu cod plata diferit de cod plata implicit NU MAI VERIFIC - PREA MULTE FALS POZITIVE
|
|
* 4 = Inregistrari cu cod plata, care nu reprezinta plati terti. Trebuie sters codul de plata de pe aceste note
|
|
|
|
Text To m.lcSql Noshow Textmerge
|
|
select tip,
|
|
CAST(null as NUMBER(10)) as nrand,
|
|
an,
|
|
luna,
|
|
fdoc,
|
|
nract,
|
|
dataact,
|
|
partd,
|
|
partc,
|
|
scd,
|
|
scc,
|
|
suma,
|
|
codplata,
|
|
codplata_implicit
|
|
from (SELECT 1 as tip,
|
|
a.an,
|
|
a.luna,
|
|
a.fdoc,
|
|
a.nract,
|
|
a.dataact,
|
|
partd,
|
|
partc,
|
|
a.scd,
|
|
a.scc,
|
|
a.suma,
|
|
a.paymentname as codplata,
|
|
a.paymentname as codplata_implicit
|
|
FROM vact a
|
|
WHERE a.an * 12 + a.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and (SUBSTR(scd, 1, 3) in ('512', '531', '542') or
|
|
SUBSTR(scc, 1, 3) in ('512', '531', '542'))
|
|
and not (SUBSTR(scd,1,3) = '581' or SUBSTR(scc,1,3) = '581')
|
|
and not (partd like '%BANCA COMPENSARI%' or partc like '%BANCA COMPENSARI%')
|
|
and a.paymentcode is null
|
|
union all
|
|
SELECT 2 as tip,
|
|
a.an,
|
|
a.luna,
|
|
a.fdoc,
|
|
a.nract,
|
|
a.dataact,
|
|
partd,
|
|
partc,
|
|
a.scd,
|
|
a.scc,
|
|
a.suma,
|
|
a.paymentname as codplata,
|
|
a.paymentname as codplata_implicit
|
|
FROM vact a
|
|
join plcont p
|
|
on a.scd = p.cont
|
|
and p.an = a.an
|
|
and p.acont is null
|
|
and p.tip_sold = 'P'
|
|
and substr(p.cont, 1, 2) in ('40', '41', '46') and p.cont <> '408'
|
|
WHERE a.an * 12 + a.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and (SUBSTR(scc, 1, 3) not in ('512', '531', '542', '581', '765'))
|
|
and a.paymentcode is null
|
|
union all
|
|
SELECT 2 as tip,
|
|
a.an,
|
|
a.luna,
|
|
a.fdoc,
|
|
a.nract,
|
|
a.dataact,
|
|
partd,
|
|
partc,
|
|
a.scd,
|
|
a.scc,
|
|
a.suma,
|
|
a.paymentname as codplata,
|
|
a.paymentname as codplata_implicit
|
|
FROM vact a
|
|
join plcont p
|
|
on a.scc = p.cont
|
|
and p.an = a.an
|
|
and p.acont is null
|
|
and p.tip_sold = 'A'
|
|
and substr(p.cont, 1, 2) in ('40', '41', '46') and p.cont <> '418'
|
|
WHERE a.an * 12 + a.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and (SUBSTR(scd, 1, 3) not in ('512', '531', '542', '581', '665'))
|
|
and a.paymentcode is null)
|
|
ENDTEXT
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, 'cSAFTPlatiTemp2')
|
|
If m.llSucces
|
|
* Excludere din verificari plati
|
|
* diferente de curs valutar, reevaluari solduri banca/casa in valuta nu trebuie declarate cu cod de plata
|
|
DELETE FROM cSAFTPlatiTemp2 WHERE INLIST(SUBSTR(scd,1,3), '512', '531') AND scc like '765%'
|
|
DELETE FROM cSAFTPlatiTemp2 WHERE INLIST(SUBSTR(scc,1,3), '512', '531') AND scd like '665%'
|
|
|
|
* exclud platile din 542 pentru cheltuieli directe (ex: diurne), fara terti/furnizori
|
|
DELETE FROM cSAFTPlatiTemp2 WHERE INLIST(SUBSTR(scc,1,3), '542') AND scd like '6%'
|
|
|
|
* discount, scont, reduceri, inchidere avansuri
|
|
DELETE FROM cSAFTPlatiTemp2 WHERE INLIST(SUBSTR(scd,1,2), '40', '46') AND INLIST(SUBSTR(scc,1,3), '609', '767', '409')
|
|
DELETE FROM cSAFTPlatiTemp2 WHERE INLIST(SUBSTR(scc,1,2), '41', '46') AND INLIST(SUBSTR(scd,1,3), '709', '667', '419')
|
|
|
|
* garantii retinute din factura. nu sunt plati
|
|
DELETE FROM cSAFTPlatiTemp2 WHERE INLIST(SUBSTR(scc,1,3), '401', '404') AND SUBSTR(scd,1,3) = '167'
|
|
|
|
* EXTRAG RANDURI FARA CONT - NU SUNT CONTURI DE TERTI SI PROBABIL NU SUNT PLATI/INCASARI CATRE TERTI
|
|
lcLista4 = ''
|
|
SELECT cPayments
|
|
SCAN FOR EMPTY(NVL(cont, ''))
|
|
SCATTER NAME loRec
|
|
lnRand = RECNO('cPayments')
|
|
|
|
WITH loRec
|
|
Insert Into cSAFTPlatiTemp2 (tip, nrand, dataact, partd, suma, codplata);
|
|
VALUES (4, m.lnRand, .dataact, .denumire, .suma, .paymentcode)
|
|
|
|
lcLista4 = lcLista4 + IIF(!EMPTY(m.lcLista4), ', ', '') + ALLTRIM(STR(m.lnRand))
|
|
ENDWITH
|
|
ENDSCAN
|
|
|
|
|
|
CALCULATE CNT() TO lnDif IN cSAFTPlatiTemp2
|
|
IF m.lnDif > 0
|
|
SELECT INT(tip) as tip, an, luna, nrand as rand, fdoc as fel_document, nract, TTOD(dataact) as dataact, partd, partc, scd, scc, suma, codplata, codplata_implicit FROM cSAFTPlatiTemp2 ORDER BY tip, an, luna, dataact, nract INTO CURSOR cSaftPlatiTemp
|
|
|
|
*!* llOk = ExportExcelXml("cSAFTPlatiTemp", "plati_saft",'plati',.T.)
|
|
goExport.export2xlsx("cSAFTPlatiTemp", "verificare_plati_saft_" + gofirma.codfiscalfro + '_' + ALLTRIM(STR(m.gnAn)) + PADL(m.gnLuna,2,'0'))
|
|
|
|
USE IN (SELECT('cSAFTPlatiTemp'))
|
|
|
|
AMESSAGEBOX('Tip = 1 : Plati/incasari (512/531/542) care nu au completat Cod Plata SAFT (exclusiv 581, 665/765, BANCA COMPENSARI)' + CHR(13) + CHR(10) + ;
|
|
'Tip = 2 : Plati/incasari 40x/462/4xx = x sau x = 41x/461/4xx care nu au completat Cod Plata SAFT' + CHR(13) + CHR(10) + ;
|
|
IIF(EMPTY(m.lcLista4), '', ;
|
|
CHR(13) + CHR(10) + ;
|
|
'Randurile urmatoare nu au conturi de terti dar au cod de plata in Registrul Jurnal: ' + m.lcLista4 + CHR(13) + CHR(10) + ;
|
|
'Stergeti codul de plata daca nu sunt incasari/plati catre terti!'), 0+64, _screen.Caption)
|
|
ELSE
|
|
AMESSAGEBOX('Nu sunt diferente!' + CHR(13) + CHR(10) + ;
|
|
'Tip = 1 : Plati/incasari (512/531/542) care nu au completat Cod Plata SAFT (exclusiv 581, 665/765, BANCA COMPENSARI)' + CHR(13) + CHR(10) + ;
|
|
'Tip = 2 : Plati/incasari 40x/462/4xx = x sau x = 41x/461/4xx care nu au completat Cod Plata SAFT', 0+64, _screen.Caption)
|
|
ENDIF
|
|
USE IN (SELECT('cSAFTPlatiTemp2'))
|
|
|
|
ENDIF
|
|
ENDPROC && do_verifica_plati
|
|
|
|
*********************************
|
|
* verific daca toate notele cu explicatie TVA au cod taxa
|
|
*********************************
|
|
PROCEDURE do_verifica_tva
|
|
Local lcSql, llOk, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
* 1 = Inregistrarile cu Explicatie TVA, dar fara TaxCode, inclusiv note TVA 4426/4427, fara 4428 ,exceptand Limitare deducere TVA)
|
|
* 2 = Inregistrari cu TaxCode diferit fata de TaxCode implicit (bazat pe Explicatie TVA, data, furnizor TVAI)
|
|
* 3 = Inregistrari 442x cu explicatie TVA baza in loc de TVA ???
|
|
Text To m.lcSql Noshow Textmerge
|
|
select 1 as tip,
|
|
an,
|
|
luna,
|
|
nract,
|
|
dataact,
|
|
partd,
|
|
partc,
|
|
scd,
|
|
scc,
|
|
suma,
|
|
explicatie_tva,
|
|
taxname as codtaxa,
|
|
taxname as codtaxa_implicit
|
|
FROM vact a
|
|
WHERE a.an * 12 + a.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and NVL(a.id_jtva_coloana, 0) <> 0
|
|
and a.taxcode is null
|
|
and ((a.scd not in ('4428')
|
|
and a.scc not in ('4428')) or a.id_jtva_coloana in (1001,1004,1005))
|
|
union all
|
|
SELECT b.tip,
|
|
b.an,
|
|
b.luna,
|
|
b.nract,
|
|
b.dataact,
|
|
b.partd,
|
|
b.partc,
|
|
b.scd,
|
|
b.scc,
|
|
b.suma,
|
|
b.explicatie_tva,
|
|
b.taxname as codtaxa,
|
|
t.taxname as codtaxa_implicit
|
|
from (select 2 as tip,
|
|
an,
|
|
luna,
|
|
nract,
|
|
dataact,
|
|
a.partd,
|
|
a.partc,
|
|
scd,
|
|
scc,
|
|
a.suma,
|
|
explicatie_tva,
|
|
taxname,
|
|
taxcode,
|
|
pack_saft.gettaxcode(a.an,
|
|
a.luna,
|
|
a.dataact,
|
|
a.id_jtva_coloana,
|
|
a.cod,
|
|
nvl(a.id_partc, id_partd)) as taxcodex
|
|
FROM vact a
|
|
WHERE a.an * 12 + a.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and NVL(a.id_jtva_coloana, 0) <> 0
|
|
and a.taxcode is not null) b
|
|
left join vsaft_taxtable t
|
|
on b.taxcodex = t.taxcode
|
|
where NVL(b.taxcode, 0) <> NVL(b.taxcodex, 0)
|
|
Endtext
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, 'cSAFTTaxaTemp2')
|
|
|
|
If m.llSucces
|
|
* 3 = Inregistrari 442x cu explicatie TVA baza in loc de TVA ???
|
|
SELECT 3 as tip, m.gnAn as an, m.gnLuna as luna, nract, dataact, IIF(tipdc = 'D', cont, SPACE(4)) as scd, IIF(tipdc = 'C', cont, SPACE(4)) as scc, ;
|
|
suma, explicatie_tva,taxname, taxcode ;
|
|
FROM cGeneralLedgerEntries ;
|
|
WHERE LEFT(cont, 3) = '442' AND taxa <> 0;
|
|
ORDER BY dataact, nract ;
|
|
INTO CURSOR cAct442x
|
|
|
|
SELECT cSAFTTaxaTemp2
|
|
APPEND FROM DBF('cAct442x')
|
|
USE IN (SELECT('cAct442x'))
|
|
|
|
IF RECCOUNT('cSAFTTaxaTemp2') > 0
|
|
SELECT INT(tip) as tip, an, luna, nract, TTOD(dataact) as dataact, partd, partc, scd, scc, suma, explicatie_tva, codtaxa, codtaxa_implicit FROM cSAFTTaxaTemp2 ORDER BY tip, an, luna, dataact, nract INTO CURSOR cSAFTTaxaTemp
|
|
|
|
* llOk = ExportExcelXml("cSAFTTaxaTemp", "taxa_tva_saft",'taxa',.T.)
|
|
goExport.export2xlsx("cSAFTTaxaTemp", "verificare_taxa_tva_saft_" + gofirma.codfiscalfro + '_' + ALLTRIM(STR(m.gnAn)) + PADL(m.gnLuna,2,'0'))
|
|
|
|
USE IN (SELECT('cSAFTTaxaTemp'))
|
|
|
|
AMESSAGEBOX('Tip = 1 : Note Reg. Jurnal - Explicatie TVA fara Cod Taxa SAFT' + CHR(13) + CHR(10) + ;
|
|
'Tip = 2 : Note Reg. Jurnal - Cod Taxa SAFT diferit fata de Cod Taxa implicit' + CHR(13) + CHR(10) + ;
|
|
'Tip = 3 : Note D406 - conturi TVA 442x care au suma TVA completata. Verificati Explicatia TVA in Reg. Jurnal', 0+64, _screen.Caption)
|
|
ELSE
|
|
AMESSAGEBOX('Nu sunt diferente!' + CHR(13) + CHR(10) + CHR(13) + CHR(10) + ;
|
|
'Tip = 1 : Note Reg. Jurnal - Explicatie TVA fara Cod Taxa SAFT' + CHR(13) + CHR(10) + ;
|
|
'Tip = 2 : Note Reg. Jurnal - Cod Taxa SAFT diferit fata de Cod Taxa implicit' + CHR(13) + CHR(10) + ;
|
|
'Tip = 3 : Note D406 - conturi TVA 442x care au suma TVA completata. Verificati Explicatia TVA in Reg. Jurnal', 0+64, _screen.Caption)
|
|
ENDIF
|
|
USE IN (SELECT('cSAFTTaxaTemp2'))
|
|
ENDIF
|
|
ENDPROC && do_verifica_tva
|
|
|
|
|
|
*********************************
|
|
* verific daca toate notele cu explicatie TVA au cod taxa
|
|
*********************************
|
|
PROCEDURE do_verifica_wht
|
|
Local lcSql, llOk, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
* 1 = Inregistrarile 4423,4424,441,444,431,436,446,448, fara TaxCode
|
|
* 2 = Inregistrari cu TaxCode diferit fata de TaxCode implicit
|
|
|
|
Text To m.lcSql Noshow Textmerge
|
|
select 1 as tip,
|
|
an,
|
|
luna,
|
|
nract,
|
|
dataact,
|
|
partd,
|
|
partc,
|
|
scd,
|
|
scc,
|
|
explicatie_tva,
|
|
taxname as codtaxa,
|
|
taxname as codtaxa_implicit
|
|
FROM vact a
|
|
WHERE a.an * 12 + a.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and (a.scd in ('4423','4424') or SUBSTR(a.scd,1,3) in ('441','444','431','436','446','448')
|
|
or a.scc in ('4423','4424') or SUBSTR(a.scc,1,3) in ('441','444','431','436','446','448'))
|
|
and a.taxcode is null
|
|
Endtext
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, 'cSAFTTaxaTemp2')
|
|
|
|
If m.llSucces
|
|
IF RECCOUNT('cSAFTTaxaTemp2') > 0
|
|
SELECT INT(tip) as tip, an, luna, nract, TTOD(dataact) as dataact, partd, partc, scd, scc, explicatie_tva, codtaxa, codtaxa_implicit FROM cSAFTTaxaTemp2 ORDER BY tip, an, luna, dataact, nract INTO CURSOR cSAFTTaxaTemp
|
|
|
|
* llOk = ExportExcelXml("cSAFTTaxaTemp", "taxe_impozite_saft",'taxa',.T.)
|
|
goExport.export2xlsx("cSAFTTaxaTemp", "verificare_taxe_impozite_saft_" + gofirma.codfiscalfro + '_' + ALLTRIM(STR(m.gnAn)) + PADL(m.gnLuna,2,'0'))
|
|
|
|
USE IN (SELECT('cSAFTTaxaTemp'))
|
|
|
|
AMESSAGEBOX('Tip = 1 : Note din Registrul Jurnal (taxe si impozite) 4423,4424,441,444,431,436,446,448, care nu au completat Cod Taxa SAFT' + CHR(13) + CHR(10) + ;
|
|
'Este obligatoriu sa aiba cod taxa notele care reprezinta impozite cu retinere la sursa', 0+64, _screen.Caption)
|
|
ELSE
|
|
AMESSAGEBOX('Nu sunt diferente' + CHR(13) + CHR(10) + CHR(13) + CHR(10) + ;
|
|
'Tip = 1 : Note din Registrul Jurnal (taxe si impozite) 4423,4424,441,444,431,436,446,448, care nu au completat Cod Taxa SAFT' + CHR(13) + CHR(10) + ;
|
|
'Este obligatoriu sa aiba cod taxa notele care reprezinta impozite cu retinere la sursa', 0+64, _screen.Caption)
|
|
ENDIF
|
|
USE IN (SELECT('cSAFTTaxaTemp2'))
|
|
ENDIF
|
|
|
|
ENDPROC && do_verifica_wht
|
|
|
|
|
|
*************************************************
|
|
* Verifica coduri fiscale cu serviciul web ANAF doar partnerii activi in perioada de raportare
|
|
* verifica solduri cu balanta de parteneri
|
|
*************************************************
|
|
PROCEDURE do_verifica_cui
|
|
LPARAMETERS tcCursor, tlSilent
|
|
* tcCursor: cCustomers/cSuppliers
|
|
|
|
#Define CRLF Chr(13) + Chr(10)
|
|
|
|
LOCAL llSilent, lcMesaj, lcListaGol
|
|
LOCAL lcCod, lcListaInvalid, lcTextInvalid, llCnp, lnInvalid, lnInvalidCnp, loVerif
|
|
LOCAL lcContInv, lcDenumireInv, lnIdPartInv, lnRandInv, lnTipPersInv
|
|
|
|
lcMesaj = ''
|
|
lcTextInvalid = ''
|
|
|
|
llSilent = m.tlSilent
|
|
|
|
Local lcCursor, lcSelect, lcSql, llClient, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2
|
|
lcSelect = Select()
|
|
|
|
llClient = 'CUSTOMER'$Upper(Alltrim(m.tcCursor))
|
|
lcCursor = m.tcCursor
|
|
lcListaConturi = Iif(m.llClient, ['4111','4118','461','418', '419'], ['401','404','462','408','409'])
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
*!* lnOptiune = XMENU('Verifica solduri; Verifica toti partenerii - ANAF')
|
|
lnOptiune = 1
|
|
If Empty(m.lnOptiune)
|
|
Return
|
|
Endif
|
|
|
|
* Pot sa fac verificarea pentru un singur nume si cu formularul pentru mai multi parteneri, dar arata mai dragut informatia intr-un messagebox pentru unul singur
|
|
If m.lnOptiune = 1 && verifica solduri
|
|
|
|
* cursor solduri initiale, finale din vbalanta_parteneri
|
|
TEXT TO m.lcSql TEXTMERGE NOSHOW
|
|
select nvl(b1.id_part, b2.id_part) as id_part,
|
|
NVL(b1.denumire, b2.denumire) as denumire,
|
|
nvl(b1.cont, b2.cont) as cont,
|
|
(case
|
|
when b1.precdeb >= b1.preccred then
|
|
b1.precdeb - b1.preccred
|
|
else
|
|
0
|
|
end) as soldideb,
|
|
(case
|
|
when b1.preccred > b1.precdeb then
|
|
b1.preccred - b1.precdeb
|
|
else
|
|
0
|
|
end) as soldicred,
|
|
(case
|
|
when b2.solddeb >= b2.soldcred then
|
|
b2.solddeb - b2.soldcred
|
|
else
|
|
0
|
|
end) as soldfdeb,
|
|
(case
|
|
when b2.soldcred > b2.solddeb then
|
|
b2.soldcred - b2.solddeb
|
|
else
|
|
0
|
|
end) as soldfcred
|
|
from (select id_part,
|
|
nume as denumire,
|
|
cont,
|
|
sum(precdeb) as precdeb,
|
|
sum(preccred) as preccred
|
|
from vbalanta_parteneri
|
|
where an = <<m.lnAn1>>
|
|
and luna = <<m.lnLuna1>>
|
|
and cont in (<<m.lcListaConturi>>)
|
|
group by id_part,nume,cont) b1
|
|
full join (select id_part,
|
|
nume as denumire,
|
|
cont,
|
|
SUM(solddeb) as solddeb,
|
|
SUM(soldcred) as soldcred
|
|
from vbalanta_parteneri
|
|
where an = <<m.lnAn2>>
|
|
and luna = <<m.lnLuna2>>
|
|
and cont in (<<m.lcListaConturi>>)
|
|
group by id_part,nume,cont) b2
|
|
on b1.id_part = b2.id_part
|
|
and b1.cont = b2.cont
|
|
ENDTEXT
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, 'cBalPartTemp')
|
|
|
|
If m.llSucces
|
|
SELECT NVL(a.id_part, b.id_part) as id_part, NVL(a.cont, b.cont) as cont, ;
|
|
NVL(a.denumire, b.denumire) as denumire, ;
|
|
IIF(m.llClient, a.soldideb - a.soldicred, a.soldicred-a.soldideb) as saft_soldi, ;
|
|
IIF(m.llClient, a.soldfdeb - a.soldfcred, a.soldfcred-a.soldfdeb) as saft_soldf, ;
|
|
IIF(m.llClient, b.soldideb - b.soldicred, b.soldicred-b.soldideb) as balp_soldi, ;
|
|
IIF(m.llClient, b.soldfdeb - b.soldfcred, b.soldfcred-b.soldfdeb) as balp_soldf, ;
|
|
IIF(m.llClient, a.soldideb - a.soldicred - (b.soldideb - b.soldicred), a.soldicred-a.soldideb - (b.soldicred-b.soldideb)) as diferenta ;
|
|
FROM (m.lcCursor) a JOIN cBalPartTemp b ON a.id_part = b.id_part AND a.cont = b.cont ;
|
|
WHERE NVL(a.soldideb,0) <> NVL(b.soldideb,0) OR ;
|
|
NVL(a.soldicred,0) <> NVL(b.soldicred,0) OR ;
|
|
NVL(a.soldfdeb,0) <> NVL(b.soldfdeb,0) OR ;
|
|
NVL(a.soldfcred,0) <> NVL(b.soldfcred,0) ;
|
|
INTO CURSOR cPartDif
|
|
|
|
|
|
* EXTRAG RANDURI FARA cod partener saft - probabil sunt persoane juridice fara cod fiscal sau persoane fizice marcate ca persoane juridice fara cod fiscal
|
|
lcListaGol = ''
|
|
IF m.llClient
|
|
SELECT cCustomers
|
|
ELSE
|
|
SELECT cSuppliers
|
|
ENDIF
|
|
SCAN FOR !EMPTY(NVL(id_part,0)) AND EMPTY(NVL(saftpartid, ''))
|
|
SCATTER NAME loRec
|
|
lnRand = RECNO()
|
|
lcListaGol = lcListaGol + IIF(!EMPTY(m.lcListaGol ), ', ', '') + ALLTRIM(STR(m.lnRand))
|
|
ENDSCAN
|
|
GO TOP
|
|
|
|
*!* 24.07.2026 verific validitatea codurilor fiscale (CNP/CUI) la toti partenerii exportati in declaratie (nu doar cei activi in perioada)
|
|
lcListaInvalid = ''
|
|
lnInvalid = 0
|
|
lnInvalidCnp = 0
|
|
loVerif = CREATEOBJECT('VerificareCod')
|
|
*!* 26.07.2026 retin codurile invalide intr-un cursor, ca sa poata fi exportate si corectate in nomenclator
|
|
CREATE CURSOR cCodInvalid (rand N(7), id_part N(10), denumire C(150), cod_fiscal C(30), tip_cod C(3), tip_persoana N(1), cont C(10))
|
|
SELECT (m.lcCursor)
|
|
SCAN FOR !EMPTY(NVL(id_part,0)) AND !EMPTY(NVL(cod_fiscal, '')) ;
|
|
AND INLIST(ALLTRIM(NVL(cod_tara, 'RO')), 'RO', '')
|
|
lcCod = ALLTRIM(cod_fiscal)
|
|
llCnp = (NVL(tip_persoana, 1) = 2) OR (LEN(CHRTRAN(m.lcCod, '0123456789', '')) = 0 AND LEN(m.lcCod) > 10)
|
|
IF !This.CodFiscalValidSaft(m.lcCod, m.llCnp, m.loVerif)
|
|
lnInvalid = m.lnInvalid + 1
|
|
lnInvalidCnp = m.lnInvalidCnp + IIF(m.llCnp, 1, 0)
|
|
lcListaInvalid = m.lcListaInvalid + IIF(EMPTY(m.lcListaInvalid), '', ', ') + ALLTRIM(STR(RECNO()))
|
|
lnRandInv = RECNO()
|
|
lnIdPartInv = id_part
|
|
lcDenumireInv = NVL(denumire, '')
|
|
lnTipPersInv = NVL(tip_persoana, 1)
|
|
lcContInv = NVL(cont, '')
|
|
INSERT INTO cCodInvalid (rand, id_part, denumire, cod_fiscal, tip_cod, tip_persoana, cont) ;
|
|
VALUES (m.lnRandInv, m.lnIdPartInv, m.lcDenumireInv, m.lcCod, IIF(m.llCnp, 'CNP', 'CUI'), m.lnTipPersInv, m.lcContInv)
|
|
SELECT (m.lcCursor)
|
|
ENDIF
|
|
ENDSCAN
|
|
GO TOP
|
|
loVerif = .NULL.
|
|
|
|
IF m.lnInvalid > 0
|
|
lcTextInvalid = CRLF + SPACE(10) + 'ATENTIE! Randuri cu cod fiscal invalid (' + ALLTRIM(STR(m.lnInvalid)) + ;
|
|
': CNP ' + ALLTRIM(STR(m.lnInvalidCnp)) + ', CUI ' + ALLTRIM(STR(m.lnInvalid - m.lnInvalidCnp)) + '): ' + ALLTRIM(LEFT(m.lcListaInvalid, 50)) + ;
|
|
CRLF + SPACE(10) + IIF(m.llSilent, 'Lista completa: apasati butonul "Verificare coduri fiscale" de pe clienti/furnizori', 'Lista completa in fisierul Excel exportat') + ;
|
|
CRLF + SPACE(10) + 'Stergeti CNP-urile din "Initializari cod taxa/plata" > "Stergere CNP-uri invalide", restul se corecteaza in nomenclatorul de parteneri'
|
|
IF !m.llSilent
|
|
goExport.export2xlsx('cCodInvalid', 'coduri_fiscale_invalide' + IIF(m.llClient, '_clienti_', '_furnizori_') + ALLTRIM(STR(m.gnAn)) + PADL(m.gnLuna,2,'0'))
|
|
SELECT (m.lcCursor)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF RECCOUNT('cPartDif') > 0
|
|
*llOk = ExportExcelXml("cverifica_solduri", "solduri" + IIF(m.llClient, '_clienti', '_furnizori'),'solduri',.T.)
|
|
goExport.export2xlsx("cverifica_solduri", "verificare_solduri" + IIF(m.llClient, '_clienti_', '_furnizori_') + ALLTRIM(STR(m.gnAn)) + PADL(m.gnLuna,2,'0') )
|
|
|
|
lcMesaj = 'SOLDURI DIFERITE FATA DE BALANTA PARTENERI!' + ;
|
|
IIF(EMPTY(m.lcListaGol), '', CHR(13) + CHR(10) + SPACE(10) + 'Randuri cu ' + IIF(m.llClient, 'clienti', 'furnizori') + ' fara cod fiscal: ' + ALLTRIM(LEFT(m.lcListaGol, 50))) + m.lcTextInvalid
|
|
IF !m.llSilent
|
|
AMESSAGEBOX(lcMesaj,0+64, _screen.Caption)
|
|
ENDIF
|
|
|
|
ELSE
|
|
*!* lcMesaj ='Nu exista parteneri cu solduri in declaratie diferite fata de soldurile din balanta de parteneri'
|
|
lcMesaj ='Nu sunt diferente fata de balanta parteneri' + ;
|
|
IIF(EMPTY(m.lcListaGol), '', CHR(13) + CHR(10) + SPACE(10) + 'Randuri cu ' + IIF(m.llClient, 'clienti', 'furnizori') + ' fara cod fiscal: ' + ALLTRIM(LEFT(m.lcListaGol, 50))) + m.lcTextInvalid
|
|
IF !m.llSilent
|
|
AMESSAGEBOX(m.lcMesaj,0+64,_screen.Caption)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
USE IN (SELECT('cBalPartTemp'))
|
|
USE IN (SELECT('cPartDif'))
|
|
USE IN (SELECT('cCodInvalid'))
|
|
Else
|
|
llDontCloseCursor = .F.
|
|
llExperimental = .F.
|
|
llVerificarePlatitorTVA = .F. && verific VIES pentru toti partenerii
|
|
llMFIN = .T. && verific MFIN pentru toata lumea
|
|
llValidare = .T. && verific algoritmul codurilor fiscale
|
|
llAutoVerificare = .T. && lanseaza verificarea automata la activate-ul formularului de verificare
|
|
llServiciuWebANAF = .T.
|
|
|
|
* verific is_activ = 1 (exista in JV/JC in perioada de raportare)
|
|
lcFilter = Filter(m.tcCursor)
|
|
lcWhere = [is_activ = 1 and (EMPTY(NVL(cod_tara,'')) OR cod_tara = 'RO') and ] + Iif(m.lnOptiune = 1, "recno() = " + Alltrim(Str(Recno())), Iif(!Empty(m.lcFilter), m.lcFilter, ".T."))
|
|
Select Distinct id_part, cod_fiscal, denumire, Iif(Left(Upper(cod_fiscal), 2) = "RO", "RO", " ") As ATRIBUT_FISCAL, .T. As IsCIF, .F. As codvalid ;
|
|
From (m.tcCursor) ;
|
|
Where &lcWhere ;
|
|
Into Cursor crsCoduriFiscale ;
|
|
Order By denumire, cod_fiscal ;
|
|
Readwrite
|
|
|
|
|
|
Local lcXMLParteneri
|
|
lcXMLParteneri = ""
|
|
Cursortoxml('crsCoduriFiscale', "lcXMLParteneri", 1, 0, 0, "1")
|
|
|
|
Do verificare_parteneri With m.lcXMLParteneri, m.llValidare, m.llMFIN, m.llVerificarePlatitorTVA, m.llAutoVerificare, m.llDontCloseCursor, m.llExperimental, m.llServiciuWebANAF
|
|
|
|
USE IN (SELECT('crsCoduriFiscale'))
|
|
Endif && x = 1
|
|
|
|
RETURN lcMesaj
|
|
ENDPROC && do_verifica_cui
|
|
|
|
*************************************************
|
|
* Validare cod fiscal dupa regulile validatorului ANAF pentru RegistrationNumber/CustomerID
|
|
* tlCnp: .T. = cod de persoana fizica (CNP), .F. = cod de persoana juridica (CUI)
|
|
* toVerif: obiect VerificareCod, optional (ca sa nu se instantieze la fiecare cod)
|
|
*************************************************
|
|
PROCEDURE CodFiscalValidSaft
|
|
LPARAMETERS tcCod, tlCnp, toVerif
|
|
LOCAL lcCod
|
|
|
|
lcCod = ALLTRIM(UPPER(NVL(m.tcCod, '')))
|
|
*!* la persoana juridica GenCustSupCode scoate atributul fiscal din codul SAF-T, la persoana fizica nu
|
|
IF !m.tlCnp AND LEFT(m.lcCod, 2) = 'RO'
|
|
lcCod = ALLTRIM(SUBSTR(m.lcCod, 3))
|
|
ENDIF
|
|
|
|
*!* 26.07.2026 ANAF cere numai cifre, fara zero la inceput, exact 13 la CNP si maxim 10 la CUI - validarea cifrei de control nu prinde asta
|
|
IF !EMPTY(CHRTRAN(m.lcCod, '0123456789', '')) OR LEFT(m.lcCod, 1) = '0' OR ;
|
|
IIF(m.tlCnp, LEN(m.lcCod) <> 13, !BETWEEN(LEN(m.lcCod), 2, 10))
|
|
RETURN .F.
|
|
ENDIF
|
|
|
|
RETURN IIF(m.tlCnp, VALIDARE_CNP(m.lcCod, m.toVerif), VALIDARE_CIF(m.lcCod, m.toVerif))
|
|
ENDPROC && CodFiscalValidSaft
|
|
|
|
*************************************************
|
|
* Extrage din fisierul de raspuns al validatorului ANAF erorile de cod partener
|
|
* (RegistrationNumber/CustomerID/SupplierID) si le pune in cursorul cEroriPartSaft
|
|
* Intoarce textul de afisat, gol daca nu sunt astfel de erori
|
|
*************************************************
|
|
PROCEDURE do_erori_partener_saft
|
|
LPARAMETERS tcFisierRaspuns
|
|
|
|
LOCAL lcCod, lcCursor, lcDenumire, lcId, lcLinie, lcLocatie, lcMesaj, lcPagina, lcRest, lcSelect, lcTag, lcTipCod, lcTipPart
|
|
LOCAL lnFile, lnI, lnIdPart, lnJ, lnNrErori, lnParteneri, lnPoz, lnRand
|
|
|
|
lcMesaj = ''
|
|
lcSelect = Select()
|
|
|
|
IF !FILE(m.tcFisierRaspuns)
|
|
RETURN m.lcMesaj
|
|
ENDIF
|
|
|
|
*!* fiecare eroare are 2 linii: localizarea "E: MasterFiles (1) sectiune Customers (1) sectiune Customer (162) ..."
|
|
*!* si regula " eroare regula: CustomerID: Pentru CustomerID 00I14770212 formatul este invalid"
|
|
CREATE CURSOR cErrTemp (saftpartid C(30), pagina C(10), rand N(7))
|
|
lnFile = FOPEN(m.tcFisierRaspuns, 0)
|
|
IF m.lnFile < 0
|
|
USE IN (SELECT('cErrTemp'))
|
|
SELECT (m.lcSelect)
|
|
RETURN m.lcMesaj
|
|
ENDIF
|
|
lcLocatie = ''
|
|
DO WHILE !FEOF(m.lnFile)
|
|
lcLinie = FGETS(m.lnFile, 8192)
|
|
IF LEFT(LTRIM(m.lcLinie), 2) == 'E:'
|
|
lcLocatie = m.lcLinie
|
|
LOOP
|
|
ENDIF
|
|
lnPoz = ATC('Pentru ', m.lcLinie)
|
|
IF m.lnPoz = 0
|
|
LOOP
|
|
ENDIF
|
|
lcRest = ALLTRIM(SUBSTR(m.lcLinie, m.lnPoz + 7))
|
|
lcTag = GETWORDNUM(m.lcRest, 1)
|
|
IF !INLIST(m.lcTag, 'RegistrationNumber', 'CustomerID', 'SupplierID')
|
|
LOOP
|
|
ENDIF
|
|
lcId = GETWORDNUM(m.lcRest, 2)
|
|
IF EMPTY(m.lcId)
|
|
LOOP
|
|
ENDIF
|
|
|
|
*!* pagina si randul din grid = sectiunea si indexul partenerului din MasterFiles ("sectiune Customer (162)")
|
|
lcPagina = ''
|
|
lnRand = 0
|
|
lnPoz = ATC('sectiune Customer (', m.lcLocatie)
|
|
IF m.lnPoz > 0
|
|
lcPagina = 'Customers'
|
|
ELSE
|
|
lnPoz = ATC('sectiune Supplier (', m.lcLocatie)
|
|
IF m.lnPoz > 0
|
|
lcPagina = 'Suppliers'
|
|
ENDIF
|
|
ENDIF
|
|
IF m.lnPoz > 0
|
|
lnRand = INT(VAL(SUBSTR(m.lcLocatie, m.lnPoz + 19)))
|
|
ENDIF
|
|
|
|
INSERT INTO cErrTemp (saftpartid, pagina, rand) VALUES (m.lcId, m.lcPagina, m.lnRand)
|
|
ENDDO
|
|
= FCLOSE(m.lnFile)
|
|
|
|
* Un cod poate aparea pe mai multe randuri (parteneri diferiti cu acelasi cod) si in sectiunile de documente
|
|
SELECT saftpartid, COUNT(*) AS nr_erori, MAX(rand) AS max_rand FROM cErrTemp GROUP BY 1 INTO CURSOR cErrCod
|
|
SELECT DISTINCT saftpartid, pagina, rand FROM cErrTemp WHERE rand > 0 ORDER BY 2, 3 INTO CURSOR cErrGrup
|
|
USE IN (SELECT('cErrTemp'))
|
|
|
|
* Identific partenerul dupa codul SAF-T, in cursoarele declaratiei
|
|
CREATE CURSOR cEroriPartSaft (pagina C(10), rand N(7), saftpartid C(30), tip_cod C(3), id_part N(10), denumire C(150), cod_fiscal C(30), tip_part C(9), nr_erori N(6))
|
|
SELECT cErrGrup
|
|
SCAN
|
|
lcId = ALLTRIM(cErrGrup.saftpartid)
|
|
lcPagina = cErrGrup.pagina
|
|
lnRand = cErrGrup.rand
|
|
lnNrErori = 0
|
|
SELECT cErrCod
|
|
LOCATE FOR ALLTRIM(cErrCod.saftpartid) == m.lcId
|
|
IF FOUND()
|
|
lnNrErori = cErrCod.nr_erori
|
|
ENDIF
|
|
lcTipPart = ''
|
|
lnIdPart = 0
|
|
lcDenumire = ''
|
|
lcCod = ''
|
|
FOR lnJ = 1 TO 2
|
|
lcCursor = IIF(m.lnJ = 1, 'cCustomers', 'cSuppliers')
|
|
IF !USED(m.lcCursor)
|
|
LOOP
|
|
ENDIF
|
|
SELECT (m.lcCursor)
|
|
LOCATE FOR ALLTRIM(NVL(saftpartid, '')) == m.lcId
|
|
IF FOUND()
|
|
lcTipPart = IIF(m.lnJ = 1, 'Client', 'Furnizor')
|
|
lnIdPart = NVL(id_part, 0)
|
|
lcDenumire = NVL(denumire, '')
|
|
lcCod = ALLTRIM(NVL(cod_fiscal, ''))
|
|
ENDIF
|
|
GO TOP
|
|
IF !EMPTY(m.lcTipPart)
|
|
EXIT
|
|
ENDIF
|
|
ENDFOR
|
|
lcTipCod = IIF(LEFT(m.lcId, 2) = '03', 'CNP', IIF(INLIST(LEFT(m.lcId, 2), '00', '01', '02'), 'CUI', ''))
|
|
INSERT INTO cEroriPartSaft (pagina, rand, saftpartid, tip_cod, id_part, denumire, cod_fiscal, tip_part, nr_erori) ;
|
|
VALUES (m.lcPagina, m.lnRand, m.lcId, m.lcTipCod, m.lnIdPart, m.lcDenumire, m.lcCod, m.lcTipPart, m.lnNrErori)
|
|
SELECT cErrGrup
|
|
ENDSCAN
|
|
USE IN (SELECT('cErrGrup'))
|
|
|
|
* Codurile semnalate numai in sectiunile de documente, fara rand in Customers/Suppliers
|
|
SELECT cErrCod
|
|
SCAN FOR cErrCod.max_rand = 0
|
|
lcId = ALLTRIM(cErrCod.saftpartid)
|
|
lcTipCod = IIF(LEFT(m.lcId, 2) = '03', 'CNP', IIF(INLIST(LEFT(m.lcId, 2), '00', '01', '02'), 'CUI', ''))
|
|
INSERT INTO cEroriPartSaft (pagina, rand, saftpartid, tip_cod, nr_erori) ;
|
|
VALUES ('', 0, m.lcId, m.lcTipCod, cErrCod.nr_erori)
|
|
SELECT cErrCod
|
|
ENDSCAN
|
|
USE IN (SELECT('cErrCod'))
|
|
|
|
lnParteneri = RECCOUNT('cEroriPartSaft')
|
|
IF m.lnParteneri = 0
|
|
USE IN (SELECT('cEroriPartSaft'))
|
|
SELECT (m.lcSelect)
|
|
RETURN m.lcMesaj
|
|
ENDIF
|
|
|
|
lcMesaj = 'Coduri de partener respinse de validatorul ANAF: ' + ALLTRIM(STR(m.lnParteneri))
|
|
lnI = 0
|
|
SELECT cEroriPartSaft
|
|
SCAN
|
|
lnI = m.lnI + 1
|
|
IF m.lnI > 10
|
|
lcMesaj = m.lcMesaj + CHR(13) + CHR(10) + SPACE(3) + '...'
|
|
EXIT
|
|
ENDIF
|
|
lcMesaj = m.lcMesaj + CHR(13) + CHR(10) + SPACE(3) + PADR(ALLTRIM(cEroriPartSaft.pagina), 11) + ;
|
|
PADL(IIF(cEroriPartSaft.rand > 0, ALLTRIM(STR(cEroriPartSaft.rand)), '-'), 5) + SPACE(2) + ;
|
|
PADR(ALLTRIM(cEroriPartSaft.saftpartid), 18) + PADR(ALLTRIM(cEroriPartSaft.tip_cod), 4) + ALLTRIM(cEroriPartSaft.denumire)
|
|
ENDSCAN
|
|
GO TOP
|
|
SELECT (m.lcSelect)
|
|
|
|
RETURN m.lcMesaj
|
|
ENDPROC && do_erori_partener_saft
|
|
|
|
*************************************************
|
|
* Parseaza fisierul de raspuns al validatorului ANAF, grupeaza erorile cu
|
|
* explicatii pe intelesul utilizatorului si separa erorile fictive de TaxCode
|
|
* (bug DUKIntegrator: apar cand exista alta eroare reala, pentru coduri valide)
|
|
* Scrie raportul in <fisier>_explicat.txt si intoarce calea lui, gol la esec
|
|
*************************************************
|
|
PROCEDURE do_erori_saft
|
|
LPARAMETERS tcFisierRaspuns, tnReale, tnFictive, tcMesajChat
|
|
|
|
LOCAL lcActiune, lcCRLF, lcCod, lcFisierExplicat, lcIdent, lcLegenda, lcLinie, lcLocatie, lcMarker
|
|
LOCAL lcMesaj, lcMesajChat, lcPagina, lcProblema, lcRaport, lcSelect, lcValoare, llFictiv, lnCateg
|
|
LOCAL lnFictive, lnFile, lnI, lnPoz, lnRand, lnReale
|
|
|
|
lcFisierExplicat = ''
|
|
lcCRLF = CHR(13) + CHR(10)
|
|
lcSelect = SELECT()
|
|
|
|
IF !FILE(m.tcFisierRaspuns)
|
|
RETURN m.lcFisierExplicat
|
|
ENDIF
|
|
|
|
*!* o eroare = linia de localizare "E:/F: sectiune ... (N)" + linia de mesaj; erorile fatale de parsare sunt pe o singura linie
|
|
CREATE CURSOR cErrSaft (categ N(3), pagina C(30), rand N(7), valoare C(30), mesaj C(240), brut M)
|
|
lnFile = FOPEN(m.tcFisierRaspuns, 0)
|
|
IF m.lnFile < 0
|
|
USE IN (SELECT('cErrSaft'))
|
|
SELECT (m.lcSelect)
|
|
RETURN m.lcFisierExplicat
|
|
ENDIF
|
|
lcLocatie = ''
|
|
DO WHILE !FEOF(m.lnFile)
|
|
lcLinie = FGETS(m.lnFile, 8192)
|
|
IF INLIST(LEFT(LTRIM(m.lcLinie), 2), 'E:', 'F:')
|
|
lcLocatie = m.lcLinie
|
|
LOOP
|
|
ENDIF
|
|
IF ATC('Eroare fatala de parsare', m.lcLinie) > 0
|
|
INSERT INTO cErrSaft (categ, pagina, rand, valoare, mesaj, brut) VALUES (11, '', 0, '', LEFT(ALLTRIM(m.lcLinie), 240), m.lcLinie)
|
|
lcLocatie = ''
|
|
LOOP
|
|
ENDIF
|
|
lcMesaj = ALLTRIM(m.lcLinie)
|
|
IF EMPTY(m.lcMesaj) OR EMPTY(m.lcLocatie)
|
|
LOOP
|
|
ENDIF
|
|
|
|
* pagina din aplicatie, dupa sectiunea din linia de localizare
|
|
DO CASE
|
|
CASE ATC('PurchaseInvoices', m.lcLocatie) > 0
|
|
lcPagina = 'Facturi achizitie'
|
|
CASE ATC('SalesInvoices', m.lcLocatie) > 0
|
|
lcPagina = 'Facturi vanzare'
|
|
CASE ATC('Payments', m.lcLocatie) > 0
|
|
lcPagina = 'Plati'
|
|
CASE ATC('MovementOfGoods', m.lcLocatie) > 0
|
|
lcPagina = 'Miscari bunuri'
|
|
CASE ATC('AssetTransactions', m.lcLocatie) > 0
|
|
lcPagina = 'Tranzactii active'
|
|
CASE ATC('GeneralLedgerEntries', m.lcLocatie) > 0
|
|
lcPagina = 'Inregistrari contabile'
|
|
CASE ATC('GeneralLedgerAccounts', m.lcLocatie) > 0
|
|
lcPagina = 'Conturi contabile'
|
|
CASE ATC('Customers', m.lcLocatie) > 0
|
|
lcPagina = 'Clienti'
|
|
CASE ATC('Suppliers', m.lcLocatie) > 0
|
|
lcPagina = 'Furnizori'
|
|
CASE ATC('TaxTable', m.lcLocatie) > 0
|
|
lcPagina = 'Nomenclator coduri taxa'
|
|
CASE ATC('Products', m.lcLocatie) > 0
|
|
lcPagina = 'Articole'
|
|
CASE ATC('PhysicalStock', m.lcLocatie) > 0
|
|
lcPagina = 'Stocuri'
|
|
CASE ATC('Assets', m.lcLocatie) > 0
|
|
lcPagina = 'Active'
|
|
CASE ATC('Header', m.lcLocatie) > 0
|
|
lcPagina = 'Definirea Companiei'
|
|
OTHERWISE
|
|
lcPagina = ''
|
|
ENDCASE
|
|
|
|
* pozitia din grid = indexul elementului de nivel document din localizare
|
|
lnRand = 0
|
|
FOR lnI = 1 TO 8
|
|
lcMarker = 'sectiune ' + GETWORDNUM('Transaction,Invoice,Payment,Customer,Supplier,Account,Asset,Product', m.lnI, ',') + ' ('
|
|
lnPoz = ATC(m.lcMarker, m.lcLocatie)
|
|
IF m.lnPoz > 0
|
|
lnRand = INT(VAL(SUBSTR(m.lcLocatie, m.lnPoz + LEN(m.lcMarker))))
|
|
EXIT
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
lcValoare = ''
|
|
DO CASE
|
|
CASE ATC('formatul este invalid', m.lcMesaj) > 0 AND (ATC('CustomerID', m.lcMesaj) > 0 OR ATC('SupplierID', m.lcMesaj) > 0 OR ATC('RegistrationNumber', m.lcMesaj) > 0)
|
|
lnCateg = 1
|
|
CASE ATC('nu se afla in lista', m.lcMesaj) > 0 AND ATC('TaxCode (', m.lcLocatie) > 0
|
|
lnCateg = 12
|
|
lcValoare = STREXTRACT(m.lcMesaj, [valoarea '], ['])
|
|
CASE ATC('vid nepermis', m.lcMesaj) > 0 AND (ATC('CustomerID (', m.lcLocatie) > 0 OR ATC('SupplierID (', m.lcLocatie) > 0)
|
|
lnCateg = 2
|
|
CASE ATC([elementul 'AccountID'], m.lcMesaj) > 0 AND ATC('Payments', m.lcLocatie) > 0
|
|
lnCateg = 3
|
|
CASE ATC([elementul 'InvoiceLine'], m.lcMesaj) > 0
|
|
lnCateg = 4
|
|
CASE ATC([elementul 'RegistrationNumber'], m.lcMesaj) > 0 OR (ATC('vid nepermis', m.lcMesaj) > 0 AND ATC('RegistrationNumber (', m.lcLocatie) > 0)
|
|
lnCateg = 5
|
|
CASE ATC('planul de conturi', m.lcMesaj) > 0
|
|
lnCateg = 6
|
|
lcValoare = STREXTRACT(m.lcMesaj, '[', ']')
|
|
CASE ATC('vid nepermis', m.lcMesaj) > 0 AND ATC('AccountDescription', m.lcLocatie) > 0
|
|
lnCateg = 7
|
|
CASE ATC('BankAccount_choice', m.lcMesaj) > 0
|
|
lnCateg = 8
|
|
CASE ATC('SupplierInfo_choice', m.lcMesaj) > 0
|
|
lnCateg = 9
|
|
CASE ATC([elementul 'Transaction'], m.lcMesaj) > 0
|
|
lnCateg = 10
|
|
OTHERWISE
|
|
lnCateg = 13
|
|
ENDCASE
|
|
INSERT INTO cErrSaft (categ, pagina, rand, valoare, mesaj, brut) ;
|
|
VALUES (m.lnCateg, m.lcPagina, m.lnRand, LEFT(m.lcValoare, 30), IIF(m.lnCateg = 13, LEFT(m.lcMesaj, 240), ''), m.lcLocatie + m.lcCRLF + m.lcLinie)
|
|
lcLocatie = ''
|
|
ENDDO
|
|
= FCLOSE(m.lnFile)
|
|
|
|
IF RECCOUNT('cErrSaft') = 0
|
|
USE IN (SELECT('cErrSaft'))
|
|
SELECT (m.lcSelect)
|
|
RETURN m.lcFisierExplicat
|
|
ENDIF
|
|
|
|
*!* erorile fictive TaxCode (bug DUKIntegrator): codul semnalat exista de fapt in nomenclator
|
|
SELECT DISTINCT valoare FROM cErrSaft WHERE categ = 12 INTO CURSOR cCodTaxaVerif
|
|
SELECT cCodTaxaVerif
|
|
SCAN
|
|
lcCod = ALLTRIM(cCodTaxaVerif.valoare)
|
|
IF EMPTY(m.lcCod) OR LEN(CHRTRAN(m.lcCod, '0123456789', '')) > 0
|
|
LOOP
|
|
ENDIF
|
|
llFictiv = .F.
|
|
IF USED('cTaxTable')
|
|
SELECT cTaxTable
|
|
LOCATE FOR ALLTRIM(STR(taxcode)) == m.lcCod
|
|
llFictiv = FOUND()
|
|
ELSE
|
|
IF goExecutor.oExecuta('SELECT taxcode FROM vsaft_taxtable WHERE taxcode = ' + m.lcCod, 'cTaxVerifTmp')
|
|
llFictiv = (RECCOUNT('cTaxVerifTmp') > 0)
|
|
USE IN (SELECT('cTaxVerifTmp'))
|
|
ENDIF
|
|
ENDIF
|
|
IF m.llFictiv
|
|
UPDATE cErrSaft SET categ = 90 WHERE categ = 12 AND ALLTRIM(valoare) == m.lcCod
|
|
ENDIF
|
|
SELECT cCodTaxaVerif
|
|
ENDSCAN
|
|
USE IN (SELECT('cCodTaxaVerif'))
|
|
|
|
SELECT cErrSaft
|
|
COUNT FOR categ = 90 TO lnFictive
|
|
|
|
*!* textul pentru chatbot: erorile brute, fara cele fictive (bug validator)
|
|
lcMesajChat = ''
|
|
SELECT cErrSaft
|
|
SCAN FOR categ < 90
|
|
lcMesajChat = m.lcMesajChat + brut + m.lcCRLF
|
|
ENDSCAN
|
|
|
|
*!* dedup: aceeasi problema pe aceeasi pozitie o singura data (ex: CustomerID + RegistrationNumber pe acelasi client)
|
|
SELECT DISTINCT categ, pagina, valoare, mesaj, rand FROM cErrSaft WHERE categ < 90 ORDER BY 1, 2, 5 INTO CURSOR cErrPoz
|
|
lnReale = RECCOUNT('cErrPoz')
|
|
|
|
lcRaport = 'ERORI VALIDARE D406 SAF-T - ' + JUSTFNAME(m.tcFisierRaspuns) + m.lcCRLF + ;
|
|
'Erori de rezolvat: ' + ALLTRIM(STR(m.lnReale)) + ' | Fictive (bug validator, se pot ignora): ' + ALLTRIM(STR(m.lnFictive)) + m.lcCRLF + ;
|
|
REPLICATE('=', 110) + m.lcCRLF
|
|
lcLegenda = ''
|
|
SELECT cErrPoz
|
|
SCAN
|
|
lcIdent = This.do_ident_saft(ALLTRIM(cErrPoz.pagina), cErrPoz.rand)
|
|
lcActiune = ''
|
|
DO CASE
|
|
CASE cErrPoz.categ = 1
|
|
lcProblema = 'cod partener SAF-T invalid (CUI/CNP gresit sau tip PJ/PF gresit)'
|
|
lcActiune = 'Parteneri: corectati tip persoana / cod fiscal in Initializare > Entitati; CNP-uri invalide in masa: Initializari cod taxa/plata > Stergere CNP-uri invalide'
|
|
CASE cErrPoz.categ = 2
|
|
lcProblema = 'partener fara cod fiscal pe plata (sau nota nu e plata catre terti)'
|
|
lcActiune = 'Plati: completati codul fiscal al partenerului (partener virtual: CUI-ul firmei) sau stergeti codul de plata de pe notele care nu sunt plati catre terti, in Registrul Jurnal'
|
|
CASE cErrPoz.categ = 3
|
|
lcProblema = 'plata fara cont contabil (nota nu e plata catre terti)'
|
|
lcActiune = 'Plati: completati codul fiscal al partenerului (partener virtual: CUI-ul firmei) sau stergeti codul de plata de pe notele care nu sunt plati catre terti, in Registrul Jurnal'
|
|
CASE cErrPoz.categ = 4
|
|
lcProblema = 'factura fara articole (probabil document sters)'
|
|
lcActiune = 'Facturi fara articole: Refacere Registru TVA Cumparari/Vanzari, apoi regenerati D406'
|
|
CASE cErrPoz.categ = 5
|
|
lcProblema = 'PJ fara cod fiscal sau PF marcata ca PJ'
|
|
lcActiune = 'Parteneri: corectati tip persoana / cod fiscal in Initializare > Entitati; CNP-uri invalide in masa: Initializari cod taxa/plata > Stergere CNP-uri invalide'
|
|
CASE cErrPoz.categ = 6
|
|
lcProblema = 'contul ' + ALLTRIM(cErrPoz.valoare) + ' nu exista in planul de conturi'
|
|
lcActiune = 'Conturi: corectati contul in notele din Registrul Jurnal sau completati planul de conturi al firmei'
|
|
CASE cErrPoz.categ = 7
|
|
lcProblema = 'cont fara denumire (nu exista in planul de conturi al firmei)'
|
|
lcActiune = 'Conturi: corectati contul in notele din Registrul Jurnal sau completati planul de conturi al firmei'
|
|
CASE cErrPoz.categ = 8
|
|
lcProblema = 'lipseste contul bancar (IBAN) al firmei'
|
|
lcActiune = 'Cont bancar: completati IBAN-ul in Definirea Companiei'
|
|
CASE cErrPoz.categ = 9
|
|
lcProblema = 'adresa furnizorului incompleta (judet/localitate) sau document sters'
|
|
lcActiune = 'Adresa furnizor: dublu click pe furnizor in Facturi achizitie; daca e document sters cu valoare 0: Refacere Registru TVA Cumparari'
|
|
CASE cErrPoz.categ = 10
|
|
lcProblema = 'nu exista note contabile in perioada'
|
|
lcActiune = 'Registru gol: introduceti o nota cu valoare 0 (ex: 371 = 371)'
|
|
CASE cErrPoz.categ = 11
|
|
lcProblema = ALLTRIM(cErrPoz.mesaj)
|
|
lcActiune = 'Caracter nepermis: inlocuiti & cu "si" in campul sursa (denumire/adresa) si regenerati D406'
|
|
CASE cErrPoz.categ = 12
|
|
lcProblema = 'cod taxa ' + ALLTRIM(cErrPoz.valoare) + ' inexistent in nomenclatorul SAF-T'
|
|
lcActiune = 'Cod taxa: corectati codul de taxa pe notele din Registrul Jurnal'
|
|
OTHERWISE
|
|
lcProblema = ALLTRIM(cErrPoz.mesaj)
|
|
ENDCASE
|
|
IF !EMPTY(m.lcActiune) AND ATC(m.lcActiune, m.lcLegenda) = 0
|
|
lcLegenda = m.lcLegenda + '- ' + m.lcActiune + m.lcCRLF
|
|
ENDIF
|
|
lcRaport = m.lcRaport + PADR(ALLTRIM(cErrPoz.pagina), 20) + ' ' + ;
|
|
PADR(IIF(cErrPoz.rand > 0, 'poz.' + ALLTRIM(STR(cErrPoz.rand)), ''), 8) + ' ' + ;
|
|
IIF(EMPTY(m.lcIdent), '', PADR(m.lcIdent, 45) + ' ') + '- ' + m.lcProblema + m.lcCRLF
|
|
ENDSCAN
|
|
USE IN (SELECT('cErrPoz'))
|
|
IF m.lnReale = 0
|
|
lcRaport = m.lcRaport + 'Niciuna.' + m.lcCRLF
|
|
ENDIF
|
|
IF !EMPTY(m.lcLegenda)
|
|
lcRaport = m.lcRaport + m.lcCRLF + 'CUM REZOLVATI:' + m.lcCRLF + m.lcLegenda
|
|
ENDIF
|
|
|
|
IF m.lnFictive > 0
|
|
lcIdent = ''
|
|
SELECT valoare, COUNT(*) AS nr FROM cErrSaft WHERE categ = 90 GROUP BY 1 ORDER BY 1 INTO CURSOR cErrFictivSaft
|
|
SELECT cErrFictivSaft
|
|
SCAN
|
|
lcIdent = m.lcIdent + IIF(EMPTY(m.lcIdent), '', ', ') + ALLTRIM(cErrFictivSaft.valoare) + ' (' + ALLTRIM(STR(cErrFictivSaft.nr)) + 'x)'
|
|
ENDSCAN
|
|
USE IN (SELECT('cErrFictivSaft'))
|
|
lcRaport = m.lcRaport + m.lcCRLF + 'FICTIVE - BUG VALIDATOR ANAF (se pot ignora): cod taxa ' + m.lcIdent + m.lcCRLF + ;
|
|
'Codurile sunt valide (exista in nomenclator); erorile apar doar cand exista alta eroare reala si dispar dupa rezolvarea ei.' + m.lcCRLF
|
|
ENDIF
|
|
|
|
lcRaport = m.lcRaport + m.lcCRLF + 'Erorile brute: ' + m.tcFisierRaspuns + m.lcCRLF
|
|
|
|
lcFisierExplicat = ADDBS(JUSTPATH(m.tcFisierRaspuns)) + JUSTSTEM(m.tcFisierRaspuns) + '_explicat.txt'
|
|
IF FILE(m.lcFisierExplicat)
|
|
DELETE FILE (m.lcFisierExplicat)
|
|
ENDIF
|
|
= STRTOFILE(m.lcRaport, m.lcFisierExplicat)
|
|
IF !FILE(m.lcFisierExplicat)
|
|
lcFisierExplicat = ''
|
|
ENDIF
|
|
|
|
USE IN (SELECT('cErrSaft'))
|
|
SELECT (m.lcSelect)
|
|
tnReale = m.lnReale
|
|
tnFictive = m.lnFictive
|
|
tcMesajChat = m.lcMesajChat
|
|
|
|
RETURN m.lcFisierExplicat
|
|
ENDPROC && do_erori_saft
|
|
|
|
*************************************************
|
|
* Identificatorul de afisat pentru pozitia tnRand din cursorul paginii tcPagina
|
|
* (sectiunile XML se scriu prin SCAN secvential, deci pozitia din eroare este
|
|
* a tnRand-a inregistrare vizibila; la Conturi ramane activ filtrul writer-ului)
|
|
*************************************************
|
|
PROCEDURE do_ident_saft
|
|
LPARAMETERS tcPagina, tnRand
|
|
|
|
LOCAL lcAlias, lcIdent, lcSelect, lnRecno
|
|
|
|
lcIdent = ''
|
|
IF m.tnRand <= 0
|
|
RETURN m.lcIdent
|
|
ENDIF
|
|
DO CASE
|
|
CASE m.tcPagina == 'Clienti'
|
|
lcAlias = 'cCustomers'
|
|
CASE m.tcPagina == 'Furnizori'
|
|
lcAlias = 'cSuppliers'
|
|
CASE m.tcPagina == 'Conturi contabile'
|
|
lcAlias = 'cGeneralLedgerAccounts'
|
|
CASE m.tcPagina == 'Inregistrari contabile'
|
|
lcAlias = 'cGeneralLedgerEntries'
|
|
CASE m.tcPagina == 'Plati'
|
|
lcAlias = 'cPayments'
|
|
CASE m.tcPagina == 'Facturi vanzare'
|
|
lcAlias = 'cSalesInvoices'
|
|
CASE m.tcPagina == 'Facturi achizitie'
|
|
lcAlias = 'cPurchaseInvoices'
|
|
OTHERWISE
|
|
lcAlias = ''
|
|
ENDCASE
|
|
IF EMPTY(m.lcAlias) OR !USED(m.lcAlias)
|
|
RETURN m.lcIdent
|
|
ENDIF
|
|
|
|
lcSelect = SELECT()
|
|
SELECT (m.lcAlias)
|
|
lnRecno = RECNO()
|
|
GO TOP
|
|
IF m.tnRand > 1 AND !EOF()
|
|
SKIP m.tnRand - 1
|
|
ENDIF
|
|
IF !EOF()
|
|
DO CASE
|
|
CASE INLIST(m.lcAlias, 'cCustomers', 'cSuppliers')
|
|
lcIdent = ALLTRIM(NVL(saftpartid, '')) + ' ' + ALLTRIM(NVL(denumire, ''))
|
|
CASE m.lcAlias == 'cGeneralLedgerAccounts'
|
|
lcIdent = 'cont ' + ALLTRIM(NVL(cont, '')) + ' ' + ALLTRIM(NVL(denumire, ''))
|
|
CASE m.lcAlias == 'cGeneralLedgerEntries'
|
|
lcIdent = 'nota ' + ALLTRIM(TRANSFORM(cod)) + IIF(EMPTY(dataact), '', ' / ' + DTOC(dataact)) + ' cont ' + ALLTRIM(NVL(cont, '')) + ' ' + ALLTRIM(NVL(saftpartid, ''))
|
|
CASE m.lcAlias == 'cPayments'
|
|
lcIdent = IIF(TYPE('denumire') = 'C', ALLTRIM(NVL(denumire, '')) + ' ', '') + LEFT(ALLTRIM(NVL(explicatia, '')), 40)
|
|
OTHERWISE
|
|
lcIdent = 'fact. ' + ALLTRIM(TRANSFORM(nract)) + IIF(EMPTY(dataact), '', ' / ' + DTOC(dataact)) + ' ' + ALLTRIM(NVL(saftpartid, ''))
|
|
ENDCASE
|
|
ENDIF
|
|
IF BETWEEN(m.lnRecno, 1, RECCOUNT(m.lcAlias))
|
|
GO m.lnRecno
|
|
ENDIF
|
|
SELECT (m.lcSelect)
|
|
|
|
RETURN LEFT(ALLTRIM(m.lcIdent), 45)
|
|
ENDPROC && do_ident_saft
|
|
|
|
&& IAU SOLDURILE DIN BALANTA DE VERIFICARE PENTRU CONTURILE DE IMOBLIZARI SI AMORTIZARI
|
|
&& SI LE COMPAR CU VALOAREA DE INVENTAR SI AMORTIZAREA TOTALA DIN IMOBILIZARI CORPORALE/NECORPORALE CONTABIL
|
|
Procedure do_verifica_imobilizari
|
|
LPARAMETERS tlSingleXLSX
|
|
* tlSingleXLSX: .T. daca se exporta un singur xlsx cu toate verificarile
|
|
|
|
Private pnAn, pnLuna, pcCond, pnFiscala, pnIdTipImobilizare
|
|
Local lcSql, lnSucces, lcMesaj, lnAn, lnLuna, lnTipImobilizare, lcCondSucursala, lcBal, lcImob, lcDif
|
|
LOCAL llSucces, llExperimental, llImobObiecteInventar, lnNrLuni1
|
|
Local lcCursor, lcFisier, lcListaTabele, lcPath, llDiferenta, llDiferenta1, llDiferenta2
|
|
Local llDiferenta3, llDiferenta4, lnAn1, lnAn2, lnLuna1, lnLuna2, lnPerioada, lnSoldAmortizare
|
|
Local lnSoldInventar, lnSoldRamasBal01, lnSoldRamasBal12, lnSoldRamasImob01, lnSoldRamasImob12
|
|
|
|
lcMesaj = ''
|
|
llImobObiecteInventar = .F. && daca verific si contul 303 (obiecte de inventar)
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
lnNrLuni1 = m.lnAn1*12+m.lnLuna1
|
|
|
|
* Verificare daca valoarea de inventar la inceputul perioadei + intrari - iesiri este diferita fata de valoare de inventar de la sfarsitul perioadei
|
|
SELECT id_mf, accountId, assetid, description, acquisitionandproductioncostsbegin, assetaddition, transfers, assetdisposal, acquisitionandproductioncostsend, ;
|
|
acquisitionandproductioncostsbegin + assetaddition - transfers - assetdisposal as valoareinv_final_calculat, ;
|
|
acquisitionandproductioncostsbegin + assetaddition - transfers - assetdisposal - acquisitionandproductioncostsend as diferenta ;
|
|
FROM cAssets ;
|
|
INTO CURSOR cAssetsInvDif
|
|
|
|
* Solduri 2xx si 28x din balanta de verificare
|
|
lnTipImobilizare = Iif(Type('tnTip') <> 'N', 1, Iif(Inlist(tnTip, 1, 2), tnTip, 1))
|
|
pcCond = []
|
|
pnFiscala = 0
|
|
llImobObiecteInventar = (TYPE('gnIMOB_OBI') = 'N' and m.gnIMOB_OBI = 1)
|
|
lcCondSucursala = Strtran(gcCondSucursala, "id_sucursala", "b.id_sucursala", 1, 1, 1)
|
|
|
|
FOR lnPerioada = 1 TO 2
|
|
IF m.lnPerioada = 1
|
|
pnAn = m.lnAn1
|
|
pnLuna = m.lnLuna1
|
|
lcCursor = 'cConturiBalanta01'
|
|
|
|
* soldurile la 1 ianuarie
|
|
Text To lcSql Textmerge Noshow
|
|
select 1 as tip, c.cont, c.cont_amortizare,
|
|
b.precdeb as sold
|
|
from imob_conturi c
|
|
left join <<Iif(glEMama,'vbalmama','vbal')>> b on c.cont = b.cont <<lcCondSucursala>> and b.an = ?pnAn and b.luna = ?pnLuna
|
|
where c.id_tip_imobilizare in (1,2) and substr(c.cont,1,3) <> '303'
|
|
union
|
|
select 2 as tip, c.cont, c.cont_amortizare,
|
|
b.preccred as sold
|
|
from imob_conturi c
|
|
left join <<Iif(glEMama,'vbalmama','vbal')>> b on c.cont_amortizare = b.cont <<lcCondSucursala>> and b.an = ?pnAn and b.luna = ?pnLuna
|
|
where c.id_tip_imobilizare in (1,2) and substr(c.cont,1,3) <> '303'
|
|
order by 1,2
|
|
ENDTEXT
|
|
|
|
llSucces = goExecutor.oExecuta(lcSql, m.lcCursor)
|
|
IF m.llSucces
|
|
SELECT (m.lcCursor)
|
|
CALCULATE SUM(sold) FOR tip = 1 TO lnSoldInventar
|
|
|
|
* Contul 6811, 6812 ... apar de mai multe ori, pentru aceleasi conturi de imobilizari
|
|
* Iau soldul doar o data
|
|
SELECT distinct cont_amortizare, sold FROM (m.lcCursor) WHERE tip = 2 INTO CURSOR cSoldAmortizare
|
|
SELECT cSoldAmortizare
|
|
CALCULATE SUM(sold) TO lnSoldAmortizare
|
|
USE IN (SELECT('cSoldAmortizare'))
|
|
|
|
lnSoldRamasBal01 = m.lnSoldInventar - m.lnSoldAmortizare
|
|
ENDIF
|
|
|
|
Select AccountId as Cont, Sum(acquisitionandproductioncostsbegin) As valinv, SUM(AccumulatedDepreciationBegin) As amorttot, SUM(bookvaluebegin) as valramas ;
|
|
From cAssets ;
|
|
Group By Cont ;
|
|
Into Cursor cImobilizari01
|
|
|
|
SELECT cImobilizari01
|
|
CALCULATE SUM(valramas) TO lnSoldRamasImob01
|
|
|
|
* Diferente intre valori inventar si amortizare totala
|
|
SELECT NVL(a.id_mf, b.id_mf) as id_mf, NVL(a.assetId, ALLTRIM(STR(b.id_tip_imobilizare)) + '_' + ALLTRIM(STR(b.nr_inventar))) as assetid, NVL(a.accountId, b.cont) as cont, NVL(a.description, b.denumire) as Denumire, ;
|
|
a.acquisitionandproductioncostsBegin as valoare_saft, ;
|
|
CAST(IIF(YEAR(NVL(b.data_pif, DATE()))*12+MONTH(NVL(b.data_pif, DATE())) >= m.lnNrLuni1, 0, c.valoare) as N(18,2)) as valoare_imobilizari, ;
|
|
NVL(a.acquisitionandproductioncostsBegin, 0) - NVL(c.valoare, 0) as DiferentaValoareInventar, ;
|
|
a.AccumulatedDepreciationBegin as amortizare_saft, ;
|
|
b.amort_prec as amortizare_imobilizari, ;
|
|
(NVL(a.AccumulatedDepreciationBegin, 0)) - NVL(b.amort_prec,0) as DiferentaAmortizare, ;
|
|
NVL(b.iesit_din_gest, 0) as iesit_din_gestiune ;
|
|
FROM cAssets a FULL JOIN cAssets01 b ON a.id_mf = b.id_mf ;
|
|
FULL JOIN cAssets00 c ON a.id_mf = c.id_mf ;
|
|
ORDER BY 2 ;
|
|
INTO CURSOR cVerValoriImob01 READWRITE
|
|
|
|
UPDATE cVerValoriImob01 SET DiferentaValoareInventar = valoare_Saft - valoare_imobilizari
|
|
|
|
ELSE
|
|
pnAn = m.lnAn2
|
|
pnLuna = m.lnLuna2
|
|
lcCursor = 'cConturiBalanta12'
|
|
|
|
* soldurile la 31 decembrie
|
|
Text To lcSql Textmerge Noshow
|
|
select 1 as tip, c.cont, c.cont_amortizare,
|
|
b.solddeb as sold
|
|
from imob_conturi c
|
|
left join <<Iif(glEMama,'vbalmama','vbal')>> b on c.cont = b.cont <<lcCondSucursala>> and b.an = ?pnAn and b.luna = ?pnLuna
|
|
where c.id_tip_imobilizare in (1,2) and substr(c.cont,1,3) <> '303'
|
|
union
|
|
select 2 as tip, c.cont, c.cont_amortizare,
|
|
b.soldcred as sold
|
|
from imob_conturi c
|
|
left join <<Iif(glEMama,'vbalmama','vbal')>> b on c.cont_amortizare = b.cont <<lcCondSucursala>> and b.an = ?pnAn and b.luna = ?pnLuna
|
|
where c.id_tip_imobilizare in (1,2) and substr(c.cont,1,3) <> '303'
|
|
order by 1,2
|
|
ENDTEXT
|
|
|
|
llSucces = goExecutor.oExecuta(lcSql, m.lcCursor)
|
|
|
|
IF m.llSucces
|
|
SELECT (m.lcCursor)
|
|
CALCULATE SUM(sold) FOR tip = 1 TO lnSoldInventar
|
|
|
|
* Contul 6811, 6812 ... apar de mai multe ori, pentru aceleasi conturi de imobilizari
|
|
* Iau soldul doar o data
|
|
SELECT distinct cont_amortizare, sold FROM (m.lcCursor) WHERE tip = 2 INTO CURSOR cSoldAmortizare
|
|
SELECT cSoldAmortizare
|
|
CALCULATE SUM(sold) TO lnSoldAmortizare
|
|
USE IN (SELECT('cSoldAmortizare'))
|
|
|
|
lnSoldRamasBal12 = m.lnSoldInventar - m.lnSoldAmortizare
|
|
ENDIF
|
|
|
|
* Nu iau amortizarea totala pentru imobilizarile iesite din gestiune. In balanta soldul creditor 28x nu include amortizarea pentru imobilizarile iesite din gestiune
|
|
Select a.AccountId, a.acquisitionandproductioncostsend, a.AppreciationForPeriod, a.AppreciationForPeriodMinus, ;
|
|
CAST(IIF(NVL(b.iesit_din_gest,0) = 0, a.AccumulatedDepreciation, 0) as N(18,4)) as AccumulatedDepreciation, ;
|
|
CAST(IIF(NVL(b.iesit_din_gest,0) = 0, a.bookvalueend, 0) as N(18,4)) as bookvalueend ;
|
|
From cAssets a FULL JOIN cAssets12 b ON a.id_mf = b.id_mf ;
|
|
Into Cursor cImobilizari12Temp
|
|
|
|
Select AccountId as Cont, Sum(NVL(acquisitionandproductioncostsend,0) + NVL(AppreciationForPeriod, 0) - NVL(AppreciationForPeriodMinus, 0)) As valinv, SUM(AccumulatedDepreciation) As amorttot, SUM(bookvalueend) as valramas ;
|
|
From cImobilizari12Temp ;
|
|
Group By Cont ;
|
|
Into Cursor cImobilizari12
|
|
|
|
USE IN (SELECT('cImobilizari12Temp'))
|
|
|
|
|
|
SELECT cImobilizari12
|
|
CALCULATE SUM(valramas) TO lnSoldRamasImob12
|
|
|
|
* Diferente intre valori inventar si amortizare totala
|
|
SELECT NVL(a.id_mf, b.id_mf) as id_mf, NVL(a.assetId, ALLTRIM(STR(b.id_tip_imobilizare)) + '_' + ALLTRIM(STR(b.nr_inventar))) as assetid, NVL(a.accountId, b.cont) as cont, NVL(a.description, b.denumire) as Denumire, ;
|
|
NVL(a.acquisitionandproductioncostsEnd,0) + NVL(a.AppreciationForPeriod, 0) - NVL(a.AppreciationForPeriodMinus, 0) as valoare_saft, CAST(IIF(b.iesit_din_gest = 0, b.valoare, 0) as N(18,4)) as valoare_imobilizari, ;
|
|
NVL(a.acquisitionandproductioncostsEnd,0) + NVL(a.AppreciationForPeriod, 0) - NVL(a.AppreciationForPeriodMinus, 0) - NVL(IIF(b.iesit_din_gest = 0, b.valoare, 0), 0) as DiferentaValoareInventar, ;
|
|
a.AccumulatedDepreciation as amortizare_saft, b.amort_prec+b.rata as amortizare_imobilizari, NVL(a.AccumulatedDepreciation, 0) - (NVL(b.amort_prec,0) + NVL(b.rata,0)) as DiferentaAmortizare, ;
|
|
NVL(b.iesit_din_gest, 0) as iesit_din_gestiune ;
|
|
FROM cAssets a FULL JOIN cAssets12 b ON a.id_mf = b.id_mf ;
|
|
ORDER BY 2 ;
|
|
INTO CURSOR cVerValoriImob12
|
|
|
|
ENDIF
|
|
|
|
If !m.llSucces
|
|
EXIT
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
If m.llSucces
|
|
&& V.TIP: 1 = CONTURI IMOBILIZARI; 2 = CONTURI AMORTIZARI
|
|
Select v.tip, v.Cont, Nvl(v.sold, Cast(0 As N(18, 4))) As bal_valoare, Nvl(i.valinv, Cast(0 As N(18, 4))) As imob_valoare;
|
|
From cConturiBalanta01 v Full Join cImobilizari01 i On ALLTRIM(v.Cont) == ALLTRIM(i.Cont) ;
|
|
Where v.tip = 1 ;
|
|
Union ;
|
|
Select v.tip, v.cont_amortizare As Cont, Nvl(v.sold, Cast(0 As N(18, 4))) As bal_valoare, Sum(Nvl(i.amorttot, Cast(0 As N(18, 4)))) As imob_valoare ;
|
|
From cConturiBalanta01 v Full Join cImobilizari01 i On ALLTRIM(v.Cont) == ALLTRIM(i.Cont) ;
|
|
Where v.tip = 2 ;
|
|
Group By v.tip, v.cont_amortizare, v.sold ;
|
|
Order By 1, 2 ;
|
|
Into Cursor cVerificareImob01
|
|
|
|
&& V.TIP: 1 = CONTURI IMOBILIZARI; 2 = CONTURI AMORTIZARI
|
|
Select v.tip, v.Cont, Nvl(v.sold, Cast(0 As N(18, 4))) As bal_valoare, Nvl(i.valinv, Cast(0 As N(18, 4))) As imob_valoare;
|
|
From cConturiBalanta12 v Full Join cImobilizari12 i On ALLTRIM(v.Cont) == ALLTRIM(i.Cont) ;
|
|
Where v.tip = 1 ;
|
|
Union ;
|
|
Select v.tip, v.cont_amortizare As Cont, Nvl(v.sold, Cast(0 As N(18, 4))) As bal_valoare, Sum(Nvl(i.amorttot, Cast(0 As N(18, 4)))) As imob_valoare ;
|
|
From cConturiBalanta12 v Full Join cImobilizari12 i On ALLTRIM(v.Cont) == ALLTRIM(i.Cont) ;
|
|
Where v.tip = 2 ;
|
|
Group By v.tip, v.cont_amortizare, v.sold ;
|
|
Order By 1, 2 ;
|
|
Into Cursor cVerificareImob12
|
|
|
|
|
|
Use In (Select('cConturiBalanta01'))
|
|
Use In (Select('cConturiBalanta12'))
|
|
Use In (Select('cImobilizari01'))
|
|
Use In (Select('cImobilizari12'))
|
|
|
|
|
|
* Diferente valori inventar, amortizare totala global SAFT fata de Balanta
|
|
SELECT '1. Valoare inventar la inceputul perioadei' as ctip, cont, imob_valoare as saft, bal_valoare as balanta, imob_valoare - bal_valoare as diferenta ;
|
|
FROM cVerificareImob01 ;
|
|
WHERE tip = 1 AND (imob_valoare <> 0 OR bal_valoare <> 0) ;
|
|
UNION ;
|
|
SELECT '2. Amortizare totala la inceputul perioadei' as tip, cont, imob_valoare as saft, bal_valoare as balanta, imob_valoare - bal_valoare as diferenta ;
|
|
FROM cVerificareImob01 ;
|
|
WHERE tip = 2 AND (imob_valoare <> 0 OR bal_valoare <> 0) ;
|
|
UNION ;
|
|
SELECT '3. Valoare inventar la sfarsitul perioadei' as tip, cont, imob_valoare as saft, bal_valoare as balanta, imob_valoare - bal_valoare as diferenta ;
|
|
FROM cVerificareImob12 ;
|
|
WHERE tip = 1 AND (imob_valoare <> 0 OR bal_valoare <> 0) ;
|
|
UNION ;
|
|
SELECT '4. Amortizare totala la sfarsitul perioadei' as tip, cont, imob_valoare as saft, bal_valoare as balanta, imob_valoare - bal_valoare as diferenta ;
|
|
FROM cVerificareImob12 ;
|
|
WHERE tip = 2 AND (imob_valoare <> 0 OR bal_valoare <> 0) ;
|
|
UNION ;
|
|
SELECT '5. Valoare ramasa de amortizat la inceputul perioadei' as tip, SPACE(20) as cont, m.lnSoldRamasImob01 as saft, m.lnSoldRamasBal01 as balanta, m.lnSoldRamasImob01 - m.lnSoldRamasBal01 as diferenta ;
|
|
FROM dual ;
|
|
UNION ;
|
|
SELECT '6. Valoare ramasa de amortizat la sfarsitul perioadei' as tip, SPACE(20) as cont, m.lnSoldRamasImob12 as saft, m.lnSoldRamasBal12 as balanta, m.lnSoldRamasImob12 - m.lnSoldRamasBal12 as diferenta ;
|
|
FROM dual ;
|
|
ORDER BY 1, 2 ;
|
|
INTO CURSOR cAssetsDif
|
|
|
|
Use In (Select('cVerificareImob01'))
|
|
Use In (Select('cVerificareImob12'))
|
|
|
|
* Diferente valoare inventar, amortizare totala pe fiecare imobilizare SAFT fata de ROAIMOB
|
|
SELECT '1. Valoare inventar la inceputul perioadei' as ctip, id_mf, AssetId, cont, Denumire, ;
|
|
valoare_saft as saft, valoare_imobilizari as imobilizari, DiferentaValoareInventar as diferenta, iesit_din_gestiune ;
|
|
FROM cVerValoriImob01 ;
|
|
UNION ;
|
|
select '2. Amortizare totala la inceputul perioadei' as ctip, id_mf, AssetId, cont, Denumire, ;
|
|
amortizare_saft as saft, amortizare_imobilizari as imobilizari, DiferentaAmortizare as diferenta, iesit_din_gestiune ;
|
|
FROM cVerValoriImob01 ;
|
|
UNION ;
|
|
SELECT '3. Valoare inventar la sfarsitul perioadei' as ctip, id_mf, AssetId, cont, Denumire, ;
|
|
valoare_saft as saft, valoare_imobilizari as imobilizari, DiferentaValoareInventar as diferenta, iesit_din_gestiune ;
|
|
FROM cVerValoriImob12 ;
|
|
UNION ;
|
|
select '4. Amortizare totala la sfarsitul perioadei' as ctip, id_mf, AssetId, cont, Denumire, ;
|
|
amortizare_saft as saft, amortizare_imobilizari as imobilizari, DiferentaAmortizare as diferenta, iesit_din_gestiune ;
|
|
FROM cVerValoriImob12 ;
|
|
ORDER BY 1, 3 ;
|
|
INTO CURSOR cValoriImobDif
|
|
|
|
USE IN (SELECT('cVerValoriImob01'))
|
|
USE IN (SELECT('cVerValoriImob12'))
|
|
|
|
* Verificare AssetTransactions
|
|
SELECT id_mf, denumire, ;
|
|
SUM(AcquisitionAndProductionCostsOnTransaction) as AcquisitionAndProductionCosts, ;
|
|
CAST(SUM(IIF(ALLTRIM(AssetTransactionType) = '30',BookValueOnTransaction, 0)) as N(18,4)) as amortizare, ;
|
|
CAST(SUM(IIF(ALLTRIM(AssetTransactionType) = '10',BookValueOnTransaction, 0)) as N(18,4)) as intrare, ;
|
|
CAST(SUM(IIF(INLIST(ALLTRIM(AssetTransactionType), '20', '40', '50'), BookValueOnTransaction, 0)) as N(18,4)) as iesire, ;
|
|
CAST(SUM(IIF(ALLTRIM(AssetTransactionType) = '60',BookValueOnTransaction, 0)) as N(18,4)) as reevaluarenegativa, ;
|
|
CAST(SUM(IIF(ALLTRIM(AssetTransactionType) = '70',BookValueOnTransaction, 0)) as N(18,4)) as reevaluarepozitiva, ;
|
|
CAST(SUM(IIF(ALLTRIM(AssetTransactionType) = '130',BookValueOnTransaction, 0)) as N(18,4)) as altele ;
|
|
FROM cAssetTransactions ;
|
|
GROUP BY id_mf, denumire ;
|
|
INTO CURSOR cAssetTransactionsCum
|
|
|
|
SELECT NVL(a.id_mf, b.id_mf) as id_mf, a.AssetId, NVL(a.description, b.denumire) as denumire, a.accountid as cont,;
|
|
a.AssetAddition as aAssetAddition, b.intrare + b.altele as bAssetAddition, ;
|
|
CAST(IIF(a.AssetDisposal <> 0, a.AssetDisposal - a.AccumulatedDepreciation, 0.00) as N(18,4)) as aAssetDisposal, b.iesire as bAssetDisposal, ;
|
|
a.DepreciationForPeriod as aDepreciationForPeriod, b.amortizare as bDepreciationForPeriod, ;
|
|
a.AppreciationForPeriod as aAppreciationForPeriod, b.reevaluarepozitiva as bAppreciationForPeriod ;
|
|
FROM cAssets a JOIN cAssetTransactionsCum b ON a.id_mf = b.id_mf ;
|
|
INTO CURSOR cAssetTransactionsDifTemp
|
|
|
|
USE IN (SELECT('cAssetTransactionsCum'))
|
|
|
|
SELECT id_mf, AssetId, denumire, cont, ;
|
|
'1. Intrari incl. majorari' as tip, aAssetAddition as saft_assets, bAssetAddition as saft_transactions, aAssetAddition - bAssetAddition as diferenta ;
|
|
FROM cAssetTransactionsDifTemp ;
|
|
UNION ;
|
|
SELECT id_mf, AssetId, denumire, cont, ;
|
|
'2. Iesiri (valoare neta)' as tip, aAssetDisposal as saft_assets, bAssetDisposal as saft_transactions, aAssetDisposal - bAssetDisposal as diferenta ;
|
|
FROM cAssetTransactionsDifTemp ;
|
|
UNION ;
|
|
SELECT id_mf, AssetId, denumire, cont, ;
|
|
'3. Depreciere/Amortizare' as tip, aDepreciationForPeriod as saft_assets, bDepreciationForPeriod as saft_transactions, aDepreciationForPeriod - bDepreciationForPeriod as diferenta ;
|
|
FROM cAssetTransactionsDifTemp ;
|
|
UNION ;
|
|
SELECT id_mf, AssetId, denumire, cont, ;
|
|
'4. Apreciere/Reevaluare' as tip, aAppreciationForPeriod as saft_assets, bAppreciationForPeriod as saft_transactions, aAppreciationForPeriod - bAppreciationForPeriod as diferenta ;
|
|
FROM cAssetTransactionsDifTemp ;
|
|
ORDER BY 4, 2 ;
|
|
INTO CURSOR cAssetTransactionsDif
|
|
|
|
USE IN (SELECT('cAssetTransactionsDifTemp'))
|
|
llDiferenta = .F.
|
|
llDiferenta1 = .F.
|
|
llDiferenta2 = .F.
|
|
llDiferenta3 = .F.
|
|
llDiferenta4 = .F.
|
|
SELECT cAssetsInvDif
|
|
LOCATE FOR diferenta <> 0
|
|
llDiferenta = FOUND()
|
|
llDiferenta1 = FOUND()
|
|
IF !m.llDiferenta
|
|
SELECT cAssetsDif
|
|
LOCATE FOR diferenta <> 0
|
|
llDiferenta = FOUND()
|
|
llDiferenta2 = FOUND()
|
|
ENDIF
|
|
IF !m.llDiferenta
|
|
SELECT cValoriImobDif
|
|
LOCATE FOR diferenta <> 0
|
|
llDiferenta = FOUND()
|
|
llDiferenta3 = FOUND()
|
|
ENDIF
|
|
IF !m.llDiferenta
|
|
SELECT cAssetTransactionsDif
|
|
LOCATE FOR diferenta <> 0
|
|
llDiferenta = FOUND()
|
|
llDiferenta4 = FOUND()
|
|
ENDIF
|
|
|
|
IF m.tlSingleXLSX
|
|
lcListaTabele = "cAssetsInvDif,cAssetsDif,cValoriImobDif,cAssetTransactionsDif"
|
|
goExport.exportMultiTable2Xlsx(m.lcListaTabele, "verificare_assets_" + gofirma.codfiscalfro + '_' + ALLTRIM(STR(m.gnAn)))
|
|
ELSE
|
|
SET STEP ON
|
|
lcFisier = "verificare_assets1_saft_" + gofirma.codfiscalfro + '_' + ALLTRIM(STR(m.gnAn)) + '.xlsx'
|
|
lcFisier = Putfile('Nume fisier:', m.lcFisier, 'xlsx')
|
|
lcPath = ADDBS(JUSTPATH(m.lcFisier))
|
|
IF !EMPTY(m.lcFisier)
|
|
goExport.export2xlsx("cAssetsInvDif", m.lcFisier)
|
|
|
|
lcFisier = m.lcPath + "verificare_assets2_saft_" + gofirma.codfiscalfro + '_' + ALLTRIM(STR(m.gnAn)) + '.xlsx'
|
|
goExport.export2xlsx("cAssetsDif", m.lcFisier)
|
|
|
|
lcFisier = m.lcPath + "verificare_assets3_saft_" + gofirma.codfiscalfro + '_' + ALLTRIM(STR(m.gnAn)) + '.xlsx'
|
|
goExport.export2xlsx("cValoriImobDif", m.lcFisier)
|
|
|
|
lcFisier = m.lcPath + "verificare_assets4_saft_" + gofirma.codfiscalfro + '_' + ALLTRIM(STR(m.gnAn)) + '.xlsx'
|
|
goExport.export2xlsx("cAssetTransactionsDif", m.lcFisier)
|
|
|
|
open_default_app(m.lcPath)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
AMESSAGEBOX('A. ' + IIF(m.llDiferenta1, '', 'NU EXISTA ') + 'Diferente intre valoare inventar finala SAFT si valoare inventar initiala SAFT + intrari - iesiri' + CHR(13) + CHR(10) + CHR(13) + CHR(10) + ;
|
|
'B. ' + IIF(m.llDiferenta2, '', 'NU EXISTA ') + 'Diferente intre valorile Imobilizari SAFT si Balanta de verificare 2xx/28x' + CHR(13) + CHR(10) + ;
|
|
' 1. Valoare inventar la inceputul perioadei' + CHR(13) + CHR(10) + ;
|
|
' 2. Amortizare totala la inceputul perioadei' + CHR(13) + CHR(10) + ;
|
|
' 3. Valoare inventar la sfarsitul perioadei' + CHR(13) + CHR(10) + ;
|
|
' 4. Amortizare totala la sfarsitul perioadei' + CHR(13) + CHR(10) + ;
|
|
' 5. Valoare ramasa de amortizat la inceputul perioadei' + CHR(13) + CHR(10) + ;
|
|
' 6. Valoare ramasa de amortizat la sfarsitul perioadei' + CHR(13) + CHR(10) + CHR(13) + CHR(10) + ;
|
|
'C. ' + IIF(m.llDiferenta3, '', 'NU EXISTA ') + 'Diferente intre valoare inventar, amortizare SAFT si Registrul de imobilizari' + CHR(13) + CHR(10) + CHR(13) + CHR(10) + ;
|
|
'D. ' + IIF(m.llDiferenta4, '', 'NU EXISTA ') + 'Diferente intre Imobilizari SAFT si Tranzactii imobilizari SAFT' + CHR(13) + CHR(10) + ;
|
|
' 1. Intrari' + CHR(13) + CHR(10) + ;
|
|
' 2. Iesiri (valoare neta)' + CHR(13) + CHR(10) + ;
|
|
' 3. Depreciere/Amortizare' + CHR(13) + CHR(10) + ;
|
|
' 4. Apreciere/Reevaluare', 0+64, _screen.Caption)
|
|
|
|
ENDIF && llSucces
|
|
|
|
USE IN (SELECT('cAssetsDif'))
|
|
USE IN (SELECT('cAssetsInvDif'))
|
|
USE IN (SELECT('cValoriImobDif'))
|
|
USE IN (SELECT('cAssetTransactionsDif'))
|
|
Endproc && do_verifica_imobilizari
|
|
|
|
|
|
*********************************
|
|
* verific soldurile din GeneralLedgerAccounts cu soldurile din Balanta de Verificare, Registru jurnal, Clienti si Furnizori
|
|
*********************************
|
|
PROCEDURE do_verifica_solduri
|
|
LPARAMETERS tlLunar
|
|
|
|
LOCAL lcMesaj, lcMesajTotal, llSilent
|
|
llSilent = .T. && apelare verificari silentios
|
|
|
|
lcMesajTotal = ''
|
|
lcMesaj = This.do_verifica_balanta(m.llSilent)
|
|
lcMesajTotal = m.lcMesajTotal + ' 1. ' + m.lcMesaj + CHR(13) + CHR(10) + CHR(13) + CHR(10)
|
|
|
|
IF m.tlLunar
|
|
* SAFT lunar/trimestrial se verifica solduri balanta, clienti, furnizori pe perioada
|
|
* SAFT anual/cerere - se verifica doar solduri balanta pe perioada
|
|
lcMesaj = This.do_verifica_jurnal(m.llSilent)
|
|
lcMesajTotal = m.lcMesajTotal + ' 2. '+ m.lcMesaj + CHR(13) + CHR(10) + CHR(13) + CHR(10)
|
|
|
|
lcMesaj = This.do_verifica_cui('ccustomers', m.llSilent) && verificare clienti
|
|
lcMesajTotal = m.lcMesajTotal + ' 3. Clienti: '+ m.lcMesaj + CHR(13) + CHR(10) + CHR(13) + CHR(10)
|
|
|
|
lcMesaj = This.do_verifica_cui('csuppliers', m.llSilent) && verificare furnizori
|
|
lcMesajTotal = m.lcMesajTotal + ' 4. Furnizori: '+ m.lcMesaj + CHR(13) + CHR(10) + CHR(13) + CHR(10)
|
|
ENDIF && m.tlLunar
|
|
|
|
AMESSAGEBOX(lcMesajTotal)
|
|
|
|
ENDPROC && do_verifica_solduri
|
|
|
|
|
|
*********************************
|
|
* verific soldurile din GeneralLedgerAccounts cu soldurile din Balanta de Verificare
|
|
*********************************
|
|
PROCEDURE do_verifica_balanta
|
|
LPARAMETERS tlSilent
|
|
|
|
* tlSilent (optional) : .T. = nu arata mesaje cu/fara diferente ci intoarce mesajul la procedura apelanta
|
|
|
|
|
|
Local lcSelect, lcSql, llOk, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2, lnDif, lcDif, lnTip, lcText, llNuContAlternativ
|
|
LOCAL llSilent, lcMesaj
|
|
|
|
lcMesaj = ''
|
|
|
|
llSilent = m.tlSilent
|
|
lcSelect = SELECT()
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
* Creez cursor balanta de verificare
|
|
llNuContAlternativ = .T.
|
|
Do make_tbalanta With .F., m.lnLuna1, m.lnAn1, m.lnLuna2, m.lnAn2, "bal", m.llNuContAlternativ
|
|
|
|
&& BNIVEL IN (4,6) : TOTALURI PE CONTURI SINTETICE - 4 = SUCURSALA/FIRMA INDEPENDENTA; 6 = CENTRALIZATA
|
|
SELECT cont, SUM(precdeb) as precdeb, ;
|
|
SUM(preccred) as preccred,;
|
|
SUM(solddeb) as solddeb, ;
|
|
SUM(soldcred) as soldcred ;
|
|
FROM tBalanta ;
|
|
WHERE (bnivel = 6 AND m.glEmama) OR (bnivel = 4 AND !m.glEmama) ;
|
|
GROUP BY cont ;
|
|
INTO CURSOR cBalantaTemp1
|
|
|
|
|
|
SELECT cont, ;
|
|
SUM(iif(precdeb>=preccred, abs(precdeb-preccred), 0.00)) as soldideb,;
|
|
SUM(iif(precdeb<preccred, abs(precdeb-preccred),0.00)) as soldicred,;
|
|
SUM(iif(solddeb>=soldcred, abs(solddeb-soldcred), 0.00)) as soldfdeb,;
|
|
SUM(iif(solddeb<soldcred, abs(solddeb-soldcred),0.00)) as soldfcred;
|
|
FROM cBalantaTemp1 ;
|
|
GROUP BY cont ;
|
|
INTO CURSOR cBalantaTemp
|
|
|
|
|
|
SELECT NVL(b1.cont, b2.cont) as cont, ;
|
|
NVL(b1.soldideb, 0.00) - NVL(b2.soldideb, 0.00) as soldidebd,;
|
|
NVL(b1.soldicred, 0.00) - NVL(b2.soldicred, 0.00) as soldicredd,;
|
|
NVL(b1.soldfdeb, 0.00) - NVL(b2.soldfdeb, 0.00) as soldfdebd,;
|
|
NVL(b1.soldfcred, 0.00) - NVL(b2.soldfcred, 0.00) as soldfcredd ;
|
|
FROM cGeneralLedgerAccounts b1 FULL JOIN cBalantaTemp b2 ON ALLTRIM(NVL(b1.cont,'')) == ALLTRIM(NVL(b2.cont,'')) ;
|
|
INTO CURSOR cBalantaDiferente1
|
|
|
|
|
|
SELECT cont, soldidebd, soldicredd, soldfdebd, soldfcredd ;
|
|
FROM cBalantaDiferente1 ;
|
|
WHERE soldidebd <> 0 OR soldicredd <> 0 OR soldfdebd <> 0 OR soldfcredd <> 0 ;
|
|
ORDER BY cont ;
|
|
INTO CURSOR cBalantaDiferente
|
|
|
|
|
|
|
|
IF RECCOUNT('cBalantaDiferente') = 0
|
|
lcMesaj = 'Balanta de verificare: Nu sunt diferente'
|
|
IF !m.llSilent
|
|
AMESSAGEBOX(m.lcMesaj, 0+64, _screen.Caption)
|
|
ENDIF
|
|
ELSE
|
|
lcText = ''
|
|
Select cBalantaDiferente
|
|
SCAN
|
|
lcCont = SPACE(20) + 'Cont: ' + PADR(ALLTRIM(NVL(cont,'')), 4, ' ')
|
|
FOR lnTip = 1 TO 4
|
|
DO CASE
|
|
CASE lnTip = 1
|
|
lnDif = soldidebd
|
|
lcDif = 'sold initial debit'
|
|
CASE lnTip = 2
|
|
lnDif = soldicredd
|
|
lcDif = 'sold initial credit'
|
|
CASE lnTip = 3
|
|
lnDif = soldfdebd
|
|
lcDif = 'sold final debit'
|
|
CASE lnTip = 4
|
|
lnDif = soldfcredd
|
|
lcDif = 'sold final credit'
|
|
ENDCASE
|
|
IF m.lnDif = 0
|
|
LOOP
|
|
ENDIF
|
|
|
|
lcText = m.lcText + m.lcCont + ' diferenta ' + m.lcDif + ' ' + ALLTRIM(TRANSFORM(m.lnDif,'999 999 999 999.99')) + CHR(13) + CHR(10)
|
|
ENDFOR
|
|
ENDSCAN && cBalantaDiferente
|
|
|
|
lcMesaj = 'Balanta de verificare: EXISTA DIFERENTE!' + CHR(13) + CHR(10) + m.lcText
|
|
|
|
IF !m.llSilent
|
|
AMESSAGEBOX(lcMesaj,0+64,_screen.Caption)
|
|
ENDIF
|
|
|
|
ENDIF && reccount
|
|
|
|
USE IN (SELECT('tBalanta'))
|
|
USE IN (SELECT('cBalantaTemp1'))
|
|
USE IN (SELECT('cBalantaTemp'))
|
|
USE IN (SELECT('cBalantaDiferente1'))
|
|
USE IN (SELECT('cBalantaDiferente'))
|
|
|
|
SELECT (m.lcSelect)
|
|
|
|
RETURN lcMesaj
|
|
ENDPROC && do_verifica_balanta
|
|
|
|
*********************************
|
|
* verific rulajele din GeneralLedgerEntries cu rulajele din Registrul Jurnal
|
|
*********************************
|
|
PROCEDURE do_verifica_jurnal
|
|
|
|
LPARAMETERS tlSilent
|
|
|
|
Local lcSelect, lcSql, llOk, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2, lnDif, lcDif, lnTip, lcText, llNuContAlternativ
|
|
|
|
LOCAL llSilent, lcMesaj
|
|
|
|
lcMesaj = ''
|
|
|
|
llSilent = m.tlSilent
|
|
|
|
lcSelect = SELECT()
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
SELECT cont, tipdc, SUM(suma) as suma, SUM(suma_val) as suma_val ;
|
|
FROM cGeneralLedgerEntries ;
|
|
GROUP BY cont, tipdc ;
|
|
INTO CURSOR cGeneralLedgerEntriesTemp
|
|
|
|
TEXT TO lcSql TEXTMERGE NOSHOW
|
|
select scd as cont, 'D' as tipdc, SUM(suma) as suma, SUM(suma_val) as suma_val
|
|
FROM act
|
|
WHERE sters = 0 and an * 12 + luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and TO_NUMBER(SUBSTR(scd, 1, 1)) <= 7
|
|
Group by scd
|
|
union
|
|
select scc as cont, 'C' as tipdc, SUM(suma) as suma, SUM(suma_val) as suma_val
|
|
FROM act
|
|
WHERE sters = 0 and an * 12 + luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and TO_NUMBER(SUBSTR(scc, 1, 1)) <= 7
|
|
Group by scc
|
|
ENDTEXT
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, 'cActTemp')
|
|
|
|
If m.llSucces
|
|
SELECT NVL(a1.cont, a2.cont) as cont, NVL(a1.tipdc, a2.tipdc) as tipdc, ;
|
|
NVL(a1.suma, 0.00) - NVL(a2.suma, 0.00) as sumad,;
|
|
NVL(a1.suma_val, 0.00) - NVL(a2.suma_val, 0.00) as suma_vald ;
|
|
FROM cGeneralLedgerEntriesTemp a1 FULL JOIN cActTemp a2 ON ALLTRIM(NVL(a1.cont,'')) == ALLTRIM(NVL(a2.cont,'')) AND a1.tipdc = a2.tipdc ;
|
|
ORDER BY 1, 2 ;
|
|
INTO CURSOR cActDiferente1
|
|
|
|
SELECT * FROM cActDiferente1 WHERE sumad <> 0 OR suma_vald <> 0 INTO CURSOR cActDiferente
|
|
|
|
IF RECCOUNT('cActDiferente') = 0
|
|
lcMesaj = 'Registru jurnal: Nu sunt diferente'
|
|
IF !m.llSilent
|
|
AMESSAGEBOX(0+64,_screen.Caption)
|
|
ENDIF
|
|
|
|
ELSE
|
|
lcText = ''
|
|
Select cActDiferente
|
|
SCAN
|
|
lcCont = 'Cont: ' + PADR(ALLTRIM(NVL(cont,'')), 4, ' ')
|
|
lcTipDC = ALLTRIM(tipdc)
|
|
FOR lnTip = 1 TO 2
|
|
DO CASE
|
|
CASE lnTip = 1
|
|
lnDif = sumad
|
|
lcDif = 'lei'
|
|
CASE lnTip = 2
|
|
lnDif = suma_vald
|
|
lcDif = 'valuta'
|
|
ENDCASE
|
|
IF m.lnDif = 0
|
|
LOOP
|
|
ENDIF
|
|
|
|
lcText = m.lcText + m.lcCont + ' ' + m.lcTipDC + ' diferenta ' + m.lcDif + ' ' + TRANSFORM(m.lnDif,'999 999 999 999.99') + CHR(13) + CHR(10)
|
|
ENDFOR
|
|
ENDSCAN && cActDiferente
|
|
|
|
lcMesaj = 'Registrul Jurnal: EXISTA DIFERENTE!' + CHR(13) + CHR(10) + m.lcText
|
|
IF !m.llSilent
|
|
AMESSAGEBOX(lcMesaj,0+64,_screen.Caption)
|
|
ENDIF
|
|
|
|
ENDIF && reccount
|
|
ENDIF && llSucces
|
|
|
|
USE IN (SELECT('cGeneralLedgerEntriesTemp'))
|
|
USE IN (SELECT('cActTemp'))
|
|
USE IN (SELECT('cActDiferente1'))
|
|
USE IN (SELECT('cActDiferente'))
|
|
|
|
SELECT (m.lcSelect)
|
|
|
|
RETURN lcMesaj
|
|
ENDPROC && do_verifica_jurnal
|
|
|
|
*********************************
|
|
* verific suma valorilor de pe articolele din facturi cu valoarea facturii din Jurnalele TVA
|
|
* verific daca exista articole facturi fara taxcode
|
|
*********************************
|
|
PROCEDURE do_verifica_facturi
|
|
Lparameters tcTip
|
|
* tcTip: customers/suppliers
|
|
|
|
Local lcSelect, lcText, lcJurnalTVA, lcExceptie
|
|
Local lcCursor, lcCursorDup, lcCursorLines, lcSql, llClient, llSucces, lnAn1, lnAn2, lnLuna1
|
|
Local lnLuna2, lnSuma, loFact, loRec
|
|
|
|
lcText = ''
|
|
lcSelect = Select()
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
llClient = (Upper(Alltrim(m.tcTip)) = 'CUSTOMERS')
|
|
lcCursor = Iif(m.llClient, 'cSalesInvoices', 'cPurchaseInvoices')
|
|
lcCursorDup = Iif(m.llClient, 'cSalesInvoicesDup', 'cPurchaseInvoicesDup')
|
|
lcJurnalTVA = Iif(m.llClient, 'jv2007', 'jc2007')
|
|
lcExceptie = Iif(m.llClient, 'a.scc = cont AND a.scd = cont_c', 'a.scd = cont AND a.scc = cont_c')
|
|
lcCursorLines = Iif(m.llClient, 'cSalesInvoicesLines', 'cPurchaseInvoicesLines')
|
|
|
|
CREATE CURSOR cverifica_facturi_saft (tip N(1), an N(4), luna N(2), nract N(20) null, dataact D null, denumire C(70) null, ;
|
|
valoare_totala_factura N(20,2) null, valoare_totala_jurnal_tva N(20,2) null, diferenta_valoare_totala N(20,2) null, ;
|
|
taxcode N(6) null, valoare_taxcode_factura N(20,2) null, valoare_taxcode_regjurnal N(20,2) NULL, diferenta_valoare_taxcode N(20,2) null)
|
|
|
|
* Diferente valoare factura - valoare jurnal TVA > 0.5
|
|
* taxa = valoarea taxei (cantitate * pret * proc_tva/100)
|
|
* Tratez facturile de achizitie de import , nu adun taxa, pentru ca taxa este platita la Biroul Vamal si apare separat de factura, pe DVI (taxcode = 301201, 301202, 301203)
|
|
SELECT a.an, a.luna, a.id_fact, a.nract, a.dataact, a.id_part, a.denumire, a.totctva, ;
|
|
SUM(b.cantitate * b.pret + IIF(!INLIST(b.taxcode, 301201, 301202, 301203), b.taxa, 0)) as valctva, SUM(IIF(EMPTY(NVL(b.taxcode,0)), 1, 0)) as ntaxcode ;
|
|
FROM (m.lcCursor) a LEFT JOIN (m.lcCursorLines) b ON a.id_fact = b.id_fact ;
|
|
GROUP BY a.an, a.luna, a.id_fact, a.nract, a.dataact, a.id_part, a.denumire, a.totctva ;
|
|
INTO CURSOR cFacturiDiferente1
|
|
|
|
SELECT an, luna, id_fact, nract, dataact, id_part, denumire, totctva, valctva, totctva-valctva as diferenta, ntaxcode ;
|
|
FROM cFacturiDiferente1 ;
|
|
WHERE ABS(totctva - valctva) > 0.5 ;
|
|
ORDER BY an, luna, dataact, nract, denumire ;
|
|
INTO CURSOR cFacturiDiferente
|
|
|
|
INSERT INTO cverifica_facturi_saft(tip, an, luna, nract, dataact, denumire, valoare_totala_factura, valoare_totala_jurnal_tva, diferenta_valoare_totala) ;
|
|
SELECT 1 as tip, an, luna, nract, dataact, denumire, NVL(valctva,0), NVL(totctva,0), NVL(diferenta,0) ;
|
|
FROM cFacturiDiferente ;
|
|
order by an, luna, dataact, nract
|
|
|
|
|
|
* Diferente valori pe fiecare taxcode facturi.Taxcode = registrul jurnal.taxcode
|
|
SELECT a.an, a.luna, a.id_fact, a.nract, a.dataact, a.id_part, a.denumire, b.taxcode, ;
|
|
SUM(b.cantitate * b.pret) as valoare, ;
|
|
SUM(b.cantitate * b.pretv) as valoarev ;
|
|
FROM (m.lcCursor) a LEFT JOIN (m.lcCursorLines) b ON a.id_fact = b.id_fact ;
|
|
GROUP BY a.an, a.luna, a.id_fact, a.nract, a.dataact, a.id_part, a.denumire, b.taxcode ;
|
|
order by a.an, a.luna, a.dataact, a.nract ;
|
|
INTO CURSOR cFacturiTaxCode1
|
|
|
|
|
|
* suma din Registrul Jurnal fara TVA
|
|
* tratez regularizare facturi nesosite/neintocmite 408=401, 4111=418
|
|
TEXT TO lcSql TEXTMERGE NOSHOW
|
|
select id_fact,
|
|
taxcode,
|
|
sum(decode(exceptie, 1, -1, 1) * suma) as suma,
|
|
sum(decode(exceptie, 1, -1, 1) * suma_val) as suma_val
|
|
from (select a.id_fact,
|
|
(CASE when (a.scd = '408' AND a.scc like '4%') or (a.scd like '4%' AND a.scc = '418') then ROUND(a.suma * 100 / (100 + st.procent_taxa), 2) else a.suma end) as suma,
|
|
(CASE when (a.scd = '408' AND a.scc like '4%') or (a.scd like '4%' AND a.scc = '418') then ROUND(a.suma_val * 100 / (100 + st.procent_taxa), 2) else a.suma_val end) as suma_val,
|
|
a.taxcode,
|
|
(SELECT DISTINCT 1 AS EXCEPTIE
|
|
FROM EXCEPTII_IREG
|
|
WHERE INVERS = 1
|
|
and <<lcExceptie>>) as exceptie
|
|
from act a
|
|
join <<m.lcJurnalTVA>> j
|
|
on a.an = j.an
|
|
and a.luna = j.luna
|
|
and a.id_fact = j.id_fact
|
|
join nom_fdoc f
|
|
on j.id_fdoc = f.id_fdoc
|
|
left join vsaft_taxtable st on a.taxcode = st.taxcode
|
|
where a.an * 12 + a.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and a.sters = 0
|
|
AND substr(a.scd, 1, 3) <> '442' and substr(a.scc, 1, 3) <> '442'
|
|
and f.tip_doc in ('F', 'M'<<IIF(m.llClient, "", ",'C', 'INV'")>>))
|
|
group by id_fact, taxcode
|
|
ENDTEXT
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, 'cFacturiTaxCode2T')
|
|
IF m.llSucces
|
|
|
|
* Unific facturile cu acelasi numar, bagate din bucati - au id_fact diferite(contabilitate, gestiune, facturare)
|
|
SELECT (m.lcCursorDup)
|
|
SCAN
|
|
SCATTER NAME loFact
|
|
UPDATE cFacturiTaxCode2T SET id_fact = loFact.id_fact2 WHERE id_fact = loFact.id_fact
|
|
ENDSCAN
|
|
|
|
SELECT id_fact, taxcode, SUM(suma) as suma, SUM(suma_val) as suma_val FROM cFacturiTaxCode2T GROUP BY id_fact, taxcode INTO CURSOR cFacturiTaxCode2
|
|
USE IN (SELECT('cFacturiTaxCode2T'))
|
|
|
|
SELECT cFacturiTaxCode1
|
|
SCAN
|
|
SCATTER NAME loRec
|
|
SELECT cFacturiTaxCode2
|
|
LOCATE FOR id_fact = loRec.id_fact AND NVL(taxcode,0) = NVL(loRec.taxcode,0)
|
|
IF FOUND()
|
|
lnSuma = suma
|
|
ELSE
|
|
lnSuma = 0
|
|
ENDIF
|
|
IF ABS(NVL(lorec.valoare,0) - NVL(m.lnSuma,0)) > 0.5
|
|
INSERT INTO cverifica_facturi_saft(tip, an, luna, nract, dataact, denumire, taxcode, valoare_taxcode_factura, valoare_taxcode_regjurnal, diferenta_valoare_taxcode) ;
|
|
VALUES (2, loRec.an, loRec.luna, loRec.nract, loRec.dataact, loRec.denumire, loRec.taxcode, NVL(loRec.valoare, 0), NVL(m.lnSuma, 0), NVL(loRec.valoare, 0) - NVL(m.lnSuma, 0))
|
|
ENDIF
|
|
ENDSCAN
|
|
ENDIF && llSucces
|
|
|
|
* Facturi cu articole cu TVA, dar fara cod de taxa
|
|
SELECT distinct 3 as tip, a.an, a.luna, a.id_fact, a.nract, a.dataact, a.id_part, a.denumire ;
|
|
FROM (m.lcCursor) a LEFT JOIN (m.lcCursorLines) b ON a.id_fact = b.id_fact ;
|
|
WHERE EMPTY(NVL(b.taxcode,0)) ;
|
|
order by a.an, a.luna, a.dataact, a.nract ;
|
|
INTO CURSOR cFacturiTaxCode3
|
|
|
|
SELECT cverifica_facturi_saft
|
|
APPEND FROM DBF('cFacturiTaxCode3')
|
|
|
|
IF RECCOUNT('cverifica_facturi_saft') > 0
|
|
|
|
* llOk = ExportExcelXml("cverifica_facturi_saft", "facturi_saft" + IIF(m.llClient, '_vanzare', '_achizitie'),'facturi',.T.)
|
|
goExport.export2xlsx("cverifica_facturi_saft", "verificare_facturi_saft" + IIF(m.llClient, '_vanzare_', '_achizitie_') + gofirma.codfiscalfro + '_' + ALLTRIM(STR(m.gnAn)) + PADL(m.gnLuna,2,'0'))
|
|
AMESSAGEBOX('Tip = 1 : Facturi cu valoare diferita fata de Jurnalul de TVA (> 0.5)' + CHR(13) + CHR(10) + ;
|
|
'Tip = 2 : Facturi cu valoare pe coduri de taxa diferita fata de Registrul Jurnal (> 0.5)'+ CHR(13) + CHR(10) + ;
|
|
'Tip = 3 : Facturi cu articole cu TVA, dar fara cod de taxa',0+64, _screen.Caption)
|
|
ELSE
|
|
AMESSAGEBOX('Nu sunt diferente fata de Jurnalul TVA si fata de Registrul Jurnal' + CHR(13) + CHR(10) + CHR(13) + CHR(10) + ;
|
|
'Tip = 1 : Facturi cu valoare diferita fata de Jurnalul de TVA (> 0.5)' + CHR(13) + CHR(10) + ;
|
|
'Tip = 2 : Facturi cu valoare pe coduri de taxa diferita fata de Registrul Jurnal (> 0.5)'+ CHR(13) + CHR(10) + ;
|
|
'Tip = 3 : Facturi cu articole cu TVA, dar fara cod de taxa',0+64,_screen.Caption)
|
|
ENDIF
|
|
|
|
USE IN (SELECT('cFacturiDiferente1'))
|
|
USE IN (SELECT('cFacturiDiferente'))
|
|
USE IN (SELECT('cFacturiTaxCode1'))
|
|
USE IN (SELECT('cFacturiTaxCode2'))
|
|
USE IN (SELECT('cFacturiTaxCode3'))
|
|
USE IN (SELECT('cverifica_facturi_saft'))
|
|
|
|
SELECT (m.lcSelect)
|
|
ENDPROC && do_verifica_facturi
|
|
|
|
*********************************
|
|
* verific soldurile din PhysicalStock cu soldurile din STOC
|
|
*********************************
|
|
PROCEDURE do_verifica_stocuri
|
|
Local lcSelect, lcSql, llOk, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2, lnDif, lcDif, lnTip, lcText
|
|
|
|
lcSelect = SELECT()
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
* Creez cursor balanta de verificare
|
|
TEXT TO lcSql TEXTMERGE NOSHOW
|
|
select s.id_gestiune,
|
|
s.cgest,
|
|
s.id_articol,
|
|
a.denumire,
|
|
s.pret,
|
|
s.cont,
|
|
s.id_part_rez as id_part,
|
|
p.denumire as partener,
|
|
sum(s.canti) as canti,
|
|
sum(s.cantf) as cantf,
|
|
round(s.pret * sum(s.canti), 6) as vali,
|
|
round(s.pret * sum(s.cantf), 6) as valf
|
|
from (select s.id_gestiune, g.cgest, s.id_articol, decode(g.nr_pag, 6, s.pretv+s.tvav, s.pret) as pret, s.cont, s.id_part_rez, s.cants as canti, 0 as cantf
|
|
from stoc s join nom_gestiuni g on s.id_gestiune = g.id_gestiune
|
|
where s.an = <<m.lnAn1>> and s.luna = <<m.lnLuna1>>
|
|
and not (SUBSTR(s.cont,1,3) = '303' or SUBSTR(s.cont,1,2) in ('32', '39'))
|
|
union all
|
|
select s.id_gestiune, g.cgest, s.id_articol, decode(g.nr_pag, 6, s.pretv+s.tvav, s.pret) as pret, s.cont, s.id_part_rez, 0 as canti, s.cants + s.cant - s.cante as cantf
|
|
from stoc s join nom_gestiuni g on s.id_gestiune = g.id_gestiune
|
|
where s.an = <<m.lnAn2>> and s.luna = <<m.lnLuna2>>
|
|
and not (SUBSTR(s.cont,1,3) = '303' or SUBSTR(s.cont,1,2) in ('32', '39'))) s
|
|
left join nom_parteneri p on s.id_part_rez = p.id_part
|
|
left join nom_articole a on s.id_articol = a.id_articol
|
|
group by s.id_gestiune, s.cgest, s.id_articol, a.denumire, s.pret, s.cont, s.id_part_rez, p.denumire
|
|
ENDTEXT
|
|
llSucces = goExecutor.oExecuta(m.lcSql, 'cStocuriTemp')
|
|
|
|
SELECT NVL(s1.cgest, s2.cgest) as cgest, ;
|
|
NVL(s1.denumire, s2.denumire) as denumire, ;
|
|
NVL(s1.cont, s2.cont) as cont, ;
|
|
NVL(s1.partener, s2.partener) as partener, ;
|
|
NVL(s1.pret, s2.pret) as pret, ;
|
|
NVL(s1.vali, 0.00) as vali1, ;
|
|
NVL(s2.vali, 0.00) as vali2, ;
|
|
NVL(s1.valf, 0.00) as valf1, ;
|
|
NVL(s2.valf, 0.00) as valf2, ;
|
|
NVL(s1.vali, 0.00) - NVL(s2.vali, 0.00) as valid,;
|
|
NVL(s1.valf, 0.00) - NVL(s2.valf, 0.00) as valfd ;
|
|
FROM cPhysicalStock s1 FULL JOIN cStocuriTemp s2 ON s1.id_gestiune = s2.id_gestiune AND s1.id_articol = s2.id_articol AND NVL(s1.cont, 'x') = NVL(s2.cont, 'x') AND s1.pret = s2.pret AND NVL(s1.id_part, 0) = NVL(s2.id_part, 0) ;
|
|
ORDER BY 1,2,3,4,5 ;
|
|
INTO CURSOR cStocuriDiferente1
|
|
|
|
|
|
SELECT cgest, denumire, cont, partener, pret, ;
|
|
vali1 as valoare_initiala_saft, vali2 as valoare_initiala_stoc, valid as valoare_initiala_dif, ;
|
|
valf1 as valoare_finala_saft, valf2 as valoare_finala_stoc, valfd as valoare_finala_dif ;
|
|
FROM cStocuriDiferente1 ;
|
|
WHERE valid <> 0 OR valfd <> 0 ;
|
|
ORDER BY cgest, denumire, cont, pret ;
|
|
INTO CURSOR cStocuriDiferente
|
|
|
|
IF RECCOUNT('cStocuriDiferente') = 0
|
|
AMESSAGEBOX('Nu sunt diferente fata de soldurile articolelor din stocuri (exclusiv 303, 32x, 39x)!',0+64,_screen.Caption)
|
|
ELSE
|
|
goExport.export2xlsx("cStocuriDiferente", "verificare_stocuri_saft_" + gofirma.codfiscalfro + '_' + ALLTRIM(STR(m.gnAn)) + PADL(m.gnLuna,2,'0'))
|
|
|
|
AMESSAGEBOX('Diferente fata de soldurile articolelor din stocuri (exclusiv 303, 32x, 39x)!' + CHR(13) + CHR(10) + m.lcText,0+64,_screen.Caption)
|
|
ENDIF && reccount
|
|
|
|
USE IN (SELECT('cStocuriDiferente1'))
|
|
USE IN (SELECT('cStocuriDiferente'))
|
|
|
|
SELECT (m.lcSelect)
|
|
ENDPROC && do_verifica_stocuri
|
|
|
|
*********************************
|
|
* verific rulajele din cMovementOfGoods cu RULL
|
|
*********************************
|
|
PROCEDURE do_verifica_rulaje
|
|
Local lcSelect, lcSql, llOk, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2, lnDif, lcDif, lnTip, lcText
|
|
|
|
lcSelect = SELECT()
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
* Creez cursor balanta de verificare
|
|
TEXT TO lcSql TEXTMERGE NOSHOW
|
|
select a.id_articol, a.denumire, SUM(r.cant) as cant, SUM(r.cante) as cante, SUM(ROUND(decode(g.nr_pag, 6, r.pretv+r.tvav, r.pret) * (case when cant <> 0 then cant else cante end), <<m.gnPC>>)) as valoare
|
|
from rul r left join vnom_articole a on r.id_articol = a.id_articol
|
|
join nom_gestiuni g on r.id_gestiune = g.id_gestiune
|
|
where r.an * 12 + r.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>> and r.sters = 0
|
|
and not (SUBSTR(r.cont,1,3) = '303' or SUBSTR(r.cont,1,2) in ('32'))
|
|
group by a.id_articol, a.denumire
|
|
ENDTEXT
|
|
llSucces = goExecutor.oExecuta(m.lcSql, 'cRulajeTemp')
|
|
|
|
SELECT id_articol, denumire, SUM(cant) as cant, SUM(cante) as cante, SUM(valoare) as valoare ;
|
|
from cMovementOfGoods ;
|
|
GROUP BY id_articol, denumire ;
|
|
INTO CURSOR cMovementOfGoodsTemp
|
|
|
|
|
|
SELECT NVL(r1.denumire, r2.denumire) as denumire, ;
|
|
NVL(r1.cant, 0.00) as cant1, ;
|
|
NVL(r2.cant, 0.00) as cant2, ;
|
|
NVL(r1.cante, 0.00) as cante1, ;
|
|
NVL(r2.cante, 0.00) as cante2, ;
|
|
NVL(r1.valoare, 0.00) as valoare1, ;
|
|
NVL(r2.valoare, 0.00) as valoare2, ;
|
|
NVL(r1.valoare, 0.00) - NVL(r2.valoare, 0.00) as valoared ;
|
|
FROM cMovementOfGoodsTemp r1 FULL JOIN cRulajeTemp r2 ON r1.id_articol = r2.id_articol ;
|
|
ORDER BY 1 ;
|
|
INTO CURSOR cRulajeDiferente1
|
|
|
|
|
|
SELECT denumire, ;
|
|
cant1 as intrari_saft, cant2 as intrari_rulaje, ;
|
|
cante1 as iesiri_saft, cante2 as iesiri_rulaje, ;
|
|
valoare1 as valoare_saft, valoare2 as valoare_rulaje, valoared as valoare_dif ;
|
|
FROM cRulajeDiferente1 ;
|
|
WHERE cant1 <> cant2 OR cante1 <> cante2 or valoare1 <> valoare2 ;
|
|
ORDER BY denumire ;
|
|
INTO CURSOR cRulajeDiferente
|
|
|
|
IF RECCOUNT('cRulajeDiferente') = 0
|
|
AMESSAGEBOX('Nu sunt diferente fata de rulaje (exclusiv 303, 32x)!',0+64,_screen.Caption)
|
|
ELSE
|
|
goExport.export2xlsx("cRulajeDiferente", "verificare_rulaje_saft_" + gofirma.codfiscalfro + '_' + ALLTRIM(STR(m.gnAn)) + PADL(m.gnLuna,2,'0'))
|
|
|
|
AMESSAGEBOX('Diferente fata de rulajele articolelor (exclusiv 303, 32x)!' ,0+64,_screen.Caption)
|
|
ENDIF && reccount
|
|
|
|
USE IN (SELECT('cMovementOfGoodsTemp'))
|
|
USE IN (SELECT('cRulajeDiferente1'))
|
|
USE IN (SELECT('cRulajeDiferente'))
|
|
|
|
SELECT (m.lcSelect)
|
|
ENDPROC && do_verifica_rulaje
|
|
|
|
*************************************
|
|
* Completare inregistrari (Registru Jurnal, Rulaje, Vanzari) care nu au coduri de taxa/plata SAF-T cu coduri de taxa/plata implicite
|
|
PROCEDURE CompletareCodTaxaPlata
|
|
Local lcParola
|
|
Local lcMesaj, lcSql, llSucces, lnOptiune
|
|
PRIVATE pnAn1, pnLuna1, pnAn2, pnLuna2
|
|
*!* lcParola = INPUTBOX('Parola','Parola','')
|
|
*!* IF m.lcParola # TRANSFORM(YEAR(DATE())) + PADL(TRANSFORM(MONTH(DATE())),2,'0') + PADL(TRANSFORM(DAY(DATE())),2,'0')
|
|
*!* RETURN
|
|
*!* ENDIF
|
|
|
|
lnOptiune = xmenu('Completare cod taxa SAF-T;Completare cod plata SAF-T;\-;Completare coduri plata implicite pe documente;Corectare tip persoana fizica in nomenclatorul de parteneri;Stergere CNP-uri invalide la persoanele fizice din declaratie')
|
|
IF EMPTY(m.lnOptiune)
|
|
RETURN
|
|
ENDIF
|
|
|
|
pnAn1 = This.oUnitate.an1
|
|
pnLuna1 = This.oUnitate.luna1
|
|
pnAn2 = This.oUnitate.an2
|
|
pnLuna2 = This.oUnitate.luna2
|
|
|
|
DO CASE
|
|
CASE m.lnOptiune = 1
|
|
lcMesaj = 'Doriti sa completati inregistrarile din perioada curenta (Registrul Jurnal, Rulaj, Vanzari) care nu au coduri de taxa cu coduri de taxa implicite SAFT?'
|
|
lcSql = [begin PACK_SAFT.UpdateTaxCode(?pnAn1, ?pnLuna1, ?pnAn2, ?pnLuna2); end;]
|
|
CASE m.lnOptiune = 2
|
|
lcMesaj = 'Doriti sa completati inregistrarile din perioada curenta (Registrul Jurnal) care nu au coduri de plata cu coduri de plata implicite SAFT?'
|
|
lcSql = [begin PACK_SAFT.UpdatePaymentCode(?pnAn1, ?pnLuna1, ?pnAn2, ?pnLuna2); end;]
|
|
CASE m.lnOptiune = 4
|
|
lcMesaj = 'Doriti sa initializati codul de plata implicit in nomenclatorul "Fel document"?' + CHR(13) + CHR(10) + 'Dupa initializare, verificati asocierea codurilor de plata in Definirea Companiei > Nomenclatoare > Tip document'
|
|
lcSql = [begin PACK_SAFT.UpdatePaymentCodeFdoc(?gnAn); end;]
|
|
CASE m.lnOptiune = 5
|
|
lcMesaj = 'Doriti sa corectati tipul de persoana = "Fizica" pentru persoanele cu tip persoana = "Juridica" si cod fiscal 13 cifre?'
|
|
lcSql = [begin PACK_SAFT.UpdateTipPersoanaFizica(); end;]
|
|
|
|
*!* 24.07.2026 stergere CNP-uri invalide (persoane fizice) la partenerii cu rulaje in perioada declaratiei
|
|
CASE m.lnOptiune = 6
|
|
This.StergereCnpInvalid()
|
|
RETURN
|
|
|
|
ENDCASE
|
|
|
|
IF AMESSAGEBOX(m.lcMesaj,4+32,_screen.Caption) = 6
|
|
llSucces = goExecutor.oExecuta(m.lcSql)
|
|
IF m.llSucces
|
|
AMESSAGEBOX('Completari efectuate cu succes!' + CHR(13) + CHR(10) + ;
|
|
'Apasati pe 1. Citeste date pentru a actualiza datele din declaratie',0+64,_screen.Caption)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC && CompletareCodTaxaPlata
|
|
|
|
*************************************
|
|
* Stergere cod fiscal la persoanele cu CNP invalid, din clientii/furnizorii declaratiei
|
|
* Aceleasi randuri pe care le semnaleaza verificarea codurilor fiscale (do_verifica_cui)
|
|
PROCEDURE StergereCnpInvalid
|
|
Local lcCod, lcCursor, lcLista, lcMesaj, lcSelect, lcSql, llCnp, llSucces, lnAn2, lnI, lnLuna2, lnNr, lnRand, loVerif
|
|
Local lcCodInv, lcDenumireInv, lnIdPartInv, lnTipPersInv
|
|
|
|
lcSelect = Select()
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
If !Used('cCustomers') And !Used('cSuppliers')
|
|
Amessagebox('Apasati intai pe 1. Citeste date!', 0+64, _Screen.Caption)
|
|
Select (m.lcSelect)
|
|
Return .F.
|
|
Endif
|
|
|
|
*!* 26.07.2026 candidatii se iau din cursoarele declaratiei, cu aceleasi criterii ca verificarea codurilor fiscale
|
|
Create Cursor cCnpTemp (id_part N(10), denumire C(150), cod_fiscal C(30), tip_persoana N(1))
|
|
loVerif = Createobject('VerificareCod')
|
|
For lnI = 1 To 2
|
|
lcCursor = Iif(m.lnI = 1, 'cCustomers', 'cSuppliers')
|
|
If !Used(m.lcCursor)
|
|
Loop
|
|
Endif
|
|
Select (m.lcCursor)
|
|
Scan For !Empty(Nvl(id_part, 0)) And !Empty(Nvl(cod_fiscal, '')) ;
|
|
And Inlist(Alltrim(Nvl(cod_tara, 'RO')), 'RO', '')
|
|
lcCod = Alltrim(cod_fiscal)
|
|
llCnp = (Nvl(tip_persoana, 1) = 2) Or (Len(Chrtran(m.lcCod, '0123456789', '')) = 0 And Len(m.lcCod) > 10)
|
|
If m.llCnp And !This.CodFiscalValidSaft(m.lcCod, .T., m.loVerif)
|
|
lnIdPartInv = id_part
|
|
lcDenumireInv = Nvl(denumire, '')
|
|
lcCodInv = m.lcCod
|
|
lnTipPersInv = Nvl(tip_persoana, 1)
|
|
Insert Into cCnpTemp (id_part, denumire, cod_fiscal, tip_persoana) ;
|
|
Values (m.lnIdPartInv, m.lcDenumireInv, m.lcCodInv, m.lnTipPersInv)
|
|
Select (m.lcCursor)
|
|
Endif
|
|
Endscan
|
|
Go Top
|
|
Endfor
|
|
loVerif = .NULL.
|
|
|
|
* Un partener apare pe cate un rand pentru fiecare cont, deci elimin dublurile
|
|
Select Distinct id_part, denumire, cod_fiscal, tip_persoana ;
|
|
From cCnpTemp ;
|
|
Order By denumire ;
|
|
Into Cursor cCnpInvalid
|
|
Use In (Select('cCnpTemp'))
|
|
|
|
lnNr = Reccount('cCnpInvalid')
|
|
If m.lnNr = 0
|
|
Amessagebox('Nu sunt parteneri cu CNP invalid in declaratie!', 0+64, _Screen.Caption)
|
|
Use In (Select('cCnpInvalid'))
|
|
Select (m.lcSelect)
|
|
Return .T.
|
|
Endif
|
|
|
|
goExport.export2xlsx('cCnpInvalid', 'cnp_invalide_saft_' + Alltrim(Str(m.lnAn2)) + Padl(m.lnLuna2, 2, '0'))
|
|
|
|
lcMesaj = 'S-au gasit ' + Alltrim(Str(m.lnNr)) + ' parteneri cu CNP invalid in declaratie.' + Chr(13) + Chr(10) + ;
|
|
'Doriti stergerea codului fiscal eronat si trecerea lor pe persoana fizica?' + Chr(13) + Chr(10) + ;
|
|
'(la SAF-T persoanele fizice nu sunt obligate sa aiba CNP)'
|
|
If Amessagebox(m.lcMesaj, 4+32, _Screen.Caption) <> 6
|
|
Use In (Select('cCnpInvalid'))
|
|
Select (m.lcSelect)
|
|
Return .F.
|
|
Endif
|
|
|
|
* Actualizez in transe de 1000 de coduri (limita listei IN din Oracle)
|
|
lcLista = ''
|
|
lnRand = 0
|
|
llSucces = .T.
|
|
Select cCnpInvalid
|
|
*!* 26.07.2026 exportul lasa pointerul pe EOF, deci pozitionez pe primul rand inainte de parcurgere
|
|
Go Top
|
|
Scan
|
|
lcLista = m.lcLista + Iif(Empty(m.lcLista), '', ',') + Alltrim(Str(cCnpInvalid.id_part))
|
|
lnRand = m.lnRand + 1
|
|
If m.lnRand = 1000 Or Recno() = m.lnNr
|
|
lcSql = [update nom_parteneri set cod_fiscal = null, tip_persoana = 2 where id_part in (] + m.lcLista + [)]
|
|
llSucces = goExecutor.oExecuta(m.lcSql)
|
|
lcLista = ''
|
|
lnRand = 0
|
|
Endif
|
|
If !m.llSucces
|
|
Exit
|
|
Endif
|
|
Endscan
|
|
|
|
If m.llSucces
|
|
Amessagebox('Stergere efectuata cu succes (' + Alltrim(Str(m.lnNr)) + ' parteneri)!' + Chr(13) + Chr(10) + ;
|
|
'Apasati pe 1. Citeste date pentru a actualiza datele din declaratie' + Chr(13) + Chr(10) + ;
|
|
'(pana la re-citire, verificarile arata tot codurile vechi)', 0+64, _Screen.Caption)
|
|
Endif
|
|
|
|
Use In (Select('cCnpInvalid'))
|
|
Select (m.lcSelect)
|
|
Return m.llSucces
|
|
ENDPROC && StergereCnpInvalid
|
|
|
|
***********************************
|
|
* Creare cusoare din baza de date
|
|
Function CitesteDate
|
|
Local lcSelect, llSucces
|
|
lcSelect = Select()
|
|
llSucces = .T.
|
|
|
|
If m.llSucces And This.oUnitate.GeneralLedgerAccounts
|
|
WAIT WINDOW 'GeneralLedgerAccounts...' NOWAIT
|
|
llSucces = This.oGeneralLedgerAccounts()
|
|
Endif
|
|
|
|
If m.llSucces And This.oUnitate.Customers
|
|
WAIT WINDOW 'Customers...' NOWAIT
|
|
llSucces = This.oCustomersSuppliers('customers')
|
|
Endif
|
|
|
|
If m.llSucces And This.oUnitate.Suppliers
|
|
WAIT WINDOW 'Suppliers...' NOWAIT
|
|
llSucces = This.oCustomersSuppliers('suppliers')
|
|
Endif
|
|
|
|
If m.llSucces And This.oUnitate.TaxTable
|
|
WAIT WINDOW 'TaxTable...' NOWAIT
|
|
llSucces = This.oTaxTable()
|
|
Endif
|
|
|
|
If m.llSucces And This.oUnitate.UOMTable
|
|
WAIT WINDOW 'UOMTable...' NOWAIT
|
|
llSucces = This.oUOMTable()
|
|
Endif
|
|
|
|
|
|
If m.llSucces And This.oUnitate.AnalysisTypeTable
|
|
WAIT WINDOW 'AnalysisTypeTable...' NOWAIT
|
|
llSucces = This.oAnalysisTypeTable()
|
|
Endif
|
|
|
|
If m.llSucces And This.oUnitate.GeneralLedgerEntries
|
|
WAIT WINDOW 'GeneralLedgerEntries...' NOWAIT
|
|
llSucces = This.oGeneralLedgerEntries()
|
|
Endif
|
|
|
|
If m.llSucces And This.oUnitate.SalesInvoices
|
|
WAIT WINDOW 'SalesInvoices...' NOWAIT
|
|
llSucces = This.oSalesInvoices()
|
|
Endif
|
|
|
|
If m.llSucces And This.oUnitate.PurchaseInvoices
|
|
WAIT WINDOW 'PurchaseInvoices...' NOWAIT
|
|
llSucces = This.oPurchaseInvoices()
|
|
Endif
|
|
|
|
If m.llSucces And This.oUnitate.Payments
|
|
WAIT WINDOW 'Payments...' NOWAIT
|
|
llSucces = This.oPayments()
|
|
Endif
|
|
|
|
If m.llSucces And This.oUnitate.Owners
|
|
WAIT WINDOW 'Owners...' NOWAIT
|
|
llSucces = This.oOwners()
|
|
ENDIF
|
|
|
|
If m.llSucces And This.oUnitate.Assets
|
|
WAIT WINDOW 'Assets...' NOWAIT
|
|
llSucces = This.oAssets()
|
|
ENDIF
|
|
|
|
If m.llSucces And This.oUnitate.MovementTypeTable
|
|
WAIT WINDOW 'MovementTypeTable...' NOWAIT
|
|
llSucces = This.oMovementTypeTable()
|
|
ENDIF
|
|
|
|
If m.llSucces And This.oUnitate.Products
|
|
WAIT WINDOW 'Products...' NOWAIT
|
|
llSucces = This.oProducts()
|
|
ENDIF
|
|
|
|
If m.llSucces And This.oUnitate.PhysicalStock
|
|
WAIT WINDOW 'PhysicalStock...' NOWAIT
|
|
llSucces = This.oPhysicalStock()
|
|
ENDIF
|
|
|
|
If m.llSucces And This.oUnitate.MovementOfGoods
|
|
WAIT WINDOW 'MovementOfGoods...' NOWAIT
|
|
llSucces = This.oMovementOfGoods()
|
|
ENDIF
|
|
|
|
|
|
Select (m.lcSelect)
|
|
Return m.llSucces
|
|
|
|
Endfunc && CitesteDate
|
|
|
|
************************************************
|
|
* cursor cGeneralLedgerAccounts
|
|
************************************************
|
|
Function oGeneralLedgerAccounts
|
|
|
|
Local lcSelect, lcSql, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2
|
|
lcSelect = Select()
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
* 26.04.2023
|
|
* am folosit bal full join plcont in loc de left join, pentru ca nu se afisau descrierile de la toate conturile din plcont. nu stiu de ce
|
|
|
|
* GeneralLedgerAccounts
|
|
Text To m.lcSql Noshow Textmerge
|
|
SELECT b.cont,
|
|
p.explicaties as denumire,
|
|
DECODE(UPPER(NVL(p.tip_sold,'B')), 'A', 'Activ', 'P', 'Pasiv', 'Bifunctional') AS tip,
|
|
nvl(b.soldideb, 0) as soldideb,
|
|
nvl(b.soldicred, 0) as soldicred,
|
|
nvl(b.soldfdeb, 0) as soldfdeb,
|
|
nvl(b.soldfcred, 0) as soldfcred
|
|
FROM (select nvl(b1.cont, b2.cont) as cont,
|
|
(case
|
|
when precdeb >= preccred then
|
|
precdeb - preccred
|
|
else
|
|
0
|
|
end) as soldideb,
|
|
(case
|
|
when preccred > precdeb then
|
|
preccred - precdeb
|
|
else
|
|
0
|
|
end) as soldicred,
|
|
(case
|
|
when nvl(precdeb,0) + nvl(debit,0) >= nvl(preccred,0) + nvl(credit,0) then
|
|
nvl(precdeb,0) + nvl(debit,0) - nvl(preccred,0) - nvl(credit,0)
|
|
else
|
|
0
|
|
end) as soldfdeb,
|
|
(case
|
|
when nvl(preccred,0) + nvl(credit,0) > nvl(precdeb,0) + nvl(debit,0) then
|
|
nvl(preccred,0) + nvl(credit,0) - nvl(precdeb,0) - nvl(debit,0)
|
|
else
|
|
0
|
|
end) as soldfcred
|
|
from (select cont,
|
|
sum(precdeb) as precdeb,
|
|
sum(preccred) as preccred
|
|
from bal
|
|
where an = <<m.lnAn1>>
|
|
and luna = <<m.lnLuna1>>
|
|
and TO_NUMBER(SUBSTR(cont, 1, 1)) <= 7
|
|
group by cont) b1
|
|
full join (select cont,
|
|
sum(ruldeb) as debit,
|
|
sum(rulcred) as credit
|
|
from bal
|
|
where an * 12 + luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and TO_NUMBER(SUBSTR(cont, 1, 1)) <= 7
|
|
group by cont) b2
|
|
on b1.cont = b2.cont) b
|
|
FULL JOIN VPLCONT_SINTETIC p
|
|
ON b.cont = p.cont
|
|
AND p.an = <<m.lnAn2>>
|
|
WHERE b.cont is not null
|
|
order by b.cont
|
|
Endtext
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, 'cGeneralLedgerAccounts')
|
|
|
|
Select (m.lcSelect)
|
|
Return m.llSucces
|
|
|
|
Endfunc && oGeneralLedgerAccounts
|
|
|
|
************************************************
|
|
* cursor cCustomers/cSuppliers
|
|
************************************************
|
|
Function oCustomersSuppliers
|
|
Lparameters tcTip
|
|
* tcTip: customers/suppliers
|
|
|
|
Local lcCursor, lcSelect, lcSql, llClient, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2
|
|
lcSelect = Select()
|
|
llClient = (Upper(Alltrim(m.tcTip)) = 'CUSTOMERS')
|
|
lcCursor = Iif(m.llClient, 'cCustomers', 'cSuppliers')
|
|
lcCont = Iif(m.llClient, '4111', '401')
|
|
lcListaConturi = Iif(m.llClient, ['4111','4118','461','418', '419'], ['401','404','462','408','409'])
|
|
lcTipCont = Iif(m.llClient, 'Activ', 'Pasiv')
|
|
lcJTVA = Iif(m.llClient, 'jv2007', 'jc2007')
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
* Anul incepand cu care se iau clientii/furnizorii din balanta de parteneri
|
|
* Poate nu vreau sa iau toti clientii/furnizorii, cu coduri fiscale eronate din istoric
|
|
* Clientii/furnizorii din balanta de parteneri, dupa lista de conturi clienti/furnizori, in loc de jurnalul TVA vanzari/cumparari
|
|
* Era posibil sa nu existe in Jurnalele de TVA, daca erau initializati doar in balantele de parteneri
|
|
lnCustSupType = This.oUnitate.CustSupType && 9999 = Toti, 2022 = Incepand cu 2022, 2023 = 2023, 2025 = 2025
|
|
lnAnInitial = IIF(m.lnCustSupType = 9999, 1900, m.lnCustSupType)
|
|
|
|
Text To m.lcSql Noshow Textmerge
|
|
select p.id_part,
|
|
NVL(TRIM(p.denumire), 'NEDEFINIT') as denumire,
|
|
p.cod_fiscal,
|
|
p.tip_persoana,
|
|
p.sters,
|
|
a.strada,
|
|
a.numar,
|
|
a.localitate,
|
|
a.indicativ_judet,
|
|
a.codpostal,
|
|
a.cod_tara,
|
|
(CASE when j.is_activ > 0 then 1 else 0 end) as is_activ,
|
|
NVL(b.cont, '<<m.lcCont>>') as cont,
|
|
'<<m.lcTipCont>>' as tip,
|
|
nvl(b.soldideb, 0) as soldideb,
|
|
nvl(b.soldicred, 0) as soldicred,
|
|
nvl(b.soldfdeb, 0) as soldfdeb,
|
|
nvl(b.soldfcred, 0) as soldfcred,
|
|
CAST(null as varchar2(30)) as saftpartid
|
|
FROM NOM_PARTENERI P
|
|
left join (select id_part, SUM(case when an * 12 + luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>> then 1 else 0 end) as is_activ from <<m.lcJTVA>>
|
|
group by id_part) j
|
|
on p.id_part = j.id_part
|
|
left join (select nvl(b1.id_part, b2.id_part) as id_part,
|
|
nvl(b1.cont, b2.cont) as cont,
|
|
(case
|
|
when nvl(precdeb,0) >= nvl(preccred,0) then
|
|
nvl(precdeb,0) - nvl(preccred,0)
|
|
else
|
|
0
|
|
end) as soldideb,
|
|
(case
|
|
when nvl(preccred,0) > nvl(precdeb,0) then
|
|
nvl(preccred,0) - nvl(precdeb,0)
|
|
else
|
|
0
|
|
end) as soldicred,
|
|
(case
|
|
when nvl(precdeb,0) + nvl(debit,0) >= nvl(preccred,0) + nvl(credit,0) then
|
|
nvl(precdeb,0) + nvl(debit,0) - nvl(preccred,0) - nvl(credit,0)
|
|
else
|
|
0
|
|
end) as soldfdeb,
|
|
(case
|
|
when nvl(preccred,0) + nvl(credit,0) > nvl(precdeb,0) + nvl(debit,0) then
|
|
nvl(preccred,0) + nvl(credit,0) - nvl(precdeb,0) - nvl(debit,0)
|
|
else
|
|
0
|
|
end) as soldfcred
|
|
from (select id_part,
|
|
cont,
|
|
sum(precdeb) as precdeb,
|
|
sum(preccred) as preccred
|
|
from balanta_parteneri
|
|
where an = <<m.lnAn1>>
|
|
and luna = <<m.lnLuna1>>
|
|
and cont in (<<m.lcListaConturi>>)
|
|
group by id_part, cont) b1
|
|
full join (select id_part,
|
|
cont,
|
|
sum(debit) as debit,
|
|
sum(credit) as credit
|
|
from balanta_parteneri
|
|
where an * 12 + luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and cont in (<<m.lcListaConturi>>)
|
|
group by id_part, cont) b2
|
|
on b1.id_part = b2.id_part
|
|
and b1.cont = b2.cont) b
|
|
on p.id_part = b.id_part
|
|
LEFT JOIN (SELECT ap.id_part,
|
|
ap.strada,
|
|
ap.numar,
|
|
l.localitate,
|
|
j.indicativ as indicativ_judet,
|
|
ap.codpostal,
|
|
t.prescurtare as cod_tara
|
|
FROM ADRESE_PARTENERI ap
|
|
left join syn_nom_localitati l
|
|
on l.id_loc = ap.id_loc
|
|
left join syn_nom_judete j
|
|
on j.id_judet = l.id_judet
|
|
left join syn_nom_tari t
|
|
on t.id_tara = ap.id_tara
|
|
WHERE ap.STERS = 0
|
|
AND ap.PRINCIPALA = 1) a
|
|
ON p.id_part = a.id_part
|
|
where exists (select id_part, sum(debit) as debit, sum(credit) as credit, sum(precdeb-preccred) as soldi from balanta_parteneri
|
|
WHERE AN >= <<m.lnAnInitial>> and id_part = p.id_part and cont in (<<m.lcListaConturi>>)
|
|
group by id_part
|
|
having (sum(debit) <> 0 or sum(credit) <> 0 or sum(precdeb-preccred) <> 0))
|
|
or exists
|
|
(select distinct id_part from ireg_parteneri
|
|
WHERE AN >= <<m.lnAnInitial>> and id_part = p.id_part and cont in (<<m.lcListaConturi>>))
|
|
ORDER BY p.denumire
|
|
Endtext
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, m.lcCursor)
|
|
|
|
IF m.llSucces
|
|
lcCodUnitate = this.ounitATE.codi
|
|
DELETE FROM (m.lcCursor) WHERE !EMPTY(NVL(sters,0)) && era si partenerul cu ID_PART = 0, STERS
|
|
|
|
UPDATE (m.lcCursor) SET cod_fiscal = m.lcCodUnitate WHERE UPPER(ALLTRIM(cod_fiscal)) = 'ANULAT'
|
|
UPDATE (m.lcCursor) SET SaftPartId = This.GenCustSupCode(id_part, cod_tara, tip_persoana, cod_fiscal) WHERE !EMPTY(NVL(id_part,0))
|
|
SELECT (m.lcCursor)
|
|
INDEX on id_part TAG id_part
|
|
SET ORDER TO
|
|
ENDIF
|
|
GO TOP IN (m.lcCursor)
|
|
|
|
Select (m.lcSelect)
|
|
Return m.llSucces
|
|
|
|
Endfunc && oCustomersSuppliers
|
|
|
|
************************************************
|
|
* cursor cTaxTable
|
|
************************************************
|
|
Function oTaxTable
|
|
|
|
Local lcSelect, lcSql, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2
|
|
lcSelect = Select()
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
Text To m.lcSql Noshow Textmerge
|
|
select * FROM vsaft_taxtable t WHERE to_char(taxcode) <> to_char(taxtype) || '000' AND exists (SELECT taxcode FROM act a WHERE sters = 0 AND an * 12 + luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>> and a.taxcode = t.taxcode) order by taxcode
|
|
Endtext
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, 'cTaxTable')
|
|
If m.llSucces
|
|
*
|
|
Endif
|
|
|
|
Select (m.lcSelect)
|
|
Return m.llSucces
|
|
|
|
Endfunc && oTaxTable
|
|
|
|
|
|
************************************************
|
|
* cursor cUOMTable
|
|
************************************************
|
|
Function oUOMTable
|
|
|
|
Local lcSelect, lcSql, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2
|
|
lcSelect = Select()
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
Text To m.lcSql Noshow Textmerge
|
|
select distinct u.cod_um_iso as UnitOfMeasure, u.um_iso as description
|
|
from stoc s
|
|
join nom_articole a
|
|
on s.id_articol = a.id_articol
|
|
join vnom_um u
|
|
on a.um = u.um
|
|
where s.an * 12 + s.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and u.cod_um_iso is not null
|
|
order by u.cod_um_iso
|
|
Endtext
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, 'cUOMTable')
|
|
If m.llSucces
|
|
* Da eroare la depunerea la ANAF daca nu are o inregistrare
|
|
IF RECCOUNT('cUOMTable') = 0
|
|
INSERT INTO cUOMTable (unitofmeasure, description) VALUES ('H87', 'bucata')
|
|
ENDIF
|
|
Endif
|
|
|
|
Select (m.lcSelect)
|
|
Return m.llSucces
|
|
|
|
Endfunc && oUOMTable
|
|
|
|
|
|
************************************************
|
|
* cursor cGeneralLedgerEntries
|
|
************************************************
|
|
Function oGeneralLedgerEntries
|
|
|
|
Local lcSelect, lcSql, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2
|
|
lcSelect = Select()
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
* GeneralLedgerEntries
|
|
* 4428 este optional sa aiba taxcode
|
|
* nu pun taxcode pentru 4428 pentru ca la exigibilizare TVA are un cod 380xxx diferit fata de 4428 301xxx si nu am 2 coduri pe aceeasi inregistrare in Registrul Jurnal
|
|
Text To m.lcSql Noshow Textmerge
|
|
select c.an,
|
|
c.luna,
|
|
c.cod,
|
|
c.id_fact,
|
|
c.nract,
|
|
c.dataact,
|
|
c.dataireg,
|
|
c.cont,
|
|
c.tipdc,
|
|
c.id_part,
|
|
c.id_jtva_coloana,
|
|
c.cota_taxa,
|
|
c.explicatie_tva,
|
|
c.tiptaxa,
|
|
c.taxtype,
|
|
c.taxcode,
|
|
c.taxname,
|
|
c.id_sectie,
|
|
c.id_valuta,
|
|
max(decode(c.n50, 0, 0, 1)) over(partition by id_fact) as n50,
|
|
max(decode(c.n100, 0, 0, 1)) over(partition by id_fact) as n100,
|
|
c.curs,
|
|
c.suma,
|
|
c.suma_val,
|
|
c.taxa,
|
|
c.taxa_val,
|
|
p.denumire,
|
|
p.cod_fiscal,
|
|
p.tip_persoana,
|
|
t.prescurtare as cod_tara,
|
|
nvl(v.nume_val2, 'RON') as cod_valuta,
|
|
CAST(null as varchar2(20)) as saftpartid
|
|
from (select an,
|
|
luna,
|
|
cod,
|
|
id_fact,
|
|
nract,
|
|
dataact,
|
|
dataireg,
|
|
cont,
|
|
tipdc,
|
|
id_part,
|
|
id_jtva_coloana,
|
|
cota_taxa,
|
|
explicatie_tva,
|
|
tiptaxa,
|
|
taxtype,
|
|
taxcode,
|
|
taxname,
|
|
id_sectie,
|
|
id_valuta,
|
|
curs,
|
|
sum(n50) as n50,
|
|
sum(n100) as n100,
|
|
sum(suma) as suma,
|
|
sum(suma_val) as suma_val,
|
|
sum(nvl(round(suma * cota_taxa / 100, 2),0)) as taxa,
|
|
sum(case when curs <> 0 and suma_val <> 0 then round(suma / curs * cota_taxa / 100, 2) else 0 end) as taxa_val
|
|
from (select a.an,
|
|
a.luna,
|
|
a.cod,
|
|
a.id_fact,
|
|
a.nract,
|
|
a.dataact,
|
|
a.dataireg,
|
|
a.cont,
|
|
a.tipDC,
|
|
a.id_part,
|
|
a.id_sectie,
|
|
a.id_valuta,
|
|
a.curs,
|
|
a.n50,
|
|
a.n100,
|
|
a.suma,
|
|
a.suma_val,
|
|
case
|
|
when j.taxcode <> 0 and j.id_tva is null then
|
|
null
|
|
else
|
|
decode(NVL(a.id_jtva_coloana,0), 0, null, a.id_jtva_coloana)
|
|
end as id_jtva_coloana,
|
|
case
|
|
when j.taxcode <> 0 and j.id_tva is null then
|
|
0
|
|
else
|
|
decode(NVL(a.id_jtva_coloana,0), 0, 0, j.cota_tva)
|
|
end as cota_taxa,
|
|
case
|
|
when j.taxcode <> 0 and j.id_tva is null then
|
|
null
|
|
else
|
|
decode(NVL(a.id_jtva_coloana,0), 0, null, j.denumire)
|
|
end as explicatie_tva,
|
|
j.id_tva,
|
|
case when j.taxcode is not null and tx.tva = 1 then 'TVA' when tx.wht = 1 then 'WHT' else '' end as tiptaxa,
|
|
cast(decode(j.taxcode, null, null, tx.taxtype) as Number) as taxtype,
|
|
cast(decode(j.taxcode, null, null, a.taxcode) as number) as taxcode,
|
|
cast(decode(j.taxcode, null, null, tx.taxname) as varchar2(250)) as taxname
|
|
from (SELECT an,
|
|
luna,
|
|
cod,
|
|
id_fact,
|
|
nract,
|
|
dataact,
|
|
dataireg,
|
|
case
|
|
when substr(scd, 1, 2) in ('40', '41', '46') then
|
|
id_partd
|
|
else
|
|
null
|
|
end as id_part,
|
|
scd as cont,
|
|
'D' AS tipDC,
|
|
case
|
|
when scd in ('4426', '4427', '4428') and taxcode is not null then
|
|
ad.id_jtva_coloana
|
|
when scd in ('4426', '4427', '4428') and taxcode is null then
|
|
null
|
|
when substr(scd, 1, 2) in
|
|
('40', '41', '44', '46') then
|
|
ad.id_jtva_coloana
|
|
else
|
|
null
|
|
end as id_jtva_coloana,
|
|
decode(scd, '4428', cast(null as number(6)), taxcode) as taxcode,
|
|
id_sectie,
|
|
id_valuta,
|
|
curs,
|
|
decode(ad.id_jtva_coloana, 1004, 1, 0) as n50,
|
|
decode(ad.id_jtva_coloana, 1005, 1, 0) as n100,
|
|
SUM(suma) as suma,
|
|
sum(suma_val) as suma_val
|
|
FROM act ad
|
|
where ad.sters = 0
|
|
and ad.an * 12 + luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and TO_NUMBER(SUBSTR(ad.scd, 1, 1)) <= 7
|
|
group by ad.an,
|
|
ad.luna,
|
|
ad.cod,
|
|
ad.id_fact,
|
|
ad.nract,
|
|
ad.dataact,
|
|
ad.dataireg,
|
|
ad.dataora,
|
|
ad.scd,
|
|
ad.id_partd,
|
|
ad.id_jtva_coloana,
|
|
ad.taxcode,
|
|
ad.id_sectie,
|
|
ad.id_valuta,
|
|
ad.curs
|
|
union all
|
|
SELECT an,
|
|
luna,
|
|
cod,
|
|
id_fact,
|
|
nract,
|
|
dataact,
|
|
dataireg,
|
|
case
|
|
when substr(scc, 1, 2) in ('40', '41', '46') then
|
|
id_partc
|
|
else
|
|
null
|
|
end as id_part,
|
|
scc as cont,
|
|
'C' AS tipDC,
|
|
case
|
|
when scc in ('4426', '4427', '4428') and taxcode is not null then
|
|
ac.id_jtva_coloana
|
|
when scc in ('4426', '4427', '4428') and taxcode is null then
|
|
null
|
|
when substr(scc, 1, 2) in
|
|
('40', '41', '44', '46') then
|
|
ac.id_jtva_coloana
|
|
else
|
|
null
|
|
end as id_jtva_coloana,
|
|
decode(scc, '4428', cast(null as number(6)), taxcode) as taxcode,
|
|
id_sectie,
|
|
id_valuta,
|
|
curs,
|
|
decode(ac.id_jtva_coloana, 1004, 1, 0) as n50,
|
|
decode(ac.id_jtva_coloana, 1005, 1, 0) as n100,
|
|
SUM(suma) as suma,
|
|
sum(suma_val) as suma_val
|
|
FROM act ac
|
|
where ac.sters = 0
|
|
and ac.an * 12 + luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and TO_NUMBER(SUBSTR(ac.scc, 1, 1)) <= 7
|
|
group by ac.an,
|
|
ac.luna,
|
|
ac.cod,
|
|
ac.id_fact,
|
|
ac.nract,
|
|
ac.dataact,
|
|
ac.dataireg,
|
|
ac.dataora,
|
|
ac.scc,
|
|
ac.id_jtva_coloana,
|
|
ac.taxcode,
|
|
ac.id_partc,
|
|
ac.id_sectie,
|
|
ac.id_valuta,
|
|
ac.curs) a
|
|
left join jtva_coloane j
|
|
on a.id_jtva_coloana = j.id_jtva_coloana
|
|
left join vsaft_taxtable tx on a.taxcode = tx.taxcode) b
|
|
group by an,
|
|
luna,
|
|
cod,
|
|
id_fact,
|
|
nract,
|
|
dataact,
|
|
dataireg,
|
|
cont,
|
|
tipdc,
|
|
id_part,
|
|
id_jtva_coloana,
|
|
cota_taxa,
|
|
explicatie_tva,
|
|
tiptaxa,
|
|
taxtype,
|
|
taxcode,
|
|
taxname,
|
|
id_sectie,
|
|
id_valuta,
|
|
curs) c
|
|
left join nom_parteneri p
|
|
on c.id_part = p.id_part
|
|
left join adrese_parteneri ap
|
|
on (p.id_part = ap.id_part and ap.sters = 0 and ap.principala = 1)
|
|
left join syn_nom_tari t
|
|
on t.id_tara = ap.id_tara
|
|
left join vnom_valute v
|
|
on c.id_valuta = v.id_valuta
|
|
order by an,
|
|
luna,
|
|
dataact,
|
|
cod,
|
|
id_fact,
|
|
nract,
|
|
tipdc,
|
|
cont,
|
|
explicatie_tva
|
|
Endtext
|
|
llSucces = goExecutor.oExecuta(m.lcSql, 'cGeneralLedgerEntries')
|
|
|
|
IF m.llSucces
|
|
lcCodUnitate = this.ounitATE.codi
|
|
UPDATE cGeneralLedgerEntries SET cod_fiscal = m.lcCodUnitate WHERE UPPER(ALLTRIM(cod_fiscal)) = 'ANULAT'
|
|
UPDATE cGeneralLedgerEntries SET SaftPartId = This.GenCustSupCode(id_part, cod_tara, tip_persoana, cod_fiscal) WHERE !EMPTY(NVL(id_part,0))
|
|
|
|
* Completez SAFTPARTID contribuabil raportor daca nu exista partener in Registrul TVA
|
|
lcSaftPartId = '00' + This.oUnitate.codi
|
|
UPDATE cGeneralLedgerEntries SET saftPartId = m.lcSaftPartId WHERE EMPTY(NVL(id_part,0))
|
|
ENDIF
|
|
GO TOP IN cGeneralLedgerEntries
|
|
|
|
Select (m.lcSelect)
|
|
Return m.llSucces
|
|
|
|
Endfunc && oGeneralLedgerEntries
|
|
|
|
|
|
************************************************
|
|
* cursor cSalesInvoices, cSalesInvoicesLines
|
|
* din registrul jurnal iau doar inregistrarile care au taxcode pentru a genera articole. nu iau orice nota contabila
|
|
************************************************
|
|
Function oSalesInvoices
|
|
Local lcSelect, lcSql, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2, lcCursor, lcCursorLines, lcCursorPartener, loFact
|
|
lcSelect = Select()
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
lcCursor = 'cSalesInvoices'
|
|
lcCursorTemp = 'cSalesInvoicesTemp'
|
|
lcCursorLines = 'cSalesInvoicesLines'
|
|
lcCursorLinesTemp = 'cSalesInvoicesLinesTemp'
|
|
lcCursorPartener = 'cCustomers'
|
|
|
|
Create Cursor cSalesInvoicesLines(;
|
|
tip N(1) null,;
|
|
id_fact N(20) null,;
|
|
nrcrt N(10) null,;
|
|
cod N(20) null,;
|
|
descriere C(100) null,;
|
|
cantitate N(20,6) null,;
|
|
pret_cu_tva N(1) null,;
|
|
pret N(20,4) null,;
|
|
pretv N(20,4) null,;
|
|
valoare N(20,4) null,;
|
|
valoarev N(20,4) null,;
|
|
taxa N(20,4) null,;
|
|
taxav N(20,4) null,;
|
|
id_valuta N(5) null,;
|
|
curs N(14,4) null,;
|
|
taxcode N(6) null,;
|
|
taxtype N(3) null,;
|
|
taxname C(250) null,;
|
|
proc_tva N(5) null,;
|
|
cod_valuta C(5) null,;
|
|
cont C(4) null)
|
|
|
|
Text To m.lcSql Noshow Textmerge
|
|
Select j2.an,
|
|
j2.luna,
|
|
j2.id_fact,
|
|
j2.cod,
|
|
j2.nract,
|
|
j2.dataact,
|
|
j2.id_part,
|
|
p.denumire,
|
|
j2.totctva,
|
|
CAST(null as varchar2(30)) as saftpartid,
|
|
CAST(null as varchar2(100)) as localitate,
|
|
CAST(null as varchar2(100)) as cod_tara,
|
|
CASE
|
|
when j2.invoicetype is not null then
|
|
j2.invoicetype
|
|
when nvl(j2.autofactura, 0) = 1 then
|
|
389
|
|
when j2.totctva < 0 then
|
|
381
|
|
else
|
|
380
|
|
end as invoicetype,
|
|
(CASE when j2.invoicetype = 389 or nvl(j2.autofactura, 0) = 1 then 389 ELSE 0 END) as autofactura,
|
|
(select MAX(scd) as cont from act where cod = j2.cod and SUBSTR(scd, 1, 2) in ('41', '46')) as cont
|
|
from (select an,
|
|
luna,
|
|
id_fact,
|
|
cod,
|
|
nract,
|
|
dataact,
|
|
id_part,
|
|
totctva,
|
|
(select max(isautofactura) as autofactura
|
|
from serii
|
|
where serie = j.serie_act) as autofactura,
|
|
(select MAX(tip_saft) as tip_saft from vanzari where id_fact = j.id_fact) as invoicetype
|
|
from jv2007 j join nom_fdoc f on j.id_fdoc = f.id_fdoc
|
|
where j.an * 12 + j.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and extract(year from j.dataireg) = j.an and extract(MONTH from j.dataireg) = j.luna
|
|
and f.tip_doc in ('F', 'M')
|
|
and j.id_fact not in (select distinct id_fact from act where an * 12 + luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>> and sters= 0 and id_set = 99996)) j2
|
|
left join nom_parteneri p on j2.id_part = p.id_part
|
|
order by j2.an, j2.luna, j2.dataact, j2.nract, p.denumire
|
|
Endtext
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, m.lcCursorTemp)
|
|
|
|
IF m.llSucces
|
|
SELECT an, luna, id_fact, id_fact as id_fact2, cod, nract, TTOD(dataact) as dataact, id_part, denumire, totctva, saftpartid, localitate, cod_Tara, ;
|
|
invoicetype, ;
|
|
ALLTRIM(STR(invoicetype)) + ' - ' + IIF(invoicetype = 380, 'FACTURA INITIALA', IIF(invoicetype = 381, 'FACTURA STORNO', IIF(invoicetype = 384, 'FACTURA FINALA', IIF(invoicetype = 389, 'AUTOFACTURA', 'FACTURA INITIALA')))) as invoicetypet, ;
|
|
INT(autofactura) as autofactura, cont ;
|
|
FROM (m.lcCursorTemp) ;
|
|
INTO CURSOR (m.lcCursor) READWRITE
|
|
|
|
USE IN (SELECT(m.lcCursorTemp))
|
|
|
|
|
|
* Unific facturile introduse din mai multe bucati (gestiune, facturare, contabilitate)
|
|
SELECT nract, dataact, id_part, MIN(id_fact) as id_fact, SUM(totctva) as totctva, COUNT(*) as nr ;
|
|
FROM (m.lcCursor) ;
|
|
group BY nract, dataact, id_part ;
|
|
HAVING COUNT(*) > 1 ;
|
|
INTO CURSOR cFacturiDup READWRITE
|
|
|
|
SELECT cFacturiDup
|
|
SCAN
|
|
SCATTER NAME loFact
|
|
UPDATE (m.lcCursor) SET id_fact2 = loFact.id_fact, totctva = loFact.totctva WHERE nract = loFact.nract AND dataact = loFact.dataact AND id_part = loFact.id_part
|
|
ENDSCAN
|
|
USE IN (SELECT('cFacturiDup'))
|
|
|
|
SELECT id_fact, id_fact2 FROM (m.lcCursor) WHERE id_fact <> id_fact2 INTO CURSOR cSalesInvoicesDup
|
|
|
|
|
|
* Completez saftpartid, localitate, cod_tara din cCustomers/cSuppliers
|
|
* UPDATE (m.lcCursor) SET SaftPartId = This.GetCustSupCode('CUSTOMERS', id_part) WHERE !EMPTY(NVL(id_part,0))
|
|
|
|
SELECT distinct id_part FROM (m.lcCursor) INTO CURSOR cIdpartTemp
|
|
SELECT cIdPartTemp
|
|
SCAN
|
|
lnIdPart = id_part
|
|
IF !EMPTY(m.lnIdPart)
|
|
IF SEEK(m.lnIdPart,m.lcCursorPartener,'id_part')
|
|
lcSaftPartId = ALLTRIM(&lcCursorPartener..SaftPartId)
|
|
lcLocalitate = ALLTRIM(&lcCursorPartener..localitate)
|
|
lcCodTara = ALLTRIM(&lcCursorPartener..cod_Tara)
|
|
UPDATE (m.lcCursor) SET saftPartId = m.lcSaftPartId, localitate = m.lcLocalitate, cod_tara = m.lcCodTara WHERE id_part = m.lnIdPart
|
|
ENDIF
|
|
ENDIF
|
|
ENDSCAN
|
|
|
|
* Completez SAFTPARTID contribuabil raportor daca nu exista partener in Registrul TVA
|
|
lcSaftPartId = '00' + This.oUnitate.codi
|
|
UPDATE (m.lcCursor) SET saftPartId = m.lcSaftPartId WHERE EMPTY(NVL(id_part,0))
|
|
|
|
USE IN (SELECT('cIdpartTemp'))
|
|
|
|
* LINII FACTURI
|
|
* Tip 1 = vanzari detalii
|
|
* Tip = 2 articole facturi din gestiune (rul)
|
|
* mai sunt diferente intre liniile din Rulaj si notele contabile, posibil din rotunjiri pe baza/TVA, pentru care s-au pus note suplimentare in Registrul Jurnal
|
|
* Trebuie sa generez linie cu articol din nota din Registrul Jurnal
|
|
|
|
* Tip = 3 articole facturi din Contabilitate (act) - tratez cazul 4111 = 418 total cu TVA. Pun doar 100/119 din suma pe baza
|
|
* Tip = 4 note din contabilitate (act) ex: cheltuieli rotunjire zecimale, transport, discount pentru facturile din gestiune
|
|
* Tip 4 se sterge si se lasa doar diferentele fata de Tip = 2
|
|
TEXT TO m.lcSql NOSHOW textmerge
|
|
select 1 as tip,
|
|
CAST(0 as number(5,0)) as nrcrt,
|
|
j.id_fact,
|
|
j.cod,
|
|
CAST(a.denumire as varchar2(100)) as descriere,
|
|
vd.cantitate,
|
|
vd.pret_cu_tva,
|
|
ROUND(NVL(vc.curs, 1) * ROUND(decode(vd.pret_cu_tva, 0, NVL(vd.pret, 0)-NVL(vd.discount_unitar,0), (NVL(vd.pret, 0)-NVL(vd.discount_unitar,0)) / decode(NVL(vd.proc_tvav,0), 0, 1, vd.proc_tvav)), <<m.gnPPret>>) / NVL(vc.multiplicator, 1), 4) as pret,
|
|
DECODE(v.in_valuta, 0, 0.00, ROUND(decode(vd.pret_cu_tva, 0, NVL(vd.pret, 0), NVL(vd.pret, 0) / decode(NVL(vd.proc_tvav,0), 0, 1, vd.proc_tvav)), <<m.gnPPretVal>>)) as pretv,
|
|
CAST(0 as number(20,4)) as valoare,
|
|
CAST(0 as number(20,4)) as valoarev,
|
|
CAST(0 as number(20,4)) as taxa,
|
|
CAST(0 as number(20,4)) as taxav,
|
|
DECODE(v.in_valuta, 0, 0, vd.id_valuta) as id_valuta,
|
|
DECODE(v.in_valuta, 0, 0, nvl(v.curs, 0)) as curs,
|
|
vd.taxcode,
|
|
st.taxtype,
|
|
st.taxname,
|
|
(vd.proc_tvav - 1) * 100 as proc_tva,
|
|
DECODE(v.in_valuta, 0, '', vi.iso_valuta) as cod_valuta,
|
|
cast(NVL(NVL(cvc.cont_venit, decode(nc.scc, '4111', nc.scd, nc.scc)),'') as varchar2(4)) as cont
|
|
from vanzari_detalii vd
|
|
join vanzari v
|
|
on vd.id_vanzare = v.id_vanzare
|
|
join jv2007 j
|
|
on v.id_fact = j.id_fact
|
|
join nom_fdoc f on j.id_fdoc = f.id_fdoc
|
|
left join nom_articole a on vd.id_articol = a.id_articol
|
|
left join vanzari_cursuri vc on vd.id_vanzare = vc.id_vanzare and vd.id_valuta = vc.id_valuta
|
|
left join nom_valute nv
|
|
on v.id_valuta = nv.id_valuta
|
|
left join syn_nom_valute_iso vi
|
|
on nv.id_valuta_iso = vi.id_valuta_iso
|
|
left join CRM_POLITICI_PRETURI pp
|
|
on vd.id_pol = pp.id_pol
|
|
left join crm_note_vanzari nv2
|
|
on pp.id_nota = nv2.id_nota
|
|
left join note_contabile nc
|
|
on nv2.id_set = nc.id_set
|
|
left join vsaft_taxtable st on vd.taxcode = st.taxcode
|
|
left join CORESP_CONT_VENCHELT cvc on vd.cont = cvc.cont
|
|
where j.an * 12 + j.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and extract(year from j.dataireg)*12 + extract(MONTH from j.dataireg) between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and extract(year from j.dataireg) = j.an and extract(MONTH from j.dataireg) = j.luna
|
|
and f.tip_doc in ('F', 'M')
|
|
and v.sters = 0
|
|
union all
|
|
select 2 as tip,
|
|
CAST(0 as number(5,0)) as nrcrt,
|
|
r.id_fact,
|
|
r.cod,
|
|
CAST(a.denumire as varchar2(100)) as descriere,
|
|
r.cante as cantitate,
|
|
0 as pret_cu_tva,
|
|
r.pretv as pret,
|
|
0.00 as pretv,
|
|
CAST(0 as number(20,4)) as valoare,
|
|
CAST(0 as number(20,4)) as valoarev,
|
|
CAST(0 as number(20,4)) as taxa,
|
|
CAST(0 as number(20,4)) as taxav,
|
|
0 as id_valuta,
|
|
0 as curs,
|
|
r.taxcode,
|
|
st.taxtype,
|
|
st.taxname,
|
|
st.procent_taxa as proc_tva,
|
|
'RON' as cod_valuta,
|
|
NVL(vc.cont_venit, '707') as cont
|
|
from rul r
|
|
join jv2007 j
|
|
on r.an = j.an
|
|
and r.luna = j.luna
|
|
and r.id_fact = j.id_fact
|
|
join nom_fdoc f on j.id_fdoc = f.id_fdoc
|
|
left join nom_articole a on r.id_articol = a.id_articol
|
|
left join vsaft_taxtable st on r.taxcode = st.taxcode
|
|
left join CORESP_CONT_VENCHELT vc on r.cont = vc.cont
|
|
where r.an * 12 + r.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and r.sters = 0
|
|
and j.id_fact not in (select id_fact
|
|
from vanzari
|
|
where extract(year from data_act) * 12 +
|
|
extract(month from data_act) between
|
|
<<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and id_fact is not null and sters = 0)
|
|
and f.tip_doc in ('F', 'M')
|
|
union all
|
|
select 3 as tip,
|
|
CAST(0 as number(5,0)) as nrcrt,
|
|
id_fact,
|
|
cod,
|
|
CAST(MAX(explicatia) as varchar2(100)) as descriere,
|
|
1 as cantitate,
|
|
0 as pret_cu_tva,
|
|
sum(decode(exceptie, 1, -1, 1) * suma) as pret,
|
|
sum(decode(exceptie, 1, -1, 1) * suma_val) as pretv,
|
|
CAST(0 as number(20,4)) as valoare,
|
|
CAST(0 as number(20,4)) as valoarev,
|
|
CAST(0 as number(20,4)) as taxa,
|
|
CAST(0 as number(20,4)) as taxav,
|
|
id_valuta,
|
|
curs,
|
|
taxcode,
|
|
taxtype,
|
|
taxname,
|
|
proc_tva,
|
|
cod_valuta,
|
|
decode(exceptie, 1, scd, scc) as cont
|
|
from (select a.id_fact,
|
|
a.cod,
|
|
a.explicatia,
|
|
(CASE when a.scd like '4%' AND a.scc = '418' then ROUND(a.suma * 100 / (100 + st.procent_taxa), 2) else a.suma end) as suma,
|
|
(CASE when a.scd like '4%' AND a.scc = '418' then ROUND(a.suma_val * 100 / (100 + st.procent_taxa), 2) else a.suma_val end) as suma_val,
|
|
a.id_valuta,
|
|
a.curs,
|
|
a.taxcode,
|
|
st.taxtype,
|
|
st.taxname,
|
|
st.procent_taxa as proc_tva,
|
|
vi.iso_valuta as cod_valuta,
|
|
a.scd,
|
|
a.scc,
|
|
(SELECT DISTINCT 1 AS EXCEPTIE
|
|
FROM EXCEPTII_IREG
|
|
WHERE INVERS = 1
|
|
AND CONT = a.scc and cont_c = a.scd) as exceptie
|
|
from act a
|
|
join jv2007 j
|
|
on a.an = j.an
|
|
and a.luna = j.luna
|
|
and a.id_fact = j.id_fact
|
|
join nom_fdoc f on j.id_fdoc = f.id_fdoc
|
|
left join nom_valute nv
|
|
on a.id_valuta = nv.id_valuta
|
|
left join syn_nom_valute_iso vi
|
|
on nv.id_valuta_iso = vi.id_valuta_iso
|
|
left join vsaft_taxtable st on a.taxcode = st.taxcode
|
|
where a.an * 12 + a.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and a.sters = 0
|
|
and a.id_set <> 99996
|
|
and a.taxcode is not null
|
|
AND substr(a.scd, 1, 3) <> '442' and substr(a.scc, 1, 3) <> '442'
|
|
and a.id_fact not in
|
|
(select id_fact
|
|
from vanzari
|
|
where extract(year from data_act) * 12 +
|
|
extract(month from data_act) between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and id_fact is not null and sters = 0
|
|
union
|
|
select id_fact
|
|
from rul
|
|
where an * 12 + luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and id_fact is not null and sters = 0)
|
|
and f.tip_doc in ('F', 'M'))
|
|
group by id_fact,
|
|
cod,
|
|
id_valuta,
|
|
curs,
|
|
taxcode,
|
|
taxtype,
|
|
taxname,
|
|
proc_tva,
|
|
cod_valuta,
|
|
decode(exceptie, 1, scd, scc)
|
|
union all
|
|
select 4 as tip,
|
|
CAST(0 as number(5,0)) as nrcrt,
|
|
id_fact,
|
|
cod,
|
|
CAST('VERIFICARE' as varchar2(100)) as descriere,
|
|
1 as cantitate,
|
|
0 as pret_cu_tva,
|
|
sum(decode(exceptie, 1, -1, 1) * suma) as pret,
|
|
sum(decode(exceptie, 1, -1, 1) * suma_val) as pretv,
|
|
CAST(0 as number(20,4)) as valoare,
|
|
CAST(0 as number(20,4)) as valoarev,
|
|
CAST(0 as number(20,4)) as taxa,
|
|
CAST(0 as number(20,4)) as taxav,
|
|
id_valuta,
|
|
curs,
|
|
taxcode,
|
|
taxtype,
|
|
taxname,
|
|
proc_tva,
|
|
cod_valuta,
|
|
decode(exceptie, 1, scd, scc) as cont
|
|
from (select a.id_fact,
|
|
a.cod,
|
|
a.explicatia,
|
|
(CASE when a.scd like '4%' AND a.scc = '418' then ROUND(a.suma * 100 / (100 + st.procent_taxa), 2) else a.suma end) as suma,
|
|
(CASE when a.scd like '4%' AND a.scc = '418' then ROUND(a.suma_val * 100 / (100 + st.procent_taxa), 2) else a.suma_val end) as suma_val,
|
|
a.id_valuta,
|
|
a.curs,
|
|
a.taxcode,
|
|
st.taxtype,
|
|
st.taxname,
|
|
st.procent_taxa as proc_tva,
|
|
vi.iso_valuta as cod_valuta,
|
|
a.scd,
|
|
a.scc,
|
|
(SELECT DISTINCT 1 AS EXCEPTIE
|
|
FROM EXCEPTII_IREG
|
|
WHERE INVERS = 1
|
|
AND CONT = a.scc and cont_c = a.scd) as exceptie
|
|
from act a
|
|
join jv2007 j
|
|
on a.an = j.an
|
|
and a.luna = j.luna
|
|
and a.id_fact = j.id_fact
|
|
join nom_fdoc f on j.id_fdoc = f.id_fdoc
|
|
left join nom_valute nv
|
|
on a.id_valuta = nv.id_valuta
|
|
left join syn_nom_valute_iso vi
|
|
on nv.id_valuta_iso = vi.id_valuta_iso
|
|
left join vsaft_taxtable st on a.taxcode = st.taxcode
|
|
where a.an * 12 + a.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and a.sters = 0
|
|
and a.id_set <> 99996
|
|
and a.taxcode is not null
|
|
AND substr(a.scd, 1, 3) <> '442' and substr(a.scc, 1, 3) <> '442'
|
|
and j.id_fact in
|
|
(select id_fact
|
|
from vanzari
|
|
where extract(year from data_act) * 12 +
|
|
extract(month from data_act) between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and id_fact is not null and sters = 0
|
|
union
|
|
select id_fact
|
|
from rul
|
|
where an * 12 + luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and id_fact is not null and sters = 0)
|
|
and f.tip_doc in ('F', 'M'))
|
|
group by id_fact,
|
|
cod,
|
|
id_valuta,
|
|
curs,
|
|
taxcode,
|
|
taxtype,
|
|
taxname,
|
|
proc_tva,
|
|
cod_valuta,
|
|
decode(exceptie, 1, scd, scc)
|
|
ENDTEXT
|
|
llSucces = goExecutor.oExecuta(m.lcSql, m.lcCursorLinesTemp)
|
|
|
|
IF m.llSucces
|
|
|
|
SELECT (m.lcCursorLines)
|
|
APPEND FROM DBF(m.lcCursorLinesTemp)
|
|
USE IN (SELECT(m.lcCursorLinesTemp))
|
|
|
|
|
|
* la Tip = 4 note din Registrul Jurnal aferente facturilor din gestiune
|
|
* verific daca suma din gestiune pe taxcode = suma din registrul jurnal pe taxcode si las doar diferentele fata de rulaj
|
|
* articolele preluate din gestiune au pretul in lei
|
|
*******************************************
|
|
|
|
* Diferente valori pe fiecare taxcode tip = 1, 2 (facturi din facturare, gestiune)
|
|
SELECT a.an, a.luna, a.id_fact, a.nract, a.dataact, a.id_part, a.denumire, b.taxcode, b.cont, ;
|
|
SUM(ROUND(b.cantitate * b.pret,2)) as valoare, ;
|
|
SUM(ROUND(b.cantitate * b.pretv,2)) as valoarev ;
|
|
FROM (m.lcCursor) a LEFT JOIN (m.lcCursorLines) b ON a.id_fact = b.id_fact ;
|
|
WHERE INLIST(b.tip, 1, 2) ;
|
|
GROUP BY a.an, a.luna, a.id_fact, a.nract, a.dataact, a.id_part, a.denumire, b.taxcode, b.cont ;
|
|
order by a.an, a.luna, a.dataact, a.nract ;
|
|
INTO CURSOR cFacturiTaxCode2 READWRITE
|
|
|
|
SELECT a.id_fact, b.taxcode, ;
|
|
SUM(ROUND(b.cantitate * b.pret,2)) as valoare, ;
|
|
SUM(ROUND(b.cantitate * b.pretv,2)) as valoarev ;
|
|
FROM (m.lcCursor) a LEFT JOIN (m.lcCursorLines) b ON a.id_fact = b.id_fact ;
|
|
WHERE INLIST(b.tip, 1, 2) ;
|
|
GROUP BY a.id_fact, b.taxcode ;
|
|
INTO CURSOR cFacturiTaxCode2a
|
|
|
|
|
|
* suma din Registrul Jurnal fara TVA, pentru documentele introduse din gestiune
|
|
* tratez regularizare facturi nesosite/neintocmite 408=401, 4111=418
|
|
SELECT a.an, a.luna, a.id_fact, a.nract, a.dataact, a.id_part, a.denumire, b.taxcode, b.cont, ;
|
|
SUM(ROUND(b.cantitate * b.pret,2)) as valoare, ;
|
|
SUM(ROUND(b.cantitate * b.pretv,2)) as valoarev ;
|
|
FROM (m.lcCursor) a LEFT JOIN (m.lcCursorLines) b ON a.id_fact = b.id_fact ;
|
|
WHERE b.tip = 4 ;
|
|
GROUP BY a.an, a.luna, a.id_fact, a.nract, a.dataact, a.id_part, a.denumire, b.taxcode, b.cont ;
|
|
order by a.an, a.luna, a.dataact, a.nract ;
|
|
INTO CURSOR cFacturiTaxCode4
|
|
|
|
SELECT a.id_fact, b.taxcode, ;
|
|
SUM(ROUND(b.cantitate * b.pret,2)) as valoare, ;
|
|
SUM(ROUND(b.cantitate * b.pretv,2)) as valoarev ;
|
|
FROM (m.lcCursor) a LEFT JOIN (m.lcCursorLines) b ON a.id_fact = b.id_fact ;
|
|
WHERE b.tip = 4 ;
|
|
GROUP BY a.id_fact, b.taxcode ;
|
|
INTO CURSOR cFacturiTaxCode4a
|
|
|
|
SELECT NVL(a.id_fact, b.id_fact) as id_fact, NVL(a.taxcode, b.taxcode) as taxcode, ;
|
|
a.valoare as valoare2, b.valoare as valoare4, a.valoarev as valoarev2, b.valoarev as valoarev4 ;
|
|
FROM cFacturiTaxCode2a a FULL JOIN cFacturiTaxCode4a b ON a.id_fact = b.id_fact AND a.taxcode = b.taxcode ;
|
|
INTO CURSOR cFacturiTaxCode24a
|
|
|
|
USE IN (SELECT('cFacturiTaxCode2a'))
|
|
USE IN (SELECT('cFacturiTaxCode4a'))
|
|
|
|
SELECT cFacturiTaxCode4
|
|
SCAN
|
|
SCATTER NAME loRec
|
|
|
|
* Completez contul in liniile care nu au cont
|
|
UPDATE (m.lcCursorLines) SET cont = loRec.cont WHERE id_fact = loRec.id_fact AND taxcode = loRec.taxcode AND EMPTY(NVL(cont,'')) AND INLIST(tip,1,2)
|
|
UPDATE cFacturiTaxCode2 SET cont = loRec.cont WHERE id_fact = loRec.id_fact AND taxcode = loRec.taxcode AND EMPTY(NVL(cont,''))
|
|
|
|
SELECT cFacturiTaxCode2
|
|
LOCATE FOR id_fact = loRec.id_fact AND taxcode = loRec.taxcode AND cont = loRec.cont
|
|
IF FOUND()
|
|
lnSuma = valoare
|
|
lnSumaV = valoarev
|
|
ELSE
|
|
lnSuma = 0
|
|
lnSumaV = 0
|
|
ENDIF
|
|
lnDiferenta = NVL(lorec.valoare,0) - NVL(m.lnSuma,0)
|
|
lnDiferentaV = NVL(lorec.valoarev,0) - NVL(m.lnSumaV,0)
|
|
|
|
* Verific valoarea doar pe taxcode, fara cont (este posibil sa modifice contul in contabilitate)
|
|
llDiferentaContabilitate = .F.
|
|
SELECT cFacturiTaxCode24a
|
|
LOCATE FOR id_fact = loRec.id_fact AND taxcode = loRec.taxcode
|
|
IF FOUND()
|
|
llDiferentaContabilitate = (ABS(valoare4-valoare2) > 0.05)
|
|
ENDIF
|
|
|
|
* Daca este diferenta facturare+gestiune fata de contabilitate pe total taxcode si diferenta este mai mare de 0.05
|
|
IF m.llDiferentaContabilitate AND ABS(m.lnDiferenta) > 0.05
|
|
|
|
SELECT (m.lcCursorLines)
|
|
LOCATE FOR id_fact = loRec.id_fact AND taxcode = loRec.taxcode AND cont = loRec.cont AND tip = 4
|
|
IF FOUND()
|
|
REPLACE pret WITH m.lnDiferenta, pretv WITH m.lnDiferentaV, descriere WITH 'DIFERENTA'
|
|
IF SIGN(pret) = -1
|
|
REPLACE cantitate WITH -1*cantitate, pret WITH ABS(pret), pretv WITH ABS(pretv)
|
|
ENDIF
|
|
IF pretv = 0
|
|
REPLACE id_valuta WITH null, cod_valuta WITH null, curs WITH null
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDSCAN
|
|
|
|
USE IN (SELECT('cFacturiTaxCode24a'))
|
|
|
|
* Sterg liniile articolelor tip = 4 pe care nu le-am modificat cu diferenta fata de rulaj
|
|
DELETE FROM (m.lcCursorLines) WHERE tip = 4 AND descriere = 'VERIFICARE'
|
|
*******************************************
|
|
|
|
|
|
* Completare Nr. Crt.
|
|
lnIdFact = -1
|
|
lnNrCrt = 0
|
|
SELECT (m.lcCursorLines)
|
|
SCAN
|
|
IF id_fact <> m.lnIdFact
|
|
lnNrCrt = 0
|
|
lnIdFact = id_fact
|
|
ENDIF
|
|
lnNrCrt = lnNrCrt + 1
|
|
REPLACE nrcrt WITH m.lnNrCrt
|
|
ENDSCAN
|
|
|
|
UPDATE (m.lcCursorLines) SET taxa = ROUND(ROUND(cantitate * pret, 2) * proc_tva / 100, 2), ;
|
|
taxav = ROUND(ROUND(cantitate * pretv, 2) * proc_tva / 100, 2), ;
|
|
valoare = ROUND(cantitate * pret, 2), valoarev = ROUND(cantitate * pretv, 2)
|
|
|
|
* Unificare elemente facturi de pe facturi duplicate (introduse din gestiune, contabilitate, facturare)
|
|
SELECT (m.lcCursor)
|
|
SCAN FOR id_fact <> id_fact2
|
|
SCATTER NAME loFact
|
|
UPDATE (m.lcCursorLines) SET id_fact = loFact.id_fact2 WHERE id_fact = loFact.id_fact
|
|
ENDSCAN
|
|
DELETE FROM (m.lcCursor) WHERE id_fact <> id_fact2
|
|
ENDIF
|
|
ENDIF && m.llSucces
|
|
|
|
GO TOP IN (m.lcCursor)
|
|
|
|
SELECT (m.lcSelect)
|
|
RETURN m.llSucces
|
|
ENDFUNC
|
|
|
|
************************************************
|
|
* cursor cPurchaseInvoice, cPurchaseInvoicesLines
|
|
* din registrul jurnal iau doar inregistrarile care au taxcode pentru a genera articole. nu iau orice nota contabila
|
|
************************************************
|
|
Function oPurchaseInvoices
|
|
Local lcSelect, lcSql, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2, lcCursor, lcCursorLines, lcCursorPartener
|
|
lcSelect = Select()
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
lcCursor = 'cPurchaseInvoices'
|
|
lcCursorTemp = 'cPurchaseInvoicesTemp'
|
|
lcCursorLines = 'cPurchaseInvoicesLines'
|
|
lcCursorLinesTemp = 'cPurchaseInvoicesLinesTemp'
|
|
lcCursorPartener = "cSuppliers"
|
|
|
|
Create Cursor cPurchaseInvoicesLines(;
|
|
tip N(1) null,;
|
|
id_fact N(20) null,;
|
|
nrcrt N(10) null,;
|
|
cod N(20) null,;
|
|
descriere C(100) null,;
|
|
cantitate N(20,6) null,;
|
|
pret_cu_tva N(1) null,;
|
|
pret N(20,4) null,;
|
|
pretv N(20,4) null,;
|
|
valoare N(20,4) null,;
|
|
valoarev N(20,4) null,;
|
|
taxa N(20,4) null,;
|
|
taxav N(20,4) null,;
|
|
id_valuta N(5) null,;
|
|
curs N(14,4) null,;
|
|
taxcode N(6) null,;
|
|
taxtype N(3) null,;
|
|
taxname C(250) null,;
|
|
proc_tva N(5) null,;
|
|
cod_valuta C(5) null,;
|
|
cont C(4) null)
|
|
|
|
Text To m.lcSql Noshow Textmerge
|
|
Select j2.an,
|
|
j2.luna,
|
|
j2.id_fact,
|
|
j2.cod,
|
|
j2.nract,
|
|
j2.dataact,
|
|
j2.id_part,
|
|
p.denumire,
|
|
j2.totctva,
|
|
CAST(null as varchar2(30)) as saftpartid,
|
|
CAST(null as varchar2(100)) as localitate,
|
|
CAST(null as varchar2(100)) as cod_tara,
|
|
case
|
|
when j2.tip_saft is not null then j2.tip_saft
|
|
when j2.totctva < 0 then 381
|
|
else 380
|
|
end as invoicetype,
|
|
decode(nvl(j2.autofactura, 0), 0, 0, 389) as autofactura,
|
|
(select MAX(scc) as cont from act where cod = j2.cod and SUBSTR(scc, 1, 2) in ('40', '46')) as cont
|
|
from (select j.an,
|
|
j.luna,
|
|
j.id_fact,
|
|
j.cod,
|
|
j.nract,
|
|
j.dataact,
|
|
j.id_part,
|
|
j.totctva,
|
|
d.tip_saft,
|
|
0 as autofactura
|
|
from jc2007 j join nom_fdoc f on j.id_fdoc = f.id_fdoc
|
|
left join documente d on j.id_fact = d.id_doc
|
|
where j.an * 12 + j.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and extract(year from j.dataireg) = j.an and extract(MONTH from j.dataireg) = j.luna
|
|
and f.tip_doc in ('F', 'M', 'C', 'INV')) j2
|
|
left join nom_parteneri p on j2.id_part = p.id_part
|
|
order by j2.an, j2.luna, j2.dataact, j2.nract, p.denumire
|
|
Endtext
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, m.lcCursorTemp)
|
|
|
|
IF m.llSucces
|
|
SELECT an, luna, id_fact, id_fact as id_fact2, cod, nract, TTOD(dataact) as dataact, id_part, denumire, totctva, saftpartid, localitate, cod_Tara, ;
|
|
invoicetype, ;
|
|
ALLTRIM(STR(invoicetype)) + ' - ' + IIF(invoicetype = 380, 'FACTURA INITIALA', IIF(invoicetype = 381, 'FACTURA STORNO', IIF(invoicetype = 384, 'FACTURA FINALA', IIF(invoicetype = 389, 'AUTOFACTURA', 'FACTURA INITIALA')))) as invoicetypet, ;
|
|
INT(autofactura) as autofactura, cont ;
|
|
FROM (m.lcCursorTemp) ;
|
|
INTO CURSOR (m.lcCursor) READWRITE
|
|
|
|
USE IN (SELECT(m.lcCursorTemp))
|
|
|
|
* Unific facturile introduse din mai multe bucati (gestiune, facturare, contabilitate)
|
|
SELECT nract, dataact, id_part, MIN(id_fact) as id_fact, SUM(totctva) as totctva, COUNT(*) as nr ;
|
|
FROM (m.lcCursor) ;
|
|
group BY nract, dataact, id_part ;
|
|
HAVING COUNT(*) > 1 ;
|
|
INTO CURSOR cFacturiDup READWRITE
|
|
|
|
SELECT cFacturiDup
|
|
SCAN
|
|
SCATTER NAME loFact
|
|
UPDATE (m.lcCursor) SET id_fact2 = loFact.id_fact, totctva = loFact.totctva WHERE nract = loFact.nract AND dataact = loFact.dataact AND id_part = loFact.id_part
|
|
ENDSCAN
|
|
USE IN (SELECT('cFacturiDup'))
|
|
|
|
SELECT id_fact, id_fact2 FROM (m.lcCursor) WHERE id_fact <> id_fact2 INTO CURSOR cPurchaseInvoicesDup
|
|
|
|
* Completez saftpartid, localitate, cod_tara din cCustomers/cSuppliers
|
|
* UPDATE (m.lcCursor) SET SaftPartId = This.GetCustSupCode('SUPPLIERS', id_part) WHERE !EMPTY(NVL(id_part,0))
|
|
|
|
SELECT distinct id_part FROM (m.lcCursor) INTO CURSOR cIdpartTemp
|
|
SELECT cIdPartTemp
|
|
SCAN
|
|
lnIdPart = id_part
|
|
IF SEEK(m.lnIdPart, m.lcCursorPartener,'id_part')
|
|
lcSaftPartId = ALLTRIM(&lcCursorPartener..SaftPartId)
|
|
lcLocalitate = ALLTRIM(&lcCursorPartener..localitate)
|
|
lcCodTara = ALLTRIM(&lcCursorPartener..cod_Tara)
|
|
UPDATE (m.lcCursor) SET saftPartId = m.lcSaftPartId, localitate = m.lcLocalitate, cod_tara = m.lcCodTara WHERE id_part = m.lnIdPart
|
|
ENDIF
|
|
ENDSCAN
|
|
USE IN (SELECT('cIdpartTemp'))
|
|
|
|
* Completez SAFTPARTID contribuabil raportor daca nu exista partener in Registrul TVA
|
|
lcSaftPartId = '00' + This.oUnitate.codi
|
|
UPDATE (m.lcCursor) SET saftPartId = m.lcSaftPartId WHERE EMPTY(NVL(id_part,0))
|
|
|
|
* LINII FACTURI
|
|
* Tip 1 = vanzari detalii (nu se aplica)
|
|
* Tip = 2 articole facturi din gestiune (rul)
|
|
* mai sunt diferente intre liniile din Rulaj si notele contabile, posibil din rotunjiri pe baza/TVA, pentru care s-au pus note suplimentare in Registrul Jurnal
|
|
* Trebuie sa generez linie cu articol din nota din Registrul Jurnal
|
|
|
|
* Tip = 3 articole facturi din Contabilitate (act) - tratez cazul 408 = 401 total cu TVA. Pun doar 100/119 din suma pe baza
|
|
* Tip = 4 note din contabilitate (act) ex: cheltuieli rotunjire zecimale, transport, discount pentru facturile din gestiune
|
|
* Tip 4 se sterge si se lasa doar diferentele fata de Tip = 2
|
|
TEXT TO m.lcSql NOSHOW textmerge
|
|
select 2 as tip,
|
|
CAST(0 as number(5,0)) as nrcrt,
|
|
r.id_fact,
|
|
r.cod,
|
|
CAST(a.denumire as varchar2(100)) as descriere,
|
|
r.cant as cantitate,
|
|
0 as pret_cu_tva,
|
|
r.pret as pret,
|
|
r.pretd as pretv,
|
|
CAST(0 as number(20,4)) as valoare,
|
|
CAST(0 as number(20,4)) as valoarev,
|
|
CAST(0 as number(20,4)) as taxa,
|
|
CAST(0 as number(20,4)) as taxav,
|
|
r.id_valuta,
|
|
r.curs,
|
|
r.taxcode,
|
|
st.taxtype,
|
|
st.taxname,
|
|
st.procent_taxa as proc_tva,
|
|
vi.iso_valuta as cod_valuta,
|
|
r.cont
|
|
from rul r
|
|
join jc2007 j
|
|
on r.an = j.an
|
|
and r.luna = j.luna
|
|
and r.id_fact = j.id_fact
|
|
join nom_fdoc f on j.id_fdoc = f.id_fdoc
|
|
left join nom_valute nv
|
|
on r.id_valuta = nv.id_valuta
|
|
left join syn_nom_valute_iso vi
|
|
on nv.id_valuta_iso = vi.id_valuta_iso
|
|
left join nom_articole a on r.id_articol = a.id_articol
|
|
left join vsaft_taxtable st on r.taxcode = st.taxcode
|
|
where r.an * 12 + r.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and f.tip_doc in ('F', 'M', 'C', 'INV')
|
|
and r.sters = 0
|
|
union all
|
|
select 3 as tip,
|
|
CAST(0 as number(5,0)) as nrcrt,
|
|
id_fact,
|
|
cod,
|
|
CAST(MAX(explicatia) as varchar2(100)) as descriere,
|
|
1 as cantitate,
|
|
0 as pret_cu_tva,
|
|
sum(decode(exceptie, 1, -1, 1) * suma) as pret,
|
|
sum(decode(exceptie, 1, -1, 1) * suma_val) as pretv,
|
|
CAST(0 as number(20,4)) as valoare,
|
|
CAST(0 as number(20,4)) as valoarev,
|
|
CAST(0 as number(20,4)) as taxa,
|
|
CAST(0 as number(20,4)) as taxav,
|
|
id_valuta,
|
|
curs,
|
|
taxcode,
|
|
taxtype,
|
|
taxname,
|
|
proc_tva,
|
|
cod_valuta,
|
|
decode(exceptie, 1, scc, scd) as cont
|
|
from (select a.id_fact,
|
|
a.cod,
|
|
a.explicatia,
|
|
(CASE when a.scd = '408' AND a.scc like '4%' then ROUND(a.suma * 100 / (100 + st.procent_taxa), 2) else a.suma end) as suma,
|
|
(CASE when a.scd = '408' AND a.scc like '4%' then ROUND(a.suma_val * 100 / (100 + st.procent_taxa), 2) else a.suma_val end) as suma_val,
|
|
a.id_valuta,
|
|
a.curs,
|
|
a.taxcode,
|
|
st.taxtype,
|
|
st.taxname,
|
|
st.procent_taxa as proc_tva,
|
|
vi.iso_valuta as cod_valuta,
|
|
a.scd,
|
|
a.scc,
|
|
(SELECT DISTINCT 1 AS EXCEPTIE
|
|
FROM EXCEPTII_IREG
|
|
WHERE INVERS = 1
|
|
AND CONT = a.scd and cont_c = a.scc) as exceptie
|
|
from act a
|
|
join jc2007 j
|
|
on a.an = a.an
|
|
and a.luna = j.luna
|
|
and a.id_fact = j.id_fact
|
|
join nom_fdoc f on j.id_fdoc = f.id_fdoc
|
|
left join nom_valute nv
|
|
on a.id_valuta = nv.id_valuta
|
|
left join syn_nom_valute_iso vi
|
|
on nv.id_valuta_iso = vi.id_valuta_iso
|
|
left join vsaft_taxtable st on a.taxcode = st.taxcode
|
|
where a.an * 12 + a.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and a.sters = 0
|
|
and a.taxcode is not null
|
|
AND substr(a.scd, 1, 3) <> '442' and substr(a.scc, 1, 3) <> '442'
|
|
and j.id_fact not in
|
|
(select id_fact
|
|
from rul
|
|
where an * 12 + luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and id_fact is not null and sters=0)
|
|
and f.tip_doc in ('F', 'M', 'C', 'INV'))
|
|
group by id_fact,
|
|
cod,
|
|
id_valuta,
|
|
curs,
|
|
taxcode,
|
|
taxtype,
|
|
taxname,
|
|
proc_tva,
|
|
cod_valuta,
|
|
decode(exceptie, 1, scc, scd)
|
|
union all
|
|
select 4 as tip,
|
|
CAST(0 as number(5,0)) as nrcrt,
|
|
id_fact,
|
|
cod,
|
|
CAST('VERIFICARE' as varchar2(100)) as descriere,
|
|
1 as cantitate,
|
|
0 as pret_cu_tva,
|
|
sum(decode(exceptie, 1, -1, 1) * suma) as pret,
|
|
sum(decode(exceptie, 1, -1, 1) * suma_val) as pretv,
|
|
CAST(0 as number(20,4)) as valoare,
|
|
CAST(0 as number(20,4)) as valoarev,
|
|
CAST(0 as number(20,4)) as taxa,
|
|
CAST(0 as number(20,4)) as taxav,
|
|
id_valuta,
|
|
curs,
|
|
taxcode,
|
|
taxtype,
|
|
taxname,
|
|
proc_tva,
|
|
cod_valuta,
|
|
decode(exceptie, 1, scc, scd) as cont
|
|
from (select a.id_fact,
|
|
a.cod,
|
|
a.explicatia,
|
|
(CASE when a.scd = '408' AND a.scc like '4%' then ROUND(a.suma * 100 / (100 + st.procent_taxa), 2) else a.suma end) as suma,
|
|
(CASE when a.scd = '408' AND a.scc like '4%' then ROUND(a.suma_val * 100 / (100 + st.procent_taxa), 2) else a.suma_val end) as suma_val,
|
|
a.id_valuta,
|
|
a.curs,
|
|
a.taxcode,
|
|
st.taxtype,
|
|
st.taxname,
|
|
st.procent_taxa as proc_tva,
|
|
vi.iso_valuta as cod_valuta,
|
|
a.scd,
|
|
a.scc,
|
|
(SELECT DISTINCT 1 AS EXCEPTIE
|
|
FROM EXCEPTII_IREG
|
|
WHERE INVERS = 1
|
|
AND CONT = a.scd and cont_c = a.scc) as exceptie
|
|
from act a
|
|
join jc2007 j
|
|
on a.an = a.an
|
|
and a.luna = j.luna
|
|
and a.id_fact = j.id_fact
|
|
join nom_fdoc f on j.id_fdoc = f.id_fdoc
|
|
left join nom_valute nv
|
|
on a.id_valuta = nv.id_valuta
|
|
left join syn_nom_valute_iso vi
|
|
on nv.id_valuta_iso = vi.id_valuta_iso
|
|
left join vsaft_taxtable st on a.taxcode = st.taxcode
|
|
where a.an * 12 + a.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and a.sters = 0
|
|
and a.taxcode is not null
|
|
AND substr(a.scd, 1, 3) <> '442' and substr(a.scc, 1, 3) <> '442'
|
|
and j.id_fact in
|
|
(select id_fact
|
|
from rul
|
|
where an * 12 + luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and id_fact is not null and sters=0)
|
|
and f.tip_doc in ('F', 'M', 'C', 'INV'))
|
|
group by id_fact,
|
|
cod,
|
|
id_valuta,
|
|
curs,
|
|
taxcode,
|
|
taxtype,
|
|
taxname,
|
|
proc_tva,
|
|
cod_valuta,
|
|
decode(exceptie, 1, scc, scd)
|
|
ENDTEXT
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, m.lcCursorLinesTemp)
|
|
|
|
*5331938
|
|
IF m.llSucces
|
|
SELECT (m.lcCursorLines)
|
|
APPEND FROM DBF(m.lcCursorLinesTemp)
|
|
USE IN (SELECT(m.lcCursorLinesTemp))
|
|
|
|
* la Tip = 4 note din Registrul Jurnal aferente facturilor din gestiune
|
|
* verific daca suma din gestiune pe taxcode = suma din registrul jurnal pe taxcode si las doar diferentele fata de rulaj
|
|
* articolele preluate din gestiune au pretul in lei
|
|
*******************************************
|
|
|
|
* Diferente valori pe fiecare taxcode tip = 2 (facturi din gestiune)
|
|
SELECT a.an, a.luna, a.id_fact, a.nract, a.dataact, a.id_part, a.denumire, b.taxcode, b.cont, ;
|
|
SUM(b.cantitate * b.pret) as valoare, ;
|
|
SUM(b.cantitate * b.pretv) as valoarev ;
|
|
FROM (m.lcCursor) a LEFT JOIN (m.lcCursorLines) b ON a.id_fact = b.id_fact ;
|
|
WHERE b.tip = 2 ;
|
|
GROUP BY a.an, a.luna, a.id_fact, a.nract, a.dataact, a.id_part, a.denumire, b.taxcode, b.cont ;
|
|
order by a.an, a.luna, a.dataact, a.nract ;
|
|
INTO CURSOR cFacturiTaxCode2
|
|
|
|
|
|
* suma din Registrul Jurnal fara TVA, pentru documentele introduse din gestiune, scd = 3xx, tip = 4
|
|
* tratez regularizare facturi nesosite/neintocmite 408=401, 4111=418
|
|
SELECT a.an, a.luna, a.id_fact, a.nract, a.dataact, a.id_part, a.denumire, b.taxcode, b.cont, ;
|
|
SUM(b.cantitate * b.pret) as valoare, ;
|
|
SUM(b.cantitate * b.pretv) as valoarev ;
|
|
FROM (m.lcCursor) a LEFT JOIN (m.lcCursorLines) b ON a.id_fact = b.id_fact ;
|
|
WHERE b.tip = 4 ;
|
|
GROUP BY a.an, a.luna, a.id_fact, a.nract, a.dataact, a.id_part, a.denumire, b.taxcode, b.cont ;
|
|
order by a.an, a.luna, a.dataact, a.nract ;
|
|
INTO CURSOR cFacturiTaxCode4
|
|
|
|
SELECT cFacturiTaxCode4
|
|
SCAN
|
|
SCATTER NAME loRec
|
|
SELECT cFacturiTaxCode2
|
|
LOCATE FOR id_fact = loRec.id_fact AND taxcode = loRec.taxcode AND cont = loRec.cont
|
|
IF FOUND()
|
|
lnSuma = valoare
|
|
lnSumaV = valoarev
|
|
ELSE
|
|
lnSuma = 0
|
|
lnSumaV = 0
|
|
ENDIF
|
|
lnDiferenta = NVL(lorec.valoare,0) - NVL(m.lnSuma,0)
|
|
lnDiferentaV = NVL(lorec.valoarev,0) - NVL(m.lnSumaV,0)
|
|
IF ABS(m.lnDiferenta) > 0.05
|
|
SELECT (m.lcCursorLines)
|
|
LOCATE FOR id_fact = loRec.id_fact AND taxcode = loRec.taxcode AND cont = loRec.cont AND tip = 4
|
|
IF FOUND()
|
|
REPLACE pret WITH m.lnDiferenta, pretv WITH m.lnDiferentaV, descriere WITH 'DIFERENTA'
|
|
ENDIF
|
|
ENDIF
|
|
ENDSCAN
|
|
* Sterg liniile articolelor tip = 4 pe care nu le-am modificat cu diferenta fata de rulaj
|
|
DELETE FROM (m.lcCursorLines) WHERE tip = 4 AND descriere = 'VERIFICARE'
|
|
*******************************************
|
|
|
|
* Completare Nr. Crt.
|
|
lnIdFact = -1
|
|
lnNrCrt = 0
|
|
SELECT (m.lcCursorLines)
|
|
SCAN
|
|
IF id_fact <> m.lnIdFact
|
|
lnNrCrt = 0
|
|
lnIdFact = id_fact
|
|
ENDIF
|
|
lnNrCrt = lnNrCrt + 1
|
|
REPLACE nrcrt WITH m.lnNrCrt
|
|
ENDSCAN
|
|
|
|
UPDATE (m.lcCursorLines) SET taxa = ROUND(ROUND(cantitate * pret, 2) * proc_tva / 100, 2), ;
|
|
taxav = ROUND(ROUND(cantitate * pretv, 2) * proc_tva / 100, 2), ;
|
|
valoare = ROUND(cantitate * pret, 2), valoarev = ROUND(cantitate * pretv, 2)
|
|
|
|
* Unificare elemente facturi de pe facturi duplicate (introduse din gestiune, contabilitate, facturare)
|
|
SELECT (m.lcCursor)
|
|
SCAN FOR id_fact <> id_fact2
|
|
SCATTER NAME loFact
|
|
UPDATE (m.lcCursorLines) SET id_fact = loFact.id_fact2 WHERE id_fact = loFact.id_fact
|
|
ENDSCAN
|
|
DELETE FROM (m.lcCursor) WHERE id_fact <> id_fact2
|
|
|
|
|
|
ENDIF
|
|
ENDIF && m.llSucces
|
|
|
|
GO TOP IN (m.lcCursor)
|
|
|
|
USE IN (SELECT('cFacturiTaxCode2'))
|
|
USE IN (SELECT('cFacturiTaxCode4'))
|
|
|
|
SELECT (m.lcSelect)
|
|
RETURN m.llSucces
|
|
ENDFUNC
|
|
|
|
************************************************
|
|
* cursor cPayments
|
|
* iau toate inregistrarile din act care au paymentcode completat
|
|
************************************************
|
|
Function oPayments
|
|
|
|
Local lcSelect, lcSql, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2
|
|
lcSelect = Select()
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
Create Cursor cPayments(;
|
|
an N(6) null,;
|
|
luna N(4) null,;
|
|
cod N(20) null,;
|
|
id_fact N(20) null,;
|
|
dataact T(8) null,;
|
|
cont C(4) null,;
|
|
tipdc C(4) null,;
|
|
id_part N(20) null,;
|
|
saftpartid C(30) null,;
|
|
taxtype N(3) null,;
|
|
taxcode N(6) null,;
|
|
taxname C(250) null,;
|
|
paymentcode C(9) null,;
|
|
paymentname C(250) null,;
|
|
methodcode C(10) NULL, ;
|
|
id_valuta N(7) null,;
|
|
curs N(14,6) null,;
|
|
explicatia C(250) null, ;
|
|
suma N(20,4) null,;
|
|
suma_val N(20,4) null,;
|
|
denumire C(250) null, ;
|
|
cod_fiscal C(30) null,;
|
|
tip_persoana N(1) null,;
|
|
cod_tara C(5) null,;
|
|
cod_valuta C(3) null)
|
|
|
|
Text To m.lcSql Noshow Textmerge
|
|
select c.an,
|
|
c.luna,
|
|
c.cod,
|
|
c.id_fact,
|
|
c.dataact,
|
|
c.cont,
|
|
c.tipdc,
|
|
c.id_part,
|
|
tx.taxtype,
|
|
c.taxcode,
|
|
tx.taxname,
|
|
c.paymentcode,
|
|
mp.paymentname,
|
|
mp.methodcode,
|
|
c.id_valuta,
|
|
c.curs,
|
|
decode(c.explicatia, NULL, decode(c.tipdc, 'D','INCASARE', 'PLATA'), c.explicatia) as explicatia,
|
|
c.suma,
|
|
c.suma_val,
|
|
p.denumire,
|
|
p.cod_fiscal,
|
|
p.tip_persoana,
|
|
t.prescurtare as cod_tara,
|
|
nvl(v.nume_val2, 'RON') as cod_valuta,
|
|
CAST(null as varchar2(30)) as saftpartid
|
|
from (select an,
|
|
luna,
|
|
cod,
|
|
id_fact,
|
|
dataact,
|
|
cont,
|
|
tipdc,
|
|
id_part,
|
|
taxcode,
|
|
paymentcode,
|
|
id_valuta,
|
|
curs,
|
|
max(explicatia) as explicatia,
|
|
sum(suma) as suma,
|
|
sum(suma_val) as suma_val
|
|
from (select a.an,
|
|
a.luna,
|
|
a.cod,
|
|
a.id_fact,
|
|
a.dataact,
|
|
case
|
|
when substr(a.scd, 1, 3) in ('512', '531', '508') then
|
|
scc
|
|
when substr(a.scc, 1, 3) in ('512', '531', '508') then
|
|
scd
|
|
when substr(a.scd, 1, 3) in
|
|
('411',
|
|
'401',
|
|
'404',
|
|
'409',
|
|
'461',
|
|
'462',
|
|
'418',
|
|
'419',
|
|
'473') then
|
|
scd
|
|
when substr(a.scc, 1, 3) in
|
|
('411',
|
|
'401',
|
|
'404',
|
|
'409',
|
|
'461',
|
|
'462',
|
|
'418',
|
|
'419',
|
|
'473') then
|
|
scc
|
|
when a.id_factd <> 0 then
|
|
scd
|
|
when a.id_factc <> 0 then
|
|
scc
|
|
else
|
|
cast(null as varchar2(4))
|
|
end as cont,
|
|
case
|
|
when substr(a.scd, 1, 3) in ('512', '531', '508') then
|
|
'D'
|
|
when substr(a.scc, 1, 3) in ('512', '531', '508') then
|
|
'C'
|
|
when substr(a.scd, 1, 3) in
|
|
('411',
|
|
'401',
|
|
'404',
|
|
'409',
|
|
'461',
|
|
'462',
|
|
'418',
|
|
'419',
|
|
'473') then
|
|
'C'
|
|
when substr(a.scc, 1, 3) in
|
|
('411',
|
|
'401',
|
|
'404',
|
|
'409',
|
|
'461',
|
|
'462',
|
|
'418',
|
|
'419',
|
|
'473') then
|
|
'D'
|
|
when a.id_factd <> 0 then
|
|
'C'
|
|
when a.id_factc <> 0 then
|
|
'D'
|
|
else
|
|
cast(null as varchar2(4))
|
|
end as tipdc,
|
|
case
|
|
when substr(a.scd, 1, 3) in ('512', '531', '508') then
|
|
id_partc
|
|
when substr(a.scc, 1, 3) in ('512', '531', '508') then
|
|
id_partd
|
|
when substr(a.scd, 1, 3) in
|
|
('411',
|
|
'401',
|
|
'404',
|
|
'409',
|
|
'461',
|
|
'462',
|
|
'418',
|
|
'419',
|
|
'473') then
|
|
id_partd
|
|
when substr(a.scc, 1, 3) in
|
|
('411',
|
|
'401',
|
|
'404',
|
|
'409',
|
|
'461',
|
|
'462',
|
|
'418',
|
|
'419',
|
|
'473') then
|
|
id_partc
|
|
when a.id_factd <> 0 then
|
|
id_partd
|
|
when a.id_factc <> 0 then
|
|
id_partc
|
|
else
|
|
cast(null as number(10))
|
|
end as id_part,
|
|
a.taxcode,
|
|
a.paymentcode,
|
|
a.id_valuta,
|
|
a.curs,
|
|
a.suma,
|
|
a.suma_val,
|
|
a.explicatia
|
|
from act a
|
|
where a.sters = 0
|
|
and a.an * 12 + a.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and a.paymentcode is not null and scd <> '581' and scc <> '581' and not (substr(a.scd, 1, 3) in ('512', '531', '542') and substr(a.scc, 1, 3) in ('512', '531', '542'))) a
|
|
group by an,
|
|
luna,
|
|
cod,
|
|
id_fact,
|
|
dataact,
|
|
cont,
|
|
tipdc,
|
|
id_part,
|
|
taxcode,
|
|
paymentcode,
|
|
id_valuta,
|
|
curs) c
|
|
left join vsaft_taxtable tx
|
|
on c.taxcode = tx.taxcode
|
|
left join nom_parteneri p
|
|
on c.id_part = p.id_part
|
|
left join adrese_parteneri ap
|
|
on (p.id_part = ap.id_part and ap.sters = 0 and ap.principala = 1)
|
|
left join syn_nom_tari t
|
|
on t.id_tara = ap.id_tara
|
|
left join vnom_valute v
|
|
on c.id_valuta = v.id_valuta
|
|
left join vsaft_mecanisme_plati mp on c.paymentcode = mp.mechanismcode
|
|
Endtext
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, 'cPaymentsTemp')
|
|
IF m.llSucces
|
|
SELECT cPayments
|
|
APPEND FROM DBF('cPaymentsTemp')
|
|
USE IN (SELECT('cPaymentsTemp'))
|
|
|
|
UPDATE cPayments SET SaftPartId = This.GenCustSupCode(id_part, cod_tara, tip_persoana, cod_fiscal) WHERE !EMPTY(NVL(id_part,0))
|
|
ENDIF
|
|
GO TOP IN cPayments
|
|
|
|
Select (m.lcSelect)
|
|
Return m.llSucces
|
|
|
|
Endfunc && oPayments
|
|
|
|
************************************************
|
|
* cursor cAnalysisTypeTable
|
|
************************************************
|
|
Function oAnalysisTypeTable
|
|
|
|
Local lcSelect, lcSql, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2
|
|
lcSelect = Select()
|
|
|
|
* AnalysisTypeTable
|
|
Text To m.lcSql Noshow Textmerge
|
|
select id_sectie,
|
|
id_sucursala,
|
|
'S' || CASE
|
|
WHEN id_sucursala is NOT NULL THEN
|
|
id_sucursala
|
|
else
|
|
0
|
|
end || '-C' || id_sectie as cod,
|
|
case
|
|
when id_sucursala is not null then
|
|
sucursala
|
|
else
|
|
'S0'
|
|
end || '-' || sectie as descriere
|
|
from vnom_sectii
|
|
Endtext
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, 'cAnalysisTypeTable')
|
|
If m.llSucces
|
|
Select cAnalysisTypeTable
|
|
Index On Padl(Nvl(id_sucursala, 0), 20, '0') + Padl(Nvl(id_sectie, 0), 20, '0') Tag cod
|
|
Endif
|
|
|
|
Select (m.lcSelect)
|
|
Return m.llSucces
|
|
|
|
Endfunc && oAnalysisTypeTable
|
|
|
|
************************************************
|
|
* cursor cOwners
|
|
************************************************
|
|
Function oOwners
|
|
Local lcSelect, lcSql, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2
|
|
lcSelect = Select()
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
Text To m.lcSql Noshow Textmerge
|
|
SELECT s.id_part,
|
|
NVL(TRIM(p.denumire), 'NEDEFINIT') as denumire,
|
|
p.cod_fiscal,
|
|
p.tip_persoana,
|
|
a.strada,
|
|
a.numar,
|
|
a.localitate,
|
|
a.indicativ_judet,
|
|
a.cod_tara,
|
|
CAST(null as varchar2(30)) as saftpartid
|
|
from (select distinct id_part_rez as id_part
|
|
FROM stoc
|
|
WHERE an * 12 + luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and SUBSTR(cont,1,2) = '35' and NVL(id_part_rez,0) <> 0) s
|
|
join nom_parteneri p on s.id_part = p.id_part
|
|
LEFT JOIN (SELECT ap.id_part,
|
|
ap.strada,
|
|
ap.numar,
|
|
l.localitate,
|
|
j.indicativ as indicativ_judet,
|
|
ap.codpostal,
|
|
t.prescurtare as cod_tara
|
|
FROM ADRESE_PARTENERI ap
|
|
left join syn_nom_localitati l
|
|
on l.id_loc = ap.id_loc
|
|
left join syn_nom_judete j
|
|
on j.id_judet = l.id_judet
|
|
left join syn_nom_tari t
|
|
on t.id_tara = ap.id_tara
|
|
WHERE ap.STERS = 0
|
|
AND ap.PRINCIPALA = 1) a
|
|
ON p.id_part = a.id_part
|
|
Endtext
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, 'cOwners')
|
|
IF m.llSucces
|
|
UPDATE cOwners SET SaftPartId = This.GenCustSupCode(id_part, cod_tara, tip_persoana, cod_fiscal) WHERE !EMPTY(NVL(id_part,0))
|
|
SELECT cOwners
|
|
INDEX on id_part TAG id_part
|
|
SET ORDER TO
|
|
ENDIF
|
|
GO TOP IN cOwners
|
|
* da eroare la validare pe anaf daca <owners> este gol
|
|
IF RECCOUNT('cOwners') = 0
|
|
APPEND BLANK
|
|
REPLACE saftpartid WITH '00' + This.oUnitate.codi, denumire WITH Alltrim(gofirma.firma), localitate WITH gofirma.localitate, cod_tara WITH gofirma.cod_tara, strada WITH goFirma.strada, numar WITH goFirma.numar, indicativ_judet WITH goFirma.indicativ_judet
|
|
ENDIF
|
|
|
|
Select (m.lcSelect)
|
|
Return m.llSucces
|
|
|
|
Endfunc && oOwners
|
|
|
|
************************************************
|
|
* cursor cAssets, cAssetTransactions
|
|
************************************************
|
|
Function oAssets
|
|
PRIVATE pdDataJ1, pdDataJ2
|
|
Local lcSelect, lcSql, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2
|
|
Local lcCursor, lnFiscal, lnTip, lnAn, lnLuna, lcListaCursoare
|
|
Local lnIdMf, lnIesire, lnIntrare, lnMajorare, lnNrLuni1, lnNrLuni2, lnReevaluare, lnIdOpPrec
|
|
Local lcCursorAssets, lcCursorAssetsFinal, lcCursorAssetsInitial, lnCursor
|
|
Local lnNrLuna, lnNrLuni
|
|
lcSelect = Select()
|
|
|
|
CREATE CURSOR cAssets (id_mf I, AssetId C(35) null, AccountId C(20) null, DateOfAcquisition D null, StartUpDate D null, Description C(100) null, ;
|
|
AssetValuationType C(20) null, ValuationClass C(20) null, AcquisitionAndProductionCostsBegin N(18,2) null, AcquisitionAndProductionCostsEnd N(18,2) null, InvestmentSupport N(18,2) null, ;
|
|
AssetLifeYear N(18,4) null, DepreciationMethod C(20) null, DepreciationPercentage N(18,4) null, ;
|
|
AssetAddition N(18,2) null, Transfers N(18,2) null, AssetDisposal N(18,2) null, BookValueBegin N(18,2) null,DepreciationForPeriod N(18,2) null, AppreciationForPeriod N(18,2) null,;
|
|
ExtraordinaryDepreciationMethod C(35) null, ExtraordinaryDepreciationAmountForPeriod N(18,2) null,;
|
|
AccumulatedDepreciation N(18,2) null, BookValueEnd N(18,2) null, tip_imobilizare C(30) null, ;
|
|
AppreciationForPeriodMinus N(18,2) null, AccumulatedDepreciationBegin N(18,2) null)
|
|
|
|
CREATE CURSOR cAssetTransactions (AssetTransactionID C(70) null, AssetID C(35) null, AssetTransactionType C(9) null, Description C(250) NULL, ;
|
|
AssetTransactionDate D null, TransactionID C(70) null, AssetValuationType C(18) null, ;
|
|
AcquisitionAndProductionCostsOnTransaction N(18,2) null, BookValueOnTransaction N(18,2) null, AssetTransactionAmount N(18,2) null, ;
|
|
Denumire C(100) null, Tip_imobilizare C(30) null, id_mf I null)
|
|
|
|
llSucces = .T.
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
lnNrLuni1 = m.lnAn1*12+m.lnLuna1
|
|
lnNrLuni2 = m.lnAn2*12+m.lnLuna2
|
|
lnNrLuni0 = m.lnNrLuni1 - 1 && decembrie anterior, pentru valoarea de inventar de la inceputul perioadei
|
|
|
|
pdDataJ1 = Date(lnAn1, lnLuna1, 1)
|
|
pdDataJ2 = GOMONTH(Date(lnAn2, lnLuna2, 1),1)-1
|
|
|
|
|
|
* Obtin cursoare amortizari lunare
|
|
lnFiscal = 0 && amortizarea contabila
|
|
lnTip = 0 && toate imobilizarile
|
|
lnNrLuna = 0
|
|
|
|
FOR lnNrLuni = m.lnNrLuni0 TO m.lnNrLuni2
|
|
lnNrLuna = m.lnNrLuna + 1
|
|
lnAn = 0
|
|
lnLuna = 0
|
|
NrLuni2AnLuna(m.lnNrLuni, @lnAn, @lnLuna)
|
|
* Luna inceput
|
|
lcCursor = GET_CURSOR_AMORTIZARI(m.lnFiscal, m.lnAn, m.lnLuna, m.lnTip)
|
|
llSucces = !Empty(lcCursor)
|
|
lcCursorAssets = 'cAssets' + ALLTRIM(STR(m.lnNrLuna))
|
|
|
|
IF m.llSucces
|
|
* Selectez imobilizari corporale si necorporale, aflate in gestiune sau iesite din gestiune in perioada raportarii, fara terenuri cod_mf "0.0."
|
|
SELECT * ;
|
|
FROM (m.lcCursor) ;
|
|
WHERE INLIST(id_tip_imobilizare,1,2) AND (IESIT_DIN_GEST = 0 OR (IESIT_DIN_GEST = 1 AND BETWEEN(YEAR(DATA_OPERATIE)*12+MONTH(data_operatie), m.lnNrLuni1, m.lnNrLuni2))) ;
|
|
INTO CURSOR (m.lcCursorAssets)
|
|
ENDIF
|
|
* Deprecierea lunara (rata de amortizat)
|
|
DO CASE
|
|
CASE m.lnNrLuna = 1 && luna decembrie anterioara, pentru valori initiale la inceputul perioadei
|
|
SELECT m.lnNrLuni as nrluna, m.lnAn as an, m.lnLuna as luna, * FROM (m.lcCursorAssets) INTO CURSOR cAssets00
|
|
CASE m.lnNrLuna = 2 && luna ianuarie, prima luna din perioada
|
|
SELECT m.lnNrLuni as nrluna, m.lnAn as an, m.lnLuna as luna, * FROM (m.lcCursorAssets) INTO CURSOR cAmortizareLunara READWRITE
|
|
OTHERWISE
|
|
SELECT m.lnNrLuni as nrluna, m.lnAn as an, m.lnLuna as luna, * FROM (m.lcCursorAssets) INTO CURSOR cAmortizareLunaraTemp READWRITE
|
|
|
|
SELECT cAmortizareLunara
|
|
APPEND FROM DBF('cAmortizareLunaraTemp')
|
|
USE IN (SELECT('cAmortizareLunaraTemp'))
|
|
ENDCASE
|
|
|
|
USE IN (select(m.lcCursor))
|
|
USE IN (SELECT(m.lcCursorAssets))
|
|
ENDFOR
|
|
|
|
* Prima luna in care apare imobilizarea, ca sa citesc amortizarea precedenta cu care intra in perioada de raportare
|
|
SELECT id_mf, MIN(nrluna) as nrluna ;
|
|
FROM cAmortizareLunara ;
|
|
GROUP BY id_mf ;
|
|
INTO CURSOR cIdMfMin
|
|
|
|
* Ultima luna in care apare imobilizarea
|
|
SELECT id_mf, max(nrluna) as nrluna ;
|
|
FROM cAmortizareLunara ;
|
|
GROUP BY id_mf ;
|
|
INTO CURSOR cIdMfMax
|
|
|
|
SELECT a.* FROM cAmortizareLunara a JOIN cIdMfMin b ON a.id_mf = b.id_mf AND a.nrluna = b.nrluna INTO CURSOR cAssetsInitial && prima aparitie a imobilizarii intre ianuarie-decembrie
|
|
SELECT a.* FROM cAmortizareLunara a JOIN cIdMfMax b ON a.id_mf = b.id_mf AND a.nrluna = b.nrluna INTO CURSOR cAssetsFinal && ultima aparitie a imobilizarii intre ianuarie-decembrie
|
|
|
|
SELECT a.* FROM cAmortizareLunara a WHERE a.nrluna = m.lnNrLuni1 INTO CURSOR cAssets01 && ianuarie
|
|
SELECT a.* FROM cAmortizareLunara a WHERE a.nrluna = m.lnNrLuni2 INTO CURSOR cAssets12 && decembrie
|
|
|
|
* Valori ale imobilizarilor existente la inceputul si/sau sfarsitul perioadei de raportare & existentei in imobilizari
|
|
SELECT NVL(a1.id_mf, a2.id_mf) as id_mfa, CAST(ALLTRIM(STR(NVL(a1.id_tip_imobilizare, a2.id_tip_imobilizare))) + '_' + ALLTRIM(TRANSFORM(NVL(a1.nr_inventar, a2.nr_inventar))) as C(35)) as AssetId, ;
|
|
NVL(a1.cont, a2.cont) as AccountId, ;
|
|
TTOD(NVL(a1.data_achizitie, a2.data_achizitie)) as DateOfAcquisition, TTOD(NVL(a1.data_pif, a2.data_pif)) as StartUpDate, ;
|
|
NVL(a1.denumire, a2.denumire) as Description, 'contabil' as AssetValuationType, NVL(a1.cod_mf, a2.cod_mf) as ValuationClass, ;
|
|
CAST(IIF(YEAR(NVL(a1.data_pif, DATE()))*12+MONTH(NVL(a1.data_pif, DATE())) >= m.lnNrLuni1, 0, NVL(a00.valoare, 0)) as N(18,2)) as AcquisitionAndProductionCostsBegin, ;
|
|
ROUND(NVL(a1.dns_luni, a2.dns_luni)/12,4) as AssetLifeYear, NVL(a1.tip_amortizare, a2.tip_amortizare) as DepreciationMethod, ;
|
|
CAST(IIF(YEAR(NVL(a1.data_pif, DATE()))*12+MONTH(NVL(a1.data_pif, DATE())) >= m.lnNrLuni1, 0, NVL(a00.valoare,0)-NVL(a01.amort_prec,0)) as N(18,2))as BookValueBegin, ;
|
|
NVL(a12.valoare,0)-NVL(a12.amort_prec,0) - NVL(a12.rata,0) as BookValueEnd, ;
|
|
NVL(a1.tip_imobilizare, a2.tip_imobilizare) as tip_imobilizare ;
|
|
from cAssetsInitial a1 FULL JOIN cAssetsFinal a2 ON a1.id_mf = a2.id_mf ;
|
|
FULL JOIN cAssets00 a00 ON a1.id_mf = a00.id_mf ;
|
|
FULL JOIN cAssets01 a01 ON a1.id_mf = a01.id_mf ;
|
|
FULL JOIN cAssets12 a12 ON a2.id_mf = a12.id_mf ;
|
|
INTO CURSOR cAssetsTemp1 READWRITE
|
|
|
|
USE IN (SELECT('cAssetsInitial'))
|
|
USE IN (SELECT('cAssetsFinal'))
|
|
* USE IN (SELECT('cAssets01'))
|
|
* USE IN (SELECT('cAssets12'))
|
|
|
|
* Amortizare precedenta
|
|
SELECT a.id_mf, a.amort_prec, a.cota_an ;
|
|
FROM cAmortizareLunara a JOIN cIdMfMin b ON a.id_mf = b.id_mf AND a.nrluna = b.nrluna ;
|
|
INTO CURSOR cAmortizarePrec
|
|
|
|
* Amortizare totala
|
|
* daca amortizarea precedenta se modifica in perioada, amortizarea totala nu mai este egala cu amortizarea precedenta initiala + amortizarea in perioada
|
|
* iau amortizarea precedenta din ultima luna + amortizarea din ultima luna
|
|
SELECT a.id_mf, a.amort_prec + a.rata as amort_tot ;
|
|
FROM cAmortizareLunara a JOIN cIdMfMax b ON a.id_mf = b.id_mf AND a.nrluna = b.nrluna ;
|
|
INTO CURSOR cAmortizareTot
|
|
|
|
USE IN (SELECT('cIdMfMin'))
|
|
USE IN (SELECT('cIdMfMax'))
|
|
|
|
* Amortizare in perioada
|
|
SELECT id_mf, SUM(rata) as rata ;
|
|
FROM cAmortizareLunara ;
|
|
GROUP BY id_mf ;
|
|
INTO CURSOR cAmortizareLuna
|
|
|
|
|
|
SELECT NVL(a.id_mf, b.id_mf) as id_mf, CAST(NVL(a.rata, 0) as N(18,2)) as rata, CAST(NVL(b.amort_prec, 0) as N(18,2)) as amort_prec, CAST(NVL(b.cota_an, 0) as N(18,4)) as cota_an, ;
|
|
CAST(NVL(c.amort_tot, 0) as N(18,2)) as amort_tot ;
|
|
FROM cAmortizareLuna a FULL JOIN cAmortizarePrec b ON a.id_mf = b.id_mf ;
|
|
FULL JOIN cAmortizareTot c ON a.id_mf = c.id_mf ;
|
|
INTO CURSOR cAmortizarePerioada
|
|
|
|
USE IN (SELECT('cAmortizareLuna'))
|
|
USE IN (SELECT('cAmortizarePrec'))
|
|
USE IN (SELECT('cAmortizareTot'))
|
|
|
|
WAIT WINDOW 'Selectie operatii imobilizari ...' NOWAIT
|
|
|
|
* Operatii (intrare, iesire, majorare, reevaluare, transfer)
|
|
TEXT TO lcSql TEXTMERGE NOSHOW
|
|
select extract(year FROM data_operatie)*12+extract(month FROM data_operatie) as nrluna, id_tip_imobilizare, tip_imobilizare,
|
|
id_tip_operatie, id_tip_iesire, tip_operatie, id_operatie_mf, id_operatie_prec, data_operatie,
|
|
id_mf, denumire, id_calcul_rate, nr_inventar, valoare, valoare_ant, valoare_dif, valoare_ramasa, dns_ramas, valoare_iesire, rata, amort_prec
|
|
from imob_vjurnal_operatii_simplu
|
|
where (DATA_OPERATIE BETWEEN ?pdDataJ1 and ?pdDataJ2) and id_tip_imobilizare IN(1,2)
|
|
ORDER BY ID_MF, ID_OPERATIE_MF
|
|
ENDTEXT
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, "cJurnalImobTemp")
|
|
|
|
* Valori jurnal cumulate pe id_mf (intrare, majorare, iesire, reevaluare)
|
|
SELECT id_mf, ;
|
|
CAST(SUM(IIF(INLIST(id_tip_operatie, 1, 2, 3), valoare_dif, 0)) as N(18,2)) as intrare, ;
|
|
CAST(SUM(IIF(id_tip_operatie = 4, valoare, 0)) as N(18,2)) as iesire, ;
|
|
CAST(SUM(IIF(INLIST(id_tip_operatie, 6, 12) OR (valoare_dif <> 0 AND !INLIST(id_tip_operatie, 1, 2, 3, 4, 5, 6, 7, 12, 15)), valoare_dif, 0)) as N(18,2)) as majorare, ;
|
|
CAST(SUM(IIF(INLIST(id_tip_operatie, 7, 15) AND valoare_dif > 0, valoare_dif, 0)) as N(18,2)) as reevaluare, ;
|
|
CAST(SUM(IIF(INLIST(id_tip_operatie, 7, 15) AND valoare_dif < 0, -valoare_dif, 0)) as N(18,2)) as reevaluareminus ;
|
|
FROM cJurnalImobTemp ;
|
|
GROUP BY id_mf ;
|
|
INTO CURSOR cJurnalImobTemp2
|
|
|
|
SELECT NVL(a.id_mfa, b.id_mf) as id_mfb, a.*, CAST(NVL(b.rata, 0) as N(18,2)) as DepreciationForPeriod, CAST(NVL(b.amort_tot,0) as N(18,2)) as AccumulatedDepreciation, ;
|
|
CAST(NVL(b.amort_prec,0) as N(18,2)) as AccumulatedDepreciationBegin, ;
|
|
CAST(NVL(b.cota_an,0) as N(18,4)) as DepreciationPercentage ;
|
|
FROM cAssetsTemp1 a FULL JOIN cAmortizarePerioada b ON a.id_mfa = b.id_mf ;
|
|
INTO CURSOR cAssetsTemp2
|
|
USE IN (SELECT('cAmortizarePerioada'))
|
|
USE IN (SELECT('cAssetsTemp1'))
|
|
|
|
SELECT NVL(a.id_mfb, b.id_mf) as id_mf, a.*, ;
|
|
CAST(NVL(a.AcquisitionAndProductionCostsBegin, 0.00) + NVL(b.intrare, 0.00) - NVL(b.iesire, 0.00) + NVL(b.majorare, 0.00) as N(18,2)) as AcquisitionAndProductionCostsEnd, ;
|
|
CAST(NVL(b.intrare, 0.00) + NVL(b.majorare, 0.00) as N(18,2)) as AssetAddition, ;
|
|
CAST(NVL(b.iesire, 0.00) as N(18,2)) as AssetDisposal, ;
|
|
CAST(NVL(b.reevaluare, 0.00) as N(18,2)) as AppreciationForPeriod, ;
|
|
CAST(NVL(b.reevaluareminus, 0.00) as N(18,2)) as AppreciationForPeriodMinus ;
|
|
FROM cAssetsTemp2 a FULL JOIN cJurnalImobTemp2 b ON a.id_mfb = b.id_mf ;
|
|
INTO CURSOR cAssetsTemp3
|
|
|
|
USE IN (SELECT('cAssetsTemp2'))
|
|
USE IN (SELECT('cJurnalImobTemp2'))
|
|
|
|
SELECT cAssets
|
|
APPEND FROM DBF('cAssetsTemp3')
|
|
USE IN (SELECT('cAssetsTemp3'))
|
|
|
|
SELECT cAssets
|
|
INDEX on AssetId TAG assetid
|
|
UPDATE cAssets SET DepreciationPercentage = 0 WHERE DepreciationPercentage < 0
|
|
GO TOP
|
|
|
|
*********************
|
|
* Asset Transactions
|
|
*********************
|
|
|
|
* Act.cod nota inchidere amortizare corporale id_set 90003, necorporale id_set 90009
|
|
TEXT TO lcSql TEXTMERGE NOSHOW
|
|
SELECT an*12+luna as nrluna, decode(id_set, 90003, 1, 2) as id_tip_imobilizare, MAX(cod) as cod
|
|
FROM vact
|
|
WHERE an*12+luna between <<m.lnNrLuni1>> and <<m.lnNrLuni2>> and id_set in (90003, 90009)
|
|
group by an*12+luna,decode(id_set, 90003, 1, 2)
|
|
ENDTEXT
|
|
llSucces = goExecutor.oExecuta(m.lcSql, 'cNoteInchideriAmortizare')
|
|
|
|
* Daca firma nu are imobilizari, da eroare la join-ul de mai jos
|
|
* adaug o linie goala
|
|
IF RECCOUNT('cAmortizareLunara') = 0
|
|
INSERT INTO cAmortizareLunara (an, luna) VALUES (m.gnAn, m.gnLuna)
|
|
ENDIF
|
|
|
|
* Amortizari lunare, AssetTransactionType = 30
|
|
SELECT CAST(ALLTRIM(STR(a.id_operatie_mf)) + '_' + ALLTRIM(STR(a.id_calcul_rate)) + '_' + ALLTRIM(STR(a.an)) + PADL(a.luna,2,'0') as C(70)) as AssetTransactionID, ;
|
|
CAST(ALLTRIM(STR(NVL(a.id_tip_imobilizare,'1'))) + '_' + ALLTRIM(TRANSFORM(a.nr_inventar)) as C(35)) as AssetID, '30' as AssetTransactionType, ;
|
|
'Amortizare' as Description, GOMONTH(DATE(a.an, a.luna, 1),1)-1 as AssetTransactionDate, ;
|
|
CAST(INT(NVL(b.cod, 0)) as C(70)) as TransactionID, 'contabila' as AssetValuationType, ;
|
|
0.00 as AcquisitionAndProductionCostsOnTransaction, a.rata as BookValueOnTransaction, a.rata as AssetTransactionAmount, ;
|
|
a.denumire, a.tip_imobilizare, a.id_mf ;
|
|
from cAmortizareLunara a LEFT JOIN cNoteInchideriAmortizare b ON a.id_tip_imobilizare = b.id_tip_imobilizare AND a.nrluna = b.nrluna ;
|
|
WHERE a.rata <> 0 ;
|
|
INTO CURSOR cAssetTransactionsTemp
|
|
|
|
SELECT cAssetTransactions
|
|
APPEND FROM DBF('cAssetTransactionsTemp')
|
|
USE IN (SELECT('cAssetTransactionsTemp'))
|
|
|
|
* Operatii (intrare, iesire, majorare, reevaluare, modificare cu istoric)
|
|
SELECT CAST(ALLTRIM(STR(a.id_operatie_mf)) + '_' + ALLTRIM(STR(a.id_calcul_rate)) + '_000000' as C(70)) as AssetTransactionID, ;
|
|
CAST(ALLTRIM(STR(NVL(a.id_tip_imobilizare,'1'))) + '_' + ALLTRIM(TRANSFORM(a.nr_inventar)) as C(35)) as AssetID, '130' as AssetTransactionType, ;
|
|
CAST(a.tip_operatie as C(70)) as Description, TTOD(a.data_operatie) as AssetTransactionDate, ;
|
|
CAST(INT(NVL(b.cod, 0)) as C(70)) as TransactionID, 'contabila' as AssetValuationType, ;
|
|
id_operatie_prec, id_mf, nr_inventar, denumire, id_tip_operatie, id_tip_iesire, tip_imobilizare, ;
|
|
valoare, valoare_ant, valoare_dif, valoare_ramasa, valoare_iesire, ;
|
|
CAST(0 as N(18,2)) as AcquisitionAndProductionCostsOnTransaction,;
|
|
CAST(0 as N(18,2)) as BookValueOnTransaction,;
|
|
CAST(0 as N(18,2)) as AssetTransactionAmount ;
|
|
FROM cJurnalImobTemp a LEFT JOIN cNoteInchideriAmortizare b ON a.id_tip_imobilizare = b.id_tip_imobilizare AND a.nrluna = b.nrluna ;
|
|
INTO CURSOR cAssetTransactionsTemp READWRITE
|
|
|
|
USE IN (SELECT('cNoteInchideriAmortizare'))
|
|
|
|
SELECT cAssetTransactionsTemp
|
|
SCAN
|
|
lnValoare = valoare
|
|
lnValoareIesire = NVL(valoare_iesire, 0)
|
|
IF m.lnValoareIesire = 0
|
|
lnValoareIesire = valoare_ramasa
|
|
ENDIF
|
|
lnValoareRamasa = valoare_ramasa
|
|
lnValoareRamasaPrec = valoare_ramasa
|
|
lnValoareDif = valoare_dif && valoare - valoare_ant
|
|
lnIdTipOperatie = id_tip_operatie
|
|
lnIdTipIesire = NVL(id_tip_iesire,0)
|
|
lnIdOpPrec = NVL(id_operatie_prec, 0)
|
|
lnIdMf = NVL(id_mf, 0)
|
|
|
|
DO CASE
|
|
CASE INLIST(lnIdTipOperatie, 1, 2, 3) && intrare, preluare, transformare in MF
|
|
lcAssetTransactionType = '10'
|
|
SELECT cAssetTransactionsTemp
|
|
REPLACE AcquisitionAndProductionCostsOnTransaction WITH m.lnValoare, BookValueOnTransaction WITH m.lnValoare, AssetTransactionAmount WITH m.lnValoare, AssetTransactionType WITH m.lcAssetTransactionType
|
|
|
|
CASE INLIST(lnIdTipOperatie, 4) && iesire
|
|
lcAssetTransactionType = IIF(m.lnIdTipIesire = 1, '20', IIF(m.lnIdTipIesire = 2, '50', IIF(m.lnIdTipIesire = 5, '40', '50')))
|
|
lcDescription = IIF(m.lnIdTipIesire = 1, 'Vanzare', IIF(m.lnIdTipIesire = 2, 'Casare', IIF(m.lnIdTipIesire = 5, 'Transfer', ALLTRIM(description))))
|
|
SELECT cAssetTransactionsTemp
|
|
REPLACE AcquisitionAndProductionCostsOnTransaction WITH 0, BookValueOnTransaction WITH m.lnValoareRamasa, AssetTransactionAmount WITH m.lnValoareIesire-m.lnValoareRamasa, AssetTransactionType WITH m.lcAssetTransactionType, Description WITH m.lcDescription
|
|
|
|
CASE INLIST(lnIdTipOperatie, 6, 12) OR (m.lnValoareDif <> 0 AND !INLIST(id_tip_operatie, 1, 2, 3, 4, 5, 6, 7, 12, 15)) && majorare sau alta operatie cu diferenta de valoare inventar, in afara de reevaluari, intrari, iesiri
|
|
lcAssetTransactionType = '130' && altele
|
|
SELECT cAssetTransactionsTemp
|
|
REPLACE AcquisitionAndProductionCostsOnTransaction WITH m.lnValoareDif, BookValueOnTransaction WITH m.lnValoareDif, AssetTransactionAmount WITH m.lnValoareDif, AssetTransactionType WITH m.lcAssetTransactionType
|
|
|
|
CASE INLIST(lnIdTipOperatie, 7, 15) && reevaluare, reevaluare si modificare DNS
|
|
lcAssetTransactionType = IIF(m.lnValoareDif < 0, '60', '70') && reevaluare negativa/pozitiva
|
|
* aflare valoare_ramasa (Valoare neta) din luna anterioara reevaluarii
|
|
SELECT MAX(nrluna) as nrluna FROM cAmortizareLunara WHERE id_mf = m.lnIdMf AND id_operatie_mf = m.lnIdOpPrec INTO CURSOR cMaxLuna
|
|
lnNrLuna = NVL(cMaxLuna.nrluna, 0)
|
|
IF !EMPTY(m.lnNrLuna)
|
|
SELECT cAmortizareLunara
|
|
LOCATE FOR id_mf = m.lnIdMf AND id_operatie_mf = m.lnIdOpPrec AND nrluna = m.lnNrLuna
|
|
IF FOUND()
|
|
lnValoareRamasaPrec = valoare_ramasa
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SELECT cAssetTransactionsTemp
|
|
REPLACE AcquisitionAndProductionCostsOnTransaction WITH 0, BookValueOnTransaction WITH m.lnValoareDif, AssetTransactionAmount WITH m.lnValoareRamasa - m.lnValoareRamasaPrec, AssetTransactionType WITH m.lcAssetTransactionType
|
|
ENDCASE
|
|
ENDSCAN
|
|
|
|
SELECT cAssetTransactions
|
|
APPEND FROM DBF('cAssetTransactionsTemp')
|
|
USE IN (SELECT('cAssetTransactionsTemp'))
|
|
|
|
SELECT cAssetTransactions
|
|
INDEX on AssetId + AssetTransactionID TAG Ord
|
|
INDEX on assetid TAG assetid
|
|
INDEX on id_mf TAG id_mf
|
|
SET ORDER TO tag ord
|
|
|
|
USE IN (SELECT('cAmortizareLunara'))
|
|
USE IN (SELECT('cJurnalImobTemp'))
|
|
|
|
Select (m.lcSelect)
|
|
Return m.llSucces
|
|
|
|
Endfunc && oAssets
|
|
|
|
|
|
************************************************
|
|
* cursor cMovementTypeTable
|
|
************************************************
|
|
Function oMovementTypeTable
|
|
|
|
Local lcSelect, lcSql, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2
|
|
lcSelect = Select()
|
|
|
|
|
|
Text To m.lcSql Noshow Textmerge
|
|
select movementtype, description
|
|
from saft_movementtypetable
|
|
order by to_number(movementtype)
|
|
Endtext
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, 'cMovementTypeTable')
|
|
If m.llSucces
|
|
Select cMovementTypeTable
|
|
Index On VAL(movementtype) Tag mtype
|
|
Endif
|
|
|
|
Select (m.lcSelect)
|
|
Return m.llSucces
|
|
|
|
Endfunc && oMovementTypeTable
|
|
|
|
************************************************
|
|
* cursor cProducts
|
|
************************************************
|
|
* La sectiunea MF 2.9 Products [Produse] se vor declara toate produsele care au miscari pe conturile de clasa 3, cu exceptia conturilor 303 (Obiete de inventar) si 32x (Stocuri in curs de aprovizionare);
|
|
* La sectiunea MF 2.10 PhysicalStock [Stocuri] se vor declara toate produsele existente in stoc la data raportarii cu exceptia valorilor inregistrate in conturile: Diferente de pret (308, 348 etc), Obiecte de inventar (303), Stocuri in curs de aprovizionare (32x), Ajustari (39xx)
|
|
* La sectiunea SD 4.4 MovementOfGoods [Mi?cari Bunuri] se vor raporta toate miscarile inregistrate pe clasa 3, cu exceptia contului 303 (Obiecte de Inventar) si Stocuri in curs de aprovizionare (32x). Iar, pentru diferentele de pret si ajustari elementul Quantity va fi "0".
|
|
Function oProducts
|
|
|
|
Local lcSelect, lcSql, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2
|
|
lcSelect = Select()
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
|
|
Text To m.lcSql Noshow Textmerge
|
|
select distinct s.id_articol, a.denumire, a.codnc8, a.um, a.cod_um_iso, a.um_iso, a.codbare, '01' as goodsorservicesid
|
|
FROM stoc s join vnom_articole a on s.id_articol = a.id_articol
|
|
WHERE s.an * 12 + s.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>>
|
|
and not (SUBSTR(s.cont,1,3) = '303' or SUBSTR(s.cont,1,2) in ('32', '39'))
|
|
order by a.denumire
|
|
Endtext
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, 'cProducts')
|
|
If m.llSucces
|
|
*
|
|
Endif
|
|
|
|
Select (m.lcSelect)
|
|
Return m.llSucces
|
|
|
|
Endfunc && oProducts
|
|
|
|
************************************************
|
|
* cursor cPhysicalStock
|
|
************************************************
|
|
Function oPhysicalStock
|
|
|
|
Local lcSelect, lcSql, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2
|
|
Local lcSaftPartId, lnIdPart
|
|
lcSelect = Select()
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
Text To m.lcSql Noshow Textmerge
|
|
select s.id_gestiune,
|
|
s.cgest,
|
|
s.id_articol,
|
|
s.pret,
|
|
s.cont,
|
|
s.id_part_rez as id_part,
|
|
p.denumire as partener,
|
|
s.canti,
|
|
s.vali,
|
|
s.cantf,
|
|
s.valf,
|
|
a.codnc8,
|
|
a.um,
|
|
a.cod_um_iso,
|
|
a.denumire,
|
|
CAST(null as varchar2(20)) as saftpartid
|
|
from (select id_gestiune,
|
|
cgest,
|
|
id_articol,
|
|
pret,
|
|
cont,
|
|
id_part_rez,
|
|
sum(canti) as canti,
|
|
sum(cantf) as cantf,
|
|
round(pret * sum(canti), 6) as vali,
|
|
round(pret * sum(cantf), 6) as valf
|
|
from (select s.id_gestiune, g.cgest, s.id_articol, decode(g.nr_pag, 6, s.pretv+s.tvav, s.pret) as pret, s.cont, s.id_part_rez, s.cants as canti, 0 as cantf
|
|
from stoc s join nom_gestiuni g on s.id_gestiune = g.id_gestiune
|
|
where s.an = <<m.lnAn1>> and s.luna = <<m.lnLuna1>>
|
|
and not (SUBSTR(s.cont,1,3) = '303' or SUBSTR(s.cont,1,2) in ('32', '39'))
|
|
union all
|
|
select s.id_gestiune, g.cgest, s.id_articol, decode(g.nr_pag, 6, s.pretv+s.tvav, s.pret) as pret, s.cont, s.id_part_rez, 0 as canti, s.cants + s.cant - s.cante as cantf
|
|
from stoc s join nom_gestiuni g on s.id_gestiune = g.id_gestiune
|
|
where s.an = <<m.lnAn2>> and s.luna = <<m.lnLuna2>>
|
|
and not (SUBSTR(s.cont,1,3) = '303' or SUBSTR(s.cont,1,2) in ('32', '39')))
|
|
group by id_gestiune, cgest, id_articol, pret, cont, id_part_rez) s
|
|
join vnom_articole a
|
|
on s.id_articol = a.id_articol
|
|
left join nom_parteneri p on s.id_part_rez = p.id_part
|
|
order by s.cgest, a.denumire, s.pret, s.cont, p.denumire
|
|
Endtext
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, 'cPhysicalStock')
|
|
IF m.llSucces
|
|
* completez ownerId pentru contul 35x (stocuri la terti, cu partener rezervare)
|
|
SELECT distinct id_part FROM cPhysicalStock WHERE !EMPTY(NVL(id_part, 0)) AND LEFT(cont,2) = '35' INTO CURSOR cIdpartTemp
|
|
|
|
SELECT cIdPartTemp
|
|
SCAN
|
|
lnIdPart = id_part
|
|
lcSaftPartId = This.GetOwnerCode(m.lnIdPart)
|
|
IF !EMPTY(m.lcSaftPartId)
|
|
UPDATE cPhysicalStock SET saftpartid = m.lcSaftPartId WHERE id_part = m.lnIdPart
|
|
ENDIF
|
|
ENDSCAN && cIdPartTemp
|
|
|
|
USE IN (SELECT('cIdPartTemp'))
|
|
ENDIF
|
|
GO TOP IN cPhysicalStock
|
|
Select (m.lcSelect)
|
|
Return m.llSucces
|
|
|
|
Endfunc && oPhysicalStock
|
|
|
|
************************************************
|
|
* cursor cMovementOfGoods
|
|
************************************************
|
|
Function oMovementOfGoods
|
|
|
|
Local lcSelect, lcSql, llSucces, lnAn1, lnAn2, lnLuna1, lnLuna2
|
|
lcSelect = Select()
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
Text To m.lcSql Noshow Textmerge
|
|
SELECT an, luna, id_rul, id_fact, dataact, nract, nnir, id_tip_rulaj, cont, cod, id_articol, denumire, cant, cante, pret, cod_um_iso,
|
|
taxcode, taxtype, procent_taxa, r1.movementtype, CAST(r1.movementtype || ' ' || m.description AS varchar2(200)) as movementtypename, customerid, supplierid, saftpartidc, saftpartids,
|
|
(SELECT MAX(t.prescurtare) as cod_tara FROM ADRESE_PARTENERI ap left join syn_nom_tari t on t.id_tara = ap.id_tara WHERE ap.id_part = r1.customerId and ap.STERS = 0 AND ap.PRINCIPALA = 1) as cod_taraC,
|
|
(SELECT MAX(t.prescurtare) as cod_tara FROM ADRESE_PARTENERI ap left join syn_nom_tari t on t.id_tara = ap.id_tara WHERE ap.id_part = r1.supplierId and ap.STERS = 0 AND ap.PRINCIPALA = 1) as cod_taraS,
|
|
(select cod_fiscal from nom_parteneri where id_part = r1.customerId) as cod_fiscalC,
|
|
(select cod_fiscal from nom_parteneri where id_part = r1.SupplierId) as cod_fiscalS,
|
|
(select tip_persoana from nom_parteneri where id_part = r1.customerId) as tip_persoanaC,
|
|
(select tip_persoana from nom_parteneri where id_part = r1.SupplierId) as tip_persoanaS,
|
|
(select denumire from nom_parteneri where id_part = r1.customerId) as denumireC,
|
|
(select denumire from nom_parteneri where id_part = r1.supplierId) as denumireS,
|
|
(select MAX(f.fel_document) from act a join nom_fdoc f on a.id_fdoc = f.id_fdoc where a.cod = r1.cod) as fdoc
|
|
from (select r.an, r.luna, r.id_rul, r.id_fact, r.dataact, r.nract, r.nnir, r.id_tip_rulaj, r.cont, r.cod, r.id_articol, r.cant, r.cante, decode(g.nr_pag, 6, r.pretv+r.tvav, r.pret) as pret, a.cod_um_iso, a.denumire,
|
|
r.taxcode, t.taxtype, t.procent_taxa,
|
|
(case when r.id_tip_rulaj = 6 and r.cante < 0 then '110'
|
|
when r.id_tip_rulaj = 6 and r.cante > 0 then '120'
|
|
when r.id_tip_rulaj = 0 and r.cant > 0 and g.nr_pag = 4 then '20'
|
|
when r.id_tip_rulaj = 0 and r.cant > 0 then '10'
|
|
when r.id_tip_rulaj = 0 and r.cante > 0 then '30'
|
|
when r.id_tip_rulaj = 0 and r.cant < 0 then '50'
|
|
when r.id_tip_rulaj = 0 and r.cante < 0 then '40'
|
|
when r.id_tip_rulaj = 1 then '80'
|
|
else '180' end) as movementtype,
|
|
(select MAX(id_part) as id_part from jv2007 j where j.an = r.an and j.luna = r.luna and j.id_fact = r.id_fact) as customerId,
|
|
(select MAX(id_part) as id_part from jc2007 j where j.an = r.an and j.luna = r.luna and j.id_fact = r.id_fact) as supplierId,
|
|
CAST(null as varchar2(20)) as saftpartidc,
|
|
CAST(null as varchar2(20)) as saftpartids
|
|
from rul r left join vnom_articole a on r.id_articol = a.id_articol
|
|
join nom_gestiuni g on r.id_gestiune = g.id_gestiune
|
|
left join saft_taxtable t on r.taxcode = t.taxcode
|
|
where r.an * 12 + r.luna between <<m.lnAn1*12+m.lnLuna1>> and <<m.lnAn2*12+m.lnLuna2>> and r.sters = 0
|
|
and not (SUBSTR(r.cont,1,3) = '303' or SUBSTR(r.cont,1,2) in ('32'))) r1
|
|
left join saft_movementtypetable m on r1.movementtype = m.movementtype
|
|
order by dataact, nract, id_rul
|
|
Endtext
|
|
|
|
llSucces = goExecutor.oExecuta(m.lcSql, 'cMovementOfGoodsTemp')
|
|
|
|
create cursor cMovementOfGoods ;
|
|
(AN N(4) NULL, ;
|
|
LUNA N(2) NULL, ;
|
|
ID_RUL N(20) NULL , ;
|
|
ID_FACT N(20) NULL, ;
|
|
DATAACT D NULL, ;
|
|
NRACT N(16) NULL, ;
|
|
NNIR N(16) NULL, ;
|
|
ID_TIP_RULAJ I NULL, ;
|
|
CONT C(4) NULL, ;
|
|
COD N(20) NULL, ;
|
|
ID_ARTICOL N(20) NULL, ;
|
|
DENUMIRE C(250) NULL, ;
|
|
CANT N(16,3) NULL, ;
|
|
CANTE N(16,3) NULL, ;
|
|
PRET N(18,4) NULL, ;
|
|
VALOARE N(18,4) NULL, ;
|
|
TAXA N(18,4) NULL, ;
|
|
COD_UM_ISO C(5) NULL, ;
|
|
TAXCODE N(6) NULL, ;
|
|
TAXTYPE N(3) NULL, ;
|
|
PROCENT_TAXA N(7,2) NULL, ;
|
|
MOVEMENTTYPE C(9) NULL, ;
|
|
MOVEMENTTYPENAME C(200) NULL, ;
|
|
CUSTOMERID N(10) NULL, ;
|
|
SUPPLIERID N(10) NULL, ;
|
|
SAFTPARTIDC C(20) NULL, ;
|
|
SAFTPARTIDS C(20) NULL, ;
|
|
COD_TARAC C(5) NULL, ;
|
|
COD_TARAS C(5) NULL, ;
|
|
COD_FISCALC C(30) NULL, ;
|
|
COD_FISCALS C(30) NULL, ;
|
|
TIP_PERSOANAC N(1) NULL, ;
|
|
TIP_PERSOANAS N(1) NULL, ;
|
|
DENUMIREC C(200) NULL, ;
|
|
DENUMIRES C(200) NULL, ;
|
|
FDOC C(18) NULL)
|
|
|
|
SELECT cMovementOfGoods
|
|
APPEND FROM DBF('cMovementOfGoodsTemp')
|
|
USE IN (SELECT('cMovementOfGoodsTemp'))
|
|
|
|
IF m.llSucces
|
|
UPDATE cMovementOfGoods SET valoare = ROUND(pret * IIF(cant <> 0, cant, cante), m.gnPC)
|
|
UPDATE cMovementOfGoods SET taxa = ROUND(valoare * NVL(procent_taxa,0) / 100 , m.gnPC)
|
|
|
|
* Corectez movementid in consum intern in loc de vanzare, daca nu exista client
|
|
UPDATE cMovementOfGoods SET movementtype = '70', movementtypename = '70 Consum' WHERE ALLTRIM(movementtype) = '30' AND EMPTY(NVL(customerId,0))
|
|
|
|
|
|
SELECT distinct customerId as id_part, cod_fiscalC as cod_fiscal, tip_persoanaC as tip_persoana, cod_taraC as cod_tara FROM cMovementOfGoods WHERE !EMPTY(NVL(customerId,0)) INTO CURSOR cPartIdTemp
|
|
SELECT cPartIdTemp
|
|
SCAN
|
|
lnIdPart = id_part
|
|
lcCodTara = ALLTRIM(NVL(cod_Tara, 'RO'))
|
|
lnTipPersoana = tip_persoana
|
|
lcCodFiscal = ALLTRIM(NVL(cod_fiscal, ''))
|
|
lcSaftPartId = This.GenCustSupCode(m.lnIdPart, m.lcCodTara, m.lnTipPersoana, m.lcCodFiscal)
|
|
|
|
UPDATE cMovementOfGoods SET SaftPartIdC = m.lcSaftPartId WHERE customerId = m.lnIdPart
|
|
ENDSCAN
|
|
USE IN (SELECT('cPartIdTemp'))
|
|
|
|
SELECT distinct supplierId as id_part, cod_fiscalS as cod_fiscal, tip_persoanaS as tip_persoana, cod_taraS as cod_tara FROM cMovementOfGoods WHERE !EMPTY(NVL(supplierId,0)) INTO CURSOR cPartIdTemp
|
|
SELECT cPartIdTemp
|
|
SCAN
|
|
lnIdPart = id_part
|
|
lcCodTara = ALLTRIM(NVL(cod_Tara, 'RO'))
|
|
lnTipPersoana = tip_persoana
|
|
lcCodFiscal = ALLTRIM(NVL(cod_fiscal, ''))
|
|
lcSaftPartId = This.GenCustSupCode(m.lnIdPart, m.lcCodTara, m.lnTipPersoana, m.lcCodFiscal)
|
|
|
|
UPDATE cMovementOfGoods SET SaftPartIdS = m.lcSaftPartId WHERE SupplierId = m.lnIdPart
|
|
ENDSCAN
|
|
USE IN (SELECT('cPartIdTemp'))
|
|
|
|
ENDIF
|
|
GO TOP IN cMovementOfGoods
|
|
|
|
Select (m.lcSelect)
|
|
Return m.llSucces
|
|
|
|
Endfunc && oMovementOfGoods
|
|
|
|
************************************************
|
|
*** Fragment Header
|
|
************************************************
|
|
Function wHeader
|
|
Local lcData, lcSelect, lcText, lnAnF, lnAnI, lnLunaF, lnLunaI, lcTip, lcCompanyName
|
|
lcText = ''
|
|
lcSelect = Select()
|
|
|
|
lcData = Dtos(Date())
|
|
lcData = Left(m.lcData, 4) + '-' + Substr(m.lcData, 5, 2) + '-' + Right(m.lcData, 2)
|
|
|
|
lnAnI = This.oUnitate.an1
|
|
lnAnF = This.oUnitate.an2
|
|
|
|
lnLunaI = This.oUnitate.luna1
|
|
lnLunaF = This.oUnitate.luna2
|
|
lcTip = This.oUnitate.Tip && L/T/C/A/NL/NT
|
|
|
|
lcAddressStructure = This.wAddressStructure(gofirma.localitate,gofirma.cod_tara, goFirma.strada, goFirma.numar, goFirma.indicativ_judet)
|
|
lcCompanyName = ALLTRIM(LEFT(XmlSpecialCharacters(RemoveCharacters(Alltrim(Nvl(gofirma.firma, '')), .T.)),70))
|
|
|
|
Set Textmerge On To Memvar m.lcText Noshow
|
|
\ <nsSAFT:Header >
|
|
\ <nsSAFT:AuditFileVersion>1.0</nsSAFT:AuditFileVersion>
|
|
\ <nsSAFT:AuditFileCountry>RO</nsSAFT:AuditFileCountry>
|
|
\ <nsSAFT:AuditFileDateCreated><<m.lcData>></nsSAFT:AuditFileDateCreated>
|
|
\ <nsSAFT:SoftwareCompanyName>ROMFAST SRL</nsSAFT:SoftwareCompanyName>
|
|
\ <nsSAFT:SoftwareID>ROA-SAFT</nsSAFT:SoftwareID>
|
|
\ <nsSAFT:SoftwareVersion>1.0.0</nsSAFT:SoftwareVersion>
|
|
\ <nsSAFT:Company>
|
|
\ <nsSAFT:RegistrationNumber><<Alltrim(STRTRAN(gofirma.cod_fiscal, ' ', '',1,10,1))>></nsSAFT:RegistrationNumber>
|
|
\ <nsSAFT:Name><<m.lcCompanyName>></nsSAFT:Name>
|
|
\ <<This.wxml("Address", m.lcAddressStructure)>>
|
|
\ <nsSAFT:Contact>
|
|
\ <nsSAFT:ContactPerson>
|
|
\ <<This.wxml("FirstName", Alltrim(This.oUnitate.PrenumeContact))>>
|
|
\ <<This.wxml("LastName", Alltrim(This.oUnitate.NumeContact))>>
|
|
\ </nsSAFT:ContactPerson>
|
|
\ <<This.wxml("Telephone", Alltrim(gofirma.telefon), .T.)>>
|
|
\ <<This.wxml("Email", Alltrim(gofirma.email))>>
|
|
\ <<This.wxml("Website", "")>>
|
|
\ </nsSAFT:Contact>
|
|
\ <nsSAFT:TaxRegistration>
|
|
\ <<This.wxml("TaxRegistrationNumber", Alltrim(gofirma.cod_fiscal))>>
|
|
\ <<This.wxml("TaxType", "100010")>>
|
|
\ <<This.wxml("TaxNumber", Alltrim(gofirma.cod_fiscal))>>
|
|
\ <<This.wxml("TaxAuthority", "ANAF")>>
|
|
\ <<This.wxml("TaxVerificationDate", m.lcData)>>
|
|
\ </nsSAFT:TaxRegistration>
|
|
\ <nsSAFT:BankAccount>
|
|
\ <<This.wxml("IBANNumber", STRTRAN(Alltrim(NVL(gofirma.cont_banca1,'')), ' ', '',1,20,1))>>
|
|
\ </nsSAFT:BankAccount>
|
|
\ </nsSAFT:Company>
|
|
\ <<This.wxml("DefaultCurrencyCode", "RON")>>
|
|
\ <nsSAFT:SelectionCriteria>
|
|
\ <<This.wxml("TaxReportingJurisdiction", "Romania")>>
|
|
\ <<This.wxml("CompanyEntity", m.lcCompanyName)>>
|
|
\ <<This.wxml("PeriodStart", m.lnLunaI)>>
|
|
\ <<This.wxml("PeriodStartYear", m.lnAnI)>>
|
|
\ <<This.wxml("PeriodEnd", m.lnLunaF)>>
|
|
\ <<This.wxml("PeriodEndYear", m.lnAnF)>>
|
|
\ </nsSAFT:SelectionCriteria>
|
|
\ <<This.wxml("HeaderComment", m.lcTip)>>
|
|
\ <<This.wxml("SegmentIndex", This.SegmentIndex)>>
|
|
\ <<This.wxml("TotalSegmentsInsequence", This.TotalSegmentsInSequence)>>
|
|
\ <<This.wxml("TaxAccountingBasis", This.TaxAccountingBasis)>>
|
|
\ <<This.wxml("TaxEntity", This.TaxEntity)>>
|
|
\ </nsSAFT:Header>
|
|
\
|
|
Set Textmerge To
|
|
|
|
Select (m.lcSelect)
|
|
|
|
Return m.lcText
|
|
Endfunc && wHeader
|
|
|
|
|
|
************************************************
|
|
*** Fragment GeneralLedgerAccounts
|
|
************************************************
|
|
Function wGeneralLedgerAccounts
|
|
Local lcSelect, lcText
|
|
lcText = ''
|
|
lcSelect = Select()
|
|
|
|
|
|
If !Used('cGeneralLedgerAccounts')
|
|
Return m.lcText
|
|
Endif
|
|
|
|
Set Textmerge On To Memvar m.lcText Noshow
|
|
\
|
|
Select cGeneralLedgerAccounts
|
|
Set Filter To (soldideb <> 0 Or soldicred <> 0 Or soldfdeb <> 0 Or soldfcred <> 0)
|
|
Scan
|
|
\ <nsSAFT:Account>
|
|
\ <nsSAFT:AccountID><<Alltrim(Cont)>></nsSAFT:AccountID>
|
|
\ <nsSAFT:AccountDescription><<Alltrim(denumire)>></nsSAFT:AccountDescription>
|
|
\ <nsSAFT:AccountType><<Alltrim(Tip)>></nsSAFT:AccountType>
|
|
Do Case
|
|
Case soldideb <> 0 And soldicred = 0
|
|
\ <nsSAFT:OpeningDebitBalance><<Round(soldideb,2)>></nsSAFT:OpeningDebitBalance>
|
|
Case soldicred <> 0 And soldideb = 0
|
|
\ <nsSAFT:OpeningCreditBalance><<Round(soldicred,2)>></nsSAFT:OpeningCreditBalance>
|
|
Otherwise
|
|
Do Case
|
|
Case Alltrim(Tip) = 'Activ'
|
|
\ <nsSAFT:OpeningDebitBalance><<Round(soldideb,2)>></nsSAFT:OpeningDebitBalance>
|
|
Otherwise
|
|
\ <nsSAFT:OpeningCreditBalance><<Round(soldicred,2)>></nsSAFT:OpeningCreditBalance>
|
|
Endcase
|
|
Endcase
|
|
Do Case
|
|
Case soldfdeb <> 0 And soldfcred = 0
|
|
\ <nsSAFT:ClosingDebitBalance><<Round(soldfdeb,2)>></nsSAFT:ClosingDebitBalance>
|
|
Case soldfcred <> 0 And soldfdeb = 0
|
|
\ <nsSAFT:ClosingCreditBalance><<Round(soldfcred,2)>></nsSAFT:ClosingCreditBalance>
|
|
Otherwise
|
|
Do Case
|
|
Case Alltrim(Tip) = 'Activ'
|
|
\ <nsSAFT:ClosingDebitBalance><<Round(soldfdeb,2)>></nsSAFT:ClosingDebitBalance>
|
|
Otherwise
|
|
\ <nsSAFT:ClosingCreditBalance><<Round(soldfcred,2)>></nsSAFT:ClosingCreditBalance>
|
|
Endcase
|
|
|
|
Endcase
|
|
\ </nsSAFT:Account>
|
|
Endscan && c406Bal
|
|
\
|
|
Set Textmerge To
|
|
|
|
Select (m.lcSelect)
|
|
|
|
Return m.lcText
|
|
Endfunc && xGeneralLedgerAccounts
|
|
|
|
********************************************
|
|
*** Fragment Customers/Suppliers
|
|
********************************************
|
|
Function wCustomersSuppliers
|
|
Lparameters tcTip
|
|
* tcTip: customers/suppliers
|
|
|
|
Local lcCodFiscal, lcCodP, lcCodTara, lcCont, lcCursor, lcDenumire
|
|
Local lcIdPart, lcLocalitate, lcNumar, lcPartId, lcRegistrationNumber, lcRegiune, lcSelect, lcStrada, lcIndicativJudet
|
|
Local lcTag, lcTagId, lcTags, lcText, lcTipCont, llClient, llEU, lnSoldFCred, lnSoldFDeb
|
|
Local lnSoldICred, lnSoldIDeb, lnTipPersoana
|
|
|
|
lcText = ''
|
|
lcSelect = Select()
|
|
llClient = (Upper(Alltrim(m.tcTip)) = 'CUSTOMERS')
|
|
lcCursor = Iif(m.llClient, 'cCustomers', 'cSuppliers')
|
|
|
|
lcTag = Iif(m.llClient, 'Customer', 'Supplier')
|
|
lcTagId = Iif(m.llClient, 'CustomerID', 'SupplierID')
|
|
|
|
If !Used(m.lcCursor)
|
|
Return m.lcText
|
|
Endif
|
|
|
|
Set Textmerge On To Memvar m.lcText Noshow
|
|
\
|
|
Select(m.lcCursor)
|
|
Scan
|
|
lnIdPart = Nvl(id_part, 0)
|
|
lcCodFiscal = Upper(Alltrim(Nvl(cod_fiscal, '')))
|
|
lcCodTara = Alltrim(Upper(Nvl(cod_tara, 'RO')))
|
|
lcDenumire = ALLTRIM(LEFT(XmlSpecialCharacters(RemoveCharacters(Alltrim(Nvl(denumire, '')), .T.)), 70))
|
|
lcStrada = XmlSpecialCharacters(RemoveCharacters(Alltrim(Nvl(Left(strada, 70), '')), .T.))
|
|
lcNumar = XmlSpecialCharacters(RemoveCharacters(Alltrim(Nvl(numar, '')), .T.))
|
|
lcCodP = XmlSpecialCharacters(RemoveCharacters(Iif(Empty(Nvl(codpostal, 0)), '', Alltrim(Str(codpostal))), .T.))
|
|
lcLocalitate = XmlSpecialCharacters(RemoveCharacters(Alltrim(Nvl(Nvl(localitate, 'BUCURESTI'), '')), .T.))
|
|
lcIndicativJudet = Alltrim(Nvl(indicativ_judet, ''))
|
|
lnTipPersoana = Nvl(tip_persoana, 1) && 1 = juridica, 2 = fizica
|
|
lcCont = ALLTRIM(NVL(cont,''))
|
|
lnSoldIDeb = soldideb
|
|
lnSoldICred = soldicred
|
|
lnSoldFDeb = soldfdeb
|
|
lnSoldFCred = soldfcred
|
|
|
|
* lcPartId = Iif(!Empty(m.lnIdPart), This.GenCustSupCode(m.lnIdPart, m.lcCodTara, m.lnTipPersoana, m.lcCodFiscal), 'NULL')
|
|
lcPartId = Iif(!Empty(m.lnIdPart), ALLTRIM(NVL(Saftpartid,'')), 'NULL')
|
|
lcRegistrationNumber = m.lcPartId
|
|
|
|
lcAddressStructure = This.wAddressStructure(m.lcLocalitate, m.lcCodTara, m.lcStrada, m.lcNumar, m.lcIndicativJudet)
|
|
|
|
\ <nsSAFT:<<m.lcTag>>>
|
|
\ <nsSAFT:CompanyStructure>
|
|
\ <<This.wxml("RegistrationNumber", m.lcRegistrationNumber)>>
|
|
\ <<This.wxml("Name", m.lcDenumire)>>
|
|
\ <<This.wxml("Address", m.lcAddressStructure)>>
|
|
\ </nsSAFT:CompanyStructure>
|
|
\ <<This.wxml(m.lcTagId, m.lcPartId)>>
|
|
\ <<This.wxml("SelfBillingIndicator", 0, .T.)>>
|
|
\ <<This.wxml("AccountID", m.lcCont)>>
|
|
Do Case
|
|
Case soldideb <> 0 And soldicred = 0
|
|
\ <<This.wxml("OpeningDebitBalance", This.FormatValue(soldideb))>>
|
|
Case soldicred <> 0 And soldideb = 0
|
|
\ <<This.wxml("OpeningCreditBalance", This.FormatValue(soldicred))>>
|
|
Otherwise
|
|
Do Case
|
|
Case Alltrim(Tip) = 'Activ'
|
|
\ <<This.wxml("OpeningDebitBalance", This.FormatValue(soldideb))>>
|
|
OTHERWISE
|
|
\ <<This.wxml("OpeningCreditBalance", This.FormatValue(soldicred))>>
|
|
Endcase
|
|
Endcase
|
|
Do Case
|
|
Case soldfdeb <> 0 And soldfcred = 0
|
|
\ <<This.wxml("ClosingDebitBalance", This.FormatValue(soldfdeb))>>
|
|
Case soldfcred <> 0 And soldfdeb = 0
|
|
\ <<This.wxml("ClosingCreditBalance", This.FormatValue(soldfcred))>>
|
|
Otherwise
|
|
Do Case
|
|
Case Alltrim(Tip) = 'Activ'
|
|
\ <<This.wxml("ClosingDebitBalance", This.FormatValue(soldfdeb))>>
|
|
OTHERWISE
|
|
\ <<This.wxml("ClosingCreditBalance", This.FormatValue(soldfcred))>>
|
|
Endcase
|
|
Endcase
|
|
\ </nsSAFT:<<m.lcTag>>>
|
|
Endscan && cCustomers/cSuppliers
|
|
\
|
|
Set Textmerge To
|
|
|
|
|
|
Select (m.lcSelect)
|
|
|
|
Return m.lcText
|
|
Endfunc && wCustomersSuppliers
|
|
|
|
Function wTaxTable
|
|
Local lcSelect, lcText
|
|
lcText = ''
|
|
lcSelect = Select()
|
|
|
|
|
|
If !Used('cTaxTable')
|
|
Return m.lcText
|
|
Endif
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
Set Textmerge On To Memvar m.lcText Noshow
|
|
SELECT distinct taxtype, LEFT(typename,250) as typename FROM cTaxTable INTO CURSOR cTaxTypeTemp
|
|
SELECT cTaxTypeTemp
|
|
SCAN
|
|
lnTaxType = taxtype
|
|
lcTypeName = ALLTRIM(NVL(typename, ''))
|
|
\
|
|
\ <nsSAFT:TaxTableEntry>
|
|
\ <nsSAFT:TaxType><<m.lnTaxType>></nsSAFT:TaxType>
|
|
\ <nsSAFT:Description><<m.lcTypeName>></nsSAFT:Description>
|
|
SELECT cTaxTable
|
|
SCAN FOR taxtype = m.lnTaxType AND RIGHT(ALLTRIM(STR(taxcode)), 3) <> '000' && fara codurile de taxa non-wht, adaugate in ROA
|
|
\ <nsSAFT:TaxCodeDetails>
|
|
\ <nsSAFT:TaxCode><<taxcode>></nsSAFT:TaxCode>
|
|
\ <nsSAFT:Description><<ALLTRIM(UPPER(NVL(descriere,'')))>></nsSAFT:Description>
|
|
\ <nsSAFT:TaxPercentage><<procent_taxa>></nsSAFT:TaxPercentage>
|
|
\ <nsSAFT:BaseRate>0</nsSAFT:BaseRate>
|
|
\ <nsSAFT:Country>RO</nsSAFT:Country>
|
|
\ </nsSAFT:TaxCodeDetails>
|
|
ENDSCAN
|
|
\ </nsSAFT:TaxTableEntry>
|
|
ENDSCAN
|
|
\
|
|
Set Textmerge To
|
|
|
|
USE IN (SELECT('cTaxTypeTemp'))
|
|
Select (m.lcSelect)
|
|
|
|
Return m.lcText
|
|
Endfunc && wTaxTable
|
|
|
|
Function wUOMTable
|
|
Local lcSelect, lcText
|
|
lcText = ''
|
|
lcSelect = Select()
|
|
|
|
|
|
If !Used('cUOMTable')
|
|
Return m.lcText
|
|
Endif
|
|
|
|
Set Textmerge On To Memvar m.lcText Noshow
|
|
SELECT cUOMTable
|
|
SCAN
|
|
lcUnitOfMeasure = ALLTRIM(NVL(unitofmeasure, ''))
|
|
lcDescription = ALLTRIM(NVL(description, ''))
|
|
\
|
|
\ <nsSAFT:UOMTableEntry>
|
|
\ <<This.wXML('UnitOfMeasure', m.lcUnitOfMeasure)>>
|
|
\ <<This.wXML('Description', m.lcDescription)>>
|
|
\ </nsSAFT:UOMTableEntry>
|
|
ENDSCAN
|
|
\
|
|
Set Textmerge To
|
|
|
|
Select (m.lcSelect)
|
|
|
|
Return m.lcText
|
|
Endfunc && wUOMTable
|
|
|
|
************************************************
|
|
*** Fragment GeneralLedgerEntries
|
|
************************************************
|
|
Function wGeneralLedgerEntries
|
|
Local lcSelect, lcText
|
|
lcText = ''
|
|
lcSelect = Select()
|
|
|
|
|
|
If !Used('cGeneralLedgerEntries')
|
|
Return m.lcText
|
|
Endif
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
Select Count(*) As nr, Sum(Iif(tipdc = 'D', suma, 0.00)) As debit, Sum(Iif(tipdc = 'D', suma, 0.00)) As credit From cGeneralLedgerEntries Into Cursor cEntriesTotals
|
|
Select cEntriesTotals
|
|
lnTotalDebit = debit
|
|
lnTotalCredit = credit
|
|
lnNumberOfEntries = nr
|
|
Use In (Select('cEntriesTotal'))
|
|
|
|
Set Textmerge On To Memvar m.lcText Noshow
|
|
\
|
|
\ <nsSAFT:NumberOfEntries><<m.lnNumberOfEntries>></nsSAFT:NumberOfEntries>
|
|
\ <nsSAFT:TotalDebit><<This.FormatValue(m.lnTotalDebit)>></nsSAFT:TotalDebit>
|
|
\ <nsSAFT:TotalCredit><<This.FormatValue(m.lnTotalCredit)>></nsSAFT:TotalCredit>
|
|
\ <nsSAFT:Journal>
|
|
\ <nsSAFT:JournalID>1</nsSAFT:JournalID>
|
|
\ <nsSAFT:Description>Jurnal contabil</nsSAFT:Description>
|
|
\ <nsSAFT:Type>1</nsSAFT:Type>
|
|
|
|
Select cGeneralLedgerEntries
|
|
Scan
|
|
lcCodTara = Alltrim(Nvl(cod_tara, ''))
|
|
lnTipPersoana = Nvl(tip_persoana, 1) && 1 = juridica, 2 = fizica
|
|
lcCodFiscal = Alltrim(Nvl(cod_fiscal, ''))
|
|
lcCustomerId = '0'
|
|
lcSupplierId = '0'
|
|
lnIdPart = Nvl(id_part, 0)
|
|
lcCont = Alltrim(Nvl(Cont, ''))
|
|
lcPartId = ALLTRIM(NVL(saftpartid,''))
|
|
If !Empty(m.lnIdPart)
|
|
* lcPartId = This.GenCustSupCode(m.lnIdPart, m.lcCodTara, m.lnTipPersoana, m.lcCodFiscal)
|
|
Do Case
|
|
Case Left(m.lcCont, 2) = '41' OR INLIST(LEFT(m.lcCont,3), '461', '463')
|
|
lcCustomerId = m.lcPartId
|
|
Case Left(m.lcCont, 2) = '40' OR INLIST(LEFT(m.lcCont,3), '462', '467')
|
|
lcSupplierId = m.lcPartId
|
|
*!* OTHERWISE
|
|
*!* lcCustomerId = '00' + This.oUnitate.codi
|
|
*!* lcSupplierId = '00' + This.oUnitate.codi
|
|
ENDCASE
|
|
ELSE
|
|
lcCustomerId = IIF(!EMPTY(m.lcPartId), m.lcPartId, '00' + This.oUnitate.codi)
|
|
lcSupplierId = IIF(!EMPTY(m.lcPartId), m.lcPartId, '00' + This.oUnitate.codi)
|
|
Endif
|
|
lnIdFact = id_fact
|
|
lcCont = Alltrim(Nvl(Cont, ''))
|
|
lcTipDC = Alltrim(tipdc)
|
|
lnSuma = suma
|
|
lcCodValuta = Nvl(cod_valuta, 'RON')
|
|
lnSumaValuta = suma_val
|
|
lnCurs = Iif(Empty(Nvl(Curs, 0)), 1, Curs)
|
|
lnTaxa = taxa
|
|
lnTaxaValuta = taxa_val
|
|
lcAmountStructure = This.wAmountStructure(m.lnSuma, m.lcCodValuta, m.lnSumaValuta, m.lnCurs)
|
|
lcTaxAmountStructure = This.wAmountStructure(m.lnTaxa, m.lcCodValuta, m.lnTaxaValuta, m.lnCurs)
|
|
|
|
lcTaxType = '000'
|
|
lcTaxCode = '000000'
|
|
*!* llN50 = (n50=1) && achizitii nedeductibile 50%
|
|
*!* llN100 = (n100=1) && achizitii nedeductibile 100%
|
|
llTVA = Alltrim(Nvl(tiptaxa, '')) = 'TVA' && taxa = TVA
|
|
llWHT = Alltrim(Nvl(tiptaxa, '')) = 'WHT' && taxa = WHT impozit cu retinere la sursa
|
|
*!* llRegularizare = !BETWEEN(YEAR(dataact)*12 + MONTH(dataact), m.lnAn1*12+m.lnLuna1, m.lnAn2*12+m.lnLuna2)
|
|
lcPerioadaTVA = This.oUnitate.perioada_tva
|
|
|
|
Do Case
|
|
Case m.llTVA
|
|
* Cred ca este singurul TaxType pentru LedgerEntries
|
|
* 301-304 se folosesc la plata TVA lunar/trimestrial in Payments
|
|
* Dupa verificare trebuie sa sterg ramurile 301-304
|
|
lcTaxType = '300'
|
|
Case m.llTVA And m.lcPerioadaTVA = 'LUNAR'
|
|
lcTaxType = '301'
|
|
Case m.llTVA And m.lcPerioadaTVA = 'TRIMESTRIAL'
|
|
lcTaxType = '302'
|
|
Case m.llTVA And m.lcPerioadaTVA = 'SEMESTRIAL'
|
|
lcTaxType = '303'
|
|
Case m.llTVA And m.lcPerioadaTVA = 'ANUAL'
|
|
lcTaxType = '304'
|
|
Case m.llWHT And !Empty(Nvl(taxtype, 0))
|
|
lcTaxType = Alltrim(Str(taxtype))
|
|
Endcase
|
|
lcTaxCode = Iif(!Empty(Nvl(taxcode, 0)), Alltrim(Str(taxcode)), m.lcTaxCode)
|
|
|
|
* Am creat taxcode suplimentar pentru taxtype care nu aveau corespondent in taxtable: ex: 390000,410000 Pun taxcode = 000000
|
|
* Facturile de achizitie import trebuie trecute cu TaxCode 000000. Am introdus cod taxa 300000
|
|
IF m.lcTaxCode == '0' OR RIGHT(lcTaxCode,3) = '000' && ex: 410000
|
|
lcTaxCode = '000000'
|
|
ENDIF
|
|
|
|
\ <nsSAFT:Transaction>
|
|
\ <<This.wxml("TransactionID", cod)>>
|
|
\ <<This.wxml("Period", luna)>>
|
|
\ <<This.wxml("PeriodYear", an)>>
|
|
\ <<This.wxml("TransactionDate", This.FormatDate(dataact))>>
|
|
\ <<This.wxml("Description", "Nota")>>
|
|
\ <<This.wxml("SystemEntryDate", This.FormatDate(dataireg))>>
|
|
\ <<This.wxml("GLPostingDate", This.FormatDate(dataireg))>>
|
|
\ <<This.wxml("CustomerID", m.lcCustomerId, .T.)>>
|
|
\ <<This.wxml("SupplierID", m.lcSupplierId, .T.)>>
|
|
\ <nsSAFT:TransactionLine>
|
|
\ <<This.wxml("RecordID", m.lnIdFact)>>
|
|
\ <<This.wxml("AccountID", m.lcCont)>>
|
|
\ <<This.wxml("CustomerID", m.lcCustomerId, .T.)>>
|
|
\ <<This.wxml("SupplierID", m.lcSupplierId, .T.)>>
|
|
\ <<This.wxml("Description", 'NOTA')>>
|
|
\ <<This.wxml(Iif(m.lcTipDC = "D", "DebitAmount", "CreditAmount"), m.lcAmountStructure)>>
|
|
\ <nsSAFT:TaxInformation>
|
|
\ <<This.wxml("TaxType", m.lcTaxType)>>
|
|
\ <<This.wxml("TaxCode", m.lcTaxCode)>>
|
|
\ <<This.wxml("TaxAmount", m.lcTaxAmountStructure)>>
|
|
\ </nsSAFT:TaxInformation>
|
|
\ </nsSAFT:TransactionLine>
|
|
\ </nsSAFT:Transaction>
|
|
Endscan && cGeneralLedgerEntries
|
|
|
|
\ </nsSAFT:Journal>
|
|
\
|
|
Set Textmerge To
|
|
|
|
Select (m.lcSelect)
|
|
|
|
Return m.lcText
|
|
Endfunc && wGeneralLedgerEntries
|
|
|
|
Function wAnalysisTypeTable
|
|
Local lcSelect, lcText
|
|
lcText = ''
|
|
lcSelect = Select()
|
|
|
|
|
|
If !Used('cAnalysisTypeTable')
|
|
Return m.lcText
|
|
Endif
|
|
|
|
Set Textmerge On To Memvar m.lcText Noshow
|
|
\
|
|
Select cAnalysisTypeTable
|
|
Scan
|
|
\ <nsSAFT:AnalysisTypeTableEntry>
|
|
\ <nsSAFT:AnalysisType>CC</nsSAFT:AnalysisType>
|
|
\ <nsSAFT:AnalysisTypeDescription>Centre de cost</nsSAFT:AnalysisTypeDescription>
|
|
\ <nsSAFT:AnalysisID><<Alltrim(cod)>></nsSAFT:AnalysisID>
|
|
\ <nsSAFT:AnalysisIDDescription><<Alltrim(descriere)>></nsSAFT:AnalysisIDDescription>
|
|
\ </nsSAFT:AnalysisTypeTableEntry>
|
|
Endscan
|
|
\
|
|
Set Textmerge To
|
|
|
|
Select (m.lcSelect)
|
|
|
|
Return m.lcText
|
|
|
|
Endfunc && wAnalysisTypeTable
|
|
|
|
|
|
************************************************
|
|
*** Fragment SalesInvoices
|
|
************************************************
|
|
FUNCTION wSalesInvoices
|
|
RETURN This.wSalesPurchaseInvoices('customers')
|
|
ENDFUNC && wSalesInvoices
|
|
|
|
************************************************
|
|
*** Fragment PurchaseInvoices
|
|
************************************************
|
|
FUNCTION wPurchaseInvoices
|
|
RETURN This.wSalesPurchaseInvoices('suppliers')
|
|
ENDFUNC && wSalesInvoices
|
|
|
|
************************************************
|
|
*** Fragment SalesInvoices / PurchaseInvoices
|
|
************************************************
|
|
Function wSalesPurchaseInvoices
|
|
Lparameters tcTip
|
|
* tcTip: customers/suppliers
|
|
|
|
Local lcSelect, lcText
|
|
lcText = ''
|
|
lcSelect = Select()
|
|
|
|
llClient = (Upper(Alltrim(m.tcTip)) = 'CUSTOMERS')
|
|
lcCursor = Iif(m.llClient, 'cSalesInvoices', 'cPurchaseInvoices')
|
|
lcCursorLines = Iif(m.llClient, 'cSalesInvoicesLines', 'cPurchaseInvoicesLines')
|
|
lcCursorParteneri = Iif(m.llClient, 'cCustomers', 'cSuppliers')
|
|
lcTagInfo = Iif(m.llClient, 'CustomerInfo', 'SupplierInfo')
|
|
lcTagId = Iif(m.llClient, 'CustomerID', 'SupplierID')
|
|
|
|
If !Used(m.lcCursor)
|
|
Return m.lcText
|
|
ENDIF
|
|
|
|
|
|
If !Used(m.lcCursor)
|
|
Return m.lcText
|
|
Endif
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
* Clientii au sume pe credit? (contul din liniile de articole cu valoare)
|
|
IF m.llClient
|
|
SELECT SUM(valoare) as debit, 0 as credit FROM (m.lcCursorLines) Into Cursor cEntriesTotals
|
|
ELSE
|
|
SELECT 0 as debit, SUM(valoare) as credit FROM (m.lcCursorLines) Into Cursor cEntriesTotals
|
|
ENDIF
|
|
|
|
Select cEntriesTotals
|
|
lnTotalDebit = debit
|
|
lnTotalCredit = credit
|
|
lnNumberOfEntries = RECCOUNT(m.lcCursor)
|
|
|
|
Use In (Select('cEntriesTotals'))
|
|
|
|
|
|
Set Textmerge On To Memvar m.lcText Noshow
|
|
IF m.lnNumberOfEntries > 0
|
|
\
|
|
\ <<This.wxml("NumberOfEntries", m.lnNumberOfEntries)>>
|
|
\ <<This.wxml("TotalDebit", This.FormatValue(m.lnTotalDebit))>>
|
|
\ <<This.wxml("TotalCredit", This.FormatValue(m.lnTotalCredit))>>
|
|
ENDIF
|
|
|
|
SELECT (m.lcCursorLines)
|
|
lcFilterLines = FILTER()
|
|
SET FILTER TO
|
|
|
|
SELECT (m.lcCursor)
|
|
Scan
|
|
lnNumarFactura = nract
|
|
lcDataFactura = This.FormatDate(dataact)
|
|
lcPartId = ALLTRIM(NVL(SaftPartId,''))
|
|
lnIdPart = id_part
|
|
lnIdFact = id_fact
|
|
*!* lcAddressStructure = This.GetStructuraAdresaPartener(m.tcTip, m.lnIdPart)
|
|
lcLocalitate = ALLTRIM(NVL(localitate, ''))
|
|
lcCodTara = ALLTRIM(NVL(cod_tara, ''))
|
|
lcAddressStructure = This.wAddressStructure(m.lcLocalitate, m.lcCodTara)
|
|
|
|
lcCont = IIF(m.llClient, '4111', '401')
|
|
lnLuna = luna
|
|
lnAn = an
|
|
lnInvoiceType = invoicetype
|
|
lnSelfBillingIndicator = autofactura
|
|
|
|
\ <nsSAFT:Invoice>
|
|
\ <<This.wxml("InvoiceNo", m.lnNumarFactura)>>
|
|
\ <nsSAFT:<<m.lcTagInfo>>>
|
|
\ <<This.wxml(m.lcTagId, m.lcPartId)>>
|
|
\ <<This.wxml("BillingAddress", m.lcAddressStructure)>>
|
|
\ </nsSAFT:<<m.lcTagInfo>>>
|
|
\ <<This.wxml("AccountID", m.lcCont)>>
|
|
\ <<This.wxml("Period", m.lnLuna)>>
|
|
\ <<This.wxml("PeriodYear", m.lnAn)>>
|
|
\ <<This.wxml("InvoiceDate", m.lcDataFactura)>>
|
|
\ <<This.wxml("InvoiceType", m.lnInvoiceType)>>
|
|
\ <<This.wxml("SelfBillingIndicator", m.lnSelfBillingIndicator, .T.)>>
|
|
|
|
lnLineNumber = 0
|
|
SELECT (m.lcCursorLines)
|
|
SCAN FOR id_fact = m.lnIdFact
|
|
lnLineNumber = lnLineNumber + 1
|
|
lcCont = ALLTRIM(NVL(cont,''))
|
|
lnCantitate = cantitate
|
|
lcDescriere = XmlSpecialCharacters(RemoveCharacters(Alltrim(Nvl(NVL(descriere, 'DIVERSE'), '')), .T.))
|
|
lnPret = pret
|
|
lnSuma = valoare
|
|
lcCodValuta = Nvl(cod_valuta, 'RON')
|
|
lnCurs = Iif(Empty(Nvl(Curs, 0)), 1, Curs)
|
|
lnSumaValuta = valoarev && IIF(m.lcCodValuta <> 'RON', ROUND(m.lnSuma / m.lnCurs, 2), 0)
|
|
lnTaxa = taxa && ROUND(m.lnSuma * proc_tva / 100, 2)
|
|
lnTaxaValuta = taxav && IIF(m.lcCodValuta <> 'RON', ROUND(m.lnTaxa / m.lnCurs, 2), 0)
|
|
|
|
lcAmountStructure = This.wAmountStructure(m.lnSuma, m.lcCodValuta, m.lnSumaValuta, m.lnCurs)
|
|
lcTaxAmountStructure = This.wAmountStructure(m.lnTaxa, m.lcCodValuta, m.lnTaxaValuta, m.lnCurs)
|
|
lcTipDC = IIF(m.llClient, 'D', 'C')
|
|
|
|
* Facturile achizitie import au Taxcode 0 (000000)
|
|
lcTaxType = IIF(EMPTY(NVL(taxtype,0)), '000', ALLTRIM(STR(taxtype)))
|
|
lcTaxCode = IIF(EMPTY(NVL(taxcode,0)), '000000', ALLTRIM(STR(taxcode)))
|
|
|
|
* Facturi de import
|
|
* Pentru importul efectuat, in aceasta subsectiune se va raporta factura de import, iar la TaxType se va completa 000 (3 de zero), TaxCode 0000000(6 de zero).
|
|
lcTaxType = IIF(EMPTY(NVL(taxtype,0)), '000', ALLTRIM(STR(taxtype)))
|
|
IF INLIST(NVL(taxcode,0), 301201, 301202, 301203)
|
|
lcTaxType = '000'
|
|
lcTaxCode = '000000'
|
|
ENDIF
|
|
* Am creat taxcode suplimentar pentru taxtype care nu aveau corespondent in taxtable: ex: 390000,410000 Pun taxcode = 000000
|
|
* Facturile de achizitie import trebuie trecute cu TaxCode 000000. Am introdus cod taxa 300000
|
|
IF m.lcTaxCode == '0' OR RIGHT(lcTaxCode,3) = '000' && ex: 410000
|
|
lcTaxCode = '000000'
|
|
ENDIF
|
|
|
|
\ <nsSAFT:InvoiceLine>
|
|
\ <<This.wxml("LineNumber", m.lnLineNumber)>>
|
|
\ <<This.wxml("AccountID", m.lcCont)>>
|
|
\ <<This.wxml("Quantity", This.FormatQuantity(m.lnCantitate))>>
|
|
\ <<This.wxml("UnitPrice", This.FormatValue(m.lnPret))>>
|
|
\ <<This.wxml("TaxPointDate", m.lcDataFactura)>>
|
|
\ <<This.wxml("Description", m.lcDescriere)>>
|
|
\ <<This.wxml("InvoiceLineAmount", m.lcAmountStructure)>>
|
|
\ <<This.wxml("DebitCreditIndicator", m.lcTipDC)>>
|
|
\ <nsSAFT:TaxInformation>
|
|
\ <<This.wxml("TaxType", m.lcTaxType)>>
|
|
\ <<This.wxml("TaxCode", m.lcTaxCode)>>
|
|
\ <<This.wxml("TaxAmount", m.lcTaxAmountStructure)>>
|
|
\ </nsSAFT:TaxInformation>
|
|
\ </nsSAFT:InvoiceLine>
|
|
ENDSCAN && cSalesInvoicesLines/cPurchaseInvoicesLines
|
|
\ </nsSAFT:Invoice>
|
|
|
|
ENDSCAN && cSalesInvoices/cPurchaseInvoices
|
|
\
|
|
Set Textmerge To
|
|
|
|
SELECT (m.lcCursorLines)
|
|
SET FILTER TO &lcFilterLines
|
|
|
|
Select (m.lcSelect)
|
|
|
|
Return m.lcText
|
|
Endfunc && wSalesInvoices
|
|
|
|
************************************************
|
|
*** Fragment Payments
|
|
************************************************
|
|
Function wPayments
|
|
Local lcSelect, lcText
|
|
Local lcAmountStructure, lcCodValuta, lcCont, lcDescription, lcPaymentMethod, lcPerioadaTVA
|
|
Local lcTaxAmountStructure, lcTaxCode, lcTaxType, lcTipDC, llTVA, lnAn1, lnAn2, lnCurs, lnLuna1
|
|
Local lnLuna2, lnNumberOfEntries, lnSuma, lnSumaValuta, lnTaxa, lnTaxaValuta, lnTotalCredit
|
|
Local lnTotalDebit
|
|
lcText = ''
|
|
lcSelect = Select()
|
|
|
|
If !Used('cPayments')
|
|
Return m.lcText
|
|
Endif
|
|
|
|
lnAn1 = This.oUnitate.an1
|
|
lnLuna1 = This.oUnitate.luna1
|
|
lnAn2 = This.oUnitate.an2
|
|
lnLuna2 = This.oUnitate.luna2
|
|
|
|
Select Count(*) As nr, Sum(Iif(tipdc = 'D', suma, 0.00)) As debit, Sum(Iif(tipdc = 'D', suma, 0.00)) As credit From cPayments Into Cursor cEntriesTotals
|
|
Select cEntriesTotals
|
|
lnTotalDebit = debit
|
|
lnTotalCredit = credit
|
|
lnNumberOfEntries = nr
|
|
Use In (Select('cEntriesTotal'))
|
|
|
|
lcPerioadaTVA = This.oUnitate.perioada_tva
|
|
|
|
IF m.lnNumberOfEntries = 0
|
|
RETURN m.lcText
|
|
ENDIF
|
|
|
|
Set Textmerge On To Memvar m.lcText Noshow
|
|
\
|
|
\ <nsSAFT:NumberOfEntries><<m.lnNumberOfEntries>></nsSAFT:NumberOfEntries>
|
|
\ <nsSAFT:TotalDebit><<This.FormatValue(m.lnTotalDebit)>></nsSAFT:TotalDebit>
|
|
\ <nsSAFT:TotalCredit><<This.FormatValue(m.lnTotalCredit)>></nsSAFT:TotalCredit>
|
|
|
|
Select cPayments
|
|
Scan
|
|
lcTipDC = Alltrim(tipdc) && D = incasare ; C = plata
|
|
lnSuma = suma
|
|
lcSuma = This.FormatValue(suma)
|
|
lcCodValuta = Nvl(cod_valuta, 'RON')
|
|
lnSumaValuta = suma_val
|
|
lnCurs = Iif(Empty(Nvl(Curs, 0)), 1, Curs)
|
|
lnTaxa = IIF(!EMPTY(NVL(taxcode,0)), suma, 0)
|
|
lnTaxaValuta = IIF(!EMPTY(NVL(taxcode,0)), suma_val, 0)
|
|
lcPaymentMethod = ALLTRIM(NVL(methodcode,''))
|
|
llTVA = .F.
|
|
lcDescription = STRTRAN(ALLTRIM(explicatia),CHR(2), '',1,10,1) && scot CHR(2) = STX start of text, probabil copiat dintr-un extras de cont
|
|
lcDescription = ALLTRIM(XmlSpecialCharacters(RemoveCharacters(Alltrim(Nvl(m.lcDescription, '')), .T.)))
|
|
|
|
lcTaxType = Iif(Empty(Nvl(taxtype, 0)), '000', Alltrim(Str(taxtype)))
|
|
lcTaxCode = Iif(Empty(Nvl(taxcode, 0)), '000000', Alltrim(Str(taxcode)))
|
|
|
|
Do Case
|
|
Case m.llTVA And m.lcPerioadaTVA = 'LUNAR'
|
|
lcTaxType = '301'
|
|
Case m.llTVA And m.lcPerioadaTVA = 'TRIMESTRIAL'
|
|
lcTaxType = '302'
|
|
Case m.llTVA And m.lcPerioadaTVA = 'SEMESTRIAL'
|
|
lcTaxType = '303'
|
|
Case m.llTVA And m.lcPerioadaTVA = 'ANUAL'
|
|
lcTaxType = '304'
|
|
ENDCASE
|
|
|
|
* Am creat taxcode suplimentar pentru taxtype care nu aveau corespondent in taxtable: ex: 390000,410000
|
|
* Pun taxcode = 000000
|
|
IF RIGHT(lcTaxCode,3) = '000' && ex: 410000
|
|
lcTaxCode = '000000'
|
|
ENDIF
|
|
* Am creat taxcode suplimentar pentru taxtype care nu aveau corespondent in taxtable: ex: 390000,410000 Pun taxcode = 000000
|
|
* Facturile de achizitie import trebuie trecute cu TaxCode 000000. Am introdus cod taxa 300000
|
|
IF m.lcTaxCode == '0' OR RIGHT(lcTaxCode,3) = '000' && ex: 410000
|
|
lcTaxCode = '000000'
|
|
ENDIF
|
|
|
|
lcCodTara = Alltrim(Nvl(cod_tara, ''))
|
|
lnTipPersoana = Nvl(tip_persoana, 1) && 1 = juridica, 2 = fizica
|
|
lcCodFiscal = Alltrim(Nvl(cod_fiscal, ''))
|
|
lcCustomerId = '0' && unul dintre CustomerId sau SupplierId trebuie sa fie "0"
|
|
lcSupplierId = '0'
|
|
lnIdPart = Nvl(id_part, 0)
|
|
lcCont = Alltrim(Nvl(Cont, ''))
|
|
|
|
*lcPartId = IIF(EMPTY(m.lnIdPart), This.oUnitate.codi, This.GenCustSupCode(m.lnIdPart, m.lcCodTara, m.lnTipPersoana, m.lcCodFiscal))
|
|
lcPartId = IIF(EMPTY(m.lnIdPart), '00' + This.oUnitate.codi, ALLTRIM(saftpartid))
|
|
Do Case
|
|
Case lcTipDC = 'D'
|
|
lcCustomerId = m.lcPartId
|
|
OTHERWISE
|
|
lcSupplierId = m.lcPartId
|
|
ENDCASE
|
|
|
|
lcAmountStructure = This.wAmountStructure(m.lnSuma, m.lcCodValuta, m.lnSumaValuta, m.lnCurs)
|
|
lcTaxAmountStructure = This.wAmountStructure(m.lnTaxa, m.lcCodValuta, m.lnTaxaValuta, m.lnCurs)
|
|
|
|
|
|
\ <nsSAFT:Payment>
|
|
\ <<This.wxml("PaymentRefNo", id_fact)>>
|
|
\ <<This.wxml("Period", luna)>>
|
|
\ <<This.wxml("PeriodYear", an)>>
|
|
\ <<This.wxml("TransactionDate", This.FormatDate(dataact))>>
|
|
\ <<This.wxml("PaymentMethod", m.lcPaymentMethod)>>
|
|
\ <<This.wxml("Description", m.lcDescription)>>
|
|
\ <nsSAFT:PaymentLine>
|
|
\ <<This.wxml("AccountID", m.lcCont)>>
|
|
\ <<This.wxml("CustomerID", m.lcCustomerId, .T.)>>
|
|
\ <<This.wxml("SupplierID", m.lcSupplierId, .T.)>>
|
|
\ <<This.wxml("DebitCreditIndicator", m.lcTipDC)>>
|
|
\ <<This.wxml("PaymentLineAmount", m.lcAmountStructure)>>
|
|
\ <nsSAFT:TaxInformation>
|
|
\ <<This.wxml("TaxType", m.lcTaxType)>>
|
|
\ <<This.wxml("TaxCode", m.lcTaxCode)>>
|
|
\ <<This.wxml("TaxAmount", m.lcTaxAmountStructure)>>
|
|
\ </nsSAFT:TaxInformation>
|
|
\ </nsSAFT:PaymentLine>
|
|
\ <nsSAFT:PaymentDocumentTotals>
|
|
\ <<This.wxml("GrossTotal", m.lcSuma)>>
|
|
\ </nsSAFT:PaymentDocumentTotals>
|
|
\ </nsSAFT:Payment>
|
|
Endscan && cPayments
|
|
\
|
|
Set Textmerge To
|
|
|
|
Select (m.lcSelect)
|
|
|
|
Return m.lcText
|
|
Endfunc && wPayments
|
|
|
|
|
|
Function wOwners
|
|
Local lcSelect, lcText
|
|
Local lcCompanyStructure, lcSaftPartId
|
|
lcText = ''
|
|
lcSelect = Select()
|
|
|
|
If !Used('cOwners')
|
|
Return m.lcText
|
|
Endif
|
|
|
|
Set Textmerge On To Memvar m.lcText Noshow
|
|
\
|
|
Select cOwners
|
|
SCAN
|
|
lcSaftPartId = ALLTRIM(NVL(saftpartid, ''))
|
|
lcCompanyStructure = This.wCompanyStructure(saftpartid, denumire, localitate, cod_tara, strada, numar, indicativ_judet)
|
|
\ <nsSAFT:Owner>
|
|
\ <<This.wXML('CompanyStructure', m.lcCompanyStructure)>>
|
|
\ <<This.wXML('OwnerID', m.lcSaftPartId)>>
|
|
\ <<This.wXML('AccountID', '8038')>>
|
|
\ </nsSAFT:Owner>
|
|
|
|
Endscan
|
|
Set Textmerge To
|
|
|
|
Select (m.lcSelect)
|
|
|
|
Return m.lcText
|
|
Endfunc && wOwners
|
|
|
|
Function wAssets
|
|
Local lcSelect, lcText
|
|
Local lcDescription, lnAn1, lnAn2, lnLuna1, lnLuna2
|
|
lcText = ''
|
|
lcSelect = Select()
|
|
|
|
If !Used('cAssets')
|
|
Return m.lcText
|
|
Endif
|
|
|
|
Set Textmerge On To Memvar m.lcText Noshow
|
|
\
|
|
Select cAssets
|
|
SCAN
|
|
lcDescription = ALLTRIM(XmlSpecialCharacters(RemoveCharacters(Alltrim(Nvl(description, '')), .T.)))
|
|
lcExtraordinaryDepreciationMethod = IIF(!EMPTY(NVL(ExtraordinaryDepreciationMethod,'')), ALLTRIM(ExtraordinaryDepreciationMethod), 'NULL')
|
|
|
|
\ <nsSAFT:Asset>
|
|
\ <<This.wxml("AssetID", ALLTRIM(assetid))>>
|
|
\ <<This.wxml("AccountID", ALLTRIM(accountId))>>
|
|
\ <<This.wxml("Description", m.lcDescription)>>
|
|
\ <<This.wxml("DateOfAcquisition", This.FormatDate(DateOfAcquisition))>>
|
|
\ <<This.wxml("StartUpDate", This.FormatDate(StartUpDate))>>
|
|
\ <nsSAFT:Valuations>
|
|
\ <nsSAFT:Valuation>
|
|
\ <<This.wxml("AssetValuationType", ALLTRIM(AssetValuationType))>>
|
|
\ <<This.wxml("ValuationClass", ALLTRIM(NVL(ValuationClass, '0')))>>
|
|
\ <<This.wxml("AcquisitionAndProductionCostsBegin", This.FormatValue(NVL(AcquisitionAndProductionCostsBegin,0)))>>
|
|
\ <<This.wxml("AcquisitionAndProductionCostsEnd", This.FormatValue(NVL(AcquisitionAndProductionCostsEnd,0)))>>
|
|
\ <<This.wxml("InvestmentSupport", This.FormatValue(NVL(InvestmentSupport,0)))>>
|
|
\ <<This.wxml("AssetLifeYear", this.FormatVal(AssetLifeYear, 18, 4))>>
|
|
\ <<This.wxml("AssetAddition", This.FormatValue(AssetAddition))>>
|
|
\ <<This.wxml("Transfers", This.FormatValue(Transfers))>>
|
|
\ <<This.wxml("AssetDisposal", This.FormatValue(AssetDisposal))>>
|
|
\ <<This.wxml("BookValueBegin", This.FormatValue(BookValueBegin))>>
|
|
\ <<This.wxml("DepreciationMethod", ALLTRIM(DepreciationMethod))>>
|
|
\ <<This.wxml("DepreciationPercentage",This.FormatVal(DepreciationPercentage,18,4))>>
|
|
\ <<This.wxml("DepreciationForPeriod", This.FormatValue(DepreciationForPeriod))>>
|
|
\ <<This.wxml("AppreciationForPeriod", This.FormatValue(AppreciationForPeriod))>>
|
|
\ <nsSAFT:ExtraordinaryDepreciationsForPeriod>
|
|
\ <nsSAFT:ExtraordinaryDepreciationForPeriod>
|
|
\ <<This.wxml("ExtraordinaryDepreciationMethod", m.lcExtraordinaryDepreciationMethod)>>
|
|
\ <<This.wxml("ExtraordinaryDepreciationAmountForPeriod", This.FormatValue(ExtraordinaryDepreciationAmountForPeriod))>>
|
|
\ </nsSAFT:ExtraordinaryDepreciationForPeriod>
|
|
\ </nsSAFT:ExtraordinaryDepreciationsForPeriod>
|
|
\ <<This.wxml("AccumulatedDepreciation", This.FormatValue(AccumulatedDepreciation))>>
|
|
\ <<This.wxml("BookValueEnd", This.FormatValue(BookValueEnd))>>
|
|
\ </nsSAFT:Valuation>
|
|
\ </nsSAFT:Valuations>
|
|
\ </nsSAFT:Asset>
|
|
ENDSCAN && cAssets
|
|
\
|
|
Set Textmerge To
|
|
|
|
Select (m.lcSelect)
|
|
|
|
Return m.lcText
|
|
Endfunc && wAssets
|
|
|
|
FUNCTION wAssetTransactions
|
|
Local lcSelect, lcText
|
|
Local lnNumberOfAssetTransactions
|
|
lcText = ''
|
|
|
|
lcSelect = Select()
|
|
|
|
If !Used('cAssetTransactions')
|
|
Return m.lcText
|
|
ENDIF
|
|
|
|
SET TEXTMERGE ON TO memvar lcText NOSHOW
|
|
\
|
|
Select cAssetTransactions
|
|
lnNumberOfAssetTransactions = RECCOUNT()
|
|
\ <<This.wxml("NumberOfAssetTransactions", m.lnNumberOfAssetTransactions)>>
|
|
SCAN
|
|
\ <nsSAFT:AssetTransaction>
|
|
\ <<This.wxml("AssetTransactionID", ALLTRIM(AssetTransactionID))>>
|
|
\ <<This.wxml("AssetID", ALLTRIM(AssetID))>>
|
|
\ <<This.wxml("AssetTransactionType", ALLTRIM(AssetTransactionType))>>
|
|
\ <<This.wxml("Description", ALLTRIM(Description))>>
|
|
\ <<This.wxml("AssetTransactionDate", This.FormatDate(AssetTransactionDate))>>
|
|
\ <<This.wxml("TransactionID", ALLTRIM(TransactionID))>>
|
|
\ <nsSAFT:AssetTransactionValuations>
|
|
\ <nsSAFT:AssetTransactionValuation>
|
|
\ <<This.wxml("AssetValuationType", ALLTRIM(AssetValuationType))>>
|
|
\ <<This.wxml("AcquisitionAndProductionCostsOnTransaction", This.FormatValue(AcquisitionAndProductionCostsOnTransaction))>>
|
|
\ <<This.wxml("BookValueOnTransaction", This.FormatValue(BookValueOnTransaction))>>
|
|
\ <<This.wxml("AssetTransactionAmount", This.FormatValue(AssetTransactionAmount))>>
|
|
\ </nsSAFT:AssetTransactionValuation>
|
|
\ </nsSAFT:AssetTransactionValuations>
|
|
\ </nsSAFT:AssetTransaction>
|
|
ENDSCAN
|
|
\
|
|
SET TEXTMERGE TO
|
|
Select (m.lcSelect)
|
|
|
|
Return m.lcText
|
|
ENDFUNC && wAssetTransactions
|
|
|
|
Function wMovementTypeTable
|
|
Local lcSelect, lcText
|
|
lcText = ''
|
|
lcSelect = Select()
|
|
|
|
If !Used('cMovementTypeTable')
|
|
Return m.lcText
|
|
Endif
|
|
|
|
Set Textmerge On To Memvar m.lcText Noshow
|
|
\
|
|
Select cMovementTypeTable
|
|
Scan
|
|
\ <nsSAFT:MovementTypeTableEntry>
|
|
\ <nsSAFT:MovementType><<ALLTRIM(movementtype)>></nsSAFT:MovementType>
|
|
\ <nsSAFT:Description><<ALLTRIM(description)>></nsSAFT:Description>
|
|
\ </nsSAFT:MovementTypeTableEntry>
|
|
ENDSCAN
|
|
\
|
|
Set Textmerge To
|
|
|
|
Select (m.lcSelect)
|
|
|
|
Return m.lcText
|
|
|
|
Endfunc && wMovementTypeTable
|
|
|
|
Function wProducts
|
|
Local lcSelect, lcText
|
|
Local lcCodBare, lcCodUMISO, lcDenumire, lcGoodsOrServiceId, lcProductCommodityCode, lnIdArticol
|
|
lcText = ''
|
|
lcSelect = Select()
|
|
|
|
|
|
If !Used('cProducts')
|
|
Return m.lcText
|
|
Endif
|
|
|
|
Set Textmerge On To Memvar m.lcText Noshow
|
|
\
|
|
Select cProducts
|
|
* s.id_articol, a.denumire, a.codnc8, a.cod_um, a.cod_um_iso
|
|
SCAN
|
|
lnIdArticol = id_articol
|
|
lcGoodsOrServicesId = ALLTRIM(goodsorservicesid) && 01 = goods, 02 = services
|
|
lcDenumire = XmlSpecialCharacters(RemoveCharacters(Alltrim(Nvl(denumire, '')), .T.))
|
|
lcProductCommodityCode = IIF(!EMPTY(ALLTRIM(NVL(codnc8,''))), ALLTRIM(codnc8), '00000000')
|
|
lcCodBare = ALLTRIM(NVL(codbare, ''))
|
|
lcCodUMISO = ALLTRIM(NVL(cod_um_iso, 'H87'))
|
|
\ <nsSAFT:Product>
|
|
\ <<This.wXML('ProductCode', m.lnIdArticol)>>
|
|
\ <<This.wXML('GoodsServicesID', m.lcGoodsOrServicesId)>>
|
|
\ <<This.wXML('Description', m.lcDenumire)>>
|
|
\ <<This.wXML('ProductCommodityCode', m.lcProductCommodityCode)>>
|
|
\ <<This.wXML('ProductNumberCode', m.lcCodBare)>>
|
|
\ <<This.wXML('UOMBase', m.lcCodUMISO)>>
|
|
\ <<This.wXML('UOMStandard', m.lcCodUMISO)>>
|
|
\ <<This.wXML('UOMToUOMBaseConversionFactor', '1.0')>>
|
|
\ </nsSAFT:Product>
|
|
ENDSCAN
|
|
\
|
|
Set Textmerge To
|
|
|
|
Select (m.lcSelect)
|
|
|
|
Return m.lcText
|
|
|
|
Endfunc && wProducts
|
|
|
|
Function wPhysicalStock
|
|
Local lcSelect, lcText
|
|
Local lcCodUMISO, lcCont, lcCont2, lcOwnerId, lcProductType, lcStockAccountCommodityCode
|
|
Local lnIdArticol, lnIdGestiune, lnPret, lnStocF, lnStocI, lnValF, lnValI, lcSaftPartIdUnitate
|
|
lcText = ''
|
|
lcSelect = Select()
|
|
|
|
|
|
If !Used('cPhysicalStock')
|
|
Return m.lcText
|
|
Endif
|
|
|
|
* select s.id_gestiune,s.id_articol,s.pret,s.cont,s.id_part_rez,s.canti,s.vali,s.cantf,s.valf,a.codnc8,a.um,a.cod_um_iso
|
|
|
|
lcSaftPartIdUnitate = '00' + This.oUnitate.codi
|
|
|
|
Set Textmerge On To Memvar m.lcText Noshow
|
|
Select cPhysicalStock
|
|
SCAN
|
|
lnIdGestiune = id_gestiune
|
|
lnIdArticol = id_articol
|
|
lcCont = ALLTRIM(NVL(cont,''))
|
|
lcCont2 = SUBSTR(cont,1,2)
|
|
*!* lcProductType = IIF(m.lcCont2 = '30','MATERII PRIME', ;
|
|
*!* IIF(m.lcCont2 = '32','IN CURS DE APROVIZIONARE', ;
|
|
*!* IIF(m.lcCont2 = '33','IN CURS DE EXECUTIE', ;
|
|
*!* IIF(m.lcCont2 = '34','PRODUSE', ;
|
|
*!* IIF(m.lcCont2 = '35','LA TERTI', ;
|
|
*!* IIF(m.lcCont2 = '36','ACTIVE BIOLOGICE', ;
|
|
*!* IIF(m.lcCont2 = '37','MARFURI', ;
|
|
*!* IIF(m.lcCont2 = '38','AMBALAJE', ;
|
|
*!* IIF(m.lcCont2 = '39','AJUSTARI', 'MATERII PRIME')))))))))
|
|
lcProductType = m.lcCont
|
|
|
|
lcStockAccountCommodityCode = IIF(!EMPTY(ALLTRIM(NVL(codnc8,''))), ALLTRIM(codnc8), '00000000')
|
|
lcOwnerId = IIF(!EMPTY(ALLTRIM(NVL(saftpartid, ''))), ALLTRIM(saftpartid), m.lcSaftPartIdUnitate)
|
|
|
|
lcCodUMISO = ALLTRIM(NVL(cod_um_iso,'H87'))
|
|
lnPret = pret
|
|
lnStocI = canti
|
|
lnValI = vali
|
|
lnStocF = cantf
|
|
lnValF = valf
|
|
\
|
|
\ <nsSAFT:PhysicalStockEntry>
|
|
\ <<This.wxml("WarehouseID", m.lnIdGestiune)>>
|
|
\ <<This.wxml("ProductCode", m.lnIdArticol)>>
|
|
\ <<This.wxml("ProductType", m.lcProductType)>>
|
|
\ <<This.wxml("StockAccountCommodityCode", m.lcStockAccountCommodityCode, .T.)>>
|
|
\ <<This.wxml("OwnerID", m.lcOwnerId, .T.)>>
|
|
\ <<This.wxml("UOMPhysicalStock", m.lcCodUMISO)>>
|
|
\ <<This.wxml("UOMToUOMBaseConversionFactor", "1.0")>>
|
|
\ <<This.wxml("UnitPrice", This.FormatValue(m.lnPret))>>
|
|
\ <<This.wxml("OpeningStockQuantity", This.FormatQuantity(m.lnStocI))>>
|
|
\ <<This.wxml("OpeningStockValue", This.FormatValue(m.lnValI))>>
|
|
\ <<This.wxml("ClosingStockQuantity", This.FormatQuantity(m.lnStocF))>>
|
|
\ <<This.wxml("ClosingStockValue", This.FormatValue(m.lnValF))>>
|
|
\ <nsSAFT:StockCharacteristics>
|
|
\ <<This.wxml("StockCharacteristic", "NULL")>>
|
|
\ <<This.wxml("StockCharacteristicValue", 0)>>
|
|
\ </nsSAFT:StockCharacteristics>
|
|
\ </nsSAFT:PhysicalStockEntry>
|
|
ENDSCAN
|
|
\
|
|
Set Textmerge To
|
|
|
|
Select (m.lcSelect)
|
|
|
|
Return m.lcText
|
|
|
|
Endfunc && wPhysicalStock
|
|
|
|
Function wMovementOfGoods
|
|
Local lcSelect, lcText
|
|
Local lcCodValuta, lcCont, lcCustomerId, lcSaftPartIdUnitate, lcSupplierId, lcTaxCode
|
|
Local lcTaxInformationStructure, lcTaxType, lcUnitOfMeasure, lnCantitate, lnCurs, lnLineNumber
|
|
Local lnMovementType, lnNumberOfMovementLines, lnProductCode, lnTaxa, lnTaxaValuta
|
|
Local lnTotalQuantityIssued, lnTotalQuantityReceived, lnValoare
|
|
Local ldDataAct, lnIdFact
|
|
lcText = ''
|
|
lcSelect = Select()
|
|
|
|
If !Used('cMovementOfGoods')
|
|
Return m.lcText
|
|
ENDIF
|
|
IF RECCOUNT('cMovementOfGoods') = 0
|
|
Return m.lcText
|
|
ENDIF
|
|
|
|
lcSaftPartIdUnitate = '00' + This.oUnitate.codi
|
|
|
|
Select Count(*) As nr, Sum(cant) As cant, Sum(cante) As cante From cMovementofGoods Into Cursor cEntriesTotals
|
|
Select cEntriesTotals
|
|
lnNumberOfMovementLines = nr
|
|
lnTotalQuantityReceived = cant
|
|
lnTotalQuantityIssued = cante
|
|
Use In (Select('cEntriesTotal'))
|
|
|
|
Set Textmerge On To Memvar m.lcText Noshow
|
|
\<<''>>
|
|
IF m.lnNumberOfMovementLines > 0
|
|
\ <nsSAFT:NumberOfMovementLines><<m.lnNumberOfMovementLines>></nsSAFT:NumberOfMovementLines>
|
|
\ <nsSAFT:TotalQuantityReceived><<This.FormatQuantity(m.lnTotalQuantityReceived)>></nsSAFT:TotalQuantityReceived>
|
|
\ <nsSAFT:TotalQuantityIssued><<This.FormatQuantity(m.lnTotalQuantityIssued)>></nsSAFT:TotalQuantityIssued>
|
|
ENDIF
|
|
|
|
|
|
SELECT distinct id_fact, dataact, nract, fdoc, MAX(movementtype) as movementtype ;
|
|
FROM cMovementofGoods ;
|
|
GROUP BY id_fact, dataact, nract, fdoc ;
|
|
ORDER BY dataact, nract ;
|
|
INTO CURSOR cDocumenteTemp
|
|
|
|
Select cDocumenteTemp
|
|
SCAN
|
|
lnIdFact = id_fact
|
|
ldMovementDate = dataact
|
|
lcMovementType = ALLTRIM(NVL(movementtype, ''))
|
|
lcDocumentType = ALLTRIM(NVL(fdoc, 'ALTE'))
|
|
lnDocumentNumber = nract
|
|
|
|
\ <nsSAFT:StockMovement>
|
|
\ <<This.wXml('MovementReference', id_fact)>>
|
|
\ <<This.wXml('MovementDate', This.FormatDate(m.ldMovementDate))>>
|
|
\ <<This.wXml('MovementType', m.lcMovementType)>>
|
|
\ <nsSAFT:DocumentReference>
|
|
\ <<This.wXml('DocumentType', m.lcDocumentType)>>
|
|
\ <<This.wXml('DocumentNumber', m.lnDocumentNumber)>>
|
|
\ </nsSAFT:DocumentReference>
|
|
lnLineNumber = 0
|
|
SELECT cMovementOfGoods
|
|
SCAN FOR id_fact = m.lnIdFact AND dataact = m.ldMovementDate AND nract = m.lnDocumentNumber
|
|
lnLineNumber = m.lnLineNumber + 1
|
|
lcCont = ALLTRIM(NVL(cont, ''))
|
|
|
|
lcCustomerId = '0'
|
|
lcSupplierId = '0'
|
|
DO CASE
|
|
CASE !EMPTY(ALLTRIM(NVL(saftPartIdC,'')))
|
|
lcCustomerId = ALLTRIM(saftPartIdC)
|
|
CASE !EMPTY(ALLTRIM(NVL(saftPartIdS,'')))
|
|
lcSupplierId = ALLTRIM(saftPartIdS)
|
|
OTHERWISE
|
|
lcCustomerId = m.lcSaftPartIdUnitate
|
|
lcSupplierId = m.lcSaftPartIdUnitate
|
|
ENDCASE
|
|
lnProductCode = id_articol
|
|
lnCantitate = IIF(cant <> 0, cant, cante)
|
|
lcUnitOfMeasure = ALLTRIM(NVL(cod_um_iso, 'H87'))
|
|
lnValoare = valoare
|
|
lcMovementType = ALLTRIM(NVL(movementType,''))
|
|
lnTaxa = taxa
|
|
lcCodValuta = 'RON'
|
|
lnTaxaValuta = 0
|
|
lnCurs = 1
|
|
lcTaxType = ALLTRIM(STR(taxtype))
|
|
lcTaxCode = ALLTRIM(STR(taxcode))
|
|
lcTaxInformationStructure = This.wTaxInformationStructure(m.lnTaxa, m.lcCodValuta, m.lnTaxaValuta, m.lnCurs, m.lcTaxType, m.lcTaxCode)
|
|
|
|
\ <nsSAFT:StockMovementLine>
|
|
\ <<This.wXml('LineNumber', m.lnLineNumber)>>
|
|
\ <<This.wXml('AccountID', m.lcCont)>>
|
|
\ <<This.wXml('TransactionID', cod)>>
|
|
\ <<This.wXml('CustomerID', m.lcCustomerId)>>
|
|
\ <<This.wXml('SupplierID', m.lcSupplierId)>>
|
|
\ <<This.wXml('ProductCode', lnProductCode)>>
|
|
\ <<This.wXml('Quantity', This.FormatQuantity(m.lnCantitate))>>
|
|
\ <<This.wXml('UnitOfMeasure', m.lcUnitOfMeasure)>>
|
|
\ <<This.wXml('UOMToUOMPhysicalStockConversionFactor', 1.0)>>
|
|
\ <<This.wXml('BookValue', This.FormatValue(m.lnValoare))>>
|
|
\ <<This.wXml('MovementSubType', m.lcMovementType)>>
|
|
IF !EMPTY(m.lcTaxCode)
|
|
\ <<m.lcTaxInformationStructure>>
|
|
ENDIF
|
|
\ </nsSAFT:StockMovementLine>
|
|
ENDSCAN && cMovementOfGoods
|
|
\ </nsSAFT:StockMovement>
|
|
ENDSCAN && cDocumenteTemp
|
|
USE IN (SELECT('cDocumenteTemp'))
|
|
\
|
|
Set Textmerge To
|
|
|
|
Select (m.lcSelect)
|
|
|
|
Return m.lcText
|
|
|
|
Endfunc && wMovementOfGoods
|
|
|
|
**************************
|
|
* Structura AmountStructure
|
|
**************************
|
|
Function wAmountStructure
|
|
Lparameters tnSuma, tcCodValuta, tnSumaValuta, tnCurs
|
|
|
|
Local lcText
|
|
lcText = Chr(13) + Chr(10) + ;
|
|
Space(24) + [<nsSAFT:Amount>] + This.FormatValue(m.tnSuma) + [</nsSAFT:Amount>] + Chr(13) + Chr(10) + ;
|
|
Space(24) + [<nsSAFT:CurrencyCode>] + Alltrim(NVL(m.tcCodValuta,'')) + [</nsSAFT:CurrencyCode>] + Chr(13) + Chr(10) + ;
|
|
Space(24) + [<nsSAFT:CurrencyAmount>] + This.FormatValue(m.tnSumaValuta) + [</nsSAFT:CurrencyAmount>] + Chr(13) + Chr(10) + ;
|
|
Space(24) + [<nsSAFT:ExchangeRate>] + This.FormatCurs(m.tnCurs) + [</nsSAFT:ExchangeRate>] + Chr(13) + Chr(10)
|
|
|
|
Return m.lcText
|
|
Endfunc && wAmountStructure
|
|
|
|
**************************
|
|
* Structura AddressStructure
|
|
**************************
|
|
FUNCTION wAddressStructure
|
|
LPARAMETERS tcLocalitate, tcCodTara, tcStrada, tcNumar, tcIndicativJudet
|
|
Local lcText, lcLocalitate, lcCodTara, lcStrada, lcNumar, lcRegiune
|
|
|
|
lcLocalitate = XmlSpecialCharacters(RemoveCharacters(Alltrim(Nvl(Nvl(m.tcLocalitate, 'BUCURESTI'), '')), .T.))
|
|
lcCodTara = Alltrim(Upper(Nvl(m.tcCodTara, 'RO')))
|
|
lcStrada = LEFT(IIF(!EMPTY(m.tcStrada) and !ISNULL(m.tcStrada), XmlSpecialCharacters(RemoveCharacters(Alltrim(Nvl(m.tcStrada, '')), .T.)), ''), 70)
|
|
lcNumar = IIF(!EMPTY(m.tcNumar) and !ISNULL(m.tcNumar), ALLTRIM(TRANSFORM(m.tcNumar)), '')
|
|
IF EMPTY(m.lcLocalitate)
|
|
lcLocalitate = 'BUCURESTI'
|
|
ENDIF
|
|
IF EMPTY(m.lcCodTara)
|
|
lcCodTara = 'RO'
|
|
ENDIF
|
|
lcRegiune = Iif(m.lcCodTara = 'RO' and !EMPTY(NVL(m.tcIndicativJudet, '')), m.lcCodTara + '-' + Alltrim(UPPER(m.tcIndicativJudet)), '')
|
|
lcText = Chr(13) + Chr(10) + ;
|
|
IIF(!EMPTY(m.lcStrada), Space(50) + [<nsSAFT:StreetName>] + m.lcStrada + [</nsSAFT:StreetName>] + Chr(13) + Chr(10), '') + ;
|
|
IIF(!EMPTY(m.lcNumar), Space(50) + [<nsSAFT:Number>] + m.lcNumar + [</nsSAFT:Number>] + Chr(13) + Chr(10), '') + ;
|
|
Space(50) + [<nsSAFT:City>] + Alltrim(NVL(m.lcLocalitate,'')) + [</nsSAFT:City>] + Chr(13) + Chr(10) + ;
|
|
IIF(!EMPTY(m.lcRegiune), Space(50) + [<nsSAFT:Region>] + m.lcRegiune + [</nsSAFT:Region>] + Chr(13) + Chr(10), '') + ;
|
|
Space(50) + [<nsSAFT:Country>] + Alltrim(NVL(m.lcCodTara,'')) + [</nsSAFT:Country>] + Chr(13) + Chr(10)
|
|
Return m.lcText
|
|
ENDFUNC && wAddressStructure
|
|
|
|
**************************
|
|
* Structura CompanyStructure
|
|
**************************
|
|
FUNCTION wCompanyStructure
|
|
LPARAMETERS tcSaftPartId, tcDenumire, tcLocalitate, tcCodTara, tcStrada, tcNumar, tcIndicativJudet
|
|
|
|
Local lcAddressStructure, lcDenumire, lcRegistrationNumber, lcText
|
|
|
|
lcRegistrationNumber = Iif(!Empty(NVL(m.tcSaftPartId, '')), ALLTRIM(m.tcSaftPartId), 'NULL')
|
|
lcDenumire = ALLTRIM(NVL(m.tcDenumire, ''))
|
|
lcAddressStructure = This.wAddressStructure(m.tcLocalitate, m.tcCodTara, m.tcStrada, m.tcNumar, m.tcIndicativJudet)
|
|
|
|
lcText = Chr(13) + Chr(10) + ;
|
|
' ' + This.wxml("RegistrationNumber", m.lcRegistrationNumber) + CHR(13) + CHR(10) + ;
|
|
' ' + This.wxml("Name", m.lcDenumire) + CHR(13) + CHR(10) + ;
|
|
' ' + This.wxml("Address", m.lcAddressStructure) + CHR(13) + CHR(10)
|
|
RETURN m.lcText
|
|
ENDFUNC
|
|
|
|
**************************
|
|
* Structura TaxInformationStructure
|
|
**************************
|
|
FUNCTION wTaxInformationStructure
|
|
LPARAMETERS tnTaxa, tcCodValuta, tnTaxaValuta, tnCurs, tcTaxType, tcTaxCode
|
|
LOCAL lcTaxAmountStructure, lcTaxType, lcTaxCode
|
|
|
|
lcTaxAmountStructure = This.wAmountStructure(m.tnTaxa, m.tcCodValuta, m.tnTaxaValuta, m.tnCurs)
|
|
lcTaxType = IIF(!EMPTY(ALLTRIM(NVL(m.tcTaxType, ''))), ALLTRIM(m.tcTaxType), '000')
|
|
lcTaxCode = IIF(!EMPTY(ALLTRIM(NVL(m.tcTaxCode, ''))), ALLTRIM(m.tcTaxCode), '000000')
|
|
lcText = Chr(13) + Chr(10) + ;
|
|
' <nsSAFT:TaxInformation>' + CHR(13) + CHR(10) + ;
|
|
' ' + This.wxml("TaxType", m.lcTaxType) + CHR(13) + CHR(10) + ;
|
|
' ' + This.wxml("TaxCode", m.lcTaxCode) + CHR(13) + CHR(10) + ;
|
|
' ' + This.wxml("TaxAmount", m.lcTaxAmountStructure) + CHR(13) + CHR(10) + ;
|
|
' </nsSAFT:TaxInformation>'
|
|
RETURN m.lcText
|
|
ENDFUNC && wTaxInformationStructure
|
|
|
|
|
|
**************************
|
|
* Intoarce id din AnalysisTypeTable pe baza id_sectie, id_sucursala
|
|
**************************
|
|
Function GetAnalysisId
|
|
Lparameters tnIdSucursala, tnIdSectie
|
|
lcCod = ''
|
|
If !Empty(Nvl(tnIdSectie, 0))
|
|
lcCod = 'S' + Alltrim(Str(Nvl(tnIdSucursala, 0))) + '-C' + Alltrim(Str(tnIdSectie))
|
|
Endif
|
|
Return m.lcCod
|
|
Endfunc && GetAnalysisId
|
|
|
|
* Intorce o structura cu adresa partenerului dupa ID_PART
|
|
FUNCTION GetStructuraAdresaPartener
|
|
LPARAMETERS tcCursor, tnIdPart
|
|
* tcCursor: cCUSTOMERS/cSUPPLIERS/cOwners
|
|
|
|
lcSelect = SELECT()
|
|
lcAdressStructure = ''
|
|
|
|
SELECT (m.tcCursor)
|
|
IF SEEK(m.tnIdPart, m.tcCursor, 'id_part')
|
|
lcLocalitate = localitate
|
|
lcCodTara = cod_tara
|
|
lcStrada = strada
|
|
lcNumar = numar
|
|
lcIndicativJudet = indicativ_judet
|
|
lcAdressStructure = This.wAddressStructure(m.lcLocalitate, m.lcCodTara, m.lcStrada, m.lcNumar, m.lcIndicativJudet)
|
|
ENDIF
|
|
|
|
SELECT (m.lcSelect)
|
|
RETURN m.lcAdressStructure
|
|
ENDFUNC
|
|
|
|
**********************************************************
|
|
* Intoarce codul client/furnizor/owner dupa Id Part din cCustomers/cSuppliers/cOwners
|
|
**********************************************************
|
|
FUNCTION GetCustomerCode
|
|
LPARAMETERS tnIdPart
|
|
RETURN This.GetCustSupCode('cCustomers', m.tnIdPart)
|
|
ENDFUNC
|
|
|
|
FUNCTION GetSupplierCode
|
|
LPARAMETERS tnIdPart
|
|
RETURN This.GetCustSupCode('cSuppliers', m.tnIdPart)
|
|
ENDFUNC
|
|
|
|
FUNCTION GetOwnerCode
|
|
LPARAMETERS tnIdPart
|
|
RETURN This.GetCustSupCode('cOwners', m.tnIdPart)
|
|
ENDFUNC
|
|
|
|
FUNCTION GetCustSupCode
|
|
LPARAMETERS tcCursor, tnIdPart
|
|
* tcCursor: cCustomers/cSuppliers/cOwners
|
|
|
|
Local lcCursor, lcSelect, lcSaftPartId
|
|
lcSelect = Select()
|
|
lcCursor = m.tcCursor
|
|
lcSaftPartId = ''
|
|
IF SEEK(m.tnIdPart, m.lcCursor, 'id_part')
|
|
lcSaftPartId = ALLTRIM(&lcCursor..SaftPartId)
|
|
ENDIF
|
|
|
|
SELECT (m.lcSelect)
|
|
RETURN m.lcSaftPartId
|
|
ENDFUNC && GetcustSupCode
|
|
|
|
**********************************************************
|
|
* Genereaza codul client/furnizor
|
|
**********************************************************
|
|
Function GenCustSupCode
|
|
Lparameters tnIdPart, tcCodTara, tnTipPersoana, tcCodFiscal
|
|
* tcCodTara = nom_tari.prescurtare
|
|
* tnTipPersoana: 1 = PJ, 2 = FIZICA
|
|
* tcCodFiscal: cu sau fara cod tara
|
|
|
|
Local lcCodTara, llPJ, lcCodFiscal, lcAtributFiscal, lcCodFiscalFRO, llEU, lcCustSupCode, llRO
|
|
llPJ = (Nvl(m.tnTipPersoana, 1) = 1)
|
|
lcCodFiscal = Alltrim(Transform(m.tcCodFiscal))
|
|
lcCodTara = Alltrim(Nvl(m.tcCodTara, 'RO'))
|
|
lcCodTara = Iif(!Empty(NVL(m.lcCodTara,'')), ALLTRIM(m.lcCodTara), 'RO')
|
|
lcIdPart = Alltrim(Transform(m.tnIdPart))
|
|
|
|
lcAtributFiscal = Substr(Trim(Upper(m.lcCodFiscal)), 1, 2)
|
|
IF !ISALPHA(m.lcAtributFiscal)
|
|
lcAtributFiscal = ''
|
|
ENDIF
|
|
lcCodFiscalFRO = Strtran(m.lcCodFiscal, m.lcCodTara, '', 1, 1, 1)
|
|
lcCodFiscalFRO = Strtran(m.lcCodFiscalFRO, m.lcAtributFiscal, '', 1, 1, 1) && in caz ca atributul fiscal <> codul de tara (GR <> EL)
|
|
lcCodFiscalFRO = Strtran(Strtran(Strtran(m.lcCodFiscalFRO, ' ', ''), 'RO', ''), 'R', '')
|
|
lcCodFiscalFRO = ALLTRIM(m.lcCodFiscalFRO)
|
|
|
|
llEU = Inlist(m.lcCodTara, 'AT', 'BE', 'BG', 'CY', 'CZ', 'DE', 'DK', 'EE', 'EL', 'ES', 'FI', 'FR', 'HR', 'GR') Or Inlist(m.lcCodTara, 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'MT', 'NL', 'PL', 'PT', 'SE', 'SI', 'SK')
|
|
llRO = (m.lcCodTara = 'RO')
|
|
|
|
lcCustSupCode = '08' + '0000000000000'
|
|
Do Case
|
|
Case m.llPJ And m.lcCodTara = 'RO' And !Empty(m.lcCodFiscalFRO)
|
|
lcCustSupCode = '00' + m.lcCodFiscalFRO
|
|
|
|
Case m.llPJ And !Empty(m.lcAtributFiscal) And m.llEU
|
|
lcCustSupCode = '01' + m.lcCodTara + m.lcCodFiscalFRO
|
|
|
|
Case m.llPJ And !Empty(m.lcAtributFiscal) And !m.llEU AND !m.llRO
|
|
lcCustSupCode = '02' + m.lcCodTara + m.lcCodFiscalFRO
|
|
|
|
Case m.llPJ And Empty(m.lcAtributFiscal) And m.llEU AND !m.llRO
|
|
lcCustSupCode = '05' + m.lcCodTara + m.lcIdPart
|
|
|
|
Case m.llPJ And Empty(m.lcAtributFiscal) And !m.llEU AND !m.llRO
|
|
lcCustSupCode = '06' + m.lcCodTara + m.lcIdPart
|
|
|
|
CASE m.llPJ AND EMPTY(m.lcCodFiscal)
|
|
lcCustSupCode = '' && Nu ar trebui sa se intample. O sa dea eroare la verificare
|
|
|
|
Case !m.llPJ
|
|
If !Empty(m.lcCodFiscal)
|
|
If m.lcCodTara = 'RO'
|
|
lcCustSupCode = '03' + m.lcCodFiscal
|
|
Endif
|
|
Else
|
|
lcCustSupCode = '04' + STRTRAN(m.lcIdPart,'-', '0',1,1,1) && inlocuiesc -1000 din id_part cu 01000
|
|
Endif
|
|
Endcase
|
|
|
|
Return m.lcCustSupCode
|
|
|
|
Endfunc && GenCustSupCode
|
|
|
|
*******************************************
|
|
* Formateaza data conform ISO8601
|
|
* aaaa-ll-zz
|
|
*******************************************
|
|
Function FormatDate
|
|
Lparameters tdData
|
|
|
|
Local lcData
|
|
lcData = ''
|
|
If !Empty(Nvl(m.tdData, {}))
|
|
lcData = Dtos(m.tdData)
|
|
lcData = Left(m.lcData, 4) + '-' + Substr(m.lcData, 5, 2) + '-' + Right(m.lcData, 2)
|
|
Endif
|
|
Return m.lcData
|
|
Endfunc && FormatDate
|
|
|
|
*******************************************
|
|
* Formateaza valoare cu 2 zecimale
|
|
* 1234.65
|
|
*******************************************
|
|
FUNCTION FormatValue
|
|
LPARAMETERS tnValoare
|
|
|
|
RETURN This.FormatVal(m.tnValoare, 20,2)
|
|
ENDFUNC && FormatValue
|
|
|
|
*******************************************
|
|
* Formateaza curs cu 4 zecimale
|
|
* 4.9492
|
|
*******************************************
|
|
FUNCTION FormatCurs
|
|
LPARAMETERS tnCurs
|
|
|
|
RETURN This.FormatVal(m.tnCurs, 14,4)
|
|
ENDFUNC && FormatCurs
|
|
|
|
*******************************************
|
|
* Formateaza cantitate cu 6 zecimale
|
|
*******************************************
|
|
FUNCTION FormatQuantity
|
|
LPARAMETERS tnCantitate
|
|
|
|
RETURN This.FormatVal(tnCantitate, 22,6)
|
|
ENDFUNC &&
|
|
|
|
*******************************************
|
|
* Formateaza valoare cu zecimale
|
|
*******************************************
|
|
FUNCTION FormatVal
|
|
LPARAMETERS tnValue, tnDigits, tnDecimals
|
|
|
|
RETURN Alltrim(STR(NVL(m.tnValue,0), tnDigits, tnDecimals))
|
|
ENDFUNC && FormatVal
|
|
|
|
|
|
|
|
Enddefine
|
|
|