Iš anksto nustatytas katalogo elementas 1s. Įprasti ir iš anksto nustatyti elementai

Visi žino skirtumą tarp iš anksto nustatytų elementų ir įprastų: „Iš anksto nustatyti elementai sukuriami konfigūratoriaus režimu ir negali būti ištrinti 1C:Enterprise režimu“. Naudotojo režimu galite atskirti iš anksto nustatytą elementą nuo naudotojų pridėtų elementų naudodami specialią piktogramą (žr. toliau pateiktą ekrano kopiją).

Iš esmės iš anksto apibrėžtus elementus kuria kūrėjai, norėdami susieti su jais algoritmus įvairiuose konfigūracijos objektuose. Pavyzdžiui, konfigūracijos „Gamybos įmonės valdymas“ kataloge „Kokybė“ kūrėjai pridėjo iš anksto nustatytą elementą „Naujas“.

Šis elementas naudojamas daugelyje konfigūracijos modulių. Taigi dokumente „Prekių ir paslaugų gavimas“, registruojant visuose registruose, kur yra „Kokybės“ dimensija, pakeičiama iš anksto nustatyto elemento reikšmė. Toliau pateikiamas „Organizacijų prekių“ registro registravimo lentelės užpildymo sąrašas:

// PRODUKTAI PAGAL REGISTRUOTĮ ProduktaiOrganizacijos. MoveSet = juda. ProduktaiOrganizacijos; Jei kvito tipas = pervedimai. Prekių priėmimo kvitų rūšys. Tada į sandėlį // Gaukite verčių lentelę, atitinkančią registro įrašų rinkinio struktūrą. MotionTable = MotionSet. Iškrauti() ; // Užpildykite judesių lentelę. Pagrindinis tikslas. LoadValueTable(Produktų lentelė, Judėjimo lentelė) ; // Trūksta laukų. Judėjimo lentelė. FillValues ​​(Organizacija, "Organizacija") ; Judėjimo lentelė. FillValues ​​(Neapibrėžta, "Komisijos agentas"); Judėjimo lentelė. FillValues(Katalogai. Kokybė. Nauja, "Kokybė" ) ; // Užpildykite kokybę iš iš anksto nustatyto elemento

Taigi iš anksto nustatytų elementų charakteristikos ir jų paskirtis yra gana paprastos. Pažiūrėkime, kaip jie saugomi duomenų bazių lentelėse ir kuo jie skiriasi nuo įprastų elementų.

Skirtumai

Bandomojoje konfigūracijoje buvo sukurtas katalogas „Produktai“. Joje sukurta grupė „Test elementai“. Grupės turinį matėte straipsnio pradžioje esančioje ekrano kopijoje. Kataloge „Produktai“ SQL duomenų bazėje yra atitinkama lentelė „_Reference37“ su tokia struktūra:

Bet kaip galime nustatyti, ar informacija atitinka konfigūracijos medį ir SQL lentelės laukus?

Naudosime standartinį pasaulinio konteksto metodą „GetDatabaseStorageStructure()“, kuris pateiks mums reikšmių lentelę su lentelės struktūros aprašymu.

Vertybių lentelėje „Laukai“ matome atitikimą tarp SQL lentelės laukų ir objekto detalių metaduomenų medyje. Mūsų pavyzdyje nagrinėjame katalogo „Produktai“ struktūrą. Visuose kataloguose yra standartinis Būlio tipo atributas „Iš anksto nustatytas“, kuris iš anksto nustatytiems elementams nustatytas į TRUE:

Remdamiesi lentele su katalogo saugojimo struktūra duomenų bazėje, galime neabejotinai pasakyti, kad laukas „Iš anksto nustatytas“ atitinka lauką „IsMetadata“. Jei pažvelgsime į lentelės „_Reference37“ turinį SQL duomenų bazėje, pamatysime:

Iš anksto nustatyto elemento įraše lauko „IsMetadata“ reikšmė nustatyta į „0x01“, o tai atitinka TRUE vėliavėlę. Normaliems elementams reikšmė nustatoma į "0x00". Tai yra pagrindinis skirtumas tarp iš anksto nustatytų elementų ir įprastų. Visi kiti laukai saugomi duomenų bazėje taip pat, kaip ir įprastų naudotojų pridėtų elementų laukai.

