Začnite transakcijo z bančno kartico 1C 8, kaj je to z enostavnimi besedami. Vpliv transakcij na delovanje programskih objektov

Ta članek v veliki meri vsebuje teoretične informacije je potrebno razumeti pomen transakcij in zaklepanja v 1C:Enterprise in DBMS, kar se odraža v delovanju 1C:Enterprise. Članek popularno opisuje razmerje med transakcijami in zaklepanji prek ravni izolacije in težav s sočasnostjo.
Ta člen ne nosi praktičen nasvet za reševanje specifičnih problemov, vendar je osnova za razumevanje naslednjih člankov, ki opisujejo korake za optimizacijo in izboljšanje delovanja 1C:Enterprise v zvezi s transakcijami in zaklepanji.

Produktivnost je neposredno povezana s TRANSAKCIJAMI 1C:Enterprise

"Konflikt zaklepanja med transakcijo:
Ponudnik Microsoft OLE DB SQL Server:Časovna omejitev zahteve za zaklepanje je presežena.
HRESULT=80040E31, SQLSrvr: SQLSTATE=HYT00, stanje=34, resnost=10, izvorno=1222, vrstica=1"

Če 1C:Enterprise prikaže podobno napako, potem imate opravka s težavami pri delovanju, povezanimi z blokiranjem. Reševanje tovrstnega problema ni vedno nepomembno in zahteva določena posebna znanja o delovanju DBMS in 1C:Enterprise, ki jih niti programerji 1C:Enterprise niti sistemski skrbniki pogosto nimajo. Naslednji cikelčlanki naj le zapolnijo vrzel tega znanja.

Transakcije 1C:Enterprise

Transakcija je nedeljivo zaporedje operacij s podatki. Deluje po načelu vse ali nič in prevaja bazo podatkov
iz enega integralnega stanja v drugo integralno stanje. Če iz nekega razloga eno od transakcijskih dejanj ni izvedljivo ali pride do neke vrste sistemske motnje, se baza podatkov vrne v stanje pred začetkom transakcije (transakcija se vrne nazaj).

Za mehanizem transakcij (znan pod kratico ACID) obstaja več zahtev: Atomičnost (Atomičnost), Doslednost (Doslednost), Izolacija (Izolacija), Trajnost (Vzdržljivost)

Atomičnost (Atomičnost). Ta zahteva je, da morajo biti vsi podatki, na podlagi katerih deluje transakcija, potrjeni ( zavezati), ali preklicano ( povrnitev nazaj). Ne bi smelo priti do situacije, ko so nekatere spremembe potrjene, druge pa preklicane.

Za 1C:Enterprise lastnosti Atomicity transakcij zagotavljajo logično celovitost podatkov. Na primer, pri snemanju dokumenta se podatki njegove glave zapišejo v eno fizično tabelo DBMS, podatki tabelarnega dela pa v drugo. Beleženje dokumenta v transakciji zagotavlja, da so podatki v obeh fizičnih tabelah (glave in tabelarnih delov) bo konsistenten (nemogoče je napisati tabelarični del brez glave ali obratno).

Izolacija (Izolacija). Transakcije morajo biti izvedene avtonomno in neodvisno od drugih transakcij. Ko se hkrati izvaja veliko konkurenčnih transakcij, bo vsaka posodobitev določene transakcije skrita pred drugimi, dokler transakcija ni potrjena. Obstaja več ravni izolacije transakcij, ki vam omogočajo, da izberete najbolj optimalno rešitev v smislu zmogljivosti in celovitosti podatkov. Glavna metoda za izvajanje teh ravni je prek ključavnic, o katerih bomo razpravljali v tem članku.

Dnevnik transakcij (SQL Server)

Vsaka baza Podatki SQL Strežnik ima dnevnik transakcij, ki beleži vse spremembe podatkov v vsaki transakciji. Če se transakcija iz nekega razloga ni dokončala (povrnjena nazaj ali je bila prekinjena), potem strežnik SQL z uporabo dnevnika transakcij prekliče vse transakcijske operacije zaporedno v obratnem vrstnem redu. To pomeni, da bo dolgotrajna transakcija pisanja trajala dolgo in bo preklicana.

Dnevnik transakcij je kritična komponenta baze podatkov in bo v primeru okvare sistema morda potreben za vzpostavitev skladnosti baze podatkov. Dnevnika transakcij ne smete brisati ali spreminjati, razen če so znane možne posledice.

Odvisno od nastavitev baze podatkov (obnovitveni model) je mogoče dnevnik transakcij obrezati (stari transakcijski podatki se izbrišejo) bodisi samodejno ali ročno (obnovitveni model=FULL). včasih sistemski skrbnik pozabi obrezati dnevnik in lahko pride do napake: " Dnevnik transakcij za bazo podatkov je poln"

Fizično se dnevnik transakcij MS SQL Server DBMS nahaja v datoteki .LDF (in podatkovna datoteka je .MDF).

Transakcije v sistemu 1C:Enterprise

Sistem 1C:Enterprise implicitno kliče transakcije, ko izvaja kakršna koli dejanja, povezana s spreminjanjem informacij, shranjenih v bazi podatkov. V transakciji so na primer poklicani vsi obdelovalci dogodkov, ki se nahajajo v modulih objektov in naborov zapisov, povezanih s spreminjanjem podatkov baze podatkov.

