1c duomenų atskyrimas. Duomenų bendrinimo mechanizmo naudojimas vietoj RLS

1.Preambulė.

Atsirado poreikis organizuoti dviejų organizacijų apskaitą vienoje informacijos apsaugos sistemoje. Situacija nėra unikali, tačiau atsitiko taip, kad mūsų labai neįprastas 250 gigabaitų USB diskas veikė gana lėtai, todėl vietoj RLS nusprendėme išbandyti duomenų atskyrimą. Kas tai yra, aprašyta, pavyzdžiui, arba. Trumpai tariant, jei RLS papildys sąlygomis SQL užklausos, tada duomenų skyriklis yra papildomas stulpelis lentelėse DBVS lygiu, dėl kurio atskyrimo mechanizmas turėtų veikti greičiau nei RLS.

Taigi į duomenų bazę, kurioje buvo tvarkoma apskaita apie UAB Nr. 1, reikia perkelti informaciją iš atskiros UAB Nr. 2 duomenų bazės ir organizuoti bendrą darbą. Visai kaip nuotraukoje:

Paprasti mirtingieji dirba tik su savo LLC, o vyriausiasis buhalteris kartais žiūri į dviejų juridinių asmenų duomenis. Abiejų LLC prieigos režimu galite tik skaityti duomenis, todėl vyriausiasis buhalteris turėtų turėti galimybę interaktyviai perjungti režimus „skaityti viską“ / „rašyti tik vieną organizaciją“ ir pasirinkti LLC (t. y. nustatyti bendra informacija) atlikti, pavyzdžiui, išlaidų apskaičiavimą.

2. Įgyvendinimas

Platforma 8.2.19.90, be suderinamumo režimo. DBVS – MSSQL Server 2008 R2 Standard.

Sukūrėme bendrąjį "numerio" tipo atributą OrganizationSeparator, sutikome su pasiūlymu sukurti seanso parametrus, užpildėme detalių sudėtį (įtraukė kelis katalogus, visus dokumentus, kaupimo, apskaitos ir skaičiavimo registrus). Duomenų atskyrimas – „Nepriklausomas ir bendras“. Seanso parametro reikšmė nustatoma iš standartiniai nustatymai vartotojas seanso modulio procedūroje SettingSessionParameters:

Organizacija = UserManagement.GetDefaultValue(chCurrentUser,"PrimaryOrganization");
SessionParameters.OrganizationSeparatorValue = Organization.SeparatorValue;

Vyriausiojo buhalterio sąsajoje jie sukūrė formą su galimybe perjungti organizacijas ir įjungti / išjungti atskyrimo režimą:

Kai atskyrimas išjungtas, kai SessionParameters.OrganizationSeparatorUsage = False, platforma atsisako rašyti dokumentus ir užstringa su tokiomis klaidomis kaip „SDBL klaida: laukiama išraiška (pos=12)“, todėl negalite leisti vartotojui rašyti dokumentų pasirinkę šią parinktį. Siekdami patikimumo sukūrėme įvykio „Prieš įrašymą“ prenumeratas objektams, kurie yra bendrojo atributo dalis:

IfSessionParameters.OrganizationSeparatorUsage = Netiesa Tada
#Jei klientas tada
Warning("Negaliu rašyti, nes dalijimasis duomenimis išjungtas!");
#EndIf
Atsisakyti = Tiesa;
endIf;

Mūsų veiksmų planas buvo toks: paruošti IS Nr. 1 imtuvo konfigūraciją, nustatyti bendrojo atributo reikšmes = 1, įkelti duomenis iš IS Nr. 2, po įkėlimo, visiems objektams su tuščiu (lygu 0). ) skyriklio reikšmę, nustatykite OrganizationSeparator = 2.

