Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Recenzii
  • Crearea elementelor predefinite 1s 8.3. Elemente regulate și predefinite

Crearea elementelor predefinite 1s 8.3. Elemente regulate și predefinite

Însăși ideea de lucru programatic cu elemente predefinite, în opinia mea, este foarte corectă. Există pur și simplu nuanțe care trebuie luate în considerare atunci când lucrați.

În primul rând, trebuie să înțelegeți clar pentru dvs. că există elemente predefinite în configurație și există elemente predefinite în baza de informații (IS). Din punct de vedere tehnic, elementele de securitate a informațiilor predefinite sunt cele mai comune elemente ale directoarelor, în care atributul „Numele datelor predefinite” indică cărui element de configurare predefinit îi corespund. Ele nu sunt diferite de elementele obișnuite. Prin urmare, orice element obișnuit de securitate a informațiilor poate fi făcut predefinit, orice element predefinit poate fi făcut obișnuit. Pentru a face acest lucru, trebuie doar să introduceți valoarea dorită în atribut „PredefinedDataName”.

Din când în când, această proprietate conține o valoare care nu este cea intenționată de dezvoltator. Ca urmare, apar erori în funcționarea 1C. De la critic, în care munca este practic imposibilă, până la non-critică, în care logica algoritmilor este perturbată.

Condițional putem distinge trei tipuri de erori:
1. „Elementul predefinit nu se află în date”;

3. Specificarea incorectă a unui element predefinit;

1. „Elementul predefinit nu se află în date” - o absența unui element predefinit descris în configurație în datele de securitate a informațiilor.

Acesta este cel mai ușor tip de eroare de depanat și corectat. Simplitatea sa este că platforma raportează destul de corect această situație „Lipsește elementul predefinit din date” și este destul de clar cum se poate remedia.

La accesarea unui element lipsă din codul „Directoare.Tipuri de informații de contact.E-mailul persoanei de contact” este afișat un mesaj

La accesarea unui element din cererea „VALUE(Directory.Types of Contact Information.Email of the Contact Person)” este afișat următorul mesaj:

Această eroare apare dacă un element este descris în configurație, dar elementul nu este asociat cu acesta în baza de date.

Pentru început, să clarificăm că această situație nu este întotdeauna greșită. Este destul de posibil să folosiți date predefinite într-un fel de logică de program, care pentru majoritatea utilizatorilor ar putea să nu fie utilizate. În acest caz, pentru a nu aglomera directorul pentru toți utilizatorii configurației, este logic să definiți elemente predefinite în configurație, dar să nu le creați în toate sistemele de securitate a informațiilor, ci doar pentru acele sisteme de securitate a informațiilor în care se utilizează logica de configurare necesară. În acest caz, programatorul poate specifica proprietatea „Nu actualizați datele predefinite” pentru director și poate crea elemente în mod programatic atunci când accesează funcționalitatea modulului. Sau permiteți utilizatorului să lege în mod independent elementele modulului predefinite la elementele obișnuite existente.

De asemenea, crearea automată a elementelor predefinite nu este utilizată atunci când se lucrează în modul RIB. Deoarece elementele noi trebuie transferate din baza de date centrală și nu create în noduri cu UID-uri diferite.

Acestea. Uneori, eroarea este referirea la un element nepotrivit, nu prezența unui astfel de element în sine.

Este necesar să se analizeze de ce elementul nu a fost creat. Poate că ar trebui creat atunci când se execută un mod de program. De exemplu, după finalizarea unui schimb în RIB. Sau poate că a fost doar șters accidental.

Dacă logica prevede completarea elementelor predefinite nu automat, ci într-un mod separat, atunci înainte de a utiliza accesul după nume " Directoare.Tipuri de informații de contact.E-mailul persoanei de contact„Pentru a preveni o situație excepțională, este indicat să verificați dacă elementul este deja în baza de date. Dacă elementul lipsește, atunci informați utilizatorul despre acest lucru și explicați ce mod trebuie să efectueze pentru a umple elementul. Pentru o astfel de verificare , puteți rula o interogare de date.

