Net-Base Žurnalas

23.06.2026

Senų VCL programų palaipsniškas modernizavimas: praktinis vadovas eksploatacijai, architektūrai ir rizikai

Daugelis VCL darbalaukio programų veikia stabiliai, tačiau sulėtėja vykdant Windows atnaujinimus, keičiant duomenų bazes, sprendžiant saugumo klausimus ir integruojant naujas sąsajas. Šis vadovas paaiškina, kaip įmonės gali kontroliuojamai modernizuoti VCL sistemas: su aiškia tiksline architektūra, matuojamais etapais ir švariu...

23.06.2026

Nuo žurnalo temos iki projekto įgyvendinimo

Tinkami puslapiai apie paslaugas ir techninę informaciją šiam įrašui

Daugelio įmonių svarbiausia verslo programinė įranga nėra naujausia, o ta, kuri kiekvieną dieną patikimai veikia: ilgainiui susiformavusios Delphi/VCL darbalaukio programos. Jos valdo procesus, atvaizduoja specifinę logiką, bendrauja su duomenų bazėmis, failų sistemomis, spausdintuvais, skeneriais arba ERP ir DMS sąsajomis. Būtent todėl pakeitimas yra rizikingas — ir būtent todėl verta senas VCL programas modernizuoti žingsnis po žingsnio, o ne viską vienu dideliu sandūru kurti iš naujo.

Žingsninė modernizacija reiškia: išlaikyti funkcinį stabilumą, tikslingai mažinti techninę skolą, įgyvendinti saugumo ir eksploatacijos reikalavimus ir tuo pačiu likti bet kada pristatoma ir eksploatuojama. IT vadovybei, administracijai ir techniniams projekto atsakingiesiems svarbiau ne „gražiausia“ technologija, o planas, kuris realiai atsižvelgia į duomenis, sąsajas, diegimą, teises ir priežiūrą.

Šis straipsnis veda per praktikoje patikrintą modernizavimo kelią: nuo inventorizacijos ir tikslo architektūros per duomenų prieigą (pvz. BDE-pakeitimas), 32-/64 bitų ir Unicode iki REST-APIs, portalo prijungimų ir eksploatacijos koncepcijų. Dėmesys sutelktas į sprendimus, kurie duoda rezultatą kasdienėje veikloje: atnaujinamumas, atsparumas gedimams, saugumas, observabilumas (žurnalai/metrikos) ir kontroliuojama migracija.

Kodėl modernizuoti VCL sistemas, jei jos „vis tiek veikia“?

Kad VCL programa veikia, nereiškia, jog ji gerai eksploatuojama. Dažnai modernizacijos priežastys nepasireiškia GUI dizaine, o eksploatacijoje: operacinės sistemos keitimas, naujos saugumo gairės, duomenų bazių atnaujinimai, tinklo segmentacija ar nauji reikalavimai autentifikacijai ir protokolavimui. Daugelis rizikų atsiskleidžia tik tada, kai reikia atnaujinti — ir tada dažnai veikiant spaudimui.

Tipiški veiksniai įmonėse:

  • Platformos spaudimas: 32-Bit-limitai, Windows-sutvirtinimas, naujos Windows versijos, virtualizacija arba Windows 11 ARM64 tam tikrose srityse.
  • Duomenų prieiga ir tvarkyklės: pasenę DB-sluoksniai (pvz. BDE), neprižiūrimos ODBC grandinės, netvarkingos transakcijos, poolingo strategijų trūkumas.
  • Sąsajų palaikymas: poreikis REST-API, įvykių integracijos, prijungimo prie portalų ar trečiųjų sistemų.
  • Saugumas ir atitiktis: TLS standartai, audito takai, vaidmenų modeliai, slaptųjų duomenų tvarkymas, paslaugų sutvirtinimas.
  • Eksploatacijos pastangos: rankinės diegimo procedūros, trapūs atnaujinimo įrankiai, trūkstama telemetrija, sunkiai atkartojamos klaidos.

Modernizacija todėl nėra kosmetinis projektas, o sprendimas dėl rizikos ir eksploatacijos sąnaudų. Svarbiausia yra apsaugoti funkcinę pagrindinę logiką tuo metu, kai techninė apvalkalą atnaujinama etapais.

