Zákon o účetnictví - ČÁST ČTVRTÁ - Způsoby oceňování

Předpis č. 563/1991 Sb.

Znění od 19. 9. 2016

563/1991 Sb. Zákon o účetnictví

ČÁST ČTVRTÁ

Způsoby oceňování

§ 24

(1) Účetní jednotky jsou povinny oceňovat majetek nebo jeho části a závazky způsoby podle tohoto zákona.

(2) Účetní jednotky oceňují majetek a závazky

a) k okamžiku uskutečnění účetního případu způsoby podle § 25,

b) ke konci rozvahového dne nebo k jinému okamžiku, k němuž se účetní závěrka sestavuje, způsoby podle § 27; rovněž toto ocenění je povinna zaznamenat v účetních knihách,

(dále jen "okamžik ocenění"). Ustanovení tohoto zákona o oceňování majetku a závazků se použije přiměřeně i pro oceňování jiných aktiv a pasiv.

(3) Při nabytí více než jedné složky majetku převodem či přechodem, pokud nelze jednotlivé složky majetku ocenit postupem podle § 25, ocení účetní jednotka jednotlivé složky majetku

a) při nabytí obchodního závodu, pobočky nebo jiné části obchodního závodu, a to i při přeměně obchodní korporace s výjimkou změny právní formy

1. oceněním jednotlivých složek majetku vedeného v účetnictví účetní jednotky, ze které bylo právo k obchodnímu závodu, pobočce nebo jiné části obchodního závodu převedeno nebo přešlo, nebo

2. oceněním jednotlivých složek majetku podle zvláštního právního předpisu,

b) v ostatních případech poměrným rozúčtováním celkové pořizovací ceny nebo reprodukční pořizovací ceny.

(4) Při pořízení souboru hmotných movitých věcí se samostatným technicko-ekonomickým určením, které slouží jednotnému účelu, popřípadě u dalších souborů stanovených prováděcím právním předpisem, se ocení soubor jako celek.

(5) Prováděcí právní předpis stanoví případy a okamžiky účtování o ocenění jmění vyžadovaném zákonem o přeměnách obchodních společností a družstev. Tento předpis dále stanoví účetní metodu oceňování majetku podle odstavců 3 a 4 včetně možností použití způsobu oceňování podle odstavce 3 písm. a) bodu 1 v případě přeshraniční přeměny, vkladu nebo prodeji obchodního závodu, pobočky nebo jiné části obchodního závodu.

(6) Majetek a závazky vyjádřené v cizí měně přepočítávají účetní jednotky na českou měnu kurzem devizového trhu vyhlášeným Českou národní bankou, a to k okamžiku ocenění

a) podle odstavce 2 písm. a), nebo

b) podle odstavce 2 písm. b), a to pouze majetek a závazky uvedené v § 4 odst. 12.

V případě nákupu nebo prodeje cizí měny za českou měnu lze k okamžiku ocenění použít kurzu, za který byly tyto hodnoty nakoupeny nebo prodány.

(7) Pro účely ocenění podle odstavce 2 písm. a) může účetní jednotka použít pro přepočet cizí měny na českou měnu pevný kurs, kterým se rozumí kurs stanovený vnitřním předpisem účetní jednotky na základě kursu devizového trhu vyhlášeného Českou národní bankou, používaný účetní jednotkou po předem stanovenou dobu. Stanovená doba nesmí přesáhnout účetní období. Jako kurs devizového trhu, na jehož základě se pevný kurs stanoví, použije účetní jednotka kurs devizového trhu vyhlášený Českou národní bankou k prvnímu dni období, pro které je pevný kurs používán. Při používání pevného kursu může účetní jednotka tento kurs změnit svým vnitřním předpisem i v průběhu stanovené doby; v případech vyhlášení devalvace i revalvace české koruny musí být pevný kurs změněn vždy.

(8) Ustanovení odstavce 7 se nevztahuje na účetní jednotky, které k výkonu činnosti potřebují podle zvláštních právních předpisů bankovní licenci, povolení k výkonu činnosti obchodníka s cennými papíry, povolení ke vzniku investiční společnosti nebo investičního fondu, povolení ke vzniku a činnosti penzijního fondu, povolení k činnosti penzijní společnosti, povolení působit jako družstevní záložna, povolení k provozování pojišťovací nebo zajišťovací činnosti. Dále se ustanovení odstavce 7 nevztahuje na Českou národní banku, Českou kancelář pojistitelů a zdravotní pojišťovny.