Iš anksto nustatyti elementai gali būti labai įdomiai naudojami. Jų pagalba galite užkirsti kelią elementų grupių ištrynimui/žymėjimui ištrynimui kataloge ir kituose objektuose, kur juos galima pridėti. Jei bandysime ištrinti arba pažymėti ištrinimui grupę „Test elementai“. tada gauname tokias klaidas:

Taigi iš anksto nustatyti elementai grupę, kurioje jie yra, taip pat daro „iš anksto apibrėžtą“.

Užbaigimas

Iš anksto nustatyti elementai yra neatsiejama daugumos konfigūracijų dalis. Jų naudojimas supaprastina kūrimą ir daro funkcionalumą logiškai „darnesnį“ ir vientisesnį.

Galioja platformos versijai 1C: Enterprise 8.3.3 ir naujesnėms versijoms be suderinamumo režimo su 8.2 versija

1.1. Kataloguose, sąskaitų planuose, charakteristikų tipų diagramose ir skaičiavimo tipų planuose galima automatiškai arba programiškai sukurti iš anksto nustatytus elementus.

1.2. Daugeliu atvejų rekomenduojama iš anksto nustatytus elementus sukurti automatiškai, nes jų nuolat reikia ir norima palengvinti šių elementų prieigą iš kodo.
Pavyzdžiui, iš anksto nustatyta šalis Rusija kataloge Pasaulio šalys, iš anksto nustatytas prieigos grupės profilis Administratorius ir taip toliau.

Už tai

  • katalogo nuosavybėje turi būti nustatytas sąskaitų planas, charakteristikų planas arba skaičiavimo tipų planas Automatinis(numatytasis), o programiniai metodo iškvietimai neturėtų būti leidžiami SetUpdatePredefinedDatašiuos objektus, kad perjungtumėte šį režimą.
  • neleisti vartotojams ištrinti iš anksto nustatytų elementų, išjungus šias teises visuose vaidmenyse (išjungta pagal numatytuosius nustatymus):
    • InteractiveDeletePredefinedData
    • InteractiveMarkDeletionPredefinedData
    • InteractiveUnflagDeletePredefinedData
    • InteractiveDeleteTaggedPredefinedData

1.3. Išimtis yra antriniai RIB mazgai, kuriuose iš anksto nustatyti elementai nėra automatiškai sukuriami (ir neatnaujinami, kai pasikeičia metaduomenys), bet turi būti perkelti iš pagrindinio mazgo kartu su konfigūracijos pakeitimais.

Kur:

a) konfigūracija turi užtikrinti, kad mainų pranešimas būtų įkeltas į RIB pagalbinį mazgą prieš vykdant kitą programos kodą, kuris pasiekia iš anksto nustatytus elementus, gautus iš pagrindinio mazgo;

b) taikomoje duomenų įkėlimo iš pagrindinio mazgo (įvykių tvarkyklės) logikoje Kai gaunami duomenys iš pagrindinio, objektų registravimo taisyklės) reikėtų vengti iškvietimų į iš anksto nustatytus elementus, nes nėra garantijos, kad jie jau buvo įkelti iš mainų pranešimo;

c) IS naujinimo tvarkyklių, apdorojančių iš anksto nustatytus elementus, kodas neturėtų būti vykdomas pagalbiniuose IS mazguose:

Jei mainų planai. MainNode() = Neapibrėžta Tada // užpildykite iš anksto nustatytus elementus// ... EndIf ;

Naudojant standartinės posistemės bibliotekos (BSL) 2.1.4 ir naujesnę versiją „Data Exchange“ posistemio konfigūracijoje, a ir b reikalavimai pašalinami.

1.4. Lentelėms su iš anksto nustatytais elementais, kurie nėra RIB mainų plano dalis (ir kurių nenurodo kitos lentelės, kurios yra RIB mainų plano dalis), rekomenduojama nustatyti ypatybę. Iš anksto nustatytų duomenų atnaujinimas prasme Atnaujinti automatiškai, o taip pat pirmą kartą paleidus RIB vergo mazgą, nustatykite automatinį duomenų atnaujinimą skambučiu:

