Začať transakciu 1c 8. Transakcia bankovou kartou, čo to je jednoduchými slovami. Vplyv transakcií na fungovanie programových objektov

Tento článok obsahuje väčšinou teoretické informácie potrebné na pochopenie dôležitosti transakcií a zámkov v 1C:Primary a DBMS, čo ovplyvňuje výkon 1C:Primary. Článok populárno popisuje prepojenie medzi transakciami a zámkami cez úrovne izolácie a problémy súbežného prístupu.
Tento článok nie praktické rady na riešenie konkrétnych problémov, ale je základom pre pochopenie nasledujúcich článkov, ktoré popisujú kroky na optimalizáciu a zlepšenie výkonu 1C:Enterprise súvisiaceho s transakciami a zámkami.

Výkon priamo súvisí s TRANSAKCIAMI 1C:Pіdpriёmstvo

"Konflikt uzamknutia pri vykonávaní transakcie:
Poskytovateľ Microsoft OLE DB pre SQL Server:Časový limit žiadosti o uzamknutie bol prekročený.
HRESULT=80040E31, SQLSrvr: SQLSTATE=HYT00, stav=34, závažnosť=10, natívny=1222, riadok=1"

Ak 1C:Enterprise zobrazí takúto chybu, potom máte problémy s výkonom spojeným so zámkami. Riešenie takýchto problémov nie je vždy triviálne a vyžaduje si určité špeciálne znalosti o prevádzke DBMS a 1C: Enterprise, ktoré často nemajú ani programátori 1C: Enterprise, ani správcovia systému. ďalší cyklusčlánky by mali vyplniť medzeru v týchto vedomostiach.

Transakcie 1C:Pіdpriyomstvo

Transakcia je nedeliteľný sled operácií s údajmi. Vykonáva sa na princípe všetko alebo nič a prekladá databázu
z jedného integrálneho stavu do iného integrálneho stavu. Ak z nejakého dôvodu jedna z akcií transakcie zlyhá alebo dôjde k nejakej poruche systému, databáza sa vráti do stavu, ktorý bol pred začiatkom transakcie (transakcia sa vráti späť).

Existuje niekoľko požiadaviek na transakčný mechanizmus (známy pod skratkou ACID): Atomicita (Atomicita), Dôslednosť (Dôslednosť), izolácia (Izolácia), Udržateľnosť (Trvanlivosť)

Atomicita (Atomicita). Táto požiadavka spočíva v tom, že všetky údaje, s ktorými transakcia funguje, musia byť buď potvrdené ( zaviazať sa) alebo zrušené ( rollback). Nemala by nastať situácia, že niektoré zmeny budú potvrdené a niektoré zrušené.

Pre 1C:Enterprise zaisťujú vlastnosti transakcií Atomicita logickú integritu údajov. Napríklad, keď je dokument napísaný, údaje jeho hlavičky sa zapíšu do jednej fyzickej tabuľky DBMS a údaje tabuľkovej časti sa zapíšu do inej. Zaznamenanie dokumentu v transakcii zaručuje, že údaje v oboch fyzických tabuľkách (hlavička a tabuľkové časti) bude konzistentný (nie je možné napísať tabuľkovú časť bez hlavičky alebo naopak).

izolácia (Izolácia). Transakcie musia prebiehať autonómne a nezávisle od iných transakcií. Keď je súčasne spustených veľa konkurenčných transakcií, akákoľvek aktualizácia konkrétnej transakcie bude pred ostatnými skrytá, kým nebude transakcia potvrdená. Existuje niekoľko úrovní izolácie transakcií, ktoré vám umožňujú vybrať si najoptimálnejšie riešenie z hľadiska výkonu a integrity údajov. Hlavnou metódou implementácie týchto úrovní sú zámky, o ktorých sa bude diskutovať v tomto článku.

Denník transakcií (SQL Server)

Každá základňa SQL dáta Server vedie transakčný protokol, ktorý zaznamenáva všetky zmeny údajov vykonané v každej transakcii. Ak transakcia nebola z nejakého dôvodu dokončená (vrátená späť alebo prerušená), potom SQL server podľa protokolu transakcií zruší všetky transakcie transakcie postupne v opačné poradie. To znamená, že zrušenie dlhej transakcie zápisu bude trvať dlho.

Protokol transakcií je kritickým komponentom databázy a v prípade zlyhania systému môže byť potrebné uviesť databázu do konzistentného stavu. Protokol transakcií by sa nemal vymazávať ani upravovať, pokiaľ nie sú známe možné dôsledky.

V závislosti od nastavení databázy (model obnovy) môže byť transakčný protokol transakcie skrátený (údaje starých transakcií sú vymazané) buď automaticky alebo manuálne (model obnovy=FULL). Niekedy Systémový administrátor zabudne skrátiť denník a môže sa vyskytnúť chyba: " Denník transakcií pre databázu je plný"

Fyzicky sa protokol transakcií MS SQL Server DBMS nachádza v súbore .LDF (a dátový súbor je .MDF).

Transakcie v systéme 1C:Enterprise

Systém 1C:Enterprise implicitne volá transakcie pri vykonávaní akýchkoľvek akcií súvisiacich s úpravou informácií uložených v databáze. V transakcii sa napríklad volajú všetky obslužné rutiny udalostí umiestnené v moduloch objektov a sady záznamov, ktoré súvisia s modifikáciou údajov databázy.

Príklad implicitnej transakcie: postupnosť udalostí pri účtovaní dokladu z formulára

V praxi môžete určiť, že záznam objektu 1C: Prijatie (napríklad dokument) sa vyskytuje v transakcii vykonaním nasledujúceho experimentu: Skúste vykonať a zavrieť (kliknite na „OK“ vo forme dokumentu) nový dokument vopred vedieť, že sa neuskutoční (napríklad určením veľkého množstva tovaru na odpis). Keďže pozostatky sa kontrolujú vo fáze odosielania dokumentu v obslužnom programe „ProcessingPost()“, v tomto momente by už mal byť samotný dokument zapísaný do databázy, pretože dokument je zapísaný skôr medzi „BeforeWrite()“ a udalosti "OnWrite()". Ale po zobrazení chybového hlásenia (chýbajúce požadované množstvo) zistíme, že dokument nie je zapísaný do databázy (príznak úpravy "*" zostane a doklad sa v zozname nezobrazí). Je to preto, že transakcia sa po výskyte chyby vráti späť.