(9) V případě cizí měny, u které se nevyhlašuje kurs devizového trhu denně, použije účetní jednotka pro její přepočet

a) kurs mezibankovního trhu pro tuto měnu k USD nebo EUR a kurs devizového trhu vyhlášený Českou národní bankou pro USD nebo EUR ke stejnému dni, nebo

b) poslední známý kurs vyhlášený či zveřejněný Českou národní bankou; tento postup nepoužijí účetní jednotky, na které se nevztahuje ustanovení odstavce 7.

§ 25

(1) Z jednotlivých složek majetku a závazků se oceňují

a) hmotný majetek kromě zásob, s výjimkou hmotného majetku vytvořeného vlastní činností pořizovacími cenami,

b) hmotný majetek kromě zásob vytvořený vlastní činností vlastními náklady,

c) zásoby, s výjimkou zásob vytvořených vlastní činností pořizovacími cenami,

d) zásoby vytvořené vlastní činností vlastními náklady,

e) peněžní prostředky a ceniny jejich jmenovitými hodnotami,

f) podíly, cenné papíry a deriváty pořizovacími cenami,

g) pohledávky při vzniku jmenovitou hodnotou; při nabytí za úplatu nebo vkladem pořizovací cenou; závazky jmenovitou hodnotou,

h) nehmotný majetek kromě pohledávek, s výjimkou nehmotného majetku vytvořeného vlastní činností pořizovacími cenami,

i) nehmotný majetek kromě pohledávek vytvořený vlastní činností vlastními náklady,

j) příchovky zvířat vlastními náklady,

k) kulturní památky, sbírky muzejní povahy, předměty kulturní hodnoty a církevní stavby, pokud není známa jejich pořizovací cena, ve výši 1 Kč,

l) majetek v případech bezúplatného nabytí, s výjimkou majetku uvedeného pod písmenem e), anebo majetek v případech, kdy vlastní náklady na jeho vytvoření vlastní činností nelze zjistit, a ostatní majetek, který není uveden pod písmeny a) až k), reprodukční pořizovací cenou.

(2) Jiná aktiva a jiná pasiva, o kterých účtují vybrané účetní jednotky účetními zápisy v knihách podrozvahových účtů, se v případě skutečností, o kterých účetní jednotky účtují v souvislosti s budoucím přírůstkem nebo úbytkem majetku nebo jiného aktiva, závazku nebo jiného pasiva, ke kterému může dojít na základě stanovené podmínky nebo podmínek, oceňují předpokládanou výší ocenění této složky majetku či jiného aktiva nebo závazku či jiného pasiva.

(3) Účetní jednotky při oceňování ke konci rozvahového dne zahrnují jen zisky, které byly k rozvahovému dni dosaženy, a berou v úvahu všechna předvídatelná rizika a možné ztráty, které se týkají majetku a závazků a jsou jim známy do okamžiku sestavení účetní závěrky, jakož i všechna snížení hodnoty bez ohledu na to, zda je výsledkem hospodaření účetního období zisk nebo ztráta.

(4) U stejného druhu zásob a cenných papírů se za způsob ocenění podle odstavce 1 považuje i ocenění cenou, která vyplyne z ocenění jejich úbytků cenou zjištěnou váženým aritmetickým průměrem nebo způsobem, kdy první cena pro ocenění přírůstku majetku se použije jako první cena pro ocenění úbytku majetku.

(5) Pro účely tohoto zákona se rozumí

a) pořizovací cenou cena, za kterou byl majetek pořízen a náklady s jeho pořízením související,

b) reprodukční pořizovací cenou cena, za kterou by byl majetek pořízen v době, kdy se o něm účtuje,

c) vlastními náklady u zásob vytvořených vlastní činností přímé náklady vynaložené na výrobu nebo jinou činnost, popřípadě i přiřaditelné nepřímé náklady, které se vztahují k výrobě nebo k jiné činnosti; do přímých nákladů se zahrnuje pořizovací cena materiálu a jiných spotřebovaných výkonů a další náklady, které vzniknou v přímé souvislosti s danou výrobou nebo jinou činností,