Katalogai. Katalogo pavadinimas> . SetUpdatePredefinedData(UpdatePredefinedData.UpdateAutomatically) ;

2. Kai kuriais atvejais iš anksto nustatytų elementų nereikia kurti automatiškai, jei jų buvimas priklauso nuo kokios nors sąlygos: įjungtos funkcinės parinkties, programos veikimo režimo ir pan.

Pavyzdžiui, tam tikri iš anksto nustatyti skaičiavimų tipai skaičiavimo tipų atžvilgiu Sukauptos sumos priklauso nuo funkcinių parinkčių verčių Naudokite darbuotojų laiko stebėjimą laikrodžiuose, Naudokite PieceworkEarning ir kt.

Už tai

  • nuosavybėje Iš anksto nustatytų duomenų atnaujinimasžinynas, sąskaitų planas, charakteristikų tipų planas arba skaičiavimo tipų planas turi būti nustatytas į „Neatnaujinti automatiškai“
  • pateikite kodą, skirtą sukurti (ir panaikinti) iš anksto nustatytą elementą, atsižvelgiant į verslo logiką, pavyzdžiui:
Jei GetFunctionalOption( „Naudoti darbuotojų laiko stebėjimą laikrodžiuose“) Tada AccrualObject = skaičiavimo tipų planai. Sukauptos sumos. CreateCalculationType() ; AccrualObject. PredefinedDataName = "SalaryByHourly" ; // ... AccrualObject. Rašyti () ; EndIf ;
  • programos kode atsižvelgti į tai, kad informacijos saugumui nėra iš anksto nustatytų elementų. Priešingu atveju, kai iš kodo ar užklausos turinio pasiekiate neegzistuojantį iš anksto nustatytą elementą, bus taikoma išimtis:
. . . = Skaičiavimo tipų planas. Sukauptos sumos. Atlyginimas Kas valandą; . . . = PredefinedValue( "Skaičiavimo tipų planas. Sukaupimai. Atlyginimas valandiniu būdu") ;

Kai naudojama standartinės posistemės bibliotekos (BSS) 2.1.4 ir naujesnės versijos konfigūracijoje, rekomenduojama naudoti funkciją Iš anksto nustatytas elementas bendras modulis General PurposeClientServer, kuris grįžta Neapibrėžtas iš anksto nustatytiems elementams, kurių informacijos saugume nėra.

Pati programinio darbo su iš anksto nustatytais elementais idėja, mano nuomone, yra labai teisinga. Tiesiog yra niuansų, į kuriuos reikia atsižvelgti dirbant.

Pirmiausia turite aiškiai suprasti, kad konfigūracijoje yra iš anksto nustatytų elementų ir informacijos bazėje (IS). Techniškai iš anksto nustatyti informacijos saugos elementai yra dažniausiai pasitaikantys katalogų elementai, kuriuose atributas „Iš anksto nustatytų duomenų pavadinimas“ nurodo, kurį iš anksto apibrėžtą konfigūracijos elementą jie atitinka. Jie niekuo nesiskiria nuo įprastų elementų. Atitinkamai, bet kuris įprastas informacijos saugos elementas gali būti iš anksto apibrėžtas, bet kuris iš anksto nustatytas elementas gali būti įprastu. Norėdami tai padaryti, tiesiog įveskite norimą reikšmę atribute „Iš anksto nustatytas duomenų pavadinimas“.

Retkarčiais šioje nuosavybėje pateikiama vertė, kuri nėra ta, kurios kūrėjas numatė. Dėl to 1C veikiant atsiranda klaidų. Nuo kritinio, kuriame darbas iš esmės neįmanomas, iki nekritinio, kuriame sutrinka algoritmų logika.

Sąlygiškai galime atskirti trijų tipų klaidos:
1. "Iš anksto nustatyto elemento nėra duomenyse";

3. Neteisinga iš anksto nustatyto elemento specifikacija;

1. „Iš anksto nustatyto elemento nėra duomenyse“ – o nėra iš anksto nustatyto elemento, aprašyto informacijos saugos duomenų konfigūracijoje.

Tai yra lengviausias klaidų tipas, kurį galima derinti ir ištaisyti. Jo paprastumas yra tas, kad platforma gana teisingai praneša apie šią situaciją „Duomenyse trūksta iš anksto nustatyto elemento“ ir gana aišku, kaip ją ištaisyti.