Primer implicitne transakcije: zaporedje dogodkov pri knjiženju dokumenta iz obrazca

V praksi lahko ugotovite, da je zapis predmeta 1C:Enterprise (na primer dokument) transakcija, tako da izvedete naslednji poskus: Poskusite objaviti in zapreti (v obrazcu dokumenta kliknite »V redu«) nov dokument vnaprej vedeti, da ne bo izveden (na primer z navedbo veliko število blago za odpis). Ker se stanja preverjajo v fazi knjiženja dokumenta, v upravljalniku "Processing Posting()", bi moral biti v tem trenutku sam dokument že zapisan v bazo podatkov, saj je dokument zapisan prej med "BeforeWriting()" in " Dogodki OnWriting()". Ko pa se prikaže sporočilo o napaki (manjka zahtevana količina), bomo ugotovili, da dokument ni zabeležen v bazi podatkov (zastavica spremembe “*” bo ostala in dokument se ne bo pojavil na seznamu). To se zgodi, ker se transakcija povrne nazaj, ko pride do napake (povrnitev).

Uporaba eksplicitnega transakcijskega klica

Metoda StartTransaction() omogoča odpiranje transakcije. Vse spremembe informacij baze podatkov, narejene z nadaljnjimi izjavami, se lahko nato v celoti sprejmejo ali v celoti zavržejo. Če želite sprejeti spremembe, uporabite metodo Izvedi transakcijo().
Če želite razveljaviti vse spremembe, narejene v odprti transakciji, uporabite metodo Prekliči transakcijo().

Stopnjo izolacije transakcije določajo ravni izolacije. Najvišja stopnja izolacije zagotavlja popolno neodvisnost transakcije od drugih sočasno izvajajočih se transakcij, vendar je tudi stopnja sočasnosti bistveno zmanjšana – druge transakcije morajo čakati na dostop do virov, ki se uporabljajo v trenutni transakciji. Najnižja stopnja izolacije je nasprotna: zagotavlja največjo stopnjo vzporednega delovanja, kar vodi do pomembnega vpliva drugih transakcij na trenutno in do pojava težav s sočasnostjo. V večuporabniških sistemih je treba narediti kompromis med sočasnostjo (hkraten dostop do virov) in ravnmi izolacije transakcij. Jezikovni standard SQL definira ravni izolacije, ki, ko so nastavljene, preprečujejo določene težave s sočasnostjo.

Težave s sočasnostjo

Pri vzporednem izvajanju transakcij so možne naslednje težave:
- izgubljena posodobitev(eng. lost update) - ko se en podatkovni blok istočasno spremeni z različnimi transakcijami, se ena od sprememb izgubi;
- »umazano« branje(eng. dirty read) - branje podatkov, dodanih ali spremenjenih s transakcijo, ki pozneje ni potrjena (povrnjena);
- branje brez ponavljanja(angleško neponovljivo branje) - pri ponovnem branju znotraj ene transakcije se prej prebrani podatki izkažejo za spremenjene;
- fantomsko branje(angleško phantom reads) - ena transakcija med izvajanjem večkrat izbere več vrstic po istem kriteriju. Druga transakcija med temi izbirami doda ali izbriše vrstice, ki spadajo v merila izbire prve transakcije, in se uspešno konča. Posledično se izkaže, da isti izbori v prvi transakciji dajejo različne nize vrstic.

Razmislimo o situacijah, v katerih se lahko pojavijo te težave:

Izgubljena posodobitev

Umazano branje

Če se prejšnja težava pojavi pri pisanju podatkov, potem je možno umazano branje, ko ena transakcija poskuša prebrati podatke, na katerih deluje druga sočasna transakcija.
Recimo, da sta odprti dve transakciji različne aplikacije, v katerem se izvajajo naslednji stavki SQL:

Branje brez ponavljanja

Recimo, da sta dve transakciji odprti z različnimi aplikacijami, v katerih se izvajajo naslednji stavki SQL:

Transakcija 1 Transakcija 2
SELECT f2 FROM tbl1 WHERE f1=1;
POSODOBITE tbl1 SET f2=f2+1 WHERE f1=1;
SELECT f2 FROM tbl1 WHERE f1=1;

V transakciji 2 je izbrana vrednost polja f2, nato pa je v transakciji 1 vrednost polja f2 spremenjena. Če poskusite znova izbrati vrednost iz polja f2 v transakciji 1, boste dobili drugačen rezultat. Ta situacija je še posebej nesprejemljiva, kadar se podatki berejo z namenom, da se delno spremenijo in zapišejo nazaj v bazo podatkov.

Fantomsko branje

Recimo, da sta dve transakciji odprti z različnimi aplikacijami, v katerih se izvajajo naslednji stavki SQL:

Transakcija 1 Transakcija 2
IZBERI VSOT(f2) IZ tbl1;
INSERT INTO tbl1 (f1,f2) VALUES (15,20);
IZBERI VSOT(f2) IZ tbl1;

Transaction2 izvede stavek SQL, ki uporablja vse vrednosti v polju f2. Nato se v Transaction1 izvede vstavljanje nova vrstica, zaradi česar se stavek SQL ponovno izvede v transakciji 2, da se proizvede drugačen rezultat. To stanje imenujemo fantomsko vstavljanje in je poseben primer neponavljajočega se branja.