Parengta konfigūracija, iškilo klausimas: kaip greitai ir nerizikuojant, kad balanse skris skaičiai, nustatyti bendrųjų rekvizitų vertę dokumentams ir jų judėjimui uždarais laikotarpiais? Neįmanoma parašyti skyriklio atskirai nuo objekto per 1C objekto modelį, todėl turėjau sulaužyti licencijos sutartis išeiti ir parašyti MS SQL užklausą. Kadangi bendrame atribute yra daug objektų, o lentelėje yra dar daugiau šių objektų lentelių, parašėme apdorojimą, kuris generuoja SQL užklausą (kiekvienam metaduomenų objektui, įtrauktam į separatorių, parašėme "update" + DB_Name + ".dbo._" + TableName + "set _" + FieldGeneralAttributes + "= 1";)

Įvedėme vertę, perkėlėme dalį duomenų iš IS Nr. 2 ir pradėjome testavimą.

Rezultatas nuvylė. Pirma, problemos su apskaitos registru. Kai atskyrimas įjungtas, analitikas nematomas:

Taip yra dėl to, kad apskaitos registras DBVS lygiu yra saugomas kaip kelios lentelės, o ne visose lentelėse buvo įvesta bendrojo atributo reikšmė (struktūrai peržiūrėti buvo naudojamas apdorojimas).


Gerai, įveskime skyriklio reikšmę naudodami MS SQL ir pamatysime analizę. Ataskaitos nebeveikia. Pasirodo, yra problemų su apskaitos registro „Apyvarta“ ir „TurnoverDtKt“ virtualių lentelių užklausomis:

(Fld27033 yra tik bendras atributas apskaitos registro lentelėje)

Atskyriklis yra įdiegtas visose lentelėse, tai matosi DBVS lygiu, neaišku kokia gali būti klaida. Įdiegiame standartinį tuščią SCP, atliekame aukščiau aprašytus konfigūracijos pakeitimus, įvedame porą dokumentų (šiuo variantu platforma pati įveda separatoriaus reikšmę visose apskaitos registrų lentelėse), tačiau klaidos atkuriamos. Blogai, bet iš bendrų detalių neįtraukiame apskaitos registrų ir tęsiame testavimą.

Be to, paaiškėja, kad skaičiavimo registrų poslinkio mechanizmas nustojo veikti. Skaičiavimo tipų planų neatskyrėme, problemos ieškome skaičiavimo registro lentelėse ir perskaičiavimuose. Patikriname, suvedame pagrindinių detalių vertę, atliekame T&I – veltui.

Be to, mes diagnozuojame problemą, kai įrašome informaciją iš sąrašo formos į nepriklausomus registrus. Tokiu atveju duomenys įrašomi ir juos galima pamatyti paleidus iš naujo. Problema taip pat atkurta bandymo bazėje:


Informacijos registrų „sutvarkyti“ manipuliuojant su SQL nepavyko (visose lentelėse nustatyta skyriklio reikšmė), todėl juos tiesiog išbraukėme iš bendrųjų atributų. Po kelių dienų eksperimentavimo bandymai atkurti pirmumo funkcionalumą taip pat pasirodo nesėkmingi.

Šiuo metu nusprendžiame išjungti duomenų atskyrimą ir naudoti RLS. Nustatydami skaidinį į „nenaudoti“, susiduriame su klaidomis „Microsoft OLE DB teikėjas forSQL Server: CREATE UNIQUE INDEX nutrauktas, nes buvo rastas dublikatas indeksui...“. Tai yra, grįžti į valstybę prieš padalijimą nėra taip paprasta. Problema su konvertavimo lentelių indeksais, sumų saugojimo nustatymais ir kt. Faktas yra tas, kad lentelėse saugomos identiškos eilutės, kurios skiriasi tik bendrojo atributo reikšme. Kai ištrinate bendrą atributą, atsiranda neunikalių įrašų. Turėsite ištrinti nereikalingus įrašus tiesiogiai MS SQL, maždaug taip (konvertavimo lentelei):