Pasiekus trūkstamą elementą kode "Katalogai.Kontaktinės informacijos tipai.Kontaktinio asmens el.paštas" rodomas pranešimas

Pasiekus elementą užklausoje „VALUE(Katalogas.Kontaktinės informacijos tipai.Kontaktinio asmens el. paštas)“ rodomas toks pranešimas:

Ši klaida įvyksta, jei elementas aprašytas konfigūracijoje, bet elementas su juo nesusietas duomenų bazėje.

Pirmiausia paaiškinkime, kad ši situacija ne visada klaidinga. Visiškai įmanoma naudoti iš anksto nustatytus duomenis tam tikroje programos logikoje, kuri daugumai vartotojų gali būti nenaudojama. Tokiu atveju, kad katalogas nebūtų užgriozdintas visiems konfigūracijos vartotojams, logiška konfigūracijoje apibrėžti iš anksto nustatytus elementus, bet ne kurti juos visose informacijos saugos sistemose, o tik toms informacijos saugos sistemoms, kuriose naudojama reikiama konfigūracijos logika. Tokiu atveju programuotojas gali nurodyti katalogo ypatybę „Neatnaujinti iš anksto nustatytų duomenų“ ir programiškai kurti elementus, kai pasiekia modulio funkcijas. Arba leiskite vartotojui savarankiškai susieti iš anksto nustatytus modulio elementus su esamais įprastais elementais.

Be to, dirbant RIB režimu, nenaudojamas automatinis iš anksto nustatytų elementų kūrimas. Kadangi nauji elementai turi būti perkelti iš centrinės duomenų bazės, o ne sukurti mazguose su skirtingais UID.

Tie. Kartais klaida yra nuoroda į neprilygstamą elementą, o ne paties tokio elemento buvimas.

Būtina išanalizuoti, kodėl elementas nebuvo sukurtas. Galbūt jis turėtų būti sukurtas, kai vykdomas koks nors programos režimas. Pavyzdžiui, atlikus keitimą RIB. O gal jis buvo tiesiog netyčia ištrintas.

Jei logika numato iš anksto nustatytus elementus užpildyti ne automatiškai, o atskiru režimu, tada prieš naudojant prieigą pagal pavadinimą " Katalogai.Kontaktinės informacijos tipai.Kontaktinio asmens el"Kad nesusidarytų išskirtinė situacija, patartina patikrinti, ar elementas jau yra duomenų bazėje. Jei elemento trūksta, informuokite apie tai vartotoją ir paaiškinkite, kokį režimą jis turi atlikti, kad elementas užpildytų. Tokiam patikrinimui , galite vykdyti duomenų užklausą.

Užklausa = nauja užklausa; Request.Text = "SELECT | Kontaktinės informacijos tipai. Nuoroda | FROM | Katalogas. Kontaktinės informacijos tipai KAIP Kontaktinės informacijos tipai | WHERE | Kontaktinės informacijos tipai. Iš anksto nustatytų duomenų pavadinimas = "" El. paštasContactPerson"""; Elementas yra MissingInData = Query.Execute().Empty();

Jei tai vis tiek yra duomenų bazės duomenų klaida, būtina susieti su iš anksto nustatytu informacijos saugos elemento elementu. Tie. reikia paaiškinti sistemai, kurį informacijos saugos elementą programos kodas turi pasiekti tokiu pavadinimu. Techniškai susiejimas yra tiesiog iš anksto nustatyto elemento pavadinimo nurodymas savybėjeIš anksto nustatytasDataName" iš IS elemento. Norėdami jį įdiegti, tiesiog paleiskite kodą:

2. „Iš anksto nustatytas elementas nėra unikalus“ – h dvigubi iš anksto nustatyti elementai:

Ši situacija yra ta, kad keli informacijos saugos elementai yra prijungti prie vieno iš anksto nustatyto elemento. Tokiu atveju, kai pasiekiamas iš anksto nustatytas pavadinimas, elementas bus pasirinktas atsitiktinai. Ši situacija visada klaidinga. Sunkumas yra tas, kad platforma jokiu būdu nepraneša apie tai. Algoritmai tiesiog pradeda veikti netinkamai.

