Net-Base Žurnāls

23.06.2026

Vecu VCL lietojumprogrammu pakāpeniska modernizācija: praktisks ceļvedis ekspluatācijai, arhitektūrai un riskiem

Daudzas VCL darbvirsmas lietotnes darbojas stabili, taču palēninās pie Windows atjauninājumiem, datubāzu maiņām, drošības prasībām un jaunām saskarnēm. Šis ceļvedis parāda, kā uzņēmumi var kontrolēti modernizēt VCL sistēmas: ar skaidru mērķa arhitektūru, izmērāmiem etapiem, sakārtotu...

23.06.2026

No žurnāla tēmas līdz projektu praksei

Atbilstošas pakalpojumu un tehniskās lapas rakstam

Daudzos uzņēmumos svarīgākā biznesa programmatūra nav jaunākā, bet tā, kas katru dienu uzticami darbojas: izaugušas Delphi/VCL darbvirsmas lietotnes. Tās vada procesus, attēlo īpašu loģiku, sazinās ar datubāzēm, failu sistēmām, printeriem, skeneriem vai ERP- un DMS-saskarnēm. Tieši tāpēc nomaiņa ir riskanta — un tieši tāpēc ir vērts pakāpeniski modernizēt vecās VCL lietotnes, nevis visu pārveidot vienā lielā projektā.

Pakāpeniska modernizācija nozīmē: saglabāt funkcionālo stabilitāti, mērķtiecīgi samazināt tehniskos parādus, ieviest drošības un ekspluatācijas prasības un palikt jebkurā brīdī piegādājamiem un uzturamiem. IT vadībai, administrācijai un tehniskajiem projektu atbildīgajiem svarīgāka nav „skaistākā” tehnoloģija, bet plāns, kas reālistiski ņem vērā datus, saskarnes, izvietošanu, piekļuves tiesības un uzturēšanu.

Raksts ved cauri praksē pārbaudītam modernizācijas ceļam: no inventarizācijas un mērķa arhitektūras, caur datu piekļuvi (piem., BDE-Ablösung), 32-/64-Bit un Unicode līdz REST-APIs, portālu savienojumiem un ekspluatācijas koncepcijām. Uzsvars ir uz lēmumiem, kas ikdienā atstāj ietekmi: atjaunināmība, pieejamība, drošība, Observability (žurnāli/metriku dati) un kontrolēta migrācija.

Kāpēc modernizēt VCL sistēmas, ja tās „tomēr darbojas”?

Tas, ka VCL lietotne darbojas, nenozīmē, ka to ir labi uzturēt. Bieži modernizācijas iemesli neparādās GUI dizainā, bet ekspluatācijā: operētājsistēmas maiņa, jaunas drošības politikas, datubāzu atjauninājumi, tīkla segmentācija vai jaunas prasības autentifikācijai un protokolēšanai. Daudzi riski izpaužas tikai tad, kad jāveic atjauninājums — un bieži steidzamības apstākļos.

Tipiski virzītāji uzņēmumos:

  • Platformas spiediens: 32‑bitu ierobežojumi, Windows-Härtung, jaunākas Windows versijas, virtualizācija vai Windows 11 ARM64 daļējās vides.
  • Datu piekļuve un draiveri: novecojuši DB‑slāņi (piem., BDE), nekoptas ODBC ķēdes, netīras transakcijas, trūkstošas pooling stratēģijas.
  • Saskarnu spēja: vajadzība pēc REST‑API, notikumu integrācijas, pieslēguma portāliem vai trešo pušu sistēmām.
  • Drošība & Compliance: TLS standarti, audita ieraksti, lomu modeļi, secrets‑handling, servisu cietināšana.
  • Ekspluatācijas slogs: manuālas instalācijas, trausli atjauninātāji, trūkstoša telemetrija, grūti reproducējamas kļūdas.

Tātad modernizācija nav kosmētisks projekts, bet lēmums par riskiem un ekspluatācijas izmaksām. Māksla ir aizsargāt fachliche Kernlogik, vienlaikus tehnisko apvalku atjaunojot posmos.

Modernizācija statt Neuentwicklung: Entscheidungsrahmen für IT und Fachbereich