Použitie explicitného vyvolania transakcie

Metóda StartTransaction() umožňuje otvoriť transakciu. Potom môžu byť všetky zmeny v informáciách databázy vykonané nasledujúcimi príkazmi buď akceptované ako celok, alebo zamietnuté ako celok. Ak chcete prijať vykonané zmeny, použite metódu CommitTransaction().
Ak chcete vrátiť späť všetky zmeny vykonané v otvorenej transakcii, použite metódu CancelTransaction().

Stupeň izolácie transakcií je určený úrovňami izolácie. Najvyššia úroveň izolácie zaisťuje, že transakcia je úplne nezávislá od ostatných paralelných transakcií, ale výrazne sa znižuje aj miera paralelizmu – ostatné transakcie musia čakať na prístup k zdrojom používaným v aktuálnej transakcii. Najnižšia úroveň izolácie je opačná: poskytuje maximálny stupeň paralelnej prevádzky, čo vedie k výraznému vplyvu iných transakcií na aktuálnu a vzniku problémov s paralelným prístupom. Vo viacužívateľských systémoch treba nájsť kompromis medzi paralelizmom (súčasný prístup k zdrojom) a úrovňami izolácie transakcií. Jazykový štandard SQL definuje úrovne izolácie, ktoré možno nastaviť, aby sa predišlo špecifickým problémom so súbežnosťou.

Problémy so súbežnosťou

Keď sa transakcie vykonávajú paralelne, môžu sa vyskytnúť tieto problémy:
- stratená aktualizácia(angl. lost update) - ak je jeden dátový blok zmenený súčasne rôznymi transakciami, jedna zo zmien sa stratí;
- „špinavé“ čítanie(angl. dirty read) - načítanie dát pridaných alebo zmenených transakciou, ktoré následne nebudú potvrdené (vrátené späť);
- neopakujúce sa čítanie(anglické neopakovateľné čítanie) - pri opätovnom čítaní v rámci tej istej transakcie sa zmenia predtým načítané údaje;
- fantómové čítanie(Anglické fantómové čítanie) - jedna transakcia v priebehu jej vykonávania niekoľkokrát vyberie mnoho riadkov podľa rovnakých kritérií. Ďalšia transakcia medzi týmito načítaniami pridá alebo odstráni riadky, ktoré zodpovedajú kritériám načítania prvej transakcie, a skončí úspešne. V dôsledku toho sa ukáže, že rovnaké výbery v prvej transakcii poskytujú rôzne sady riadkov.

Zvážte situácie, v ktorých sa tieto problémy môžu vyskytnúť:

Stratená aktualizácia

"Špinavé" čítanie

Ak sa pri zapisovaní údajov vyskytne predchádzajúci problém, môže dôjsť k nečistému čítaniu, keď sa jedna transakcia pokúsi prečítať údaje, na ktorých pracuje iná súbežná transakcia.
Predpokladajme, že sú otvorené dve transakcie rôzne aplikácie, v ktorom sa vykonávajú nasledujúce príkazy SQL:

Neopakujúce sa čítanie

Predpokladajme, že máme dve transakcie otvorené rôznymi aplikáciami, ktoré vykonávajú nasledujúce príkazy SQL:

Transakcia 1 Transakcia 2
SELECT f2 FROM tbl1 WHERE f1=1;
UPDATE tbl1 SET f2=f2+1 WHERE f1=1;
SELECT f2 FROM tbl1 WHERE f1=1;

V Transakcii2 sa vyberie hodnota poľa f2, potom sa v Transakcii1 zmení hodnota poľa f2. Ak sa znova pokúsite vybrať hodnotu z poľa f2 v transakcii 1, získa sa iný výsledok. Táto situácia je neprijateľná najmä vtedy, keď sa údaje čítajú s cieľom čiastočne ich modifikovať a zapísať späť do databázy.

fantómové čítanie

Predpokladajme, že existujú dve transakcie otvorené rôznymi aplikáciami, ktoré vykonávajú nasledujúce príkazy SQL:

Transakcia 1 Transakcia 2
SELECT SUM(f2) FROM tbl1;
INSERT INTO tbl1 (f1,f2) VALUES(15,20);
SELECT SUM(f2) FROM tbl1;

V Transaction2 sa vykoná príkaz SQL, ktorý používa všetky hodnoty poľa f2. Potom sa v Transaction1 vykoná vloženie Nový riadok, čo spôsobí opätovné vykonanie príkazu SQL v transakcii 2 s iným výsledkom. Táto situácia sa nazýva fantómová vložka a je špeciálnym prípadom neopakujúceho sa čítania.

Úrovne izolácie transakcií

Úroveň izolácie je vlastnosť transakcie, ktorá určuje nezávislosť operácie transakcie od ostatných transakcií, ktoré prebiehajú paralelne.