Ravni izolacije transakcij

Raven izolacije je lastnost transakcije, ki določa neodvisnost transakcije od drugih transakcij, ki potekajo vzporedno.

Standard uvaja naslednje štiri ravni izolacije, katerih uporaba preprečuje določene težave s sočasnostjo:
- READ_UNCOMMITTED- nefiksno branje. Ta raven izolacije rešuje težavo »izgubljene posodobitve«, vendar je možno pridobiti različne rezultate za iste poizvedbe ne glede na potrditev transakcije (možna težava »umazanega branja«). To je najnižja raven izolacije, ki se uporablja v DBMS in zagotavlja največjo sočasnost.
- READ_COMMITTED- fiksno branje. Ta raven izolacije preprečuje problem "umazanega branja", vendar vam omogoča, da dobite različne rezultate za iste zahteve v transakciji (možnost "neponovljenega branja" je ohranjena);
- REPEATABLE_READ- večkratno branje. Ta stopnja izolacije rešuje problem "neponovljenega branja". Na tej ravni je še vedno mogoče izvajati stavke INSERT, ki vodijo do konfliktne situacije "fantomskega vstavljanja". Ta raven je uporabna, če dodajanje novih vrstic ne vpliva na izvajanje stavkov SQL;
- SERIJSKO PRIZN- sekvenčna izvedba. Tretja stopnja. Ta raven zagotavlja preprečevanje vseh zgoraj opisanih težav s sočasnostjo, vendar je v skladu s tem opažena najnižja stopnja sočasnosti, saj se obdelava transakcij (z dostopom do istih virov) izvaja le zaporedno.

Rešitev problema vzporednega dostopa do transakcij in ravni izolacije v obliki tabele lahko prikažemo na naslednji način (»+« - težava je odpravljena):

Težave s sočasnostjo in ravni izolacije Fantomsko branje Branje brez ponavljanja Umazano branje Izgubljena posodobitev
SERIJSKO PRIZN + + + +
REPEATABLE_READ - + + +
READ_COMMITTED - - + +
READ_UNCOMMITTED - - - +

Na ravni strežnika SQL lahko sami nastavite raven izolacije:
za celotno sejo, na primer po direktivi
NASTAVI NIVO IZOLACIJE TRANSAKCIJE, KI JE MOŽNA SERIALIZIRATI

za določeno poizvedbo z uporabo konstrukta WITH
IZBERI ime IZ pogodb S SERIALIZABLE

Ugotovite stopnjo izolacije, nastavljeno v trenutni seji
izberite transakcijsko_izolacijsko raven iz sys.dm_exec_sessions
kjer session_id = @@spid

IN avtomatski način(star način, ki je bil uporabljen v 8.0) upravljanje zaklepanja podatkov uporablja ravni izolacije transakcij REPEATABLE_READ in SERIJSKO PRIZN zagotavlja sistem za upravljanje baz podatkov. Te ravni izolacije transakcije zagotavljajo dosledno in dosledno branje podatkov, ne da bi od razvijalca zahtevali dodatna prizadevanja za upravljanje zaklepanja.

Način upravljanega zaklepanja (od različice 8.1 naprej) vam omogoča, da povečate sočasnost uporabnikov v načinu odjemalec-strežnik z uporabo nižje ravni izolacije transakcij baze podatkov ( READ_COMMITTED); enaka stopnja izolacije je privzeto nastavljena
in v MS SQL strežnik. Pri zapisovanju podatkov v transakcijo vgrajeni jezikovni objekti samodejno zaklenejo zahtevane podatke. Toda pri branju mora razvijalec upravljati zaklepanja podatkov v primerih, ko poslovna logika zahteva dosledno in dosledno branje podatkov v transakciji.

Za različico 8.3 upravljani način uporablja raven izolacije READ_COMMITTED_SNAPSHOT.

Sklepi

Transakcije so nujen mehanizem DBMS, ki se aktivno uporablja v 1C:Enterprise. Za rešitev težav s sočasnostjo se lahko transakcije v DBMS izvajajo z različnimi stopnjami izolacije.

Raven izolacije, ki jo uporablja 1C:Enterprise READ_COMMITTED rešuje težave »Izgubljena posodobitev« in »Umazano branje«: spremenjeni podatki so zaklenjeni do konca transakcije tako za branje kot za spreminjanje (uvedeno je izključno zaklepanje).

Stopnja izolacije READ_COMMITTED ne rešuje težav z "neponavljajočim se branjem" in "fantomskim branjem". Za rešitev teh težav morate uporabiti programsko nameščene ključavnice, ki jih nadzoruje 1C:Enterprise.

8.3 uporablja bolj prilagodljivo raven izolacije READ_COMMITTED_SNAPSHOT.

Beseda "transakcija" je prišla k nam šele v poznih devetdesetih. To je bilo obdobje razvoja sodobnega bančnega sistema in splošnega računalniškega razmaha. Nato se je ta koncept začel pojavljati v pogovornem in literarnem govoru. In če so težave s programerji navadni ljudje srečanja so redka, vsi imajo opravka z bankami. Skoraj vsaka operacija - od preverjanja stanja računa do kompleksnih plačilnih prenosov znotraj banke - se lahko šteje za transakcijo. Ta beseda je v bančnem poslovanju prisotna skoraj pogosteje kot pojmi, kot sta "denar" ali "kredit". Le malo komitentov banke pa v celoti razume njeno bistvo.