Platforma praneš apie klaidą „Iš anksto nustatytas elementas nėra unikalus“ tik tada, kai bandysite redaguoti pasikartojantį elementą.

Kol niekam nereikės redaguoti elemento, niekas nesužinos apie klaidą.

Tokius dublikatus galima sukurti, pavyzdžiui, jei katalogui naudojamas RIB, o iš anksto nustatytų duomenų ypatybėse nurodytas režimas „Atnaujinti automatiškai“. Tokiu atveju, atliekant apsikeitimą, atnaujinus konfigūraciją bus sukurtas vienas iš anksto nustatytų duomenų egzempliorius. Antrasis iš anksto nustatytų elementų su tuo pačiu pavadinimu atvejis bus perkeltas iš centrinės duomenų bazės mainų metu.

Be to, šie dublikatai atsiras naudojant mainų apdorojimą tarp konfigūracijų, jei skirtingi informacijos saugos elementai atitinka iš anksto nustatytus elementus skirtingose ​​duomenų bazėse. Tokiu atveju viena iš anksto nustatytų duomenų kopija jau yra duomenų bazėje, antra bus įkeliant duomenis su kitu UID. Jei atliekate duomenų perdavimą, turite nuspręsti, kurie duomenų bazės elementai yra laikomi pagrindiniais ir naudoti juos pavaldžioje duomenų bazėje. Pavaldžioje duomenų bazėje senų elementų naudojimą būtina pakeisti pagrindinės duomenų bazės elementais.

Tokias duomenų bazės klaidas galima atpažinti naudojant tokią užklausą:

PASIRINKITE kontaktinės informacijos tipus. Iš anksto nustatytų duomenų pavadinimas, KIEKIS (SKIRTINGI kontaktinės informacijos tipai. Nuoroda) AS iš anksto nustatytos IŠ katalogo numeris. Kontaktinės informacijos tipai AS Kontaktinės informacijos tipai GRUPĖ PAGAL kontaktinės informacijos tipus. Iš anksto nustatytų duomenų, TURIŲ KIEKIS, pavadinimas (SKIRTINGI tactInformation tipai.Nuoroda) > 1

Ši užklausa pateiks iš anksto nustatytų elementų, su kuriais susietas daugiau nei vienas informacijos saugos elementas, sąrašą.

Jei tokių elementų yra, būtina pašalinti vieno iš jų ryšį su iš anksto nustatytu elementu. Tie. Būtina vienareikšmiškai nustatyti sistemai, į kurį informacijos saugos elementą turi nurodyti programos kodas naudojant šį pavadinimą. Norėdami tai padaryti, tiesiog paleiskite kodą.

3. Neteisinga iš anksto nustatyto elemento specifikacija.

Klaida ta, kad iš anksto nustatytas elementas atitinka elementą, kurio nepateikia programos logika. Tokias klaidas diagnozuoti sunkiausia. Skirtingai nuo pirmųjų dviejų tipų, konfigūracijos negalima automatiškai patikrinti, ar nėra šių klaidų. Juos atpažinti galima tik išanalizavus darbo logiką. Jei abejojate, galite patikrinti, ar naudojamas tinkamas elementas.

Norėdami tai padaryti, tiesiog paleiskite vieną iš komandų.

//Informacijos saugos elemento, susieto su norimu iš anksto nustatytu pranešimu, apibrėžimas (Katalogai. Kontaktinės informacijos tipai. Kontaktinio asmens el. paštas) //Iš anksto nustatyto elemento, prie kurio pridedamas pasirinktas pranešimas, apibrėžimas (nuoroda į elementą. Iš anksto nustatytų duomenų pavadinimas )

Jei nustatomos tokios klaidos, būtina pašalinti neteisingą ryšį su senu elementu ir pridėti ryšį su nauju elementu. Operacijos kodas yra panašus į kodą, skirtą pirmųjų dviejų tipų klaidų taisymui.

Na, trumpai apie klaidas darbo metu arba konfigūratoriaus režimu:

„Iš anksto nustatytas elementas nepriklauso<Имя справочника>" - klaida įvyksta bandant parašyti iš anksto nustatytą elementą pavadinimu, kuris neatitinka pavadinimo konfigūravimo priemonėje.