Norma zavádza nasledujúce štyri úrovne izolácie, ktorých použitie zabraňuje určitým problémom súbežnosti:
- READ_UNCOMMITTED- nefixované čítanie. Táto úroveň izolácie rieši problém „stratenej aktualizácie“, ale je možné získať rôzne výsledky pre rovnaké dopyty bez zohľadnenia potvrdenia transakcie (pravdepodobne problém „špinavého čítania“). Toto je najnižšia úroveň izolácie používaná v DBMS a poskytuje maximálny paralelizmus.
- READ_COMMITTED- pevné čítanie. Táto úroveň izolácie zabraňuje problému „špinavého čítania“, ale umožňuje vám získať rôzne výsledky pre rovnaké dopyty v transakcii (možnosť „neopakovateľného čítania“ je zachovaná);
- REPEATABLE_READ- opakované čítanie. Táto úroveň izolácie rieši problém „neopakovateľného čítania“. Na tejto úrovni je možné vykonať príkazy INSERT vedúce ku konfliktnej situácii „fantómového vloženia“. Táto úroveň je užitočná, ak spustenie príkazov SQL nie je ovplyvnené pridaním nových riadkov;
- SERIALIZOVATEĽNÝ- sekvenčné vykonávanie. Tretia úroveň. Táto úroveň zaručuje predchádzanie všetkým vyššie opísaným problémom paralelného prístupu, ale preto sa pozoruje najnižší stupeň paralelizmu, pretože spracovanie transakcií (s prístupom k rovnakým zdrojom) sa vykonáva iba postupne.

Riešenie problému paralelného prístupu k transakciám a úrovní izolácie vo forme tabuľky možno znázorniť takto („+“ - problém je vylúčený):

Problémy súbežnosti a úrovne izolácie fantómové čítanie Neopakujúce sa čítanie "Špinavé" čítanie Stratená aktualizácia
SERIALIZOVATEĽNÝ + + + +
REPEATABLE_READ - + + +
READ_COMMITTED - - + +
READ_UNCOMMITTED - - - +

Na úrovni servera SQL si môžete sami nastaviť úroveň izolácie:
na celú reláciu, napríklad so smernicou
NASTAVTE ÚROVEŇ IZOLÁCIE TRANSAKCIE, KTORÉ JE SÉRIALIZOVATEĽNÉ

pre konkrétny dotaz pomocou konštrukcie WITH
VYBERTE Meno ZO zmlúv S SERIALIZOVATEĽNÝMI

Získajte úroveň izolácie nastavenú v aktuálnej relácii
vyberte transakčnú_izoláciu_úroveň zo sys.dm_exec_sessions
kde session_id = @@spid

AT automatický režim(starý režim používaný v 8.0) správa zámkov údajov využíva úrovne izolácie transakcií REPEATABLE_READ a SERIALIZOVATEĽNÝ poskytovaný systémom správy databázy. Tieto úrovne izolácie transakcií poskytujú konzistentné a konzistentné čítanie údajov a od vývojára nie je potrebná žiadna ďalšia akcia na správu zámkov.

Režim riadeného uzamykania (od verzie 8.1) umožňuje zvýšiť paralelnosť práce používateľov v režime prevádzky klient-server použitím nižšej úrovne izolácie databázových transakcií ( READ_COMMITTED); štandardne je nastavená rovnaká úroveň izolácie
a v čs SQL server. Pri zápise údajov do transakcie objekty 1C:Enterprise automaticky uzamknú požadované údaje. Pri čítaní však vývojár potrebuje spravovať zámky údajov v prípadoch, keď obchodná logika vyžaduje konzistentné a konzistentné čítanie údajov v transakcii.

Pre verziu 8.3 v riadenom režime je úroveň izolácie READ_COMMITTED_SNAPSHOT.

závery

Transakcie sú nevyhnutným mechanizmom DBMS, ktorý sa aktívne používa v 1C:Enterprise. Na vyriešenie problémov so súbežnosťou možno transakcie v DBMS vykonávať s rôznymi úrovňami izolácie.

Úroveň izolácie, ktorú používa 1C:Enterprise READ_COMMITTED rieši problémy „Stratená aktualizácia“ a „Nečisté čítanie“: zmenené údaje sú zamknuté až do konca transakcie pre čítanie aj úpravu (uplatňuje sa exkluzívny zámok).

úroveň izolácie READ_COMMITTED nerieši problémy „Neopakovateľné čítanie“ a „Fantómové čítanie“. Na vyriešenie týchto problémov je potrebné použiť spravované zámky "1C:Pіdpriєmstvo" nainštalované programovo.

8.3 používa flexibilnejšiu úroveň izolácie READ_COMMITTED_SNAPSHOT.

Slovo „transakcia“ sa k nám dostalo až koncom deväťdesiatych rokov. Bolo to obdobie rozvoja moderného bankového systému a všeobecného rozmachu počítačov. Potom sa tento pojem začal vyskytovať v hovorovej a literárnej reči. A ak s problémami programátorov Obyčajní ľudia stretávajú zriedkavo, každý musí riešiť banky. Takmer každá operácia, od kontroly zostatku na účte až po zložité vnútrobankové platobné prevody, sa môže považovať za transakciu. Toto slovo sa v bankových operáciách vyskytuje takmer častejšie ako pojmy ako „peniaze“ alebo „úver“. Málokto zo zákazníkov banky zároveň plne chápe jej podstatu.

Význam slova

Transakcie sú určité postupy na interakciu akýchkoľvek objektov počas určitého časového obdobia. Takéto postupy vytvorili programátori. Majú jasný procesný charakter. Každá transakcia je kombináciou troch nevyhnutných komponentov:

  • žiadosť;
  • exekúcia;
  • správa.

Proces bežného vykonávania transakcie môže byť pomerne zložitý, ale výsledok tohto postupu má iba dva stavy. To znamená, že transakcia môže alebo nemusí byť dokončená.

Bankové transakcie

Čo znamená slovo „transakcia“? Aké procesy prebiehajú, keď sa to robí? Aby som bol presný, transakcie sú akékoľvek bankové transakcie súvisiace s pohybom Peniaze. Ale najčastejšie sa tento termín používa pri používaní elektronických faktúr. Alebo priamo označuje operácie s bankovými kartami.

Výraz „transakcie“ znamená transakcie pomocou elektronického účtu. To zahŕňa platenie účtov za energie, nákup tovaru v obchode pomocou plastovej karty, pripisovanie miezd a štipendií a mnoho ďalších peňažných transakcií.

Typy transakcií