Naudokite bazę;
ALTER TABLE_CRgRecalc1399
PRIDĖTI ID INT IDENTITY(1,1);
EIK
IŠTRINTI FROM_CRgRecalc1399
KUR id< (SELECT MAX(id)
IŠ _CRgRecalc1399 AS T1
WHERE _CRgRecalc1399._RecorderTRef = T1._RecorderTRef ir
_CRgRecalc1399.[_RecorderRRef] = T1.[_RecorderRRef] ir
_CRgRecalc1399.[_CalcKindRRef] = T1.[_CalcKindRRef] ir
_CRgRecalc1399.[_Fld1400RRef] = T1.[_Fld1400RRef] ir
_CRgRecalc1399.[_Fld1401RRef] = T1.[_Fld1401RRef] ir
_CRgRecalc1399.[_Fld1402RRef] = T1.[_Fld1402RRef]
);
EIK
ALTER TABLE_CRgRecalc1399
DROP COLUMN ID;

Ir tik išvalius kelias dešimtis lentelių galima išjungti duomenų atskyrimą. Išjungus atskyrimą problemų nėra.

3. Išvados.

Blykstelėjo viltis, kad problemos buvo išspręstos 8.3. Nebuvome per daug tingūs, patikrinome 8.3.4.482 (išjungus suderinamumo režimą). Mes pažvelgėme į beveik standartinį valdymo bloką, kurio konfigūracijos pakeitimai buvo skirti tik bendroms detalėms. Šioje bandymų bazėje atskyrimas buvo įjungtas prieš įvedant informaciją, t.y. platforma turėjo teisingai įrašyti skyriklio reikšmę į visas lenteles jie patys nieko nerašė tiesiai į MS SQL.

Rezultatas:

    Atkurta problema, susijusi su užklausomis į virtualias lenteles „Apyvarta“ ir „TurnoverDtKt“.

    Represijų problema atkurta.

    Atsikartoja rašymo į nepriklausomus informacijos registrus problema.

    Atskyrimo išjungimo problema yra ta, kad negalite jo atsikratyti vienu mygtuko paspaudimu!

Taigi mes negalėjome pakeisti RLS nauju mechanizmu. Matyt, šis mechanizmas buvo sukurtas debesų paslaugos, o pasirinkus bendrus duomenis naudoti „savarankiškai“, galbūt skirstymas veiks, bet mums reikia bendrų pagrindinių duomenų. Tereikia palaukti, kol 1C ištaisys klaidas arba, dar geriau, įdiegs standartinį atskyrimo pagal organizaciją mechanizmą standartinėse konfigūracijose.

Kai aptarėme vartotojų prieigos ribojimo mechanizmus 1C ir ypač.

Tai leidžia vartotojui dirbti ne su visais dokumentais, o tik su tais, kurie nurodo konkrečią organizaciją ar sandėlį. Pasirinkimai atliekami dinamiškai, todėl duomenų bazė apkrauna tam tikrą apkrovą.

Bendrojo skyriklio atributo ypatybė – 1C vartotojo atskyrimas – leidžia nustatyti vartotojų sąrašo prieinamumą, atsižvelgiant į skirtuvų naudojimą.

Jei atskyriklis įjungtas vartotojui, jis bus matomas vartotojų sąraše 1C Enterprise režimu - kitaip jis nebus matomas.

Tokiu būdu galite tvarkyti skirtingus vartotojų sąrašus skirtingoms duomenų bazės dalims.

Bendrojo skyriklio atributo ypatybė – 1C autentifikavimo atskyrimas – leidžia kurti vartotojus su tais pačiais vartotojų vardais skirtingoms duomenų bazės dalims.

Sąlyginis padalijimas 1C

Sąlyginis atskyrimas 1C leidžia įjungti arba išjungti separatorių pagal duomenų bazės duomenis. Tokiu būdu galite sukurti atskiriklių grandines, kurios priklauso viena nuo kitos ir konkrečiu atveju veikia dinamiškai.

Norėdami įjungti sąlyginį padalijimą 1C, bendrojo skyriklio atributo savybėje turite nurodyti Sąlyginį padalijimą 1C, kuris bus atsakingas už 1C padalijimo įjungimo fakto nustatymą.

Galima naudoti konstantą su Būlio tipu arba katalogo atributą su Būlio tipu.