Modernizacija vietoj naujos plėtros: sprendimų rėmai IT ir verslo skyriui

„Iš naujo kurti“ dažnai skamba paprasčiau, tačiau praktikoje tai dažnai virsta daugiamečiu projektu su didele apimties rizika. Žingsninė modernizacija labiau tinka, kai programa funkciškai yra patvari, bet turi techninių siaurų vietų. Lemiamas yra aiškus sprendimų rėmas, grindžiamas ne ideologija, o eksploataciniais argumentais.

Pasiteisino suskirstymas pagal keturias ašis:

  • Funkcinis stabilumas: Ar procesai ir taisyklės iš esmės stabilūs, ar nuolat kinta?
  • Techninė būklė: Ar yra blokuojančių veiksnių (BDE, tik 32 bitų, nepalaiko Unicode, pasenusi kriptografija, nepataisomos komponentės)?
  • Integracijos spaudimas: Ar reikia greitai išplėsti API, portalus, ataskaitų sistemas, DMS/ERP jungtis?
  • Eksploatacijos rizika: Kiek kritinis yra prieinamumas, koks yra gedimo rizikos laipsnis atnaujinimų metu?

Jei funkcinis stabilumas yra aukštas ir didžiausios rizikos yra techninės, modernizacija dažniausiai yra pragmatiškiausias kelias. Svarbu: modernizacija nėra „taip, kaip iki šiol“, o valdoma programa su tikslinės architektūros apibrėžimu, matavimo taškais ir priėmimo kriterijais.

Inventorizacija: kas iš tikrųjų turi būti suskaičiuota

Pirmoji fazė lemia tempą ir kokybę. Vietoj vien tik „peržiūrėti šaltinio kodą“ vykdoma operatyvinė inventorizacija. Tikslas – patikimas žemėlapis: kokių komponentų yra, kurios priklausomybės yra kritinės ir kokios pakeitimų šalutinės pasekmės?

Techninė inventorizacija per 10 punktų

  • Delphi versija ir įrankių grandinė: kompiliatoriaus būsena, build procesas, priklausomybės, trečiųjų šalių komponentai.
  • UI ir modulio struktūra: monolitinės Forms, dinaminiai paketai, įskiepių mechanizmai.
  • Duomenų prieiga: BDE/ADO/ODBC/BDE pakeitimas su natyviu prijungimu, tranzakcinės ribos, DB-specifinės SQL funkcijos.
  • Duomenų bazės: versijos, priežiūros langai, backup/restore, replikacija, saugomos procedūros.
  • Integracijos: failų importai, SMTP, SOAP/REST, TCP/IP, spausdinimas/etiketės, skaitytuvai, Office automatizavimas.
  • Diegimas: MSI, XCOPY, atnaujinimo įrankiai, prieigos teisės, keliai, grupių politika.
  • Saugumas: autentifikacija, rolės, šifravimas, TLS versijos, slaptieji duomenys (Secrets), sertifikatai.
  • Eksploatavimas: žurnalai, diagnostika, avarijų išrašai (Crash-Dumps), monitoringas, palaikymo procesai.
  • Duomenų kokybė: dublikatai, palikimai, koduotė, laiko žymos, daugiaklientinė parama (Mandantenfähigkeit).
  • Testuojamumas: atkuriami testų atvejai, testų duomenys, priėmimo procesai, regresijos testavimas.

Lygiagrečiai verta trumpai apklausti operacijų komandą ir pagrindinius vartotojus: kur dažniausiai kyla problemos kasdienėje veikloje? Kurie procesai yra kritiniai? Kokie klaidų atvejai užima daugiausia laiko? Iš to galima sudaryti modernizacijos prioritetų eiliškumą, kuris bus prasmingas ne tik techniškai, bet ir operatyviai.

Tikslo architektūra: Layer-3 kaip gairė palaipsniam atnaujinimui

Palaipsnė modernizacija reikalauja tikslinės struktūros, kitaip bus taisomi tik pavieniai trūkumai. Daugelyje Delphi-/VCL sistemų trūksta aiškios GUI, verslo logikos ir duomenų prieigos atskirties. Layer-3 architektūra (prezentacija, domenas/verslo logika, infrastruktūra/duomenų prieiga) yra gerai perteikiama gairė, nereikalaujanti iškart visiško esamos sistemos pertvarkymo.