"Neiš anksto nustatyti objektai negali turėti iš anksto nustatytų subkonto peržiūros įrašų" - įvyksta klaida, kai bandoma iš anksto apibrėžto sąskaitų plano elementą padaryti neapibrėžtu. Norint pašalinti klaidas, būtina iš kiekvieno elemento pokontaktinės linijos pašalinti vėliavėlę „Iš anksto nustatyta“.

"Neiš anksto nustatyti objektai negali turėti iš anksto nustatytų pagrindinių skaičiavimo tipų įrašų"- klaida įvyksta bandant iš anksto apibrėžtą skaičiavimo tipų plano elementą padaryti neapibrėžtu. Norint pašalinti klaidas, būtina pašalinti kiekvienos elemento pirmaujančio skaičiavimo tipo eilutės žymimąjį laukelį „Iš anksto nustatytas“.

„Iš anksto nustatyti elementai nėra unikalūs“- atnaujinant informacijos bazę konfigūracijos leidimui be suderinamumo režimo su 8.3.4 konfigūravimo priemonėje sugeneruojama klaida. Prieš atnaujinant būtina patikrinti dublikatus ir juos pašalinti.

"Iš anksto nustatyto elemento pavadinimas nėra unikalus" - klaida įvyksta, kai atnaujinant į platformą konfigūracijoje yra keli iš anksto nustatyti to paties pavadinimo elementai8.3.6.2332 ir naujesnės versijos. Būtina pašalinti konfigūracijos dublikatus.

Jei norite dirbti su iš anksto nustatytais duomenimis, rekomenduoju apdoroti. Jis gali atlikti bet kokius veiksmus su iš anksto nustatytais duomenimis, taip pat gali patikrinti visą konfigūraciją, ar visuose informacijos saugos objektuose (katalogai, sąskaitų planai, PVC, PVR) nėra pirmųjų dviejų tipų klaidų (dubliuotų ir trūkstamų elementų). .

Dėmesio! Tai įvadinė pamokos versija, kurios medžiaga gali būti neišsami.

Prisijunkite prie svetainės kaip studentas

Prisijunkite kaip mokinys, kad galėtumėte pasiekti mokyklos medžiagą

Užklausos kalba 1C 8.3 pradedantiesiems programuotojams: funkcija VALUE

Funkcija PRASMĖ skirtas apyvartai prašymo įstaigoje į sistemos surašymo reikšmes Ir iš anksto nustatyti duomenys.

Klausiate, kas dar yra šie sąrašai ir iš anksto nustatyti duomenys. Pakalbėkime apie viską iš eilės.

Pervedimai

Pervedimai- tai yra programos objektas (atmenate, kad taip pat yra Katalogai Ir Dokumentacija). Kam jo reikėjo?

Esmė ta, kad surašymas yra ypatingas objektas. Skirtingai nuo žinynų ir dokumentų visos galimos surašymo reikšmės yra nurodytos konfigūracijos etape ir jo negalima toliau keisti vartotojo režimu.

Nekintamumas yra pagrindinis jų koziris. Tai savotiškos duomenų bazės konstantos.

Ir jei programuotojas konfigūracijos režimu sukūrė sąrašą su pavadinimu Grindys ir reikšmės Patinas Ir Moteris, tada rašydamas programą jis gali būti tikras, kad šio sąrašo reikšmės ateityje nepasikeis. Todėl jis gali saugiai pasiekti šias vertes iš kodo.

Įsivaizduokite, kas nutiks, jei jis bandys naudoti katalogą šiems tikslams?

Pirma, koks nors vartotojas jį paims ir pridės kažkokį „Marso aukštą“.

Antra, kitas vartotojas ištrins vieną iš esamų lyčių arba pakeis savo vardą.

Ir programa dėl to nutrūks, nes tam, kad ji veiktų, reikia, kad būtų tiksliai dvi lytys ir būtent su vardais „Vyras“ ir „Moteris“.

Būtent tokiais atvejais egzistuoja išvardijimas: vieną kartą (konfigūravimo etape) griežtai apibrėžti visus galimus reikšmių variantus ir tada naudoti juos programos kode.