Svarbu – turite išjungti šios konstantos/šios žinyno naudojimą (pasirinkite Nenaudoti) kaip skyriklių dalį, tik tada galėsite ją pasirinkti.

Bendra informacija 1C 8.3 yra platformos metaduomenų objektas, leidžiantis naudoti vieną atributą daugeliui konfigūracijos objektų (katalogių, dokumentų, sąskaitų planų ir kt.). Objektas buvo sukurtas daugiausia siekiant palengvinti kūrėjo darbą ir atskirti duomenis.

Bendra informacija iš pradžių buvo įdiegta 1C 7.7 versijoje, tačiau kūrėjai jos iš karto neįtraukė į 8 versijos platformą. Bendrųjų detalių mechanizmą 1C kūrėjai pristatė tik 8.2.14 versijoje.

Labai patogu pridėti bendrų detalių, kad nekeistų standartinių objektų konfigūracijoje. Aš dažnai juos naudoju kartu su .

Pridėjus bendrąjį atributą, jis gali būti naudojamas užklausose ir rodomas objekto formoje - Išoriškai jis niekuo nesiskiria nuo įprastų rekvizitų.

Vienintelis bendrųjų detalių apribojimas yra nesugebėjimas jų naudoti .

Pažvelkime į pagrindinius bendrųjų detalių nustatymus ir savybes, kurios skiriasi nuo kitų konfigūracijos objektų:

Junginys— objektų, kuriems bus naudojama bendroji informacija, sąrašas primena mainų plano sudarymą.

Gaukite 267 vaizdo įrašų pamokas 1C nemokamai:

Automatinis naudojimas— nustatymas nustato, ar bendrieji rekvizitai bus naudojami tiems objektams, kuriuose nurodytas „Automatinis“ naudojimo režimas.

Duomenų atskyrimas— šį nustatymą apsvarstysime atskirai.

Duomenų atskyrimas 1C naudojant įprastas detales

Duomenų atskyrimas- mechanizmas, panašus į mechanizmą. Tačiau šio mechanizmo veikimas yra efektyvesnis ir jį lengviau konfigūruoti.

Mechanizmas leidžia konfigūruoti tik elementų, kuriuos mato vartotojas, rodymą. Pavyzdžiui, galite atskirti visus objektus (dokumentus, katalogus ir pan.), kuriuose įdiegta tam tikra organizacija.

Duomenų atskyrimo nustatymas naudojant bendrąsias 1C detales

Norėdami sukonfigūruoti bendrąsias detales, turite nurodyti duomenų atskyrimą - Padalinti. Iš karto po paspaudimo sistema pasiūlys sukurti numatytuosius apskaitos parametrus:

Tokiu atveju paleidžiant sistemą reikės nurodyti seanso parametrus, kaip tai padaryti, buvo aprašyta su pavyzdžiu straipsnyje.

Tai užbaigia sąranką – vartotojas turės prieigą tik prie informacijos, kuri nurodyta pasirinktuose seanso parametruose.

Įprastų rekvizitų naudojimo pavyzdys

Pažvelkime į bendrųjų rekvizitų nustatymą 1C 8.3, naudodami rėmo konfigūracijos ir rekvizitų pavyzdį Organizacija:

Sistemoje yra 3 dokumentai, kuriuose būtina nurodyti Organizacijos rekvizitus: tai Kvito sąskaita, Išlaidų sąskaita ir Darbo užmokestis.

Sąranka paprasta:

  1. Sukuriame naują atributą General, nurodome tipą – DirectoryLink.Organization.
  2. Sudėtyje mes sutvarkome savo dokumentus - Naudokite.

Štai viskas, sąranka baigta!

Pažiūrėkime rezultatą:

Sistema rodo bendrus duomenis „tarsi jie būtų jūsų“: užklausose, formų detalėse ir kitose vietose. Tai tokia magija! 🙂

Bendrieji rekvizitai 1C 8.3 nepridedami