Pomen besede

Transakcije so določeni postopki za interakcijo katerega koli predmeta v določenem časovnem obdobju. Takšne postopke so oblikovali programerji. Imajo jasen procesni značaj. Vsaka transakcija je kombinacija treh bistvenih komponent:

  • zahteva;
  • izvršba;
  • poročilo.

Proces običajne transakcije je lahko precej zapleten, vendar ima rezultat tega postopka le dve stanji. To pomeni, da je transakcija lahko zaključena ali pa tudi ne.

Bančne transakcije

Kaj pomeni beseda "transakcija"? Kateri procesi se zgodijo, ko se pojavi? Če smo natančni, so transakcije vse bančne operacije, povezane z gibanjem gotovina. Najpogosteje pa se ta izraz uporablja pri uporabi elektronskih računov. Ali pa neposredno kaže na transakcije z bančnimi karticami.

Besedna zveza "izvajanje transakcij" pomeni transakcije z uporabo elektronskega računa. To vključuje plačilo komunalnih storitev, nakup blaga v trgovini s plastično kartico, polog plač in štipendij ter številne druge denarne transakcije.

Vrste transakcij

V bančništvu obstajata dve vrsti poslovanja:

  1. Spletne transakcije so manipulacija brezgotovinskega denarja s povezavo z bančnim centrom v realnem času. Najbolj očiten primer je delo s terminalom.
  2. Offline transakcije so izvedba bančne transakcije brez neposrednega stika med udeleženci. Na primer kreditiranje plač zaposlenih. Sredstva se bremenijo z računa organizacije, zaposleni pa prejme le obvestilo o dopolnitvi stanja na njegovem tekočem računu.

Da bi bolje razumeli bistvo bančnih transakcij, razmislimo o več njihovih možnostih.

Prenos sredstev

Najenostavnejši primer takšne operacije je nakazilo med lastnimi računi, prejem ali polog denarja, polog gotovine preko bankomata ali terminala. Takšne transakcije banka običajno izvaja brez provizije. Situacija je bolj zapletena pri nakazilih med dvema različnima osebama - znotraj iste finančne institucije lahko provizija za prenos doseže 3%. Če govorimo o različnih bankah v državi, bo provizija še višja. Najdražje nakazilo je na tuje institucije, saj poleg provizije pogosto zaračunavajo tudi ti transakcijsko provizijo.

Prevodi

Prenosi z enega računa na drugega včasih vodijo do nadležnih napak. Že najmanjša netočnost pri črkovanju priimka prejemnika lahko povzroči blokado manipulacije elektronski sistem varnost. Samodejna transakcija bo rešila težavo. To se zgodi na primer, ko se sredstva nakažejo na dobroimetje prejemnika s številko bančne kartice. To bistveno zmanjša verjetnost napake. Če se transakcija ponastavi, se denar preprosto vrne na lastnikovo stanje. Res je, to se zgodi v desetih ali petnajstih koledarskih dneh.

Če pošiljatelj nima bančnega računa, lahko uporabite storitev prenosa denarja. Najbolj znan mednarodni operaterji– MoneyGram, Western Union, Anelik, Kontakt in drugi. Glavna prednost takih operacij je visoka hitrost transakcije. Glavna pomanjkljivost je precej visoka provizija.

Kaj storiti, če transakcija ne uspe?

V primeru kakršnih koli nenavadnih situacij, povezanih s prenosom sredstev, morate to takoj prijaviti banki ali operaterju terminala. V tem primeru obstaja velika verjetnost, da se bo denar vrnil na dobroimetje pošiljatelja ali pa bo porabljen za predvideni namen.
Operater vam bo pomagal, če:

  • Med transakcijo je prišlo do napake (program je zmrznil, zmanjkalo je elektrike) in denar je že izginil. Pokliči na vroča linija bo zabeležil vašo zahtevo. Po preverjanju in odpravi napake bodo strokovnjaki lahko ročno dokončali operacijo.
  • Terminal ali bankomat ni izdal potrdila o transakciji. Razlog je lahko banalen - pomanjkanje blagajniškega traku v avtomatu. Po stiku z operaterjem vam bo ponujen dvojnik potrdila. Običajno se pošlje na navedeni e-poštni naslov.
  • V navedenih podrobnostih je napaka. Denarja ni bilo več, a ga prejemnik nikoli ni videl.
    Operater lahko pomaga rešiti to težavo: na primer najti napako v številki računa prejemnika. V tem primeru denar ne pride do stranke zgolj zaradi varnostnih pravil. Takšnih sredstev banka ne dvigne, ampak jih hrani 10 dni na posebnem začasnem računu. Če pošiljatelj pravočasno stopi v stik s finančno institucijo, navede čas transakcije, znesek nakazila in odgovori na več vprašanj, bo denar deblokiran. Po odbitku transakcijske provizije bo znesek vrnjen na dobroimetje pošiljatelja.