Pažiūrėkime į tokio surašymo pavyzdį mūsų „Gastronom“ duomenų bazėje. Skaitote bandomąją pamokos versiją, yra visos pamokos.

Štai mūsų sąrašas su pavadinimu Grindys. Kokių vertybių tai gali turėti?

Yra tik dvi reikšmės. Su vardais „Vyras“ ir „Moteris“. Kaip tik tai, ko mums reikia.

Kur galime naudoti šį sąrašą ateityje? Na, žinoma, kataloge Klientai. Atkreipkite dėmesį, kad jo sąraše atsirado naujas rekvizitas su pavadinimu Grindys ir tipas Sąrašas.Lytis:

Taigi, pildydami kliento kortelę jau vartotojo režimu, kaip kliento lytį galėsime pasirinkti tik dvi reikšmes: Vyras ir Moteris:

Dabar sukurkime užklausą, kuri atrenka klientus ir jų lytį iš duomenų bazės:

Dabar pakeiskime užklausą, kad liktų tik vyrai. Jei bandysime parašyti kažką panašaus:

tada nieko negausime:

Kadangi surašymo reikšmių tokiu būdu pasiekti negalima. Juos reikia pasiekti naudojant funkciją PRASMĖ:

Taigi, viena iš funkcijos užduočių PRASMĖ- surašymo reikšmių naudojimas užklausose.

Iš anksto nustatyti duomenys

Geriau parodysiu pavyzdžiu, kas yra iš anksto nustatyti katalogų duomenys. Skaitote bandomąją pamokos versiją, yra visos pamokos.

Mūsų „Gastronom“ duomenų bazėje (vartotojo režimu) atidarykite katalogą „Matavimo vienetai“:

Atidžiau pažvelkite į jo elementus. Matote geltonus apskritimus šalia kai kurių elementų? Šie elementai (kurie turi apskritimus) yra iš anksto nustatyti duomenys.

Apskritai, jei kuris nors katalogo elementas yra iš anksto nustatytas (tai yra, ant jo yra geltonas apskritimas), tai yra specialus elementas.

Pirma, tai reiškia, kad elementą konfigūracijos etape sukūrė programuotojas (mūsų atveju tai yra elementai su kodais 1, 2 ir 3).

Ir, antra, tai reiškia, kad šis elementas yra labai svarbus programos veikimui. Kad tam tikras kodas duomenų bazėje yra susietas su juo (tiksliau su jo iš anksto nustatytu pavadinimu).

Štai kodėl paprasčiausiai ištrinti tokį elementą neveiks. Pabandykite pažymėti jį ištrinimui:

Eikime į konfigūracijos režimą ir pažiūrėkime, kur sukuriami šie iš anksto nustatyti elementai (šiuo atveju katalogui Matavimo vienetai):

Čia jie yra visi mūsų iš anksto nustatyti matavimo vieneto žinyno elementai. Atminkite, kad visi iš anksto nustatyti elementai turi specialų pavadinimą, kuris nerodomas vartotojo režimu.

Elemento su kodu 1 šis pavadinimas yra Tonas, su kodu 2 - Gram ir pan. Šis vardas vadinamas iš anksto nustatytas elemento pavadinimas ir būtent šiuo pavadinimu galite jį pasiekti iš kodo (arba iš užklausos, mūsų atveju).

Galite paklausti, kodėl nebuvo įmanoma matavimo vienetų sudaryti tiesiog sąrašą su elementais Tonas, Gramas ir Pakelis? Ir viskas todėl, kad šiuo atveju mums svarbu, kad matavimo vienetų žinyne visada būtų tam tikri konkretūs elementai (tona, gramas ir pakuotė), tačiau tuo pat metu nenorime uždrausti vartotojui pridėti kai kurių savo elementai (kilogramas, gabalas ir pan.). Skaitote bandomąją pamokos versiją, yra visos pamokos.

Todėl čia neabejotinai labiau tinka iš anksto nustatyti elementai nei išvardinimai.

Ir mes galime pasiekti iš anksto nustatytus elementus iš užklausos naudodami mums jau pažįstamą funkciją PRASMĖ:

Atlikite testą

Pradėti testą

1. Nustatomos surašymo reikšmės

2. Saugoti įmonės sandėlių sąrašą, tipą