Bendras atributas yra atributas, kuris pridedamas prie kelių konfigūracijos objektų ir gali būti naudojamas kaip komponentas specialus duomenų atskyrimo mechanizmas:

  • Bendras rekvizitas keliems objektams. Atributas, esantis keliuose konfigūracijos objektuose, kuriuose šis atributas išlaiko savo reikšmę ir tipą. Tokio naudojimo pavyzdys: „Organization“ atributas reglamentuojamuose apskaitos dokumentuose taikomosios programos sprendime
  • Bendrieji atributai kaip neatskiriama specialaus duomenų atskyrimo mechanizmo dalis. Šis mechanizmas leidžia padalinti darbą į atskiras dalis taikymo sprendimas ir visi saugomi duomenys. Šiuo atveju duomenų atskyrimas įgalinamas bendrajam atributui.
    Tokio naudojimo pavyzdys: Viename fiziniame informacinė bazė Skirtingi duomenų „savininkai“ dirba savarankiškai, o kiekvienas tokio aplikacinio sprendimo vartotojas turės prieigą tik prie savo duomenų

Bendrojo požymio ypatybė „Duomenų atskyrimas“.

Jei ši savybė nustatyta į „Nenaudoti“, tada sukurtas konfigūracijos objektas bus naudojamas tik kaip atributas, įtrauktas į kelis konfigūracijos objektus.
Jei ypatybė nustatyta į „Separate“, bendras atributas bus naudojamas kaip duomenų skyriklis

Objektų kompozicija

Bendrojo atributo ypatybė „Composition“ nustato konfigūracijos objektų, kuriuose yra šis bendrasis atributas, sąrašą.
Jei ypatybė „Auto-Use“ nustatyta į „Nenaudoti“, automatinis rekvizitų pridėjimas neįvyks, o norėdami pasirinkti objektus, į kuriuos norite įtraukti įprastus rekvizitus, turėtumėte naudoti ypatybę „Kompozicija“.
Be to, ypatybė „Composition“ turėtų būti naudojama, jei automatiškai naudojant bendrą atributą yra objektų, kuriuose bendro atributo neturėtų būti.

Naudojant įprastus rekvizitus

Kiekvienam konfigūracijos objektui stulpelyje Naudojimas gali būti viena iš trijų reikšmių:
  • Automatiškai – reiškia, kad konfigūracijos objekto priskyrimas bendrajam atributui priklauso nuo ypatybės „Auto-Use“ reikšmės
  • Naudoti – reiškia, kad konfigūracijos objektas yra bendrojo atributo dalis
  • Nenaudojama – reiškia, kad konfigūracijos objektas nėra bendrojo atributo dalis
Taigi, naudodamiesi ypatybių redaktoriumi „Kompozicija“, galite pasirinktinai išskirti kai kuriuos objektus iš bendrųjų rekvizitų sudėties, nepaisant to, kad jai nustatytas „Automatinis naudojimas“.

Konfigūracijos objektai

Bendrasis atributas (ne dalijimosi duomenimis režimu) gali apimti šiuos konfigūracijos objektus:
  • Katalogai
  • Dokumentacija
  • Dokumentų žurnalai
  • Būdingi tipo planai
  • Skaičiavimo tipo planai
  • Verslo procesas
  • Užduotys
  • Informaciniai registrai
  • Kaupimo registrai
  • Buhalteriniai registrai
  • Keitimosi planais
  • Išoriniai duomenų šaltiniai

Ypatumai

Įrašant dokumentą bendrajam žurnalo atributui priskiriama bendrojo dokumento atributo reikšmė arba reikšmė NULL, jei dokumentas nėra bendrojo atributo dalis.
Bendrieji atributai gali būti naudojami duomenų prieigos apribojimuose. Išorinius duomenų šaltinius tikslinga įtraukti į bendrą atributą, kai bendras atributas yra skyriklis.

PATARIMAS! Neturėtumėte naudoti bendrųjų atributų, kad apibūdintumėte duomenis, kurie yra konkrečių objektų verslo logikos dalis.

Dalintis