V bankovníctve existujú dva typy operácií:

  1. Online transakcie sú manipulácie s bezhotovostnými peniazmi prostredníctvom pripojenia k bankovému centru v reálnom čase. Najzrejmejším príkladom je práca s terminálom.
  2. Offline transakcie sú uskutočnenie bankovej operácie bez priameho kontaktu účastníkov. Napríklad mzdy pre zamestnancov. Peniaze sa odpisujú z účtu organizácie a zamestnanec dostane iba oznámenie o doplnení zostatku na svojom bežnom účte.

Aby ste lepšie pochopili podstatu bankových transakcií, zvážte niekoľko ich možností.

Peňažná transakcia

Najjednoduchším príkladom takejto operácie je prevod medzi vlastnými účtami, príjem alebo pripísanie peňazí, vloženie hotovosti cez bankomat alebo terminál. Takéto operácie banka zvyčajne vykonáva bez provízie. Pri prevodoch medzi dvoma rôznymi osobami je to zložitejšie – v rámci tej istej finančnej inštitúcie môže provízia za prevody dosiahnuť 3 %. Ak hovoríme o rôznych bankách v rámci krajiny, provízia bude ešte vyššia. Najdrahší prevod je do zahraničných inštitúcií, keďže sa tam okrem provízie často účtuje aj takzvaný transakčný poplatok.

Preklady

Prevody z jedného účtu na druhý niekedy vedú k nepríjemným chybám. Najmenšia nepresnosť v pravopise priezviska príjemcu môže viesť k zablokovaniu manipulácie elektronický systém bezpečnosť. Automatická transakcia problém vyrieši. Stáva sa to napríklad vtedy, keď sú prostriedky pripísané na zostatok príjemcu pomocou čísla bankovej karty. To výrazne znižuje možnosť chyby. V prípade resetovania transakcie sa peniaze jednoducho vrátia na zostatok majiteľa. Je pravda, že sa to stane do desiatich alebo pätnástich kalendárnych dní.

Ak odosielateľ nemá bankový účet, môžete využiť službu prevodu peňazí. Najznámejší medzinárodných operátorov– MoneyGram, Western Union, Anelik, Contact a ďalší. Hlavnou výhodou takýchto operácií je vysoká rýchlosť transakcií. Hlavnou nevýhodou je pomerne vysoká provízia.

Čo robiť, ak transakcia zlyhá?

V prípade akejkoľvek neštandardnej situácie súvisiacej s prevodom finančných prostriedkov musíte o tom bezodkladne informovať prevádzkovateľa banky alebo terminálu. V tomto prípade je vysoko pravdepodobné, že peniaze sa vrátia na zostatok odosielateľa alebo pôjdu na miesto určenia.
Operátor vám pomôže, ak:

  • Počas transakcie došlo k poruche (program zamrzol, elektrina sa vypla) a peniaze už boli preč. Zavolaj horúcu linku zaznamená vašu požiadavku. Po vykonaní postupu kontroly a odstránenia chyby budú odborníci schopní dokončiť operáciu manuálne.
  • Terminál alebo bankomat nevydal potvrdenie o transakcii. Dôvod môže byť banálny - nedostatok pokladničnej pásky v automate. Po kontaktovaní operátora vám bude ponúknutý duplikát účtenky. Zvyčajne sa odosiela na zadanú e-mailovú adresu.
  • Chyba v zadaných detailoch. Peniaze sú preč, ale príjemca ich nikdy nevidel.
    Editor môže pomôcť vyriešiť tento problém: napríklad nájsť chybu v čísle účtu príjemcu. V tomto prípade sa peniaze ku klientovi nedostanú len kvôli bezpečnostným pravidlám. Takéto prostriedky banka nevyberá, ale sú držané 10 dní na osobitnom dočasnom účte. Ak odosielateľ včas kontaktuje finančnú inštitúciu, uvedie čas transakcie, sumu prevodu a odpovie na niekoľko otázok, peniaze sa odblokujú. Po odpočítaní provízie za transakciu bude čiastka vrátená na zostatok odosielateľa.

Ako vidíte, bankové transakcie sú zaujímavým, nevyhnutným postupom v živote každého z nás. Keď budete nabudúce vykonávať jednoduchý prevod alebo výber peňazí z karty, zamyslite sa nad tým, o koľko nám takéto manipulácie uľahčujú život. Koniec koncov, teraz už pravdepodobne viete, čo sú transakcie. Význam tohto slova pre vás nie je tajomstvom.

Mnoho ľudí sa pýta, čo je to transakcia? Koniec koncov, s týmto slovom sa stretávame neustále, najmä ak človek pracuje s peniazmi. Ak sa to vezme globálne - postupnosť operácií výmeny údajov, po ktorých sa vykonajú systémové zmeny.

Najčastejšie sa tento výraz používa pri prevodoch peňazí a nákupe tovaru. To môže byť:

  • Vydávanie hotovosti v bankomate alebo pobočke banky;
  • Nadobudnutie určitého počtu akcií na burze cenných papierov;
  • Platba kartou v predajni.

Po potvrdení transakcie a odoslaní peňazí sa transakcia považuje za úspešne dokončenú. Peniaze sa stiahnu z účtu kupujúceho alebo klienta inštitúcie a tovar sa prevedie jednotlivcovi. Dá sa povedať, že transakcia slúži ako spôsob dobrovoľného prevodu peňazí z účtu osoby osobe poskytujúcej službu. Všetky transakcie sú zaznamenané v databáze finančnej inštitúcie. Nezáleží na tom, či bola operácia úspešná alebo nie. Napríklad v prípade nesprávneho prevodu prostriedkov na bankovú kartu.

Nemyslite si však, že pojem transakcia sa uplatňuje len vo finančnom sektore. Tento výraz často používajú aj IT spoločnosti, najmä pokiaľ ide o programovanie databáz. V tomto prípade bude tento výraz znamenať určitú postupnosť zmien vykonaných v dátumovej základni.

Tu sú tiež dve možnosti. Keď je operácia schválená, priradí sa jej „Commit“, ale ak z nejakého dôvodu dôjde k zlyhaniu, priradí sa „Rollback“. Najčastejšie sa to stane, keď niektoré z čísel chceli deliť nulou alebo zadali sumu, ktorá nezodpovedala tej, ktorá bola predtým zadaná do databázy.