d) vlastními náklady u hmotného majetku kromě zásob a u nehmotného majetku kromě pohledávek vytvořeného vlastní činností přímé náklady vynaložené na výrobu nebo jinou činnost, popřípadě i přiřaditelné nepřímé náklady, které se vztahují k výrobě nebo jiné činnosti, vymezené v souladu s účetními metodami; do přímých nákladů se zahrnuje pořizovací cena materiálu a jiných spotřebovaných výkonů a další náklady, které vzniknou v přímé souvislosti s danou výrobou nebo jinou činností.

(6) V případě majetku podle odstavce 1 písm. l) se reprodukční pořizovací cena nepoužije v případě bezúplatné změny příslušnosti k hospodaření s majetkem státu nebo svěření majetku do správy podle zákona upravujícího rozpočtová pravidla územních samosprávných celků, výpůjčky nebo bezúplatného převodu nebo přechodu majetku mezi vybranými účetními jednotkami; v těchto případech účetní jednotka při ocenění majetku navazuje na výši ocenění v účetnictví účetní jednotky, která o tomto majetku naposledy účtovala.

§ 26

(1) Pokud se při inventarizaci zásob zjistí, že jejich prodejní cena snížená o náklady spojené s prodejem je nižší, než cena použitá pro jejich ocenění v účetnictví, zásoby se ocení v účetnictví a v účetní závěrce touto nižší cenou.

(2) Pokud se při inventarizaci zjistí, že hodnota závazků je vyšší, popřípadě i nižší než jejich výše v účetnictví, uvedou se závazky v účetnictví a v účetní závěrce v tomto zjištěném ocenění.

(3) Ustanovení o oceňování podle § 25 odst. 3 vyjadřují rezervy, opravné položky a odpisy majetku. Rezervy jsou určeny k pokrytí závazků nebo nákladů, jejichž povaha je jasně definována a u nichž je k rozvahovému dni buď pravděpodobné, že nastanou, nebo jisté, že nastanou, ale není jistá jejich výše nebo okamžik jejich vzniku. K rozvahovému dni musí rezerva představovat nejlepší odhad nákladů, které pravděpodobně nastanou, nebo v případě závazků částku, která je zapotřebí k vypořádání. Rezervy nesmějí být použity k úpravám hodnot aktiv. Rezervami se dále rozumí jiné rezervy podle zvláštních právních předpisů. Opravnými položkami se vyjadřuje přechodné snížení hodnoty majetku; odpisy majetku vyjadřují trvalé snížení jeho hodnoty.

(4) Účetní jednotky, které nejsou založeny nebo zřízeny za účelem podnikání, uplatňují ustanovení odstavců 1 až 3 v souladu s účetními metodami.

§ 27

(1) Z jednotlivých složek majetku a závazků k okamžiku ocenění podle § 24 odst. 2 písm. b) se reálnou hodnotou oceňují

a) cenné papíry, s výjimkou cenných papírů držených do splatnosti, dluhopisů neurčených účetní jednotkou k obchodování, cenných papírů představujících účast v ovládané osobě nebo v osobě pod podstatným vlivem a cenných papírů emitovaných účetní jednotkou,

b) deriváty,

c) technické rezervy, jejichž výše se vypočítává s použitím metod jejich výpočtu podle § 4 odst. 8 u účetních jednotek, které provozují činnost pojištění nebo zajištění podle zvláštních právních předpisů, kromě veřejného zdravotního pojištění,

d) majetek a závazky v případech, kdy ocenění reálnou hodnotou ukládá zvláštní právní předpis, to neplatí v případech uvedených v odstavci 3,

e) ty části majetku a závazků, které jsou zajištěny deriváty a v rámci systému zajištění v reálných hodnotách se považují za zajištěnou položku,

f) pohledávky, které účetní jednotka nabyla a určila k obchodování,

g) závazky vrátit cenné papíry, které účetní jednotka zcizila a do okamžiku ocenění je nezískala zpět,

h) u vybraných účetních jednotek majetek určený k prodeji s výjimkou zásob.

(2) Majetek uvedený v odstavci 1 písm. a) až h) lze ocenit reálnou hodnotou i častěji než k okamžiku uvedenému v odstavci 1.

(3) Pro účely tohoto zákona se jako reálná hodnota použije

a) tržní hodnota, popřípadě tržní hodnota odvozená z tržní hodnoty jednotlivých složek aktiv a pasiv, nelze-li tržní hodnotu pro některé aktivum nebo pasivum zjistit, ale lze ji zjistit pro jednotlivé složky nebo podobné aktivum či pasivum,