Kot lahko vidite, so bančne transakcije zanimiv in potreben postopek v življenju vsakega od nas. Naslednjič ob preprostem nakazilu ali dvigu denarja s kartice pomislite, koliko nam takšne manipulacije olajšajo življenje. Navsezadnje zdaj verjetno že veste, kaj so transakcije. Pomen besede za vas ni skrivnost.

Mnogi se sprašujejo, kaj je transakcija? Navsezadnje se ta beseda pojavlja ves čas, še posebej, če oseba dela z denarjem. Če vzamemo globalno - zaporedje operacij izmenjave podatkov, po katerih se izvedejo sistemske spremembe.

Najpogostejša uporaba izraza je pri denarnih nakazilih in nakupu blaga. Lahko bi bilo:

  • Dvig gotovine na bankomatu ali bančni poslovalnici;
  • Nakup določenega števila delnic na borzi;
  • Plačilo s kartico v trgovini.

Takoj ko je operacija potrjena in denar poslan, se transakcija šteje za uspešno zaključeno. Denar se dvigne z računa kupca ali stranke institucije in blago se prenese posamezniku. Lahko rečemo, da transakcija služi kot način za prostovoljni prenos denarja z računa osebe na osebo, ki opravlja storitev. Vse transakcije so zabeležene v bazi podatkov finančne institucije. Ni pomembno, ali je bila operacija uspešna ali ne. Na primer v primeru nepravilnega nakazila sredstev na bančno kartico.

Vendar ne mislite, da koncept transakcije velja le za finančni sektor. Tudi IT podjetja pogosto uporabljajo ta izraz, predvsem ko gre za programiranje baz podatkov. V tem primeru bo izraz pomenil določeno zaporedje sprememb v bazi podatkov.

Tu sta tudi dve možnosti prijave. Ko je operacija odobrena, se ji dodeli »Commit«, če pa iz nekega razloga pride do zavrnitve, se dodeli »Rollback«. Najpogosteje se to zgodi, ko so želeli eno od številk deliti z nič ali so vnesli znesek, ki ne ustreza tistemu, kar je bilo predhodno vneseno v bazo podatkov.

Vrsta

Najpogostejši primer uporabe transakcije je plačilo s plačilno kartico banke na območju katerega koli nakupovalnega centra, trgovine ali finančne institucije. Operacija se začne, ko lastnik želi plačati blago, nato pa svojo bančno kartico preda uslužbencu, odgovornemu za blagajno.

Nato se kartica postavi v poseben terminal, kjer morate samo potrditi nadaljnjo operacijo. Za to morate vnesti podatke in vnaprej določeno kodo PIN. Nato se bo terminal odločil, ali je bilo vneseno geslo pravilno ali ga je treba zavrniti. V vsakem primeru bodo podatki o transakciji zabeleženi v posebni bazi podatkov. To se zgodi zaradi prenosa podatkov v storitev plačilnega sistema ta zemljevid. In že na tej stopnji poteka popolno preverjanje pristnosti vnesenih podatkov. Konec koncev so na položnici lahko ali pa tudi ne.

Če pa je vse pravilno, je transakcija uspešno zaključena in poslana neposredno banki izdajateljici. Izdelava te plačilne kartice je potekala preko njega. Nato se informacije o transakciji pošljejo v center za stiskanje, kjer se vzpostavijo informacije o pravicah do uporabe plačilnega sistema.

Omeniti velja, da če se na eni od stopenj odkrije napaka ali neskladje podatkov, se transakcija preprosto zavrne.

Aplikacije

Na različnih področjih uporabe se uporabljajo različne oznake za besedo "transakcija":

  • Ekonomija se nanaša na prenos sredstev z enega tokovnega računa na drugega. To še posebej velja za kupoprodajne posle;
  • Posledica poslovanja z bankomati je izdaja gotovine stranki, ki je za prejem uporabila bančno kartico ali številko računa;
  • Politična razlaga pomeni dogovor o obojestransko koristnih pogojih med dvema stranema.

Veliko je odvisno od kartice, ki jo izda banka. Debet in kreditna kartica strežejo drugače. Neposreden vpliv ima tudi prioriteta prijave, ki jo določi finančna institucija, ki je kartico izdala. Odvisno od teh dejavnikov se bo hitrost operacije spreminjala.

Transakcije z majhnimi vsotami denarja so videti preprostejše. Če je oseba navedla določeno nastavitev v parametrih bo imel možnost, da med transakcijo ne vnese gesla. Izvedena bo samodejno in v kolikor bo na računu zadostna količina sredstev, se bodo le-ta odpisala, podatki o operaciji pa bodo zabeleženi v bazi podatkov.

Celo področja, ki so popolnoma nepovezana s financami, delujejo s konceptom »transakcij«. Kot primer je navedena psihologija. Strokovnjaki na tem področju imenujejo transakcijo izmenjavo dražljajev, ki nastane med pogovorom med dvema posameznikoma. Ta aplikacija je nekoliko namišljena, vendar ima pravico do obstoja. Zdaj veste, kaj so transakcije.

Vedeti morate vsaj zgornje podatke o transakcijah, saj brez njih ne gre sodobni svet To je preprosto nemogoče. To pomeni, da bi še vedno morali imeti minimalno idejo.