Druhy

Najčastejším prípadom využitia transakcie je platba platobnou kartou z banky na území ktoréhokoľvek obchodného centra, obchodu alebo finančnej inštitúcie. Operácia sa začína, keď chce majiteľ zaplatiť za tovar, potom odovzdá svoju bankovú kartu pracovníkovi zodpovednému za registračnú pokladňu.

Ďalej sa karta umiestni do špeciálneho terminálu, kde stačí potvrdiť následnú operáciu. Na to je potrebné zadať údaje, preddefinovaný PIN kód. Následne terminál rozhodne, či zadané heslo bolo správne, alebo či má byť odmietnuté. V každom prípade budú informácie o transakcii zaznamenané v konkrétnej databáze. Stáva sa to v dôsledku prenosu údajov do obsluhy platobného systému túto kartu. A už v tejto fáze prebieha úplné overenie pravosti zadaných údajov. Koniec koncov, môžu byť prítomní na výplatnej listine alebo neprítomní.

Ak je však všetko v poriadku, transakcia je úspešne dokončená a odoslaná priamo do vystavujúcej banky. Prostredníctvom neho bola realizovaná výroba tejto platobnej karty. Potom sú informácie o transakcii zaslané do tlakového centra, kde sú zriadené informácie o právach na používanie platobného systému.

Stojí za zmienku, že ak sa v jednej z fáz zistí chyba, nesúlad údajov, transakcia sa jednoducho odmietne.

Oblasti použitia

V rôznych oblastiach použitia sa používajú rôzne označenia slova „transakcia“:

  • Ekonomika pre nich znamená ukladanie peňazí z jedného tokového účtu na druhý. To platí najmä pre transakcie nákupu a predaja;
  • Operácie s bankomatmi vedú ako transakcia k vydaniu hotovosti klientovi, ktorý na jej prijatie použil bankovú kartu alebo číslo účtu;
  • Politické vysvetlenie je dohoda o vzájomne výhodných podmienkach medzi oboma stranami.

Veľa závisí od karty vydanej bankou. Debetné a kreditná karta slúžil inak. Priame ovplyvňovanie má aj prioritu prihlásenia, ktorú nastavuje finančná inštitúcia, ktorá kartu vydala. V závislosti od týchto faktorov sa rýchlosť operácie bude líšiť.

Operácie s malým množstvom peňazí vyzerajú jednoduchšie. Ak osoba uviedla určité nastavenie v parametroch bude mať možnosť počas transakcie nezadávať heslo. Prebehne automaticky a ak je na účte dostatok finančných prostriedkov, budú odpísané a informácie o operácii sa zaznamenajú do databázy.

Dokonca aj oblasti, ktoré úplne nesúvisia s financiami, fungujú s pojmom „transakcie“. Príkladom je psychológia. Odborníci v tejto oblasti nazývajú výmenu podnetov, ku ktorým dochádza počas rozhovoru dvoch jednotlivcov, transakciou. Takáto aplikácia je trochu vymyslená, ale má právo na existenciu. Teraz viete, čo sú transakcie.

Musíte poznať aspoň vyššie uvedené informácie o transakciách, keďže sa bez nich zaobídete modernom svete proste nemožné. Minimálna predstava by teda stále mala byť.

Každý klient má svoje opakujúce sa zvyky a tradície. Či už je to obľúbený deň na nakupovanie, preferencia priemernej ceny produktu alebo ďalšie možnosti produktu. Všetky tieto informácie nám pomôžu povzbudiť zákazníka k druhému nákupu a prechodu od nového používateľa k bežnému zákazníkovi.

Prechod od jednorazových nákupov k stálym zákazníkom

Podarilo sa vám previesť klienta. To je super, čo ďalej? Podľa štatistík 30 % až 80 % kupujúcich v odvetví elektronického obchodu vykoná objednávku iba raz za celý životný cyklus. V hernom priemysle robí 60 % zákazníkov druhú objednávku. Ako môžeme získať stálych zákazníkov s takým sklamaním čísel?

Táto otázka znepokojuje obchodníkov na celom svete. Tvrdo pracujú, všetko svoje úsilie vynakladajú na presun klientov z jednorazových na pravidelných. Či už ide o primárne objednávky v maloobchode alebo vklady v online hrách. Prečo je druhý rád taký dôležitý? Ak klient uskutoční druhú objednávku alebo druhý vklad, pravdepodobnosť vykonania tretej objednávky sa desaťnásobne zvýši v porovnaní so zákazníkmi, ktorí urobili iba jednu objednávku.

Nižšie uvedená tabuľka sumarizuje desať najlepších spoločností elektronického obchodu v Európe a USA. Ako je možné vidieť z grafu, pravdepodobnosť uskutočnenia ďalšej transakcie sa zvyšuje s počtom aktuálnych transakcií.


Pravdepodobnosť uskutočnenia ďalšej transakcie v závislosti od počtu aktuálnych transakcií

Mnoho spoločností sa spája jednorazových klientov do jednej skupiny a použiť rôzne metódy a správy na stimuláciu druhého nákupu. Znie to ako dobrý plán, však? Tak či onak, všetci zákazníci v skupine sú kupujúci na jedno použitie. Ale sme tu, aby sme diskutovali o inom prístupe. Táto druhá metóda spočíva v rozdelení skupiny klientov na jedno použitie do rôznych segmentov na základe charakteristík ich prvej transakcie. Poďme sa ponoriť hlbšie a pouvažujme nad predpokladmi takejto segmentácie.

Deň v týždni

Začneme analýzou správania opakovaných kupujúcich 10 najväčších spoločností a uvidíme, či existuje vzťah medzi dňom prvej objednávky a dňom druhej objednávky. Začnime s analýzou športových stávok. V tejto téme klient skladá vklad v deň, kedy najväčší počet zápasy svojho obľúbeného tímu, zvyčajne v sobotu alebo nedeľu. Pravdepodobnosť návratu takýchto klientov a uzatváranie stávok v týchto dňoch je pomerne vysoká.