3. Norėdami saugoti sandėlyje esančių matavimo vienetų sąrašą, tipas

4. Saugoti mokesčių tarifus, kurių sąrašo vartotojas neturėtų keisti, tipas

5. Norėdami pasiekti užklausoje pateiktą surašymo reikšmę, naudokite funkciją

6. Saugoti mokesčių tarifus, kurių sąrašą vartotojas pakeis, tipą

7. Pateikiami iš anksto nustatyti duomenys

Gera diena.

Šiandien kalbėsime apie 8.3 platformos naujoves, susijusias su iš anksto nustatytais elementais.

Įvadas

Leiskite jums priminti, kad anksčiau praktikoje labai dažnai norėjau pažvelgti į katalogo elementą, kad sužinočiau jo iš anksto nustatytą pavadinimą. Pavyzdžiui, sukūrėte dvi iš anksto nustatytas sandorio šalis ir pavadinote jas IPSidorov ir OOOMeteor. Ir jie pritaikė jiems logikos.

Kai viskas buvo derinama ir pavyko, paaiškėjo, kad užduotis buvo pateikta atvirkščiai ir individualiam verslininkui skirta logika reikalinga LLC, o LLC logika reikalinga individualiam verslininkui. „Jokių problemų“, - sakome, o įmonės režimu pervadiname elementus. Juk įsijausti į kodą daug sunkiau. Praeina metai ir jūs gaunate naują užduotį: sukurti daugiau logikos IP Sidorov. Įeini į konfigūratorių, parašai logiką, pradedi tikrinti ir niekas neveikia, nes... IPSidorov konfigūratoriuje, o įmonėje - OOOMeteor. Smegenys sulaužytos ir aš noriu sunaikinti šį grėblį. Paprasčiausias ir akivaizdžiausias dalykas yra rodyti iš anksto nustatyto elemento pavadinimą sąrašo pavidalu. Čia yra klaida: naudodami šį metodą galite gauti tik iš anksto nustatyto 8.2 versijos pavadinimą. Tačiau metodas turi savų nepatogumų, jo negalima gauti užklausoje. Tie. Pirmas nepatogumas yra gauti iš anksto nustatyto pavadinimą iš nuorodos į katalogą.

Antrasis nepatogumas yra tada, kai jau turime katalogo elementą ir turime jį iš anksto nustatyti. Sukuriame iš anksto nustatytą elementą ir gauname du elementus kataloge. Vienas yra iš anksto nustatytas, kitas yra veikiantis, kuris yra nurodytas visuose mūsų dokumentuose. Nuorodų pakeitimas tikrai padeda, bet jei duomenų bazė didelė, tai sunku.

Dabar prie esmės

Pirma, kataloge dabar yra ypatybė „Atnaujinti iš anksto nustatytus duomenis“.

Ką mums duoda ši sritis? Jei jis nustatytas į „Neatnaujinti automatiškai“, tada pridėjus iš anksto nustatytą elementą, mes jo nepamatysime kataloge iš karto. Tie. metaduomenys niekaip nesusieti su duomenimis. Ir jei nesukursite jo kataloge, pasiekus jį pavadinimu per katalogų tvarkyklę, sukels sintaksės klaidą.

Labai įdomu, bet kodėl? Kaip galime sukurti elementą kataloge? Galite sukurti jį taip, kaip norite, arba galite susieti jį su esamu. Dabar katalogas turi atributą „Iš anksto nustatytų duomenų pavadinimas“. Katalogo elementą sukuriame programiškai, kaip įprasta, naudodami „Directories.Contractors.CreateElement()“ ir užpildome jo atributą „PredefinedDataName“, lygų iš anksto nustatyto elemento pavadinimui. Arba, jei elementas jau egzistuoja, gauname jo objektą ir vėl užpildome „Iš anksto nustatytų duomenų pavadinimą“. Visi.

Ir galiausiai šiek tiek sirupo

Šis naujas atributas yra ne tik skaitomas ir įrašomas, jis taip pat pasiekiamas užklausose. Tokiu būdu užklausose galite nustatyti jam sąlygas, nustatyti, ar jis iš anksto nustatytas, ar ne.

Ačiū už dėmesį.

Dalintis