Vsaka stranka ima svoje ponavljajoče se navade in tradicije. Ne glede na to, ali gre za najljubši dan za nakupovanje, želje glede povprečne cene izdelka ali dodatne možnosti za izdelek. Vse te informacije nam bodo pomagale stranko spodbuditi k ponovnemu nakupu in iz novega uporabnika postati redna stranka.

Od enkratnih nakupov prehajamo k rednim kupcem

No, uspeli ste spremeniti stranko. To je kul, ampak kaj potem? Po statističnih podatkih od 30 do 80 % kupcev v industriji e-trgovine odda naročilo le enkrat v celotnem življenjskem ciklu. V industriji iger na srečo 60 % strank naredi drugo naročilo. Kako dobimo stalne stranke s tako razočarajočimi številčnimi podatki?

To vprašanje skrbi tržnike po vsem svetu. Trdo delajo in vlagajo vse svoje napore v pretvorbo strank iz enkratnih v stalne. Naj gre za začetna naročila v maloprodaji ali depozite v spletnih igrah. Zakaj je drugi red tako pomemben? Če stranka odda drugo naročilo ali opravi drugo nakazilo, se verjetnost, da bo oddala tretje naročilo, poveča za desetkrat v primerjavi s strankami, ki so oddale samo eno naročilo.

Spodnja tabela združuje podatke desetih vodilnih e-trgovinskih podjetij v Evropi in ZDA. Kot je razvidno iz grafa, se verjetnost za izvedbo naslednje transakcije povečuje s številom trenutnih transakcij.


Verjetnost naslednje transakcije glede na število trenutnih transakcij

Veliko podjetij se združuje enkratne stranke v eno skupino in z različnimi metodami in sporočili spodbudite k drugemu nakupu. Sliši se kot dober načrt, kajne? Tako ali drugače so vse stranke v skupini enkratni kupci. Ampak tukaj smo, da razpravljamo o drugačnem pristopu. Ta druga metoda vključuje razdelitev skupine enkratnih strank v različne segmente glede na značilnosti njihove prve transakcije. Potopimo se globlje in razmislimo o predpogojih za takšno segmentacijo.

Dan v tednu

Začeli bomo z analizo vedenja ponovnih kupcev 10 najboljših podjetij in poskušali razumeti, ali obstaja povezava med dnevom prvega naročila in dnevom drugega naročila. Začnimo z analizo športnih stav. V tej temi stranka opravi depozit na dan največje število tekme njegove najljubše ekipe, običajno v soboto ali nedeljo. Verjetnost, da se takšne stranke vrnejo in stavijo v teh dneh, je precej velika.

Zbrali smo podatke in izvedli teste in rezultati so bili enaki, kot smo pričakovali. V bistvu je bil drugi depozit puščen na isti dan v tednu kot prvi. To je razvidno iz največja vrednost verjetnost, ki se nahaja na diagonali kvadrata.


Verjetnost izvedbe druge transakcije glede na dan v tednu prve transakcije pri športnih stavah

Odvisnost med tema dvema transakcijama lahko pripomore k boljšemu usmerjanju promocijskih dejavnosti na različne skupine enkratnih strank (v tem primeru imamo 7 skupin glede na dan prve transakcije) in opomni na drugo transakcijo ob ustreznih dneh. Bolj zanimiv korak je preizkusiti to hipotezo v maloprodaji.


Verjetnost izvedbe druge transakcije je odvisna od dneva v tednu prve transakcije v trgovini na drobno

Vidimo lahko podobno situacijo. Stranke svoj drugi nakup opravijo na isti dan v tednu kot prvega. Pomembno je omeniti, da je bila disperzija v maloprodajni industriji večja kot v industriji športnih stav. Toda sama odvisnost se je pokazala pri vsakem podjetju. Najbolj priljubljen dan za nakupovanje je ponedeljek, najmanj pa nedelja. Če upoštevamo odvisnosti med naročili samo za eno znamko, dobimo tole.


Verjetnost izvedbe druge transakcije glede na dan v tednu prve maloprodajne transakcije za eno blagovno znamko

Imamo preprosto razlago za to vedenje pri športnih stavah, toda zakaj vidimo ta rezultat pri maloprodaji? Razlog je morda v tem, da imajo kupci v življenju določene vzorce. Ob četrtkih in petkih hodite v telovadnico, ob vikendih se družite z družino, ob ponedeljkih ostanete pozno v službi in se ob petkih srečate s prijatelji. Nakupni vzorec glede na vse ostale ni videti čuden.

Čas dneva

Kot ste morda uganili, smo testirali podobne hipoteze za čas dneva. Ali obstaja povezava med uro prvega in drugega naročila, če je bilo drugo naročilo opravljeno vsaj sedem dni pozneje? Dan smo razdelili na 4 obdobja: noč, jutro, večer in popoldne – in preverili porazdelitev sekundnih naročil za vsako časovno obdobje za 6 blagovnih znamk.


Verjetnost drugega naročila je odvisna od ure prvega naročila

Razmerje med prvim in drugim vrstnim redom glede na čas dneva se zdi očitno. Kupci, ki prvič naročajo pozno zvečer, bodo verjetno istočasno oddali še drugo naročilo.

Stroški blaga v naročilu