Zozbierali sme údaje a vykonali testy, výsledky boli rovnaké, ako sme očakávali. V podstate druhý vklad bol vykonaný v rovnaký deň v týždni ako prvý. Vidno to z maximálnej hodnoty pravdepodobnosti umiestnenej na uhlopriečke štvorca.


Pravdepodobnosť transakcie druhej transakcie v závislosti od dňa v týždni prvej transakcie pri športových stávkach

Závislosť medzi týmito dvoma transakciami môže pomôcť lepšie zacieliť reklamné aktivity na rôzne kohorty jednorazových zákazníkov (v tomto prípade máme 7 skupín podľa dňa prvej transakcie) a pripomenúť vám, aby ste druhú transakciu dokončili vo vhodných dňoch. . Zaujímavejším krokom je testovanie tejto hypotézy v maloobchode.


Pravdepodobnosť uskutočnenia transakcie druhej transakcie v závislosti od dňa v týždni prvej transakcie v maloobchode

Môžeme vidieť podobnú situáciu. Zákazníci uskutočnia svoj druhý nákup v rovnaký deň v týždni ako prvý. Je dôležité poznamenať, že rozptyl v maloobchode bol vyšší ako pri športových stávkach. Ale samotná závislosť sa prejavila u každej firmy. Najobľúbenejším dňom na nákupy je pondelok, najneobľúbenejším je nedeľa. Ak vezmeme do úvahy závislosti medzi objednávkami iba pre jednu značku, dostaneme toto.


Pravdepodobnosť uskutočnenia transakcie druhej transakcie v závislosti od dňa v týždni prvej transakcie v maloobchode pre jednu značku

Máme jednoduché vysvetlenie tohto správania v športových stávkach, ale prečo vidíme tento výsledok v maloobchode? Dôvodom môže byť, že kupujúci majú vo svojom živote určité vzorce. Vo štvrtok a piatok chodíte do posilňovne, cez víkendy idete von s rodinou, v pondelok zostávate neskoro v práci a v piatok sa stretávate s priateľmi. Vzor nákupu nevyzerá zvláštne vzhľadom na všetky ostatné.

Denná doba

Ako asi tušíte, testovali sme podobné hypotézy pre dennú dobu. Existuje korelácia medzi časom prvej objednávky a druhej, ak bola druhá objednávka zadaná aspoň o sedem dní neskôr? Deň sme rozdelili na 4 obdobia: noc, ráno, večer a poludnie – a skontrolovali sme rozdelenie druhých objednávok pre každé časové obdobie pre 6 značiek.


Pravdepodobnosť druhej objednávky v závislosti od času dňa prvej objednávky

Vzťah medzi prvým a druhým poradím podľa dennej doby vyzerá očividne. Zákazníci, ktorí prvýkrát zadajú objednávku neskoro v noci, s väčšou pravdepodobnosťou urobia druhú objednávku v rovnakom čase.

Cena tovaru v objednávke

Ako marketéri sa snažíme zvyšovať počet položiek na objednávku. Upselling je spôsob života v marketingovom svete a ak nie, tak by mal byť. Mali by sme sa však vždy snažiť predať produkt ďalej? Je to najlepšie riešenie pre všetkých našich klientov? V našej analýze sme skúmali, či sa náklady na tovar v druhom poradí v porovnaní s prvým zvýšia.

Ako zdroje údajov sa používajú rôzne značky, preto boli pre každú značku identifikované samostatné segmenty s hodnotou nákladov na tovar. Existuje 6 cenových skupín.


Pravdepodobnosť nákladov na druhú objednávku v závislosti od nákladov na prvú objednávku

Väčšina zákazníkov, ktorých objednávky boli zadané v nízkej cenovej kategórii, zostala v rovnakom rozsahu aj pri druhej objednávke.

Záver

Naša analýza vyššie ukazuje, čo sa môžeme naučiť z prvých objednávok. Hlavná vec, ktorú si musíme zapamätať, je, že by sme nemali dávať všetkých klientov na jedno použitie do rovnakej skupiny. Oplatí sa segmentovať zákazníkov v závislosti od ich dňa v týždni a času nákupu, hodnoty objednávky.
Použitie týchto metód a krokov vám pomôže lepšie pochopiť, ako zvýšiť LTV a získať viac lojálnych zákazníkov.

2017-10-31

Ako vytvoriť variant pre transakciu pomocou SHD0?

Vysvetlenie k otázke

V jednej z mojich poznámok som opísal postupnosť akcií, ktoré je potrebné vykonať, aby sa skrylo pole v transakcii. Mechanizmus, ktorým je možné túto operáciu vykonať, je mnohým konzultantom dobre známy. Pripomínam, že názov tohto mechanizmu je transakcia SHD0.

V tejto poznámke chcem zvážiť postupnosť akcií, ktoré je potrebné vykonať na implementáciu požiadavky:

  • Samostatný prístup k poliam jedného infotypu pre dve skupiny používateľov s ním pracujúcich za predpokladu, že majú rovnakú úroveň oprávnenia pre tento infotyp. Inými slovami, sprístupniť niektoré polia niektorým používateľom a iné iným.

Z pôvodných údajov: transakcia, s ktorou používatelia pracujú - PA30. Na infotype v tomto prípade nezáleží. Konkrétne v mojom príklade použijem infotyp HR.

Ako príklad dobre poslúži infotyp. 0002 - "Osobné údaje"

Sformulujme úlohu takzvanej deľby moci takto:

  • Lúka mar.stav Infotyp 0002 "Osobné údaje" musí byť neupraviteľný (t. j. iba na čítanie);
  • Lúka Platné od dátumu aktuálneho rodinného stavu Infotyp 0002 "Osobné údaje" musí byť skrytý.

Riešenie problému