Solicitare = Solicitare nouă; Request.Text = "SELECT | Tipuri de informații de contact. Link | FROM | Director. Tipuri de informații de contact CUM Tipuri de informații de contact | UNDE | Tipuri de informații de contact. Numele datelor predefinite = "" E-mailContactPerson"""; Elementul lipseșteInData = Query.Execute().Empty();

Dacă aceasta este încă o eroare în datele bazei de date, atunci este necesară legarea la un element predefinit al elementului de securitate a informațiilor. Acestea. este necesar să se explice sistemului ce element de securitate a informațiilor ar trebui să acceseze codul programului cu acest nume. Din punct de vedere tehnic, o legare este pur și simplu specificarea numelui unui element predefinit în proprietatea "PredefinedDataName" din elementul IS. Pentru a-l instala, trebuie doar să rulați codul:

2. „Elementul predefinit nu este unic” - h elemente duble predefinite:

Această situație este că mai multe elemente de securitate a informațiilor sunt atașate unui element predefinit. În acest caz, la accesarea unui nume predefinit, elementul va fi selectat aleatoriu. Această situație este întotdeauna greșită. Dificultatea sa este că platforma nu o raportează în niciun fel. Algoritmii încep să funcționeze incorect.

Platforma va raporta eroarea „Elementul predefinit nu este unic” doar atunci când încercați să editați un element duplicat.

Atâta timp cât nimeni nu trebuie să editeze elementul, nimeni nu va ști despre eroare.

Astfel de duplicate pot fi create, de exemplu, dacă RIB este utilizat pentru director și modul „Actualizare automată” este specificat în proprietățile pentru date predefinite. În acest caz, la efectuarea unui schimb, o instanță a datelor predefinite va fi creată atunci când configurația este actualizată. O a doua instanță de elemente predefinite cu același nume va fi transferată din baza de date centrală în timpul schimbului.

De asemenea, aceste duplicate vor apărea atunci când se utilizează procesarea de schimb între configurații dacă diferite elemente de securitate a informațiilor corespund elementelor predefinite în baze de date diferite. În acest caz, o copie a datelor predefinite există deja în baza de date, a doua va veni la încărcarea datelor cu un alt UID. Dacă efectuați transferuri de date, trebuie să decideți care elemente ale bazei de date sunt considerate primare și să le utilizați în baza de date subordonată. În baza de date subordonată, este necesară înlocuirea utilizării elementelor vechi cu elemente ale bazei de date principale.

Astfel de erori din baza de date pot fi identificate cu o interogare precum:

SELECT Tipuri de informații de contact.Nume de date predefinite, CANTITATE (DIFERATE Tipuri de informații de contact.Link) AS Număr de predefinite FROM Director.Tipuri de informații de contact AS Tipuri de informații de contact GROUP BY Tipuri de informații de contact.Nume de date predefinite AU CANTITATE (DIFERITE Tipuri ContactInformation.Link) > 1

Această interogare va returna o listă de elemente predefinite cu care este asociat mai mult de un element de securitate a informațiilor.

Dacă astfel de elemente sunt prezente, este necesar să eliminați legătura cu cea predefinită pentru unul dintre ele. Acestea. Este necesar să se determine fără ambiguitate pentru sistem la ce element de securitate a informațiilor ar trebui să se refere codul programului atunci când se utilizează acest nume. Pentru a face acest lucru, trebuie doar să rulați codul.

3. Specificarea incorectă a unui element predefinit.

Eroarea este că elementul predefinit corespunde unui element care nu este furnizat de logica programului. Astfel de erori sunt cele mai greu de diagnosticat. Spre deosebire de primele două tipuri, configurația nu poate fi verificată automat pentru aceste erori. Ele pot fi identificate doar analizând logica muncii. Dacă aveți îndoieli, puteți verifica dacă este utilizat elementul corect.

Pentru a face acest lucru, rulați una dintre comenzi.

//Definirea unui element de securitate a informațiilor care este legat de notificarea predefinită dorită (Directoare.Tipuri de informații de contact.E-mail al persoanei de contact) //Definirea unui element predefinit la care este atașat Notificarea selectată (Link către elementul.Numele datelor predefinite )

