Net-Base Lehti

07.07.2026

BDE-korvaus: Näin modernisoitte Delphi-käytössä olevat sovellukset ilman tuotantoriskejä

BDE-korvaaminen on harvoin pelkkä tekninen päivitys: se koskettaa dataa, käyttöönottoa, käyttöoikeuksia, rajapintoja ja päivittäistä tuotantokäyttöä. Artikkeli näyttää, miten yritykset voivat hallitusti korvata Borland BDE, minimoida rinnakkaiskäytön riskit ja hallita tietojen käyttöä...

07.07.2026

Lehden aiheesta projektikäytäntöön

Artikkeliin liittyvät palvelu- ja tekniikkasivut

Eräs BDE-korvaus (BDE = Borland Database Engine) ei ole monissa yrityksissä toivelistalla, vaan riskilistalla. BDE on useissa Delphi-käytössä olevissa vanhoissa sovelluksissa toiminut taustalla vuosia: vakaa, harvoin kosketeltu, usein tiiviisti kytketty Paradox- tai dBASE-tietovarastoon ja paikallisiin verkkonjakoihin. Juuri tämä rauha muuttuu ongelmaksi, kun käyttöjärjestelmät, turvallisuusohjeistukset, keskitetyt tietokannat, virtualisointi tai uudet rajapinnat muuttavat toimintaympäristöä. Silloin näennäisestä ajurinvaihdosta tulee puuttuminen käyttöön, tietojen eheuteen ja prosessivirtoihin.

Tässä kirjoituksessa tarkastellaan BDE-korvausta IT-johtamisen, ylläpidon ja teknisten projektivastaavien näkökulmasta: Mitkä ovat tyypilliset laukaisijat? Missä syntyy todellisia riskejä? Mitkä modernisointipolut ovat käytännössä järkeviä? Ja miten muutos voidaan suunnitella siten, että toimialalogikka ja käyttäjäprosessit säilyvät, samalla kun tietojen käyttö, käyttöönotto ja rajapinnat tehtään tulevaisuuden kestäviksi.

Miksi BDE muodostuu riskiksi yrityskäytössä

Historiallisesti BDE oli yleinen datan käyttökerros Delphi-sovelluksille. Käytännössä se on nykyään ennen kaikkea riippuvuuksien esto: se nojautuu vanhentuneeseen ajurimalliin, käyttää usein paikallisia konfiguraatiotiedostoja ja on monissa asennuksissa herkkä moderneille käyttö- ja turvallisuusvaatimuksille.

Tyypilliset riskialueet voidaan nimetä selkeästi:

  • Käyttöönotto ja konfiguraatio: BDE-asennukset ovat usein työasemakohtaisia, paikallisilla alias-konfiguraatioilla. Tämä hankaloittaa standardoituja käyttöönottoja, MSI/Intune-strategioita tai „golden images“ -lähestymistapaa VDI-ympäristöissä.
  • Oikeus- ja polkuongelmat: Monet BDE/Paradox-asennukset edellyttävät kirjoitusoikeuksia hakemistoihin, jotka nykyään syystäkin ovat rajoitettuja. Tämä johtaa satunnaisiin virhekuvioihin Windows-päivitysten tai GPO-muutosten jälkeen.
  • Verkko- ja tiedostolukitus: Tiedostopohjainen tietovarastointi LAN-ympäristössä reagoi herkästi latensseihin, offline-tilanteisiin, VPN:ään, DFS:ään tai „opportunistic locking“ -mekanismeihin. Oireina esiintyy indeksiongelmia, epäjohdonmukaisuuksia tai estyneitä käyttäjiä.
  • Rajoitettu tulevaisuuden kestävyys: Vaatimukset kuten keskitetyt auditit, luotettava backup/RESTore, replikaatio, raportointi tai API-liitännät ovat BDE-läheisellä tiedostopohjaisella tietokannalla vaikeita toteuttaa robustisti.

Tärkeää: Kyse ei ole siitä, että jokainen BDE-sovellus olisi „rikki“. Monet toimivat toiminnallisesti oikein. Mutta tekninen perusta soveltuu yhä huonommin vaatimuksiin standardoidusta käytöstä, tietoturvasta ja integraatiosta. Siksi BDE-korvaus tulisi nähdä kontrolloituna modernisointiprojektina – ei paniikinomaisena hätätoimenpiteenä.