Na vyriešenie vyššie uvedeného problému je potrebné vykonať niekoľko postupných akcií, o ktorých sa bude diskutovať nižšie. V skratke:

  1. Vytvorte samostatnú transakciu pre skupinu používateľov, ktorí potrebujú zmeniť úroveň prístupu k poliam infotypu;
  2. Vytvorte variant obrazovky, v ktorom nastavíte viditeľnosť polí a následne priradíte variantu obrazovky k vytvorenému variantu transakcie (ukázalo sa to príliš kučeravé, ale v skutočnosti nič zložité).
  3. Vytvorte variant pre túto transakciu tak, že k nej priradíte variant obrazovky, v ktorom je nakonfigurovaná vhodná viditeľnosť poľa;
  4. Vytvorte rolu používateľa, do ktorej chcete zahrnúť transakciu a priraďte ju používateľom;
  5. Spustite testovanie.

1. Vytvorte novú transakciu

Keďže hlavná transakcia je PA30, vezmeme ho ako základ a skopírujeme ho do nového. Môžete to urobiť transakciou. SE93

Tabuľka T588A skopírujte existujúci záznam s kódom transakcie PA30 pre nový a skúste znova spustiť novú transakciu

Transakcia sa úspešne spustí. Prejdime k ďalšiemu bodu.

2. Vytvorte variant pre novú transakciu

Pre novú transakciu vytvoríme variant, v ktorom definujeme úroveň prístupu k poliam infotypu. Dovoľte mi pripomenúť, že potrebujem zmeniť úroveň prístupu k poliam " mar.stav" a " Platné od dátumu aktuálneho rodinného stavu". Tieto akcie sa musia vykonať v transakcii SHD0.