Dacă sunt identificate astfel de erori, este necesar să eliminați conexiunea incorectă cu elementul vechi și să adăugați o conexiune cu noul element. Codul de operare este similar cu codul pentru corectarea primelor două tipuri de erori.

Ei bine, pe scurt despre erorile din timpul programului de lucru sau în modul configurator:

„Elementul predefinit nu îi aparține<Имя справочника>" - apare o eroare la încercarea de a scrie un element predefinit cu un nume care nu se potrivește cu numele din configurator.

„Obiectele nepredefinite nu pot avea înregistrări de vizualizare subconto predefinite” - apare o eroare la încercarea de a face nepredefinit un element dintr-un plan de conturi predefinit. Pentru a elimina erorile, este necesar să eliminați marcajul „Predefinit” din fiecare linie de subcontact element.

„Obiectele nepredefinite nu pot avea înregistrări predefinite ale principalelor tipuri de calcule”- apare o eroare la încercarea de a face un element predefinit al planului de tipuri de calcul nepredefinit. Pentru a elimina erorile, este necesar să eliminați caseta de selectare „Predefinit” pentru fiecare linie a tipului de calcul principal al elementului.

„Elementele predefinite nu sunt unice”- se generează o eroare în configurator la actualizarea bazei de informații pentru o versiune de configurare fără modul de compatibilitate cu 8.3.4. Este necesar să verificați dacă există duplicate și să le eliminați înainte de actualizare.

„Numele elementului predefinit nu este unic” - eroarea apare atunci cand exista mai multe elemente predefinite cu acelasi nume in configuratie la actualizarea pe platforma8.3.6.2332 și mai sus. Este necesar să eliminați duplicatele din configurație.

Pentru a lucra cu date predefinite, recomand procesarea. Poate efectua orice acțiuni cu date predefinite și, de asemenea, poate verifica configurația în ansamblu pentru prezența erorilor din primele două tipuri (elemente duplicate și lipsă) în toate obiectele de securitate a informațiilor (directoare, planuri de conturi, PVC, PVR) .

Atenţie! Aceasta este o versiune introductivă a lecției, ale cărei materiale pot fi incomplete.

Conectați-vă la site ca student

Conectați-vă ca student pentru a accesa materialele școlare

Limbajul de interogare 1C 8.3 pentru programatori începători: funcția VALUE

Funcţie SENS destinate circulatieiîn corpul de cerere la valorile de enumerare a sistemuluiȘi date predefinite.

Ce altceva sunt aceste enumerari si date predefinite, intrebi. Să vorbim despre totul în ordine.

Transferuri

Transferuri- acesta este un obiect de aplicație (vă amintiți că există și DirectoareȘi Documentație). De ce era nevoie de el?

Ideea este că o enumerare este un obiect special. Spre deosebire de cărțile și documentele de referință toate valorile de enumerare posibile sunt specificate în etapa de configurareși nu poate fi schimbat în continuare în modul utilizator.

Imuabilitatea este principalul lor atu. Acestea sunt un fel de constante ale bazei de date.

Și dacă programatorul în modul de configurare a creat o enumerare cu numele Podea si semnificatii MasculinȘi Femeie, atunci când scrie un program poate fi sigur că valorile acestei enumerații nu se vor schimba în viitor. Prin urmare, el poate accesa în siguranță aceste valori din cod.

Imaginați-vă ce se va întâmpla dacă va încerca să folosească directorul în aceste scopuri?

În primul rând, un utilizator îl va lua și va adăuga un fel de „podă marțiană”.

În al doilea rând, un alt utilizator va continua și va șterge unul dintre genurile existente sau își va schimba numele.

Și programul se va rupe din această cauză, pentru că pentru ca el să funcționeze este necesar să existe exact două genuri și exact cu numele „Bărbat” și „Femeie”.

Pentru astfel de cazuri există enumerații: pentru a defini rigid toate variantele posibile de valori o dată (în etapa de configurare) și apoi le utilizați în codul programului.

Să ne uităm la un exemplu de astfel de enumerare în baza noastră de date „Gastronom”. Citiți o versiune de probă a lecției, sunt disponibile lecții complete.

Iată enumerarea noastră cu numele Podea. Ce valori poate lua?