b) hodnota vyplývající z obecně uznávaných oceňovacích modelů a technik, pokud tyto oceňovací modely a techniky zajišťují přijatelný odhad tržní hodnoty,

c) ocenění kvalifikovaným odhadem nebo posudkem znalce, není-li tržní hodnota k dispozici nebo tato nedostatečně představuje reálnou hodnotu; metody ocenění použité při kvalifikovaném odhadu nebo posudku znalce musí zajistit přiměřené přiblížení se k tržní hodnotě,

d) ocenění stanovené podle zvláštních právních předpisů, nelze-li postupovat podle písmen a) až c).

(4) Tržní hodnotou se rozumí hodnota, která je vyhlášena na evropském regulovaném trhu nebo na zahraničním trhu obdobném regulovanému trhu. Účetní jednotka pro oceňování podle tohoto zákona použije tržní hodnotu, která je vyhlášena k okamžiku ne pozdějšímu, než je okamžik ocenění [§ 24 odst. 2 písm. b)], a nejvíce se blížícímu okamžiku ocenění. Pokud je majetek přijat k obchodování na regulovaném trhu, rozumí se tržní hodnotou závěrečná cena vyhlášená na regulovaném trhu v pracovní den, ke kterému se ocenění provádí. V případě, že majetek není přijat k obchodování na regulovaném trhu a je přijat k obchodování na zahraničním regulovaném trhu, nebo na zahraničním trhu obdobném regulovanému trhu, rozumí se tržní hodnotou nejvyšší cena ze závěrečných cen, které bylo dosaženo na zahraničních regulovaných trzích, nebo na zahraničních trzích obdobných regulovanému trhu v pracovní den, ke kterému se ocenění provádí. Pokud v den, ke kterému se ocenění provádí, uvedené trhy nepracují, použije se cena vyhlášená na nich poslední pracovní den, který předchází okamžiku ocenění; není-li známa ani tato cena, postupuje se dále podle věty druhé.

(5) V případech oceňování reálnou hodnotou se použije ustanovení § 25 odst. 3 přiměřeně a o oceňovacích rozdílech z tohoto ocenění účetní jednotky účtují v souladu s účetními metodami.

(6) Není-li objektivně možné stanovit reálnou hodnotu, považuje se za tuto hodnotu ocenění způsoby podle § 25. Způsoby podle § 25 se ocení i majetek a závazky neuvedené v odstavci 1, není-li dále stanoveno jinak. Dluhopisy a ostatní cenné papíry s pevným výnosem, na něž se nevztahuje ustanovení odstavce 1, se ocení ke konci rozvahového dne nebo k jinému okamžiku, k němuž se sestavuje účetní závěrka, pořizovací cenou zvýšenou nebo sníženou o úrokové výnosy nebo náklady; zahrnuje-li ocenění pohledávek uvedené výnosy nebo náklady, může být zvýšeno nebo sníženo stejným způsobem. Podíl, který představuje účast v ovládané osobě nebo v osobě pod podstatným vlivem, může být oceněn ekvivalencí (protihodnotou); použije-li účetní jednotka uvedený způsob ocenění, je povinna jej použít pro ocenění všech takových podílů.

(7) Oceňování podle odstavců 1 až 6 se nepoužije na mikro účetní jednotky; to neplatí pro

a) obchodníky s cennými papíry a pobočky zahraničních obchodníků s cennými papíry,

b) platební instituce, pobočky zahraničních platebních institucí, instituce elektronických peněz a pobočky zahraničních institucí elektronických peněz,

c) investiční společnosti a fondy podle zákona o investičních společnostech a investičních fondech a

d) fondy podle zákona upravujícího důchodové spoření nebo doplňkové penzijní spoření.

§ 28

(1) Účetní jednotky, které mají vlastnické nebo jiné právo k majetku, anebo které hospodaří s majetkem státu nebo s majetkem územních samosprávných celků, není-li dále stanoveno jinak, o něm účtují a odpisují v souladu s účetními metodami. V případech smlouvy o výpůjčce po dobu zajištění závazků převodem práva nebo v případech, kdy se vlastnické právo k movitým věcem s výjimkou cenných papírů nabývá na základě projevu vůle jiným způsobem než převzetím věci, jakož i v dalších případech stanovených zvláštními právními předpisy nebo prováděcími právními předpisy, o majetku účtují a odpisují jej účetní jednotky, které jej používají. Majetek nebo jeho části vymezený zvláštními právními předpisy nebo prováděcími právními předpisy se neodpisuje.

