;

O úspěšnosti prodeje ERP rozhoduje jméno dodavatele a kvalita referencí...

6. 10. 2015
Doba čtení: 4 minuty

Sdílet

Autor: archiv redakce
...říká Peter Svetlošák ze společnosti OR-CZ.

CIO Business World: Jak se vyvíjí reálná poptávka po ERP systémech v posledních několika letech? Je zde prostor pro nový produkt nebo pro nové hráče v tomto segmentu softwarového průmyslu?

Peter Svetlošák: Na trhu ČR a SR je cítit zásadní rozdíl mezi poptávkou z oblasti státní a veřejné správy a mezi poptávkou soukromých společností. Budeme se vyjadřovat pouze k business prostředí soukromých společností, jelikož je to hlavní oblast našeho působení na trhu. Velké (výrobní a obchodní) společnosti v mnoha případech konsolidují existující ERP (upgrade, modernizace verzi, rozšiřování funkcionality, atd.) obvykle bez změny existujícího řešení a dodavatele. Do řešení vstupuji nové - tendenční nástroje pro obsluhu řešeni jako je mobilita nebo internetovský přístup k řešení. Významnou část v procesu sehrávají programové úpravy pro integraci s používanými řešeními třetích stran, a další „zalepovací“ programové úpravy. Uvedené kroky nejsou ve všeobecnosti v souladu s trendem IT, důležité je, že se v této modernizaci prosazují české ceny za služby nebo flexibilita úprav.

Je zde prostor pro nový produkt nebo pro nové hráče v tomto segmentu softwarového průmyslu?

Na trhu je široká nabídka ERP systémů, které vyplňují a přeplňují tržní prostor v ČR a SR. O úspěšnosti prodeje dnes rozhoduje jméno a stabilita dodavatele a zásadně kvalita referencí konkrétních ERP. Sázka na nového hráče, či nový produkt je velmi ojedinělá (riskantní). Tím se noví hráči dostávají do těžké pozice. Výjimkou jsou nové produkty, vycházející ze zde (ČR a SR) etablovaných ERP.

Může v nejbližší době prorazit nějaký open source ERP systém?

Open-source systémy ERP na trhu již jsou, takže je to spíše na zákazníkovi, zda chce mít možnost otevřeného kódu. Míra prosazení open source je přímo úměrná tomu, kolik firem (zákazníků) má (bude mít) k dispozici personál s přiměřenými zkušenostmi, dostatečnou kapacitou a časem na programování, na implementaci a provoz řešení ERP open-source. Trendem je spíše outsourcing (cloud) zabezpečený smlouvou SLA. Obecně při výběru na straně uživatele platí: nehledáme produkt, nehledáme HW, nechceme řešit provoz, ale žádáme funkčnost plus poradenství k produktu.

Cítíte, zda je v nějakém odvětví tuzemské ekonomiky relativně vyšší zájem o nová nebo inovovaná ERP řešení?

V oblasti obchodních a výrobních společností je cítit rozvojový trend hlavně v části řízení logistiky. V procesech výroby je to srovnatelné napříč všemi vertikálami = doplňování stávajícího řešení, nebo malé inovace.

Životní tempo se zvyšuje - nestává se někdy, že zákazník potřebuje realizovat nějakou funkcionalitu rychle a běžný vývojový cyklus softwaru, který zahrnuje analýzu, návrh, implementaci a testování, je pro něj příliš pomalý?

Proces uvedení jakékoliv změny do života v rutinním provozu používaného ERP principiálně není možno obejít. Cílem požadavku provozovatele ERP je vypuštění nebo minimalizování některé etapy procesu a následné zkrácení celkového uvedeného procesu. Výjimky jsou po dohodě možné, ale po analýze nebezpečí, která vyplývají ze stávajícího provozu vypuštěním některého z kroků, bývá od vypuštění (analýza, testování) ustoupeno. Otázku zkrácení neřešíme vypuštěním kroků, nýbrž vhodným – očekávaným nasazením příslušných kapacit.

Cyber25

Zajímají se zákazníci o návratnost investice do inovovaného (nebo vůbec prvního) ERP systému? Uplatňuje se návratnost jako parametr ve výběrových řízeních?

Většinou mají predikci finančních možností o jejich investici, která je limitem. ROI jako takovou zpracují minimálně (střední a menší firmy). Větší subjekty ano, protože na zpracování ROI mají lidi a metodiku.

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
OSZAR »