„Neu bauen” bieži skan vienkāršāk, taču praksē tas bieži ir daudzu gadu programma ar lielu apjoma risku. Pakāpeniska modernizācija der labāk, ja lietotne ir fachlich tragfähig, bet tai ir tehniski šaurumi. Izšķiroši ir skaidrs lēmumu ietvars, kas argumentēts nevis ideoloģiski, bet ekspluatācijas vajadzību līmenī.

Praktiski ir pierādījies vērtējums pa četrām asīm:

  • Funkcionālā stabilitāte: Vai procesi un noteikumi lielākoties ir stabilā stāvoklī vai pastāvīgi mainās?
  • Tehniskais stāvoklis: Vai pastāv bloķētāji (BDE, tikai 32 bitu, neatbalsta Unicode, novecojusi kriptogrāfija, komponentes, kuras nav iespējams atjaunināt ar drošības labojumiem)?
  • Integrācijas spiediens: Vai API, portāli, atskaišu risinājumi, DMS/ERP pieslēgumi jāpaplašina īstermiņā?
  • Darbības risks: Cik kritiska ir pieejamība, cik liels ir atteices risks atjauninājumu laikā?

Ja funkcionālā stabilitāte ir augsta un lielākie riski ir tehniski, modernizācija parasti ir pragmatiskākais ceļš. Svarīgi: modernizācija nav „turpināt kā līdz šim”, bet gan kontrolēta programma ar mērķa arhitektūru, mērījumu punktiem un pieņemšanas kritērijiem.

Inventarizācija: kas patiešām jāuzskaita

Pirmā fāze nosaka tempu un kvalitāti. Ne tikai „paskatīties uz avota kodu” — runa ir par ekspluatācijas inventarizāciju. Mērķis ir uzticama karte: kādas komponentes pastāv, kuras atkarības ir kritiskas, un kādas izmaiņas rada blakusefektus?

Tehniskā inventarizācija 10 punktos

  • Delphi-versija un rīku ķēde: kompiler stāvoklis, būvēšanas process, atkarības, trešo pušu komponentes.
  • UI un moduļu struktūra: monolītiskas formas, dinamiskas paketes, spraudņu mehānismi.
  • Datu piekļuve: BDE/ADO/ODBC/BDE-aizstāšana ar natīvu pieslēgumu, transakciju robežas, datubāzes specifiskas SQL iespējas.
  • Datubāzes: versijas, apkopes logi, dublēšana/atjaunošana, replikācija, saglabātās procedūras.
  • Integrācijas: failu importi, SMTP, SOAP/REST, TCP/IP, drukas/etiķešu risinājumi, skeneri, biroja automatizācija.
  • Izvietošana: MSI, XCOPY, atjauninātājs, piekļuves tiesības, ceļi, grupu politikas.
  • Drošība: autentifikācija, lomas, šifrēšana, TLS versijas, slepenie dati, sertifikāti.
  • Ekspluatācija: žurnāli, diagnostika, crash-dumpi, monitorings, atbalsta procesi.
  • Datu kvalitāte: dublikāti, vēsturisko datu atlikumi, kodējums, laika zīmogi, daudznomnieku atbalsts.
  • Testējamība: reproducējami testa gadījumi, testa dati, pieņemšanas procesi, regresijas testi.

Vienlaikus ir vērts veikt īsu interviju komplektu ar ekspluatāciju un galvenajiem lietotājiem: kur ikdienā ir lielākās problēmas? Kuri procesi ir kritiski? Kuri kļūdu scenāriji prasa laiku? No tā var izrietēt modernizācijas secība, kas ir gan tehniski, gan operatīvi pamatota.

Mērķa arhitektūra: Layer-3 kā vadlīnija pakāpeniskai atjaunošanai

Pakāpeniska modernizācija prasa mērķstruktūru, pretējā gadījumā tiek tikai labotas atsevišķas problēmas. Daudzos Delphi/VCL krājumos trūkst skaidras atdalīšanas starp GUI, biznesa loģiku un datu piekļuvi. Layer-3 arhitektūra (prezentācija, domēna/funkcionālā loģika, infrastruktūra/datu piekļuve) ir labi komunicējama vadlīnija, bez nepieciešamības tūlītēji pilnībā pārbūvēt esošo sistēmu.

Svarīga ir IT un ekspluatācijas perspektīva: ja biznesa loģika ir rūpīgi kapsulēta, vēlāk var apkalpot vairākus front-end (Desktop, Portal, Service), pievienot saskarnes un konsolidēt datu piekļuves. Vienlaikus samazinās risks, ka UI izmaiņas nejauši maina datu noteikumus.