Există doar două sensuri. Cu numele „Bărbat” și „Femeie”. Exact ce ne trebuie.

Unde putem folosi această enumerare în viitor? Ei bine, desigur, în director Clienții. Vă rugăm să rețineți că o nouă recuzită cu numele a apărut în lista sa Podeași tip Enumerare.Gen:

Astfel, la completarea unui card de client deja în modul utilizator, vom putea selecta doar două valori ca sex al clientului: Bărbat și Femeie:

Acum să creăm o interogare care selectează clienții și sexul acestora din baza de date:

Acum să schimbăm interogarea, astfel încât să rămână doar bărbații. Dacă încercăm să scriem ceva de genul:

atunci nu primim nimic:

Deoarece valorile de enumerare nu pot fi accesate în acest fel. Acestea trebuie accesate folosind funcția SENS:

Deci, una dintre sarcinile funcției SENS- utilizarea valorilor de enumerare în interogări.

Date predefinite

Mai bine arăt cu un exemplu ce sunt datele predefinite pentru directoare. Citiți o versiune de probă a lecției, sunt disponibile lecții complete.

În baza noastră de date „Gastronom” (în modul utilizator), deschideți directorul „Unități de măsură”:

Aruncă o privire mai atentă la elementele sale. Vedeți cercurile galbene de lângă unele dintre elemente? Aceste elemente (care au cercuri) sunt date predefinite.

În general, dacă orice element al directorului este predefinit (adică există un cerc galben pe el), atunci acesta este un element special.

În primul rând, aceasta înseamnă că elementul a fost creat în etapa de configurare de către programator (în cazul nostru, acestea sunt elemente cu codurile 1, 2 și 3).

Și, în al doilea rând, asta înseamnă că acest element este foarte important pentru funcționarea programului. Că un cod din baza de date este legat de el (sau mai degrabă de numele său predefinit).

De aceea pur și simplu ștergerea unui astfel de element nu va funcționa. Încercați să îl marcați pentru ștergere:

Să trecem acum la modul de configurare și să vedem unde sunt create aceste elemente predefinite (în acest caz pentru directorul Unități de măsură):

Aici sunt toate elementele noastre predefinite pentru cartea de referință pentru unitatea de măsură. Vă rugăm să rețineți că toate elementele predefinite au un nume special care nu este afișat în modul utilizator.

Pentru un element cu codul 1 acest nume este Ton, cu codul 2 - Gram și așa mai departe. Acest nume este numit nume de element predefinitși tocmai cu acest nume îl puteți accesa din cod (sau din cerere în cazul nostru).

Vă puteți întreba de ce nu a fost posibil să faceți unitățile de măsură doar o listă cu elementele Ton, Gram și Pack? Și totul pentru că în acest caz este important pentru noi ca cartea de referință a unității de măsură să conțină întotdeauna unele elemente specifice (tonă, gram și ambalaj), dar în același timp nu dorim să interzicem utilizatorului să adauge unele dintre ele. elemente (kilogram, bucată și așa mai departe). Citiți o versiune de probă a lecției, sunt disponibile lecții complete.

Prin urmare, elementele predefinite sunt cu siguranță mai potrivite aici decât enumerațiile.

Și putem accesa elementele noastre predefinite din cerere folosind o funcție deja familiară nouă SENS:

A lua testul

Începeți testul

1. Valorile de enumerare sunt setate

2. Pentru a stoca o listă de depozite dintr-o companie, tipul

3. Pentru a stoca o listă de unități de măsură într-un depozit, tipul

4. Pentru a stoca ratele de impozitare, a căror listă nu trebuie modificată de utilizator, tipul

5. Pentru a accesa valoarea de enumerare într-o cerere, utilizați funcția

6. Pentru a stoca ratele de impozitare, a căror listă va fi modificată de utilizator, tipul

7. Datele predefinite vin cu

Imprimare (Ctrl+P)

Lucrul cu valori predefinite folosind Managerul de obiecte

Puteți obține o valoare predefinită pe partea serverului 1C:Enterprise folosind managerul obiectului corespunzător. Linia care definește atributul primit are următoarea formă:

PredefinedValueType.MetadataObjectName.Value