(2) Majetek uvedený v odstavci 1 odpisuje účetní jednotka, která jej úplatně nebo bezúplatně poskytuje jiné osobě k užívání zejména na základě smlouvy o nájmu nebo smlouvy o výpůjčce; ustanovení odstavce 1 týkající se smlouvy o výpůjčce tím nejsou dotčena.

(3) Majetek uvedený v odstavci 1 odpisuje účetní jednotka, která jej poskytuje jiné osobě k užívání na základě smlouvy o finančním leasingu, kterým se pro účely tohoto zákona rozumí poskytnutí majetku za úplatu do užívání, jestliže je uživatel oprávněn nebo povinen v průběhu užívání nebo po jeho ukončení nabýt vlastnické právo k poskytnutému majetku.

(4) Majetek uvedený v odstavci 1 odpisuje nájemce, pouze pokud je oprávněn o tomto majetku účtovat a odpisovat jej na základě smlouvy o pachtu obchodního závodu nebo části obchodního závodu.

(5) Účetní jednotka, která majetek uvedený v odstavci 1 úplatně nebo bezúplatně užívá a provede na tomto majetku technické zhodnocení na svůj účet, účtuje o tomto technickém zhodnocení a odpisuje jej v souladu s účetními metodami.

(6) Účetní jednotky uvedené v odstavci 1 jsou povinny sestavovat odpisový plán, na jehož podkladě provádějí odpisování majetku v průběhu jeho používání. Uvedený majetek se odpisuje jen do výše jeho ocenění v účetnictví.

(7) Jsou-li náklady na vývoj vykazovány v aktivech rozvahy, je jakékoli vyplácení podílů na zisku zakázáno, ledaže disponibilní zdroje, z nichž lze jinak vyplácet podíly na zisku a nerozdělený zisk minulých období, jsou nejméně rovny neodepsané části nákladů na vývoj.