Kas ekspluatācijā uzlabojas ar slāņošanas pieeju

  • Izlaišanas spēja: mazākas izmaiņas tiek lokalizētas, regresiju skaits samazinās.
  • Drošība: centrālas vietas piekļuves tiesībām, ievades validācijai un audita žurnālam.
  • Saskarnes: REST-API vai Windows-/Linux-Services var atkārtoti izmantot biznesa loģiku.
  • Migrācija: datubāzu maiņa un draiveru nomaiņa primāri skar infrastruktūras slāni.

Mērķa arhitektūrai nav jābūt „perfektai“. Tai jābūt pietiekami konkrētai, lai vadītu lēmumus: kur jānovieto jauna loģika? Kā tiks kapsulēta datu piekļuve? Kuras API ir stabilas?

Vecās VCL lietojumprogrammas pakāpeniski modernizēt: posmu plāns, kas ikdienā darbojas

Ilgtspējīgs modernizācijas ceļš strādā posmos, katrs sniedz izmērāmu ieguvumu un vienlaikus sagatavo nākamo soli. Tas samazina projektu un ekspluatācijas risku, jo pēc katra posma var izlaist stabilu stāvokli.

Etappe 1: Build, Abhängigkeiten und Releaseprozess stabilisieren

Daudzas mantojuma problēmas nav koda problēmas, bet procesu problēmas: build procesi ir atkarīgi no atsevišķām darba vietām, instalētāji tiek izpildīti manuāli, atkarības nav versionētas. Tāpēc pirmais sviras punkts ir reproducējams build un konsekvents paketēšanas process.

  • Build-Automatisierung und definierte Compiler-/Library-Versionen
  • Versionierung von Drittkomponenten und Konfigurationen
  • Standardisierte Rollout-Schritte (inkl. Rollback-Idee)

Rezultāts: atjauninājumus var plānot precīzāk, atbalsts var viennozīmīgi identificēt stāvokļus, un tehniskie parādi kļūst redzami, nevis slēpti.

Etappe 2: Datenzugriff modernisieren (typisch: BDE-Ablösung)

BDE (Borland Database Engine) daudzās vidēs ir centrāls šķērslis: vecas draiveru ķēdes, trausla uzstādīšana, ierobežots mūsdienu datubāzu un drošības standartu atbalsts. Nomaiņas mērķis nav tikai “cits draiveris”, bet skaidrs datu piekļuves slānis.

Delphi projektos BDE-Ablosung mit nativer Anbindung kā datu piekļuves slānis ir izplatīts, jo tas tīri atbalsta DB‑backendus (piem., PostgreSQL, SQL Server, MariaDB), padara parametrsaisti un transakcijas kontrolējamas un vienkāršo draiveru pārvaldību. IT svarīgi: mazāk speciālu instalāciju klienta pusē, skaidrāka konfigurācija un labākas diagnostikas iespējas savienojumu problēmu gadījumā.

Svarīgi migrācijas aspekti šajā posmā:

  • Transakciju robežas jāizdala skaidri (kur sākas/kur beidzas viena biznesa darbība?).
  • SQL varianti jāidentificē (DB‑specifiskas funkcijas, datumu loģika, bloķēšanas).
  • Savienojumu apstrāde jārstandartizē (laika noilgumi, pooling stratēģija, atkārtošanās tikai mērķtiecīgi).
  • Konfigurācijas higiēna: savienojuma virknes, sertifikāti, slepenie dati nedrīkst būt cietkodēti.

Etappe 3: Unicode- und 64-Bit-Fähigkeit planbar herstellen

Unicode migrācija un pāreja uz 64‑bitu nav „viena atzīme kompilatorā“, bet kvalitātes jautājums. Unicode attiecas uz virkņu datiem, failu nosaukumiem, saskarnēm un datubāzēm (collation/encoding). 64‑bitu pāreja ietekmē rādītāju izmērus, ārējās DLL, drukas/ skenera draiverus un COM atkarības.

Projekta atbildīgajiem ir lietderīgi neatlikt šos jautājumus līdz pēdējam sprintam, bet apstrādāt kā atsevišķu posmu ar skaidriem testgadījumiem. Tipiskas ķibeles ir eksporta formāti (CSV/fixed width), PDF un atskaišu darba plūsmas, kā arī datu apmaiņa ar vecajām sistēmām, kas vēl gaida 8‑bitu kodējumu.