PredefinedValueType– pentru a obține valori predefinite, sunt disponibile următoarele tipuri de date (scrise în
plural):
● Directoare,
● Planuri de Tipuri de Caracteristici,
● Planuri de conturi,
● Planuri de tipuri de calcul,
● Transferuri.
ObjectNameMetadata

● Valoare – poate fi una dintre următoarele:
● pentru enumerări se indică denumirea valorii de enumerare;

● Route Points.Point Name – punct de traseu al procesului de afaceri.
Dacă trebuie să obțineți un punct de rută a procesului de afaceri, linia care descrie valoarea pe care o obțineți va arăta astfel:

BusinessProcesses.MetadataObjectName.RoutePoints.RoutePointName
Exemplu:


Tip = Listări.Tipuri de produse.Produs;
// Obținerea datelor de director predefinite.
Element = Directories.Currency.Ruble;
// Punct de traseu al procesului de afaceri
Punct = BusinessProcess.Approval.RoutePoints.Approval;

Lucrul cu valori predefinite folosind o funcție Valoare predefinită()

Datorită faptului că obiectele aplicației nu sunt disponibile pe partea clientului, obținerea de detalii predefinite folosind manageri de obiecte devine imposibilă. Prin urmare, pentru a le obține, există o metodă de context global PredefinedValue(). Parametrul acestei metode este un șir care descrie ce valoare predefinită urmează să fie preluată. Sintaxa pentru descrierea unei valori predefinite este aceeași cu sintaxa operatorului VALUE în limbajul de interogare.
Linia care definește atributul primit are următoarea formă:

Să ne uităm la componentele acestei linii mai detaliat:
PredefinedValueType– pentru a obține valori predefinite, sunt disponibile următoarele tipuri de date (scrise în
singular):
● Director,
Planul Tipurilor de Caracteristici,
● Planul de conturi,
Planul Tipurilor de Calcul,
● Transfer,
● Procesul de afaceri.
● ȘI nameObjectMetadata– numele obiectului metadate este indicat așa cum este specificat în configurator.
● Valoare – poate fi una dintre următoarele

● pentru enumerări se indică denumirea valorii de enumerare;
● pentru a obține o valoare predefinită, indicați numele acesteia, așa cum este specificat în configurator;
● RoutePoint.PointName – punct de traseu al procesului de afaceri;
● EmptyLink – pentru a obține un link gol.
Dacă trebuie să obțineți valoarea unei enumerări de sistem, parametrul metodei va arăta astfel:
SystemEnumerationName.SystemEnumerationValue.
De exemplu:

ChartType = PredefinedValue(„ChartType.ConcaveSurface“);
Dacă trebuie să obțineți un punct de rută a procesului de afaceri, linia care descrie valoarea pe care o obțineți va arăta astfel:
Exemplu:

// Obține valoarea de enumerare.
Vizualizare = PredefinedValue(„Lista.Tipuri de produse.Produs”);
// Obține valoarea unui link gol.
EmptyLink =
Valoare predefinită(„Document.ConsumableInvoice.EmptyLink”);
// Obținerea datelor de director predefinite.
Item = PredefinedValue(„Director.Monetă.Rubla”);
// Punct de traseu al procesului de afaceri
Punct = Valoare Predefinită(„Proces de afaceri. Aprobare. Punct de traseu. Aprobare”);

Valabil pentru versiunea platformei 1C: Enterprise 8.3.3 și o versiune ulterioară fără modul de compatibilitate cu versiunea 8.2

1.1. În directoare, planuri de conturi, diagrame de tipuri caracteristice și planuri de tipuri de calcul, este posibil să se creeze elemente predefinite automat sau programatic.

1.2. În cele mai multe cazuri, se recomandă ca elementele predefinite să fie create automat deoarece sunt necesare în mod constant și doriți să facilitați accesul la aceste elemente din cod.
De exemplu, o țară predefinită Rusiaîn director Țările lumii, profil de grup de acces predefinit Administratorși așa mai departe.