Skrýt změny zákona Legenda text přidán text vypuštěn
Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).
'; document.getElementById('outstream-iframe').onload = function () { setupIframe(); } replayScreen = document.getElementById('iinfoOutstreamReplay'); iinfoOutstreamPosition = document.getElementById('iinfoOutstreamPosition'); outstreamContainer = document.getElementsByClassName('outstream-container')[0]; setupReplayScreen(); } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); outstreamDocument.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:-5px;right:25px}"; videoContent = outstreamDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; if ( location.href.indexOf('rejstriky.finance.cz') !== -1 || location.href.indexOf('finance-rejstrik') !== -1 || location.href.indexOf('firmy.euro.cz') !== -1 || location.href.indexOf('euro-rejstrik') !== -1 || location.href.indexOf('/rejstrik/') !== -1 || location.href.indexOf('/rejstrik-firem/') !== -1) { outstreamDirectPlayed = true; soundAllowed = true; iinfoVastUrlIndex = 0; } if (!outstreamDirectPlayed) { console.log('OUTSTREAM direct'); setUpIMA(true); } else { if (soundAllowed) { const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { console.log('OUTSTREAM sound forbidden'); renderBanner(); }); } } else { renderBanner(); } } } function getWrapper() { let articleWrapper = document.querySelector('.rs-outstream-placeholder'); // Outstream Placeholder from RedSys manipulation if (articleWrapper && articleWrapper.style.display !== 'block') { articleWrapper.innerHTML = ""; articleWrapper.style.display = 'block'; } // Don't render OutStream on homepages if (articleWrapper === null) { if (document.querySelector('body.p-index')) { return null; } } if (articleWrapper === null) { articleWrapper = document.getElementById('iinfo-outstream'); } if (articleWrapper === null) { articleWrapper = document.querySelector('.layout-main__content .detail__article p:nth-of-type(6)'); } if (articleWrapper === null) { // Euro, Autobible, Zdravi articleWrapper = document.querySelector('.o-article .o-article__text p:nth-of-type(6)'); } if (articleWrapper === null) { articleWrapper = document.getElementById('sidebar'); } if (!articleWrapper) { console.error("Outstream wrapper of article was not found."); } return articleWrapper; } function setupDimensions() { outstreamWidth = Math.min(iinfoOutstreamPosition.offsetWidth, 480); outstreamHeight = Math.min(iinfoOutstreamPosition.offsetHeight, 320); } /** * Sets up IMA ad display container, ads loader, and makes an ad request. */ function setUpIMA(direct) { 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(); if (direct) { adsRequest.adTagUrl = directVast; console.log('Outstream DIRECT CAMPAING advert: ' + directVast); videoContent.muted = true; videoContent.volume = 0; outstreamDirectPlayed = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream 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 = outstreamWidth; // adsRequest.linearAdSlotHeight = outstreamHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function setupReplayScreen() { replayScreen.addEventListener('click', function () { iinfoOutstreamPosition.remove(); iinfoVastUrlIndex = 0; outstreamInit(); }); } /** * Sets the 'adContainer' div as the IMA ad display container. */ function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. outstreamDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( outstreamDocument.getElementById('adContainer'), videoContent); } function unmuteAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } } /** * Loads the video content and initializes IMA ad playback. */ 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(outstreamWidth, outstreamHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } /** * Handles the ad manager loading and sets ad event listeners. * @param { !google.ima.AdsManagerLoadedEvent } adsManagerLoadedEvent */ 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(); } /** * Handles actions taken in response to ad events. * @param { !google.ima.AdEvent } adEvent */ function onAdEvent(adEvent) { // Retrieve the ad from the event. Some events (for example, // ALL_ADS_COMPLETED) don't have ad object associated. const ad = adEvent.getAd(); console.log('Outstream event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: // This is the first event sent for an ad - it is possible to // determine whether the ad is a video ad or an overlay. if (!ad.isLinear()) { // Position AdDisplayContainer correctly for overlay. // Use ad.width and ad.height. videoContent.play(); } outstreamDocument.getElementById('adContainer').style.width = '100%'; outstreamDocument.getElementById('adContainer').style.maxWidth = '640px'; outstreamDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); // This event indicates the ad has started - the video player // can adjust the UI, for example display a pause button and // remaining time. if (ad.isLinear()) { // For a linear ad, a timer can be started to poll for // the remaining time. intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstreamLastError === 303) { if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } } break; case google.ima.AdEvent.Type.COMPLETE: // This event indicates the ad has finished - the video player // can perform appropriate UI actions, such as removing the timer for // remaining time detection. if (ad.isLinear()) { clearInterval(intervalTimer); } if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } break; } } /** * Handles ad errors. * @param { !google.ima.AdErrorEvent } adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstreamLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { renderBanner(); } } function renderBanner() { if (isBanner) { console.log('Outstream: Render Banner'); iinfoOutstreamPosition.innerHTML = ""; iinfoOutstreamPosition.style.height = "330px"; iinfoOutstreamPosition.appendChild(bannerDiv); } else { console.log('Outstream: Banner is not set'); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoOutstreamPosition.remove(); outstreamInit(); } else { return false; } adVolume = 1; return true; } /** * Pauses video content and sets up ad UI. */ function onContentPauseRequested() { videoContent.pause(); // This function is where you should setup UI for showing ads (for example, // display ad timer countdown, disable seeking and more.) // setupUIForAds(); } /** * Resumes video content and removes ad UI. */ function onContentResumeRequested() { videoContent.play(); // This function is where you should ensure that your UI is ready // to play content. It is the responsibility of the Publisher to // implement this function when necessary. // setupUIForContent(); } function onActiveView() { if (outstreamContainer) { const containerOffset = outstreamContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstreamPaused) { adsManager.resume(); outstreamPaused = false; } return true; } else { if (!outstreamPaused) { adsManager.pause(); outstreamPaused = true; } } } return false; } let outstreamInitInterval; if (typeof cpexPackage !== "undefined") { outstreamInitInterval = setInterval(tryToInitializeOutstream, 100); } else { const wrapper = getWrapper(); if (wrapper) { let outstreamInitialized = false; window.addEventListener('scroll', () => { if (!outstreamInitialized) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { outstreamInit(); outstreamInitialized = true; } } }); } } function tryToInitializeOutstream() { const wrapper = getWrapper(); if (wrapper) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstreamInitInterval); outstreamInit(); } } } else { clearInterval(outstreamInitInterval); } } }
OSZAR »