Etappe 4: Schnittstellen nachrüsten – ohne den Desktop zu destabilisieren

Daudzas uzņēmējsistēmas vēlas no VCL lietojumprogrammas nodrošināt datus portāliem, BI vai trešās puses sistēmām. Drošākais ceļš parasti ir API-fasāde: skaidri versēta REST-API (HTTP-bāzēta saskarne), kas kontrolēti eksponē biznesa loģiku. Tā netiek “attālināti vadīts klients”, bet gan tiek nodrošinātas biznesa operācijas kā servisi.

Tas atslogo izmaiņas: desktop risinājums paliek stabils esošajiem lietotājiem, kamēr jaunas integrācijas aug caur API. Svarīgi darbībai un drošībai:

  • Autentifikācija/Autorizācija: piem., tokenu bāzēta, ar izvēles integrāciju SSO (bieži SAML 2.0 uzņēmuma vidēs).
  • Rate Limits und Timeouts: aizsardzība pret nejaušu slodzi no partiju integrācijām.
  • Versionierung: API versionēšana, lai izvairītos no breaking changes piesaistītajām sistēmām.
  • Audit: kas, kad un ko mainīja (biznesa līmenī), ne tikai “pieprasījums saņemts”.

Etappe 5: Portal- oder Service-Komponenten ergänzen (C# oder Delphi – architektonisch sauber)

Daudzos modernizācijas projektos blakus desktop risinājumam rodas klientu portāls vai iekšējs tīmekļa apgabals. Vai šo daļu ievieš kā C# vai Delphi ir mazāk būtiski nekā kopējā arhitektūra: konsekvents datu modelis, skaidras atbildības un stabilas saskarnes. IT kontekstā svarīgi, lai darbība, žurnālfaili, piekļuves tiesības un izvietošanas procesi iederētos esošajā ainavā (piem., Microsoft IIS tīmekļa daļām vai Linux-servisiem fonapstrādei).

Praktiski noder sadalījums pēc uzdevumiem:

  • Desktop (VCL): procesam tuva lietotāja saskarne, bezsaistes/LAN tuvuma funkcijas, ierīču saskarnes.
  • Services: fona darbi, validācijas, importi/eksporti, rindu (queue) apstrāde, laika vai grafika balstīti uzdevumi.
  • Portal: pašapkalpošanās, statusa vaicājumi, dokumentu piekļuve, darba plūsmas pārlūkprogrammā.

Tādējādi veidojas sistēma, kas var augt, neriskējot ar esošo kodolu.

Datenbank-Modernisierung: Von „läuft“ zu „wartbar“

Daudzas VCL lietojumprogrammas ir cieši saistītas ar datubāzu vēsturi: Paradox atlikumi, Firebird, vecākas SQL Server versijas vai jauktas formas. Datubāzes migrācija ir veiksmīga, ja to uztver kā datu un darbības (operāciju) projektu, nevis vienkāršu shēmas kopēšanu.

Was IT vor einer Migration klären sollte

  • Backup/Restore und RPO/RTO: cik ātri jābūt atpakaļ tiešsaistē, cik liels datu zudums ir pieļaujams?
  • Wartungsfenster und Downtime-Strategie: Big-Bang, paralēlais darbs vai inkrementāla pāreja.
  • Zeichensätze und Collations: būtiski Unicode gadījumā un meklēšanas/sortēšanas loģikai.
  • Transaktionsisolation und Locking: svarīgi pie lielas paralelitātes un partiju (batch) uzdevumiem.
  • Reporting: tiešas DB piekļuves no trešo pušu rīkiem (BI, Excel, ETL) jāņem vērā un jāsaskaņo.

Daudzām uzņēmumiem PostgreSQL ir variants, jo tas kā platforma ir labi pārvaldāms un nodrošina skaidrus rīkus dublējumiem, monitorēšanai un piekļuves tiesību vadībai. Izšķiroši tomēr: lietojumprogramma ir jāabstraktē SQL un tipu atšķirības tīri, citādi katrs vaicājums kļūst par īpašu gadījumu. Tieši šeit atmaksājas konsolidēts datu piekļuves slānis (piem., FireDAC).

Drošība un piekļuves tiesības: modernizācija bez jaunas uzbrukuma virsmas

Legacy darbvirsmas lietojumprogrammas bieži tika projektētas laikā, kad “LAN” automātiski nozīmēja “uzticams”. Šodien tas reti ir pieņemami: segmentācija, Zero-Trust pieejas, darbs attālināti un audita prasības palielina spiedienu. Modernizācijai tāpēc jāiet roku rokā ar drošību, nevis jāparalizē darbība.

Konkrēti pasākumi, kurus iespējams ieviest pakāpeniski:

  • Centrāls autentifikācijas mehānisms: skaidra identitātes (login) un lomu (tiesību) atdalīšana.
  • Transporta šifrēšana: TLS aktuāls, paredzēt sertifikātu pārvaldību.
  • Slepeno datu apstrāde: paroles neglabāt INI failos; tā vietā izmantot aizsargātas krātuves vai centrāli pārvaldītus slepenos datus.
  • Audita ieraksti: reģistrēt funkcionālās izmaiņas (kas/kas/kad), ne tikai tehniskos žurnālus.
  • Ievades validācija: īpaši jaunu API gadījumā – stingri un centrāli.

Svarīgi lēmumu pieņēmējiem: drošība nav „piederums“, ko piestiprina beigās. Ja tiek būvētas API, servisi vai portāli, drošības arhitektūrai no sākuma jābūt daļai no mērķarhitektūras.

Darbība un administrēšana: kas ar modernizāciju kļūst jūtami labāks

Lielākais ieguvums pakāpeniskā modernizācijā bieži slēpjas jomās, kas agrāk prasību specifikācijā gandrīz neparādījās: uzraudzība, kļūmju meklēšana, izplatīšana, notfall spējas. Īpaši VCL lietojumprogrammām, kas gadu gaitā organiskā ceļā ir izaudzējušas, neliels pakets darbības uzlabojumu var būtiski samazināt atbalsta slogu – bez nepieciešamības, lai gala lietotājs uzreiz redzētu jaunu lietotāja saskarni.

Kontrolsaraksts “darbam pielāgotām” komponentēm

  • Konfigurācijas standarts: centrāli dokumentēts, vides specifisks (Dev/Test/Prod), izsekojami noklusējuma iestatījumi.
  • Strukturēti žurnāli: notikumi ar korelāciju (piem., darbības ID), sakārtoti log-līmeņi, bez sensitīvu datu skaidrā tekstā.
  • Monitorings: Health-Checks servisiem, datubāzes savienojuma statuss, darba uzdevumu izpildes laiki, rindu garumi.
  • Installer/Updater: iespēja klusai instalācijai, rollback stratēģija, tīras tiesību politikas.
  • Kļūdu diagnostika: reproducējama avārijas informācija, skaidri atbalsta dati (versija, moduļu stāvoklis, konfigurācija).

Adminiem īpaši būtiski: ja fona loģika tiek pārvietota no darbvirsmas uz Windows- vai Linux-servisiem, izpildlaiki, RESTartēšanas uzvedība un resursu patēriņš ir labāk kontrolējami. Tajā pašā laikā samazinās risks, ka “atvērts klients” bloķē batch procesu.

Testēšanas un migrācijas stratēģija: paralēlais darbs, nevis apstāšanās

Pakāpeniska modernizācija ir atkarīga no regresijas testiem. Ar to domāts ne tikai vienību testi (kuri Legacy vidē bieži trūkst), bet galvenokārt funkcionāli end-to-end scenāriji: tipiskie darījumi, kritiskās izņēmuma situācijas, masīvi dati, drukas darbi, imports/eksports. Uzņēmumiem ir svarīgi, lai šie testi būtu plānojami un atkārtojami.

Pragmatiski paņēmieni, ja nav esošas testbāzes

  • Golden Master: definētām ievadēm fiksē izvades/atskaišu/datu stāvokļus un salīdzina tos ar jaunajiem stāvokļiem.
  • Testdatu komplekts: anonimizētas datubāzes vai sintētiski dati ar reprezentatīviem īpašiem gadījumiem.
  • Pakāpeniski saskarnu testi: API līgumi un importēšanas formāti kā pārbaudāma specifikācija.

Veicot migrācijas (datubāze, Unicode/64-Bit), tur, kur iespējams, atmaksājas paralēlā darbība: jaunas komponentes sākumā darbojas blakus esošajam risinājumam, sniedzot rezultātus vai atskaites, bez tūlītējas esošā slēgšanas. Tas rada uzticamus salīdzinājumus, un pāreja kļūst par kontrolētu lēmumu, nevis lecienu nezināmajā.

Biežākās kļūdas – un kā no tām izvairīties

Daudzas modernizācijas neizdodas ne tehnisku iemeslu dēļ, bet gan nepareizas secības vai trūkstošu vadlīniju dēļ. Trīs shēmas izpaužas īpaši bieži:

  • UI vispirms: jauns Frontend bez skaidri definētām biznesa loģikas un datu piekļuves slāņiem tikai pārvieto problēmas un padara turpmākos soļus dārgākus.
  • „Tikai draiveru nomaiņa“: Pie BDE-Ablösung vai DB maiņas bez transakciju un SQL pārskata rodas grūti atklājamas funkcionālas kļūdas.
  • Integrācija bez drošības: ātri uzlikta API bez lomu modeļa, audita un pieprasījumu ierobežojumiem kļūst par pastāvīgu uzbrukuma virsmu.

Pretstats ir posmu plāns ar skaidriem kvalitātes kritērijiem: katram posmam jābūt izvietojamam, jānodrošina monitoring un jāiztur definētie funkcionālie testi. Tad modernizācija kļūst par sērijveida uzlabojumu procesu, nevis par bezgalīgu projektu.

Secinājums: Modernizācija ir programma – nevis notikums

Vecas VCL lietojumprogrammas bieži ir izaugušu procesu mugurkauls. Kas tās aizstāj, aizstāj ne tikai kodu, bet arī ekspluatācijas zināšanas. Kas tās pakāpeniski modernizē, var savienot stabilitāti un turpmāku attīstību: konsolidēt datu piekļuvi (ieskaitot BDE-Ablösung), plānot Unicode/64-Bit pāreju, tīri papildināt APIs un servisus un ievērojami atvieglot ekspluatāciju ar logging, monitoring un reproducējamām relīzēm.

Izšķirošais aspekts ir arhitektūra kā vadlīnija: biznesa loģika un datu piekļuve tiek atdalītas tā, lai jaunas prasības (portāls, saskarnes, reporting, jauna datubāze) var tikt kontrolēti īstenotas. Tas rada digitālu uzņēmuma risinājumu, kas ne tikai darbojas, bet arī paliek uzticami ekspluatējams zem atjauninājumiem, security-prasībām un integrācijas spiediena.

Ja vēlaties izveidot uzticamu modernizācijas ceļu savai VCL-/Delphi-esošajai lietojumprogrammai, ļaujiet mums strukturēt sākotnējo stāvokli, riskus un etapus tehniskā sākotnējā sarunā:

Funkcionālajā kontekstā svarīgu lomu spēlē arī Delphi Modernisierung un Vcl mantojuma lietojumprogramma, ja integrācijām, datu plūsmām un turpmākai attīstībai jāsadarbojas skaidri.

Apspriest projektu vai modernizācijas plānu ar Net-Base.

Nākamais solis

Ja no tēmas rodas reāls projekts, arhitektūru, esošo sistēmu un ekspluatāciju jāvērtē kopā jau agrīnā posmā.

Mēs atbalstām ne tikai atsevišķu jautājumu risināšanā, bet arī tad, kad no avota koda fragmentiem, mantojuma sistēmu jautājumiem vai portāla idejām jāizveido stabils uzņēmuma līmeņa projekts.

  • Esošais stāvoklis, mērķa stāvoklis un tehniskie riski tiek kopīgi vērtēti.
  • REST, datu piekļuve, portāli un Rollout netiek pārcelti uz vēlākām fāzēm.
  • Jūs laikus redzat, kurš risinājums ir ekonomiski un darbības ziņā dzīvotspējīgs.

Kopīgot ierakstu

Kopīgot šo ierakstu tieši

LinkedIn, X, XING, Facebook, WhatsApp un e-pasts ir nekavējoties pieejami. Instagramam mēs tūlīt sagatavojam saiti un īsu tekstu.

E-pasts

Instagram atveras jaunā cilnē. Saite un īss teksts tiek iepriekš nokopēti starpliktuvē.