Svarbu IT ir eksploatacijos perspektyva: jeigu verslo logika yra tvarkingai kapsuliuota, vėliau galima aptarnauti kelis frontendus (desktop, portal, service), papildyti sąsajas ir konsoliduoti duomenų prieigas. Tuo pačiu mažėja rizika, kad UI pakeitimai netyčia pakeis duomenų taisykles.

Ką sluoksniavimas pagerina eksploatavime

  • Paleidimų gebėjimas: mažesni pakeitimai yra lokalizuojami, regresijų skaičius mažėja.
  • Saugumas: zentrale Stellen für Berechtigungen, Input-Validierung und Audit.
  • Sąsajos: REST-API arba Windows-/Linux-Services können Fachlogik wiederverwenden.
  • Migracija: Datenbankwechsel und Treibertausch treffen primär die Infrastruktur-Schicht.

Tikslinė architektūra neturi būti „perfektiška“. Ji turi būti pakankamai konkreti, kad nukreiptų sprendimus: Kur gehört neue Logik hin? Wie wird Datenzugriff gekapselt? Welche APIs sind stabil?

Senų VCL programų palaipsnis modernizavimas: Ein Etappenplan, der im Alltag funktioniert

Tvarus modernizacijos kelias vyksta etapais, kurių kiekvienas suteikia matomą naudą ir tuo pačiu pasirengia kitam žingsniui. Tai sumažina projekto ir veiklos riziką, weil nach jeder Etappe ein stabiler Stand ausrollbar ist.

Etappe 1: Build, Abhängigkeiten und Releaseprozess stabilisieren

Daugelis paveldėtų problemų nėra kodo problemos, o procesų problemos: Builds hängen an Einzelplätzen, Installer sind manuell, Abhängigkeiten sind unversioniert. Der erste Hebel ist daher ein reproduzierbarer Build und ein konsistentes Packaging.

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

Ergebnis: Updates werden planbarer, Support kann Stände eindeutig identifizieren, und technische Schulden werden sichtbar statt versteckt.

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

Die BDE (Borland Database Engine) ist in vielen Umgebungen ein zentraler Blocker: alte Treiberketten, fragiles Setup, eingeschränkte Unterstützung moderner Datenbanken und Security-Standards. Eine Ablösung zielt nicht nur auf „anderen Treiber“, sondern auf einen klaren Datenzugriffs-Layer.

In Delphi-Projekten ist BDE-Ablosung mit nativer Anbindung als Datenzugriffsschicht verbreitet, weil es DB-Backends (z. B. PostgreSQL, SQL Server, MariaDB) sauber unterstützt, Parameterbindung und Transaktionen kontrollierbar macht und die Treiberverwaltung vereinfacht. Für IT ist entscheidend: weniger Spezialinstallationen auf Clients, klarere Konfiguration und bessere Diagnosemöglichkeiten bei Verbindungsproblemen.

Wichtige Migrationsaspekte in dieser Etappe:

  • Transaktionsgrenzen explizit machen (wo beginnt/endet eine fachliche Aktion?).
  • SQL-Varianten identifizieren (DB-spezifische Funktionen, Datumslogik, Locks).
  • Connection-Handling standardisieren (Timeouts, Pooling-Strategie, Retry nur gezielt).
  • Konfigurationshygiene: Verbindungsstrings, Zertifikate, Secrets nicht hardcoden.

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

Unicode-Migration und 64-Bit-Umstieg sind weniger „ein Haken im Compiler“, sondern ein Qualitätsthema. Unicode betrifft Zeichenketten, Dateinamen, Schnittstellen und Datenbanken (Collation/Encoding). 64-Bit betrifft Pointer-Größen, externe DLLs, Druck-/Scanner-Treiber und COM-Abhängigkeiten.

Für Projektverantwortliche bewährt sich: diese Themen nicht in einen Endspurt zu schieben, sondern als eigene Etappe mit klaren Testfällen zu behandeln. Typische Stolperstellen sind Exportformate (CSV/Fixed Width), PDF- und Reporting-Workflows, sowie der Austausch mit Alt-Systemen, die noch 8-Bit-Encoding erwarten.

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