Tržniki si prizadevamo povečati število naročenih artiklov. Prodaja na višji nivo je način življenja v svetu trženja in če ni, bi moral biti. Toda ali bi morali vedno poskušati dražje prodati izdelek? Je to najboljša rešitev za vse naše stranke? V naši analizi smo preverili, ali se stroški blaga v drugem naročilu povečajo v primerjavi s prvim.

Kot viri podatkov so uporabljene različne blagovne znamke, zato smo za vsako znamko identificirali ločene segmente z vrednostjo izdelka. Tako je nastalo 6 cenovnih skupin.


Verjetnost stroškov drugega naročila v odvisnosti od stroškov prvega naročila

Večina kupcev, katerih naročila so bila oddana v nizkem cenovnem razredu, je v drugem naročilu ostala v istem razredu.

Zaključek

Naša zgornja analiza kaže, kaj se lahko naučimo iz prvih naročil. Glavna stvar, ki si jo moramo zapomniti, je, da vseh enkratnih strank ne smemo dati v eno skupino. Kupce je vredno segmentirati glede na njihov dan v tednu in čas nakupa ter stroške naročila.
Uporaba teh metod in korakov vam bo pomagala bolje razumeti, kako povečati LTV in pridobiti več zvestih strank.

2017-10-31

Kako ustvariti različico za transakcijo z uporabo SHD0?

Razlaga vprašanja

V eni od svojih opomb sem opisal zaporedje dejanj, ki jih je treba izvesti, da skrijete polje v transakciji. Mehanizem, s katerim je mogoče izvesti to operacijo, je dobro znan mnogim svetovalcem. Naj vas spomnim, da je ime tega mehanizma transakcija SHD0.

V tej opombi želim razmisliti o zaporedju dejanj, ki jih je treba izvesti za izvajanje zahteve:

  • Ločen dostop do polj enega infotipa za dve skupini uporabnikov, ki delata z njim, pod pogojem, da imajo enako raven pooblastil za ta infotip. Z drugimi besedami, nekatera polja naj bodo na voljo nekaterim uporabnikom, druga pa drugim.

Iz izvornih podatkov: transakcija, s katero delajo uporabniki, je PA30. Infotip v tem primeru ni pomemben. Natančneje, v svojem primeru bom uporabil infotip HR Administration.

Infotip je dober primer 0002 - "Osebni podatki"

Problem tako imenovane razmejitve pristojnosti oblikujmo takole:

  • Polje Mar.Status Infotip 0002 "Osebni podatki" ne sme biti na voljo za urejanje (to je samo za branje);
  • Polje Velja od datuma trenutnega zakonskega stanja Infotip 0002 "Osebni podatki" mora biti skrit.

Reševanje težave

Za rešitev zgoraj navedenega problema je potrebno izvesti več zaporednih dejanj, o katerih bomo razpravljali spodaj. Na kratko:

  1. Ustvarite ločeno transakcijo za skupino uporabnikov, ki morajo spremeniti raven dostopa do polj infotipa;
  2. Ustvarite zaslonsko različico, v kateri konfigurirate vidnost polj, nato pa ustvarjeni transakcijski različici dodelite zaslonsko različico (izpadlo je preveč klavrno, a pravzaprav nič zapletenega).
  3. Ustvarite različico za to transakcijo in ji dodelite različico zaslona, ​​v kateri je konfigurirana ustrezna vidnost polja;
  4. Ustvarite vlogo po meri, v katero vključite transakcijo in jo dodelite uporabnikom;
  5. Izvedite testiranje.

1. Ustvarite novo transakcijo

Ker je glavna transakcija PA30, vzemimo ga za osnovo in ga kopirajmo v novo. To je mogoče storiti s transakcijo SE93

V tabeli T588A kopirajte obstoječi zapis s kodo transakcije PA30 za novega in poskusite znova začeti novo transakcijo

Transakcija se uspešno začne. Preidimo na naslednjo točko.

2. Ustvarite različico za novo transakcijo

Izdelamo varianto za novo transakcijo, v kateri določimo nivo dostopa do polj infotipa. Naj vas spomnim, da moram spremeniti raven dostopa do polj " Mar.Status"in" Velja od datuma trenutnega zakonskega stanja". Ta dejanja je treba izvesti v transakciji SHD0.