Pentru aceasta

  • în proprietatea unui director, planul de conturi, tipurile de plan de caracteristici sau tipurile de plan de calcul trebuie să fie setate la Auto(implicit), iar apelurile programatice către metodă nu ar trebui să fie permise SetUpdatePredefinedData aceste obiecte pentru a comuta acest mod.
  • împiedicați utilizatorii să șteargă elemente predefinite prin dezactivarea următoarelor drepturi în toate rolurile (dezactivate implicit):
    • InteractiveDeletePredefinedData
    • InteractiveMarkDeletionPredefinedData
    • InteractiveUnflagDeletePredefinedData
    • InteractiveDeleteTaggedPredefinedData

1.3. Excepție fac nodurile copil ale RIB, în care elementele predefinite nu sunt create automat (și nu sunt actualizate atunci când există o modificare a metadatelor), ci trebuie să fie transferate de la nodul principal împreună cu modificările de configurare.

în care:

a) configurația trebuie să asigure că mesajul de schimb este încărcat în nodul slave al RIB înainte de a executa alt cod de aplicație care accesează elemente predefinite primite de la nodul master;

b) în logica aplicată a încărcării datelor de la nodul principal (manipulatorul de evenimente Când primiți date de la rețeaua principală, reguli de înregistrare a obiectelor) trebuie evitate apelurile către elemente predefinite, deoarece nu există nicio garanție că acestea au fost deja încărcate din mesajul de schimb;

c) codul de gestionare a actualizării IS, care prelucrează elemente predefinite, nu ar trebui să fie executat în nodurile slave ale IS:

Dacă Schimb Planuri. MainNode() = Nedefinit Atunci // umple elemente predefinite// ... EndIf ;

Când se utilizează Bibliotecă de subsistem standard (BSL) versiunea 2.1.4 și o versiune ulterioară în configurația subsistemului „Schimb de date”, cerințele (a) și (b) sunt eliminate.

1.4. Pentru tabelele cu elemente predefinite care nu fac parte din planul de schimb RIB (și care nu sunt menționate de alte tabele care fac parte din planul de schimb RIB), se recomandă setarea proprietății Actualizarea datelor predefiniteîn sens Actualizați automatși, de asemenea, atunci când porniți nodul slave RIB pentru prima dată, setați actualizarea automată a datelor folosind apelul:

Directoare. DirectoryName> . SetUpdatePredefinedData(UpdatePredefinedData.UpdateAutomatically) ;

2. În unele cazuri, elementele predefinite nu trebuie să fie create automat dacă prezența lor depinde de o anumită condiție: o opțiune funcțională activată, modul de funcționare a programului etc.

De exemplu, anumite tipuri de calcule predefinite în ceea ce privește tipurile de calcule Angajamente depind de valorile opțiunilor funcționale Utilizați urmărirea timpului angajaților în ceasuri, Utilizați PieceworkEarning si etc.

Pentru aceasta

  • în proprietate Actualizarea datelor predefinite cartea de referință, planul de conturi, tipurile de diagramă de caracteristici sau tipurile de plan de calcul trebuie setate la „Nu actualizați automat”
  • furnizați cod pentru crearea (și invalidarea) unui element predefinit în funcție de logica afacerii, de exemplu:
Dacă GetFunctionalOption( „Utilizați urmărirea timpului angajaților în ceasuri”) Apoi AccrualObject = Planuri de tipuri de calcul. Angajamente. CreateCalculationType() ; AccrualObject. PredefinedDataName = "SalaryByHourly" ; // ... AccrualObject. Scrie() ; EndIf ;
  • ia in calcul in codul aplicatiei absenta elementelor predefinite in securitatea informatiei. În caz contrar, la accesarea unui element predefinit inexistent din corpul codului sau al cererii, se va arunca o excepție:
. . . = Planul Tipurilor de Calcul. Angajamente. SalariuOr; . . . = Valoare Predefinită( "Plan de tipuri de calcul. Angajamente. Salariu pe oră") ;

Atunci când este utilizat în configurarea Bibliotecii de subsistem standard (BSS) versiunea 2.1.4 și o versiune ulterioară, se recomandă utilizarea funcției PredefinitElement modul comun General PurposeClientServer, care revine Nedefinit pentru elemente predefinite care nu există în securitatea informaţiei.

Cele mai bune articole pe această temă