V teréne Kód transakcie uveďte názov novej transakcie (pozri bod #1. Vytvorenie novej transakcie)

2.1 Vytvorenie variantu obrazovky

Na záložke "Varianty obrazovky" musíte vytvoriť variant obrazovky použitý pre infotyp 0002. V tomto variante musíte pre polia použiť požadované pravidlá zobrazovania. Všetko, čo potrebujete vedieť, je príslušný fond modulov a číslo obrazovky (ak to chcete urobiť, na obrazovke úprav infotypu vyberte z ponuky Systém -> Stav)

Nasledujúce video ukazuje postupnosť akcií, ktoré je potrebné vykonať na vytvorenie variantu obrazovky

Bol vytvorený variant obrazovky. Zatiaľ neboli pozorované žiadne zmeny.

2.2 Priradenie variantu obrazovky k variantu transakcie

Priraďte vytvorený variant obrazovky k variantu transakcie a potom aktivujte vytvorený variant transakcie

2.3 Testovanie

Testovací skript je veľmi jednoduchý:

  • Začnite transakciu PA30, vyberte osobné číslo, otvorte infotyp na úpravu 0002 a skontrolujte, či sa vyššie uvedené polia zobrazujú nezmenené
  • Začnite transakciu ZPA30 a vykonajte presne rovnakú postupnosť akcií

Rozdiel je zrejmý, čo znamená, že úloha bola úspešne dokončená.

Naposledy sme recenzovali najjednoduchší spôsob pomocou vstavaného jazyka 1C. Na praxi transakcií oveľa častejšie sa používa v spojení s dizajnom. To umožňuje v prípade chyby pokračovať vo vykonávaní kódu, ako aj vydať príslušné chybové hlásenie používateľovi a zapísať informácie do denníka alebo súboru denníka na ďalšiu analýzu správcom systému.

Ak sa pozrieme na technickú dokumentáciu alebo na disk ITS, uvidíme, že 1C odporúča nasledujúci spôsob organizácie transakcie pri pokuse

Pokus //jeden. Začiatok transakcie. StartTransaction() ; //2. Blok operácií, ktoré sa vykonávajú v transakcii. //3. Ak sú všetky operácie úspešné, potvrďte transakciu. CommitTransaction() ; Výnimka //štyri. Ak sa pri vykonávaní kódu vyskytnú chyby, transakciu zrušíme. CancelTransaction() ; //5. V prípade potreby napíšte do logu. //6. V prípade potreby zobrazte používateľovi správu. EndTry ;

V skutočnosti kód nevyžaduje žiadne špeciálne vysvetlenia. Ak je v procese pokusov vykonania transakčného kódu, dôjde k chybe, okamžite spadneme do bloku výnimkou, t.j. pred metódou CommitTransaction() jednoducho sa tam nedostaneme. No a vo výnimke transakciu zodpovedajúcim spôsobom zrušíme a v prípade potreby zobrazíme chybové hlásenie a zapíšeme informácie do logu. Je veľmi žiaduce opraviť chyby v protokole, najmä pri operáciách, ktoré sa vykonávajú bez zásahu používateľa (napríklad plánované úlohy). To umožní ďalšiu analýzu chyby. Namiesto zapisovania do logu si môžete dohodnúť zasielanie správ administrátorovi e-mailom.

Teraz, vyzbrojení novými poznatkami, skúsme upraviť kód, o ktorom sa hovorí v článku o . Pripomínam, že sme zvažovali záznam v adresári Produkty a v informačnom registri cena podľa nasledujúcej schémy:

&OnServerWithoutContext StartTransaction() ; //napísať novú položku Produkt = Adresáre. Produkty. CreateElement() ; Produkt. Názov = "Hole Punch" ; Produkt. Napíšte() ; //napíš cenu Recordset = RegistreInfo. Cena. CreateRecordSet() ; NewRecord = Sada záznamov. Add() ; Nový vstup. Obdobie = CurrentDate() ; Nový vstup. Produkt = Produkt. Link; Nový vstup. Suma = 100 ; RecordSet. Napíšte() ; CommitTransaction() ; EndProcedure

Teraz dajme transakciu do bloku Pokus o výnimku. S najväčšou pravdepodobnosťou sa chyby môžu vyskytnúť iba v čase zápisu do adresára alebo do informačného registra predbežné školenie vyňať ho z transakcie.

&OnServerWithoutContext Postup ExecuteTransactionOnServer() //vytvorte nový produkt Produkt = Adresáre. Produkty. CreateElement() ; Produkt. Názov = "Hole Punch" ; //Vytvorte záznam s cenou Recordset = RegistreInfo. Cena. CreateRecordSet() ; NewRecord = Sada záznamov. Add() ; Nový vstup. Obdobie = CurrentDate() ; Nový vstup. Suma = 100 ; //Pokúste sa vykonať transakciu Pokus o spustenie transakcie() ; Produkt. Napíšte() ; Nový vstup. Produkt = Produkt. Link; RecordSet. Napíšte() ; CommitTransaction() ; Výnimka CancelTransaction() ; Správa = New MessageToUser; Správa. Text = ; Správa. Ohlásiť() ; Záznam v denníku( "Pri zaznamenávaní produktu a jeho ceny sa vyskytla chyba"); EndTry ; EndProcedure

AKO NEROBIŤ

Tí, ktorí práve začínajú pracovať s transakciami, majú často túžbu robiť to týmto spôsobom

StartTransaction() ; Pokus o spustenie transakcie() ; //Blok operácií FixTransaction() ; Výnimka CancelTransaction() ; EndTry ; Pokus o spustenie transakcie() ; //Blok operácií FixTransaction() ; Výnimka CancelTransaction() ; EndTry ; CommitTransaction() ;

Alebo v slučke

StartTransaction() ; Pre každý údaj zo slučky DataArray pokus o spustenie transakcie() ; Údaje. Napíšte() ; CommitTransaction() ; Výnimka CancelTransaction() ; EndTry ; EndCycle ; CommitTransaction() ;

Na prvý pohľad sme urobili všetko v súlade s odporúčaniami 1C. Faktom však je, že platforma 1C nepodporuje vnorené transakcie. To znamená, že technicky môžete písať takto. Všetky vnorené transakcie však zároveň nevytvárajú nové, ale odkazujú na rovnakú transakciu špičková úroveň. Ak sa teda vyskytne chyba v jednej z vnorených transakcií, ďalšia vnorená transakcia nemôže byť potvrdená. Systém zobrazí správu ako: "V tejto transakcii sa už vyskytli chyby!". Ukážme si to na príklade. Povedzme, že sa rozhodneme zaznamenať dva produkty, každý vo svojej vlastnej transakcii. A urobme tieto transakcie vnorené do tretej. Ďalej pomocou metódy umelo spôsobíme chybu v prvej transakcii ThrowException:

&OnServerWithoutContext Procedure ExecuteTransactionOnServer() StartTransaction() ; Pokus o spustenie transakcie() ; Produkt = Adresáre. Produkty. CreateElement() ; Produkt. Meno = "Tabuľka" ; Produkt. Napíšte() ; ThrowException "Chyba pri zadávaní produktu."; CommitTransaction() ; Výnimka CancelTransaction() ; Správa = New MessageToUser; Správa. Text = DescriptionErrors() Pokus o začatie transakcie() ; Produkt = Adresáre. Produkty. CreateElement() ; Produkt. Meno = "Predseda" ; Produkt. Napíšte() ; CommitTransaction() ; Výnimka CancelTransaction() ; Správa = New MessageToUser; Správa. Text = DescriptionError() ; Správa. Ohlásiť() ; EndTry ; CommitTransaction() ; EndProcedure

V dôsledku tohto postupu uvidíme v okne správy nasledovné:

(ExternalProcessing.TransactionsTrying.Form.Form.Form(20)): Chyba pri zápise položky. (ExternalProcessing.TransactionInTransactionInTry.Form.Form.Form(40)): Chyba pri volaní kontextovej metódy (Write): V tejto transakcii sa už vyskytli chyby!

Organizácia vnorených transakcií v 1C je teda absolútne nezmyselná.

Možné možnosti

Teraz sa vráťme k možnosti, kde sme zaznamenali produkt a cenu zaň. Ak dôjde k chybe pri vykonávaní transakcie, bude ťažké pochopiť, v akom bode k nej došlo - pri zaznamenávaní produktu alebo pri zaznamenávaní ceny, pretože obe sa vyskytujú v rámci toho istého pokusu. Aby sme určili, kde nastala chyba, musíme zabaliť každú operáciu zápisu do jej vlastného pokusu a vyhnúť sa vnoreným transakciám. Aby sme to dosiahli, zavedieme booleovskú premennú odmietnutie a v závislosti od jej hodnoty na konci všetkých operácií transakciu potvrdíme alebo zrušíme.

&OnServerWithoutContext Postup ExecuteTransactionOnServer() // Spustenie transakcie Odmietnuť = Nepravda ; StartTransaction() ; // Pokúšam sa napísať produkt Vyskúšajte Produkt = Adresáre. Produkty. CreateElement() ; Produkt. Názov = "Hole Punch" ; Produkt. Napíšte() ; Odmietnutie výnimky = Pravda ; Správa = New MessageToUser; Správa. Text = "Chyba pri písaní položky"; Správa. Ohlásiť() ; EndTry ; // Pokúšam sa zapísať cenu AttemptRecordset =Informácie o registroch. Cena. CreateRecordSet() ; NewRecord = RecordSet. Add() ; Nový vstup. Obdobie = CurrentDate() ; Nový vstup. Produkt = Produkt. Link; Nový vstup. Suma = 100 ; RecordSet. Napíšte() ; Odmietnutie výnimky = Pravda ; Správa = New MessageToUser; Správa. Text = "Chyba pri písaní ceny"; Správa. Ohlásiť() ; EndTry ; // Potvrdenie alebo zrušenie transakcie Ak NIE JE Zlyhanie, potom CommitTransaction() ; Else CancelTransaction() ; Koniec Ak ; EndProcedure

Môžete urobiť to isté, keď iterujeme a zapisujeme akékoľvek údaje do slučky. V tomto prípade môžeme získať zoznam všetkých údajov s chybami, ak nejaké existujú.