Na terenu Koda transakcije navedite ime nove transakcije (glejte točko #1. Ustvarjanje nove transakcije)

2.1 Ustvarjanje različice zaslona

Na zavihku "Različice zaslona" morate ustvariti različico zaslona, ​​ki se uporablja za infotip 0002. V tej različici morate uporabiti želena pravila prikaza za polja. Vse, kar morate vedeti, je ustrezno področje modulov in številka zaslona (če želite to narediti, na zaslonu za urejanje infotipa izberite v meniju Sistem -> Stanje)

Naslednji videoposnetek prikazuje zaporedje dejanj, ki jih je treba izvesti za ustvarjanje različice zaslona

Možnost zaslona je bila ustvarjena. Sprememb še ni opaziti.

2.2 Dodelitev različice zaslona transakcijski različici

Ustvarjeno različico zaslona dodelite različici transakcije in nato aktivirajte ustvarjeno različico transakcije

2.3 Testiranje

Testni skript je zelo preprost:

  • Začnite transakcijo PA30, izberite kadrovsko številko, odprite infotip za urejanje 0002 in preverite, ali so zgornja polja prikazana brez sprememb
  • Začnite transakcijo ZPA30 in izvedite popolnoma enako zaporedje dejanj

Razlika je očitna, kar pomeni, da je naloga uspešno opravljena.

Zadnjič, ko smo pogledali najenostavnejši način z uporabo vgrajenega jezika 1C. V praksi transakcije veliko pogosteje uporablja v povezavi z oblikovanjem. To omogoča, da v primeru napake nadaljujete z izvajanjem kode, kot tudi zagotovite ustrezno sporočilo o napaki uporabniku in zapišete informacije v dnevnik registracije ali v datoteko dnevnika za kasnejšo analizo s strani skrbnika sistema.

Če se obrnemo na tehnično dokumentacijo ali disk ITS, bomo videli, da 1C priporoča naslednji način organizacije transakcije v poskusu

Poskus //1. Začetek transakcije. StartTransaction() ; //2. Blok operacij, izvedenih v transakciji. //3. Če so vse operacije uspešne, transakcijo potrdimo. CommitTransaction() ; //4. Če med izvajanjem kode pride do napak, prekličite transakcijo. CancelTransaction() ; //5. Po potrebi zabeležite v dnevnik. //6. Po potrebi prikažite sporočilo uporabniku. EndAttempt ;

Pravzaprav koda ne zahteva posebne razlage. Če poteka poskusi Pri izvajanju transakcijske kode pride do napake, takoj pademo v blok izjema, tj. pred metodo Izvedi transakcijo() preprosto ne pridemo tja. No, izjemoma transakcijo ustrezno prekličemo in po potrebi izpišemo sporočilo o napaki ter podatke zapišemo v registracijski dnevnik. Zelo zaželeno je, da se napake beležijo v dnevniku, zlasti pri tistih operacijah, ki se izvajajo brez sodelovanja uporabnika (na primer rutinska opravila). To vam bo omogočilo kasnejšo analizo napake. Namesto beleženja lahko uredite pošiljanje sporočil skrbniku po elektronski pošti.

Zdaj, oboroženi z novim znanjem, poskusimo spremeniti kodo, obravnavano v članku o . Naj vas spomnim, da smo upoštevali vpis v imenik Blago in v informacijski register Cena po naslednji shemi:

&Na strežniku brez konteksta StartTransaction() ; //posnemite nov izdelek Izdelek = Imeniki. Blago. CreateItem() ; Izdelek. Name = "Luknjač" ; Izdelek. Napiši();

//zapišite ceno RecordSet = InformationRegisters. Cena. CreateRecordSet(); NewRecord = RecordSet. Dodaj(); NewRecord. Obdobje = TrenutniDatum() ; NewRecord. Izdelek = Izdelek. Povezava; NewRecord. Znesek = 100 ; RecordSet. Napiši();

&Na strežniku brez konteksta CommitTransaction() ; Konec postopka Zdaj pa postavimo transakcijo v blok Poskus izjeme. Najverjetneje lahko pride do napak le pri zapisovanju v imenik ali informacijski register, torej predhodna priprava Vzemimo to zunaj transakcije. "Pri beleženju izdelka in njegove cene je prišlo do napake") ;

EndAttempt ;

Konec postopka

Česa NE storiti

Tisti, ki se šele začenjajo ukvarjati s transakcijami, imajo pogosto željo, da to počnejo na ta način

StartTransaction() ;

Poskus StartTransaction() ; //Operacijski blok CommitTransaction() ; Izjema CancelTransaction() ; EndAttempt ; Poskus StartTransaction() ; //Operacijski blok CommitTransaction() ;:

&Na strežniku brez konteksta Izjema CancelTransaction() ; //Operacijski blok CommitTransaction() ; EndAttempt ; CommitTransaction() ;

Ali v zanki

(ExternalProcessing.TransactionsAtTrying.Form.Form.Form(20)): Napaka pri pisanju postavke. (ExternalProcessing.TransactionsAtTrying.Form.Form.Form(40)): Napaka pri klicu kontekstne metode (Write): V tej transakciji je že prišlo do napak!

Tako je organiziranje ugnezdenih transakcij v 1C popolnoma nesmiselno.

Možne možnosti

Zdaj pa se vrnimo k možnosti, kjer smo zabeležili izdelek in ceno zanj. Če pride do napake pri izvedbi transakcije, bomo težko razumeli, na kateri točki je do nje prišlo - pri zapisu izdelka ali pri zapisu cene, saj se oboje zgodi v istem poskusu. Da ugotovimo, kje je prišlo do napake, moramo vsako operacijo pisanja zaviti v svoj poskus in se izogniti ugnezdenim transakcijam. Da bi to naredili, uvedemo logično spremenljivko Zavrnitev in glede na njegovo vrednost ob koncu vseh operacij bomo izvršili ali preklicali transakcijo.

&Na strežniku brez konteksta CommitTransaction() ; // Začetek transakcije Zavrni = False; StartTransaction() ;// Poskušam posneti izdelek Izdelek poskusa = Imeniki. Blago. CreateItem() ; Izdelek. Name = "Luknjač" ; Izdelek. Napiši(); Napaka izjeme = True; Sporočilo = Novo sporočiloUporabniku; Izdelek. Name = "Luknjač" ; Sporočilo. Besedilo ="Napaka pri snemanju izdelka"

;