BDE-korvauksen oikea luokittelu: ajurinvaihto vai arkkitehtuuripäätös?

Projektikäytännössä BDE-korvaukset epäonnistuvat harvoin siksi, että kysytään „mikä komponentti korvaa BDE“, vaan siksi, ettei tavoitekenttä ole selkeä. On vähintään kolme strategista tasoa, jotka tulisi erottaa:

  • Taso 1 – Tekninen irrottaminen: Sovellus pysyy työpöytä- ja tietokantaläheisenä, mutta tiedon käyttö erotetaan käytöstä, joka aiemmin hoitui BDE (esim. durch BDE-korvaus natiiviliitännällä modernina tiedonkäyttökerroksena). Tietojen säilytys voi edelleen olla paikallinen tai palvelinpohjainen.
  • Taso 2 – Tietokannan modernisointi: Lisäksi siirretään tiedostopohjaisesta tietojen säilytyksestä (esim. Paradox) keskitetyyn relaatiotietokantaan (esim. PostgreSQL, SQL Server, MariaDB). Tämä muuttaa käytön, varmuuskopioinnin, käyttöoikeudet ja usein myös tietomallin yksityiskohdat.
  • Taso 3 – Rajapinta- ja palveluarkkitehtuuri: Tiedonkäyttö kapseloidaan pidemmällä aikavälillä palveluiden taakse (esim. REST-API; REST = HTTP-pohjainen ohjelmointirajapinta), jotta portaalit, muut järjestelmät tai integraatiot voidaan liittää siististi.
  • Riippuen yrityskontekstista taso 1 on usein jo merkittävä hyöty, koska se vakauttaa käytön ja ylläpidon. Taso 2 ja 3 tarjoavat lisäksi integraatio- ja skaalautuvuusetuja – mutta vaativat enemmän suunnittelua. Oleellista on, että tavoitenäkymä ja riskiprofiili vastaavat käyttövaatimuksianne.

    Tyypilliset lähtötilanteet Delphi-ympäristön olemassa olevissa sovelluksissa

    Ennen muutosta kannattaa tehdä jäsennelty kartoitus, joka ei pelkästään laske „mitä tauluja on“, vaan kattaa todellisen käyttötilanteen. BDE-projektit kohtaavat usein nämä mallit:

    Paradox im Fileshare mit mehreren Clients

    Tiedot sijaitsevat palvelinasemalla, useat asiakkaat käyttävät niitä samanaikaisesti. Se toimii vakaissa LAN-verkossa, mutta on herkkä VPN:n, WLAN:n, virtuaalisten työpöytien tai käyttäjälaitteiden nukahtamisen/heräämisen yhteydessä. Käytännössä kriittisiä ovat lukitustiedostot ja indeksin uudelleenrakennukset häiriöiden jälkeen.

    Lokale Datenhaltung mit Synchronisationslogik

    Jotkin sovellukset säilyttävät tiedot paikallisesti (esim. kenttätyötä varten) ja synkronoivat myöhemmin. Tässä BDE-korvaus liittyy tiiviisti konfliktinratkaisuun, aikaleimoihin ja yksilöllisiin ID-tunnisteisiin. Tekninen muutos ei saa rikkoa synkronointilogiikkaa „sivutuotteena“.

    Gemischte Treiber, Aliase und Sonderpfade

    Vuosien aikana kertyy erikoistapauksia: eri alias-nimet toimipisteittäin, poikkeavat verkkoasemien kirjaimet, manuaaliset säädöt asiakasohjelmissa. Juuri tämä vaihtelu aiheuttaa myöhemmin korkeat tukikustannukset. BDE-korvaus on hyvä tilaisuus keskittää ja standardisoida konfiguraatio.

    Pragmatinen modernisointipolku: ensin irrottaminen, sitten migraatio

    Hyväksi havaittu lähestymistapa on jakaa muutos selkeästi erillisiin, testattaviin vaiheisiin. Tämä vähentää riskiä, koska kukin vaihe voidaan ottaa käyttöön ja vakiinnuttaa ennen seuraavan aloittamista.

    Vaihe 1: Tiedonkäyttökerros selkeästi kapseloida

    Monissa Delphi-sovelluksissa tiedon käyttö on „leviteltynä“ koodissa: lomakkeet avaavat tauluja suoraan, liiketoimintalogiikka käyttää datasetit, raportit nojaavat BDE-komponentteihin. Tavoitteena on selkeä erottelu käyttöliittymän, toiminnallisen logiikan ja tiedonkäytön välillä (usein kutsuttu kerrosarkkitehtuuriksi). Teidän ei tarvitse ottaa käyttöön akateemista tavoitearkkitehtuuria, mutta tarvitsette määritellyn rajapinnan: Kuka saa suorittaa SQL:ää? Kuka päättää transaktioista? Mihin lokitus sijoitetaan?

    Käytön ja ylläpidon kannalta tällä kapseloinnilla on konkreettisia etuja: se vähentää niiden paikkojen määrää, joissa myöhemmin tarvitaan ajuri- tai tietokantaspefisiä muutoksia. Lisäksi testauksen ja rinnakkaiskäytön rakentaminen muuttuu realistisemmaksi.

    Vaihe 2: BDE korvataan moderneilla tiedonkäyttökomponenteilla (esim. FireDAC)

    BDE-Ablosung mit nativer Anbindung on yleinen datan käyttökerros Delphi-ympäristössä, joka voi liittää erilaisia tietokantoja natiiviajureiden kautta. IT:n näkökulmasta olennaista on: FireDAC voidaan konfiguroida siististi, se tukee moderneja todennus- ja yhteysmalleja ja soveltuu selvästi paremmin keskitettyihin DB-järjestelmiin kuin BDE.

    Tärkeää on käyttöön liittyvien parametrien muutos: yhteydenhallinta (Connection-Handling), aikakatkaisut (Timeouts), transaktiot (Transaktionen), merkistö (Encoding, Zeichensatz) ja virheenkäsittely on asetettava tietoisesti. Muuten syntyy „hiljaisia“ virheitä kuten katkenneita erikoismerkkejä, satunnaisia deadlockeja tai epäselviä rollback-tilanteita.

    Vaihe 3: Tietokantastrategian määrittely (tiedostotietokanta vs. asiakas–palvelin)

    Ajoissa on selvitettävä: jäävätkö tiedot tiedostomuotoihin vai siirretäänkö ne asiakas–palvelinjärjestelmään? Asiakas–palvelin tarkoittaa, että tietokantapalvelin (esim. PostgreSQL tai SQL Server) hoitaa transaktiot, lukitukset, varmuuskopiot ja käyttäjäoikeudet keskitetysti. Tämä on käytännössä usein operatiivisesti kestävämpi ratkaisu, mutta se edellyttää tietokannan ylläpitoa (patchaus, monitorointi, varmuuskopiointi, palautustestit).

    Jos käytössänne on tällä hetkellä Paradox, migraatio on yleensä se hetki, jolloin tietomalli ja datan laatu paljastuvat: puuttuvat Constraints (Constraints = säännöt kuten „Feld darf nicht leer sein“), duplikaatit, epäselvät avaimet, historiallisesti kehittyneet tietotyypit. Näitä asioita ei kannata sivuuttaa, vaan ne tulee käsitellä osana modernisointia.

    Tietomigraatio: mikä todellisuudessa vaatii työmäärää

    BDE-järjestelmän korvaamisessa tietomigraatiota aliarvioidaan usein, koska „kysehän on vain tauluista“. Käytännössä työmäärän aiheuttavat reunaehtot:

    Avaimet, yksilöllisyys ja viitteet

    Tiedostopohjaiset järjestelmät sallivat usein epäjohdonmukaisuuksia. Keskitetyt tietokannat ovat tiukempia – ja niin pitää ollakin. Teidän on määriteltävä, miltä primääriavaimet (eindeutige IDs) ja vierasavaimet (Verknüpfungen) näyttävät jatkossa. Kuka luo uudet ID:t? Miten historialliset tietueet tehdään konsistentiksi? Onko olemassa luonnollisia avaimia, jotka osoittautuvat epävakaiksi?

    Merkistöt ja erikoismerkit

    Etenkin vanhemmissa Delphi-/BDE-kokoonpanoissa encoding-ongelmat ovat yleisiä. Migraatio pakottaa valitsemaan kohdemerkistön (tyypillisesti Unicode/UTF-8) ja testaamaan konversiot kontrolloidusti. Tämä ei ole pelkkä „ulkonäkö“-kysymys: väärä konversio voi rikkoa hakutoimintoja, duplikaattitarkistuksia tai vientimuotoja.

    Liiketoimintasäännöt, jotka ovat sovelluksessa eikä tietokannassa

    Monet säännöt on historiallisesti toteutettu asiakasohjelmassa (esim. plausibiliteettitarkistukset). Useiden asiakkaiden ja modernin integraation yhteydessä on usein järkevää suojata vähintään kriittiset säännöt palvelinpuolella (esim. rajoitteiden (Constraints) tai transaktioiden avulla). Tämä vähentää myöhempiä tietovirheitä, mutta muuttaa myös virhetilanteiden luonnetta: validointivirheet tulevat „kovemmin“ takaisin ja ne on käsiteltävä käyttöliittymässä huolellisesti.

    Häiriöaika, rinnakkainen käyttö ja palautusvaihtoehto

    Yrityksille ei yleensä ratkaisevaa ole se, onnistuuko migraatio „kerralla“, vaan se, onko olemassa hallittava suunnitelma: Kuinka pitkäksi aikaa toiminta rajoittuu? Onko siirtymävaihe? Voidaanko ongelmatilanteessa palata takaisin? Realistinen tavoite on usein: migraatio koekäynneillä, lopullinen siirtymä (cutover) huoltokatkossa ja selkeästi dokumentoitu palautusvaihtoehto (fallback), niin kauan kuin data ei eri suuntiin poikkea.

    Rajapinnat ja integraatio: varsinainen ajuri järjestelmän korvaamiselle

    BDE-korvaus muuttuu usein kiireelliseksi, kun uusia vaatimuksia ilmestyy: liitännät ERP:iin, DMS:ään tai CRM:ään, automatisoidut vientitoiminnot, portaalit, BI-raportit tai web‑palvelut. Kun useamman järjestelmän on tarkoitus käyttää samoja tietoja, tiedostopohjainen tietojen säilytys ja asiakaspään liiketoimintalogiikka muodostuvat pullonkaulaksi.

    Selkeä tapa on tarjota tietojen käyttö määritellyn rajapinnan kautta. Usein tämä on REST-API (Representational State Transfer; käytännössä: HTTP-päätepisteet, jotka toimittavat tietoja rakenteisesti ja vastaanottavat muutoksia). IT-käytölle ja tietoturvalle on tällöin tärkeää:

    • Todennus ja valtuutus: Kuka saa tehdä mitä? SAML 2.0 (SAML = Single-Sign-On-standardi) tai token-pohjaiset menetelmät ovat tyypillisiä komponentteja ympäristöstä riippuen.
    • Valvonta ja lokitus: Pyynnöt pitää olla jäljitettävissä, mukaan lukien virheiden syyt ja suoritusaika. Tämä on tuotannossa usein tärkeämpää kuin ’siisti‘ API‑suunnittelu.
    • Rate‑rajoitukset ja vakaus: Kun muut järjestelmät kuluttavat palvelua, pitää olla selkeä strategia kuormahuippujen hallintaan (jonot, rajoitettu samanaikaisuus, aikakatkaisut).

    Tärkeää: API ei ole pakollinen jokaiseen BDE-korvaukseen. Mutta jos keskipitkällä aikavälillä suunnittelette portaaleja tai järjestelmien yli ulottuvia prosesseja, korvaus kannattaa tehdä niin, ettei tämä vaihe myöhemmin pakota ydintason uudelleenrakennusta.

    Käyttö ja deployment BDE-korvauksen jälkeen: standardisointi ‚Clientin ylläpidon‘ sijaan

    Yksi keskeinen hyöty BDE-korvauksesta on, että käyttöönotto ja tuki muuttuvat huomattavasti ennustettavammiksi. Monissa ympäristöissä nykytilanne on, että yksittäisillä koneilla on erikoiskonfiguraatioita, manuaalisia alias‑muutoksia ja erilaisia DLL‑versioita. Tämä sitoo IT‑aikaa ja tekee häiriöiden toistettavuudesta vaikeaa.

    Uudistuksen jälkeen kannattaa käyttää systemaattisesti standardimekanismeja:

    • Keskitetty konfiguraatio: Yhteysparametrit ja ympäristömuuttujat kuuluvat jäljitettävään, versionhallittuun konfiguraatioon (eivät hajanaisiin paikallisiin asennuksiin).
    • Selkeät asennuspaketit: Määritelty installer, joka hallitsee myös korjauksen/päivityksen, on operatiivisesti merkittävämpi kuin ’se toimii koneellani‘.
    • Windows- und Linux-Services siellä, missä se sopii: Taustatehtävät (tuonnit, viennit, scheduler) ovat palveluna paremmin hallittavissa kuin ‚Client, joka jää jonnekin auki‘. Service on taustaprosessi, jolla on määritelty käynnistys/pysäytys ja lokitus.
    • Patch‑ ja release‑kuri: Pienemmät, tiheämmin julkaistavat versiopäivitykset selkeillä julkaisumuistiinpanoilla vähentävät riskiä. Kriittisille järjestelmille staging‑ympäristöt ja hyväksymiskriteerit ovat välttämättömiä.

    Myös käyttöoikeudet paranevat usein: tiedostojakojen antaminen kirjoitusoikeuksin monille käyttäjille voidaan korvata tietokantaroolien, skeemaoikeuksien ja jäljitettävien käyttöpolkujen käytöllä. Tämä ei ole pelkkää tietoturvaa, vaan vähentää myös tahattomia tietojen muutoksia.

    Testistrategia: Mitkä testit BDE-korvauksessa todella merkitsevät

    Kasvaneessa liiketoimintaohjelmistossa täysautomaatio ei yleensä ole lyhyellä aikavälillä realistinen. Siitä huolimatta pragmatisilla testipaketeilla voitte kattaa suurimmat riskit. Keskeistä on, että testit kuvaavat liiketoiminnan ydintoimintoja, eivät vain ‚avaa lomaketta X‘.

    1) Vertailutestit referenssidatan kanssa

    Laadi joukko edustavia tietoja (todellisesta tuotannosta anonymisoitu tai synteettinen) ja vertaa tuloksia ennen/ jälkeen muutoksen: summat, materiaaliluettelot, tilamuutokset, hakutulokset, vientit. Tällöin havaitaan myös koodaus- ja lajittelueroja (lajittelu voi poiketa Paradox- ja SQL-tietokantojen välillä).

    2) Samanaikaisuus ja lukitukset

    Simuloi rinnakkaista käsittelyä: kaksi käyttäjää muokkaa samaa tapahtumaa, yksi käyttäjä tulostaa samalla kun toinen kirjaa, tuonti käynnissä käyttöliittymäkäyttöjen aikana. Client-Server-järjestelmät käyttäytyvät tässä eri tavalla kuin tiedostopohjaiset tietokannat. Jos tätä ei testata, ongelmat ilmenevät vasta tuotannossa.

    3) Varmuuskopiointi/palautustestit hyväksymiskriteeriksi

    Keskitettyjen tietokantojen kohdalla varmuuskopio on arvokas vain, jos palautusta harjoitellaan säännöllisesti. Määrittäkää: RPO/RTO (RPO = suurin sallittu tietojen menetysaika, RTO = suurin sallittu palautumisaika) ja testatkaa nämä arvot harjoituspalautuksessa. Tämä on IT:hen liittyvä mittari, ei pelkkä kehittäjäkuri.

    Päätöksentekotuki: Mikä kohdearkkitehtuuri sopii ympäristöösi?

    Sen sijaan että valitsette „Big Bang“ tai „jättää kaikki ennalleen“, kannattaa tehdä kylmävertailu. Seuraavat ohjeelliset kysymykset auttavat luokituksessa:

    • Kuinka kriittinen prosessi on? Mitä kriittisempi, sitä enemmän puoltavat rinnakkaisajo, vaiheittainen käyttöönotto ja selkeät palautusvaihtoehdot.
    • Kuinka hajautunut käyttö on? Useampi toimipaikka, VPN ja mobiilikäyttö puoltavat vahvasti Client-Server-arkkitehtuuria ja keskitettyjä palveluja.
    • Kuinka voimakas integraatiopaine on? Jos ERP/DMS/portaalit pitää liittää, tietojen saatavuus kannattaa konsolidoida ja tarjota määriteltyjen rajapintojen kautta.
    • Mikä on ylläpidon organisointi? Jos tietokantaylläpito ei ole organisaatiossa vakiintunut, se pitää suunnitella (tai valita tietoinen managed‑lähestymistapa). Uusi järjestelmä ilman ylläpitokonseptia aiheuttaa välillisiä kustannuksia.

    Realistinen tavoitemäärittely on usein: „Ensin BDE pois, sitten tietokanta konsolidoidaan, sitten rajapintoja laajennetaan.“ Näin jaatte riskin ja saavutatte varhaisia käyttöetuja.

    Yleiset sudenkuopat — ja miten välttää ne

    „Me vaihdamme vain ajurin“

    Jos tietojen käyttö on vuosien aikana kasvanut epäjärjestelmällisesti, pelkkä komponentinvaihto muuttuu virhelotoksi. Suunnitelkaa vähintään tietojen käyttöä kapseloiva kerros ja selkeät transaktiosäännöt.

    Epäselvä vastuunjako IT:n ja liiketoimintayksikön välillä

    BDE-korvaus koskee toiminnallisia prosesseja (esim. lukituskäytännöt, validoinnit, raportit). Määrittäkää hyväksymiskriteerit, joita liiketoiminta ja IT kantavat yhdessä: Mitkä tositteet on oltava identtisiä? Mitkä poikkeamat ovat hyväksyttäviä (esim. lajittelu)?

    Raportoinnin ja vientien liian myöhäinen huomioiminen

    Monissa vanhoissa sovelluksissa on kehittyneitä vientipolkuja (CSV, Excel, tulostus). Nämä liittyvät usein epäsuorasti tietojen käyttöön. Ottakaa raportointi, sarjakirjeet, PDF-työnkulut ja ulkoiset siirrot huomioon varhain, muuten työmäärä palaa lopussa esteeksi.

    Turvallisuuden „jälkiasennus“ sen sijaan, että se rakennetaan sisään

    Jos aiotte joka tapauksessa modernisoida tietojen käyttöä, määrittäkää heti selkeä käyttöoikeuskonsepti: tietokantaroolit, palvelutilit, salasanojen kierto, lokitus. Myöhempi jälkiasennus on yleensä kalliimpi, koska uusia riippuvuuksia on jo syntynyt.

    Yhteenveto: BDE-korvaus suunniteltuna hallittuna käyttöympäristön modernisointina

    BDE-korvaus on kaikkein onnistuneinta, kun se toteutetaan modernisointina, jossa on selkeät käyttötavoitteet: toistettava käyttöönotto, vähemmän asiakaspuolen erityistapauksia, kestävämpi tietojen hallinta, parempi integraatiokyky ja todennettavissa oleva tietoturva. Teknisesti BDE-vaihto on vain yksi rakennuspalikka. Ratkaisevia ovat kapselointi, migraatiostrategia, testipaketit ja käyttökonsepti, joka sopii IT-organisaatiollenne.

    Jos suunnittelette korvaamisen vaiheittain, rajoitatte riskejä rinnakkaiskäytöllä ja otatte tietomigraation omana osaprojektinaan vakavasti, voidaan kasvanut Delphi-sovellus siirtää ylläpidettävälle pohjalle – ilman että päivittäisiä prosesseja vaarannetaan tarpeettomasti.

    Jos haluatte arvioida seuraavat askeleet ympäristössänne jäsennellysti, keskustelkaa kanssamme analyysistä, tavoitekuvasta ja luotettavasta toteutussuunnitelmasta:

    Ammatillisessa kontekstissa myös Delphi modernisointi ja tietokantamigraatio näyttelevät tärkeää roolia, kun integraatioiden, tietovirtojen ja jatkokehityksen on toimittava yhdessä hallitusti.

    Keskustele projektista tai modernisointihankkeesta Net-Base kanssa.

    Seuraava vaihe

    Kun aiheesta tulee todellinen projekti, arkkitehtuuri, nykyinen järjestelmäkanta ja käyttö tulisi varhaisessa vaiheessa tarkastella yhdessä.

    Emme tue pelkästään yksittäiskysymyksissä, vaan myös silloin, kun lähdekoodipalasista, legacy-aiheista tai portaali-ideoista halutaan muodostaa luotettava yrityshanke.

    • Nykytila, tavoitetila ja tekniset riskit arvioidaan yhdessä.
    • REST, datan käyttö, portaalit ja käyttöönotto eivät jätetä myöhempien seurausten varaan.
    • Näette ajoissa, mikä ratkaisu on taloudellisesti ja toiminnallisesti kestävä.

    Jaa artikkeli

    Jaa tämä viesti suoraan

    LinkedIn, X, XING, Facebook, WhatsApp ja sähköposti ovat heti käytettävissä. Instagramia varten valmistelemme linkin ja lyhyen tekstin.

    Sähköposti

    Instagram avautuu uuteen välilehteen. Linkki ja lyhyt teksti kopioidaan ensin leikepöydälle.