Daugelis įmonių nori iš VCL programos pateikti duomenis portalams, BI ar trečiųjų šalių sistemoms. Saugesnis kelias dažniausiai yra API fasadas: aiškiai versionuota REST-API (HTTP pagrindu veikianti sąsaja), kuri kontroliuotai atskleidžia verslo logiką. Taip nėra „kliento nuotolinis valdymas“, o verslo operacijos teikiamos kaip paslaugos.

Tai atskiria pakeitimus: darbalaukis lieka stabilus esamiems vartotojams, tuo tarpu naujos integracijos auga per API. Svarbu eksploatacijai ir saugumui:

  • Autentifikavimas/Autorizavimas: pvz., žetonais pagrįstas mechanizmas, pasirinktinė integracija į SSO (dažnai SAML 2.0 įmonių aplinkose).
  • Srautų apribojimai ir laiko limitai: apsauga nuo netyčinės apkrovos dėl paketinių integracijų.
  • Versionavimas: API versijos apsaugo prijungtas sistemas nuo negrįžtamų pakeitimų.
  • Auditas: kas ir kada ką pakeitė (funkciškai), ne tik „užklausa pasiekė“.

Etapas 5: portalų ar paslaugų komponentus papildyti (C# oder Delphi – architektūriškai švariai)

Daugelio modernizacijų metu šalia darbalaukio atsiranda klientų portalas arba vidinė žiniatinklio sritis. Ar šis komponentas įgyvendinamas kaip C# ar Delphi – mažiau lemiama nei bendras architektūrinis sprendimas: nuoseklus duomenų modelis, aiškios atsakomybės ir stabilios sąsajos. IT požiūriu svarbu, kad eksploatavimas, žurnalo vedimas, leidimai ir diegimas tilptų į esamą aplinką (pvz., Microsoft IIS web komponentams arba Linux-paslaugoms foniniam apdorojimui).

Praktiškai tinkama paskirstyti pagal užduotis:

  • Darbalaukis (VCL): vartotojo sąsaja, artima procesams; offline/LAN artimos funkcijos; įrenginių sąsajos.
  • Paslaugos: foniniai darbai, validacijos, importai/eksportai, eilių apdorojimas, laiko tvarkaraščiu vykdomi procesai.
  • Portalas: savitarnos funkcijos, statuso užklausos, dokumentai, darbo eiga per naršyklę.

Taip susidaro sistema, kuri gali augti nekeliaudama pavojaus esamam branduoliui.

Duomenų bazių modernizavimas: nuo „veikia“ iki „prižiūrima“

Daugelis VCL programų glaudžiai susipynusios su duomenų bazės istorija: Paradox palikimas, Firebird, senesnės SQL Server versijos ar mišrios formos. Duomenų bazės migracija pavyksta, kai ji suvokiama kaip duomenų ir eksploatacijos projektas, o ne vien tik schemos kopijavimas.

Ką IT turėtų išsiaiškinti prieš migraciją

  • Atsarginis kopijavimas/atkūrimas ir RPO/RTO: kaip greitai reikia vėl būti pasiekiamiems ir kiek duomenų praradimo yra toleruotina?
  • Priežiūros langai ir prastovos strategija: Big-Bang, paralelinis veikimas ar inkrementinis perėjimas.
  • Simbolių rinkiniai ir rūšiavimo taisyklės: svarbu dėl Unicode ir rūšiavimo/paieškos logikos.
  • Transakcijų izoliacija ir užrakinimai: aktualu esant dideliam lygiagrečiui vykdymui ir paketiniams darbams.
  • Reporting: tiesioginės prieigos prie DB iš trečiųjų įrankių (BI, Excel, ETL) turi būti įtrauktos ir suderintos.

Daugeliui įmonių PostgreSQL yra pasirinkimas, nes jis kaip platforma gerai eksploatuojamas ir siūlo aiškius įrankius atsarginėms kopijoms, stebėsenai ir teisių valdymui. Tačiau lemiamas faktorius išlieka: taikomoji programa turi švariai abstrahuoti SQL ir tipų skirtumus, kitaip kiekvienas užklausimas tampa išimčiu. Būtent čia atsiperka konsoliduotas duomenų prieigos sluoksnis (pvz. FireDAC).

Security und Berechtigungen: Modernisierung ohne neue Angriffsfläche

Senstelėjusios darbalaukio programos dažnai buvo projektuotos laikais, kai „tinkle“ automatiškai reiškė „patikima“. Šiandien tai retai priimtina: segmentavimas, Zero-Trust požiūriai, nuotolinis darbas ir audito reikalavimai didina spaudimą. Todėl modernizuojant turi būti sprendžiamas ir saugumas, neparalyžiuojant veiklos.

Konkrečios priemonės, kurias galima diegti žingsnis po žingsnio:

  • Centralus autentifikacijos mechanizmas: aiškus tapatybės (prisijungimo) ir rolės (leidimų) atskyrimas.
  • Transporto šifravimas: TLS nuolat atnaujinti, suplanuoti sertifikatų valdymą.
  • Secrets-Handling: jokio slaptažodžių saugojimo INI failuose; vietoje to — apsaugotos saugyklos arba centralizuotai valdomi secrets.
  • Audit-Trail: faksiniai pakeitimai registruojami (kas/ką/kada), ne tik techniniai žurnalai.
  • Įvesties patikra: ypač naujoms API — griežta ir centralizuota.

Svarbu sprendimų priėmėjams: saugumas nėra „priedas“, kurį užklijuoji pabaigoje. Kai kuriami API, servisai ar portalai, saugumo architektūra turi būti nuo pradžių įtraukta į tikslinę architektūrą.

Betrieb und Administration: Was sich durch Modernisierung spürbar verbessert

Pagrindinis žingsninės modernizacijos pelnas dažnai pasireiškia srityse, kurios anksčiau reikalavimų specifikacijoje mažai minėtos: stebėsena, gedimų paieška, diegimas, avarinis atsparumas. Ypač VCL programoms, kurios daugelį metų augo organiškai, nedidelis operacijų patobulinimų paketas gali ženkliai sumažinti palaikymo naštą — be to, kad galutinis vartotojas iškart pastebėtų naują vartotojo sąsają.

Checkliste für „betriebsgerechte“ Komponenten

  • Konfigūracijų standartas: centralizuotai dokumentuotas, aplinkai pritaikytas (Dev/Test/Prod), aiškūs numatyti nustatymai.
  • Struktūruoti žurnalai: įrašai su koreliacija (pvz., operacijos ID), aiškiai apibrėžti žurnalų lygiai, jokie jautrūs duomenys plačiu tekstu.
  • Monitoring: sveikatos patikros servisams, duomenų bazės ryšio būklė, užduočių vykdymo trukmės, eilių ilgiai.
  • Installer/Updater: galimas silent install, atsitraukimo (rollback) strategija, tvarkingos teisės.
  • Klaidų diagnostika: atkuriami gedimų duomenys, aiškūs palaikymo duomenys (versija, modulio būklė, konfigūracija).

Adminams ypač aktualu: kai fone veikiančioji logika perkeliama iš darbalaukio į Windows- arba Linux-servisus, vykdymo trukmės, perstartavimo elgsena ir resursų suvartojimas valdomi geriau. Tuo pačiu sumažėja rizika, kad „atidarytas klientas“ užblokuos batch procesą.

Test- und Migrationsstrategie: Parallelbetrieb statt Stillstand

Žingsninė modernizacija sėkminga tik su regresiniais testais. Neapsiribojama vien vienetiniais testais (Unit-Tests), kurių legacy projektuose dažnai trūksta, bet svarbiausia — funkcinių end-to-end scenarijų testavimas: tipiniai procesai, kritinės išimtys, masyviniai duomenys, spausdinimo darbai, importai/eksportai. Įmonėms svarbu, kad šie testai būtų planuojami ir kartojami.

Pragmatische Ansätze, wenn es keine Testbasis gibt

  • Golden Master: apibrėžtoms įvestims fiksuojamos išvestys/ataskaitos/duomenų būsenos ir lyginamos su naujaisiais būsenomis.
  • Testinių duomenų rinkinys: anonimizuotos duomenų bazės arba sintetiniai duomenys su reprezentatyviais išskirtiniais atvejais.
  • Etapiniai sąsajų testai: API kontraktai ir importo formatai kaip patikrinama specifikacija.

Migracijų (duomenų bazės, Unicode, 64 bitų) atvejais verta taikyti paralelinį veikimą, kur tai įmanoma: naujos komponentės iš pradžių veikia šalia esamo sprendimo, teikia rezultatus arba ataskaitas, nepašalinant esamo sprendimo iš karto. Taip gaunami patikimi palyginimai, ir perėjimas tampa kontroliuojamu sprendimu, o ne šuoliu į nežinomybę.

Tipinės klastotės – ir kaip jų išvengti

Daugelis modernizacijų žlunga ne dėl technologijų, o dėl netinkamos eiliškumo arba trūkstamų gairių. Ypač dažni trys modeliai:

  • UI pirmiausia: naujas frontendas be aiškiai apibrėžtų verslo logikos ir duomenų prieigos sluoksnių tik perkelia problemas ir pabrangina vėlesnius žingsnius.
  • „Tiesiog pakeisti tvarkyklius“: Bei BDE-pakeitimas arba duomenų bazės keitimas be transakcijų ir SQL peržiūros atsiranda sunkiai aptinkamos funkcinės klaidos.
  • Integracija be saugumo: greitai įdiegta API be vaidmenų modelio, audito ir užklausų dažnio ribojimų tampa nuolatine atakos sritimi.

Priemonė – etapinis planas su aiškiais kokybės kriterijais: kiekvienas etapas turi būti diegiamas, turėti monitoringą ir atlaikyti apibrėžtus funkciniai testus. Tada modernizacija tampa serijiniu tobulinimo procesu, o ne nuolatiniu projektu.

Išvada: modernizacija yra programa – ne įvykis

Senos VCL programos dažnai yra susiformavusių procesų stuburas. Pakeitus jas, keičiama ne tik kodas, bet ir operacijų žinios. Tuo tarpu etapais modernizuojant galima suderinti stabilumą ir plėtrą: konsoliduoti duomenų prieigą (įskaitant BDE-pakeitimą), planuoti Unicode/64-Bit perėjimą, tvarkingai papildyti API ir paslaugas bei reikšmingai sumažinti operacijų apkrovą su žurnavimu, monitoringu ir reprodukuojamais leidimais.

Esminis aspektas yra architektūra kaip gairė: verslo logika ir duomenų prieiga atskiriami taip, kad nauji reikalavimai (portalas, sąsajos, ataskaitos, nauja duomenų bazė) galėtų būti įgyvendinti kontroliuotai. Taip susiformuoja skaitmeninis įmonės sprendimas, kuris ne tik veikia, bet ir išlieka patikimai valdomas atnaujinimų, saugumo reikalavimų ir integracijos spaudimo sąlygomis.

Jeigu norite parengti patikimą modernizacijos kelią savo VCL-/Delphi esamai programai, leiskite mums struktūrizuoti pradinę situaciją, rizikas ir etapus techniniame pirminiame pokalbyje:

Profesiniame kontekste taip pat svarbų vaidmenį atlieka Delphi modernizacija ir VCL paveldėta programa, kai integracijos, duomenų srautai ir tolesnė plėtra turi veikti darniai.

Aptarti projektą arba modernizacijos užmojį su Net-Base.

Sekantis žingsnis

Kai iš temos tampa realus projektas, architektūrą, esamą aplinką ir eksploatavimą reikėtų anksti nagrinėti kartu.

Mes padedame ne tik pavienėse užklausose, bet ir tuomet, kai iš šaltinio kodo fragmentų, paveldėtų temų ar portalo idėjų turi tapti patikimas įmonės projektas.

  • Esama padėtis, tikslinis vaizdas ir techninės rizikos vertinami kartu.
  • REST, duomenų prieiga, portalai ir diegimas nebus atidedami į vėlesnes stadijas.
  • Jūs anksti matote, kuris kelias yra ekonomiškai ir įmonės veiklos požiūriu tvarus.

Pasidalinti įrašu

Tiesiogiai pasidalinti šiuo įrašu

LinkedIn, X, XING, Facebook, WhatsApp ir el. paštas yra iš karto prieinami. Instagramui parengiame nuorodą ir trumpą tekstą nedelsiant.

El. paštas

Instagram atidaromas naujame skirtuke. Nuoroda ir trumpas tekstas iš anksto nukopijuojami į iškarpinę.