Verificarea pentru valoarea de tip 1c.

Ştiri

Acasă Pentru dezvoltatori începători Învață să programezi

Cum se verifică tipul de valoare al unui document sau director?

În primul rând, limbajul încorporat implementează mai multe tipuri de lucru cu un obiect aplicație. De exemplu, sarcini care au fost rezolvate în 1C:Enterprise 7.7 după tip Document

sunt acum rezolvate de mai multe tipuri. Ele sunt împărțite în funcție de scopul lor. Tip DocumentObject

sunt acum rezolvate de mai multe tipuri. Ele sunt împărțite în funcție de scopul lor. utilizate pentru înregistrarea și ștergerea documentelor individuale. DocumentSelection

folosit pentru a itera prin documente stocate în baza de date.

Există și alte tipuri de date concepute pentru a funcționa cu un document. La scrierea modulelor se folosesc tipurile care sunt necesare pentru rezolvarea unor probleme specifice. În al doilea rând, în limbajul încorporat nu există două concepte - Tip Şi Vedere . Fiecare obiect de configurare are propriul set de tipuri utilizate în limbajul încorporat pentru a lucra cu obiectul aplicație pe care îl descrie. Adică, atunci când utilizați configurația, nu va exista un astfel de tip ca DocumentLink și vor exista tipuri specifice, de exemplu, DocumentLink.Invoice, DocumentObject.Invoice, DocumentLink.Invoice

, etc. În al doilea rând, în limbajul încorporat nu există două concepte -În plus, pentru a manipula tipuri, nu sunt folosite numele șirurilor lor, ci un tip special În al doilea rând, în limbajul încorporat nu există două concepte -. Tastați valoarea poate fi obținută prin funcție Tip()

, primind numele tipului ca parametru. Pentru a verifica tipul de valoare al unei variabile, trebuie să determinați tipul acesteia folosind funcția TypeValue() poate fi obținută prin funcțieși folosiți funcția

pentru a obține tipul după nume.

De exemplu:

Tipurile definite sunt un nou obiect de metadate 1C care a apărut în versiunea 8.3 a platformei. Obiectul este de natură auxiliară. Să luăm în considerare care sunt tipurile definite și sarcinile pe care acest obiect le poate rezolva.

Sunt definite noi tipuri de date, al căror set este definit de dezvoltatorul soluției aplicației. Este format din mai multe tipuri valide. Acest tip de date poate fi tipul oricărui atribut de configurare, cu excepția tipului definit în sine și a obiectului „ ”.

Obțineți 267 de lecții video pe 1C gratuit:

Setări

Nu există atât de multe setări pentru acest obiect:

Aceste. pe lângă numele și sinonimul din 1C, tipurile definite au doar un set de tipuri de obiecte.

Un exemplu de utilizare a tipurilor definite în 1C 8.3 Aplicații obiectul dat

puteți găsi o mare varietate.

  • puteți descrie în detaliile de configurare care se referă la date care vor fi definite atunci când fragmentul este încorporat într-o anumită configurație;
  • atribuiți un set de abonamente la evenimente unui tip de date definite când setul de tipuri se schimbă, sursa se va schimba dinamic pentru toate abonamentele;
  • utilizarea ca alternativă la planul de tipuri de caracteristici

si multe altele.

Dacă începeți să învățați programarea 1C, vă recomandăm cursul nostru gratuit (nu uitați

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ții și operatori pentru lucrul cu tipuri (VALUE TYPE, TYPE, REFERENCE, ISNULL, EXPRESS)

Să ne amintim că fiecare atribut (proprietate, câmp) al unui director, document sau orice alt obiect aplicație are propriul său tip. Și ne putem uita la acest tip în configurator:

În limbajul de interogare, există o întreagă clasă de funcții și operatori pentru lucrul cu tipuri de detalii. Să ne uităm la ele.

Funcția VALUE TYPE

Această funcție preia un parametru (valoare) și returnează tipul acestuia. Pentru recuzita descrisă în imagine (mai sus) Gust director Mâncare vor fi returnate următoarele:

Acum să ne uităm la recuzită Caracteristica distinctivă la director Orașe:

Vedeți că această recuzită poate fi una din mai multe tipuri: Linia, Director.Gusturi, Director.Culori. Acest tip de detalii se numește COMPOSIT.

Dacă încercăm să completăm valoarea unui astfel de detaliu în modul 1C:Enterprise, sistemul ne va întreba ce tip de valoare va fi introdusă:

Și numai după selecția noastră ne va permite să introducem valoarea tipului selectat.

Astfel, elemente de director de același tip ( Director.Orase) va putea stoca în același atribut ( Caracteristica distinctivă) valori diferite tipuri(Șnur, Culori sau Arome).

Puteți vedea acest lucru singur făcând clic pe elementele directorului Orașeîn 1C:mod Enterprise. Citiți o versiune de probă a lecției, sunt disponibile lecții complete.

Aici valoarea caracteristică distinctivă este un element de director Arome:

Iată linia:

Și aici este, în general, un element al cărții de referință Culori:

Acestea sunt posibilitățile pe care ni le deschide un tip de date compus!

Mă întreb cum se va comporta funcția VALORI DE TIP pe recuzită Element distinctiv, având un tip de date compus:

Acest lucru este deja foarte interesant. Să ne uităm la fiecare linie individual.

Tipul de valoare a trăsăturii distinctive pentru elementul este egal cu Rusia NUL. Este prima dată când întâlnim acest tip. Valori de acest tip sunt utilizate numai pentru a determina valoarea lipsă atunci când lucrați cu baza de date.

Acest lucru este adevărat, deoarece elementul Rusia este un grup și nu un element de director obișnuit Orașe, deci nu are câmp Caracteristica distinctivă. Iar tipul unei valori lipsă, după cum citim mai sus, este întotdeauna egal cu NUL.

Tipul de valoare a caracteristicii distinctive pentru Perm este egal cu Arome. Acest lucru este adevărat, deoarece valoarea caracteristicii distinctive introduse în baza de date pentru orașul Perm este o legătură către elementul director Arome.

Pentru Krasnoyarsk, tipul de atribut este egal cu Culori, deoarece valoarea selectată în baza de date este o legătură către un element de director Culori.

Pentru Voronezh, tipul de atribut este egal cu Linia, deoarece valoarea introdusă în baza de date este un șir obișnuit.

India este din nou un grup, deci nu are nicio semnificație. Și tipul valorii lipsă, după cum ne amintim, este egal cu NUL.

Iată chestia. Dacă mergeți la elementul director Orașe cu nume Sao Paulo, atunci vei vedea că câmpul Caracteristica distinctivă deloc completat. E gol. O toate câmpurile goale de tip compus au o semnificație specială NEDEFINIT.

CU NEDEFINIT ne întâlnim și noi pentru prima dată. Sens NEDEFINIT folosit atunci când este necesar să se utilizeze o valoare goală care nu aparține niciunui alt tip. Aceasta este exact situația noastră. Și tipul valorii NEDEFINIT, după cum probabil ați ghicit deja, este egal cu NUL.

Funcție TIP

Este nevoie de un singur parametru - numele tipului primitiv ( LINIA, NUMĂR, DATA, BOOLEAN), sau numele tabelului al cărui tip de link doriți să obțineți.

Rezultatul acestui construct va fi o valoare de tip Type pentru tipul specificat.

Sună vag, nu-i așa?

Să ne uităm la aplicarea acestui design și totul va cădea imediat la loc.

Să presupunem că trebuie să selectăm toate intrările din director Orașe, care au recuzită compozită Caracteristica distinctivă are o valoare de tip LINIA:

Acum să selectăm toate înregistrările care au valori de atribut Caracteristica distinctivă sunt legături către elemente de director Culori(masă Director.Culori):

Retragere

După cum vă amintiți, câteva elemente ale directorului Orașe nu au recuzită Caracteristica distinctivă. Funcţie VALORI DE TIP pentru astfel de elemente pe care le produce NUL.

Cum puteți selecta astfel de elemente într-o interogare? Pentru aceasta este prevăzut un operator logic special ESTE NUL(a nu se confunda cu funcția ISNULL, pe care ne vom uita mai jos). Citiți o versiune de probă a lecției, sunt disponibile lecții complete.

Iată un exemplu de utilizare a acestuia:

Mare. Dar ați observat că nu există nici un element din Sao Paulo, tip valoare recuzită Caracteristica distinctivă pe care i-a dat şi el NUL. De ce sa întâmplat asta?

Dar chestia este că situația pentru grupuri (Rusia, India, Brazilia), pentru care completarea detaliilor Caracteristica distinctivă imposibil în principiu, deoarece nu o au deloc, diferă de situația pentru elementul Sao Paulo, pentru care este posibilă completarea recuzitei, dar pur și simplu nu este completată și este egală, după cum ne amintim, cu o valoare deosebită NEDEFINIT.

Pentru a selecta toate înregistrările care au cerințele Caracteristica distinctivă prezent, dar nu umplut, ar trebui folosită o construcție diferită:

Dar compararea cu UNDEFINED pentru a determina atributele goale (necompletate) va funcționa numai pentru tipurile compuse.

Apropo, operator logic Forma IS NULL de negație arată astfel:

Operator logic LINK

De exemplu, să selectăm din director Orașe numai acele înregistrări care au valoarea unui atribut compus Caracteristica distinctivă sunt un link către un element de director Arome:

După cum vă amintiți, am putea rezolva aceeași problemă folosind VALORI DE TIP Tip TIP:

Funcția ISNULL

Funcția este concepută pentru a înlocui o valoare NUL la un alt sens.

Ne amintim că sensul NUL returnat dacă atributul solicitat (câmp, proprietate) nu există.

De exemplu, recuzită Caracteristica distinctivă pentru grupuri de directoare Orașe:

Funcţie ISNULL ne va ajuta să scoatem o valoare diferită dacă această valoare este egală cu NUL. Citiți o versiune de probă a lecției, sunt disponibile lecții complete. Să fie în acest caz rândul „Nu există o astfel de recuzită!”:

Se pare că dacă primul parametru al funcției ISNULL nu egali NUL, apoi se întoarce. Dacă este NULL, atunci este returnat al doilea parametru.

Funcția EXPRESS

Această funcție este numai pentru câmpurile care au un tip compus. Un exemplu excelent al unui astfel de domeniu este proprietatea Caracteristica distinctivă pentru elementele directorului Orașe.

După cum ne amintim, câmpurile compuse pot fi unul dintre mai multe tipuri specificate în configurator.

Pentru câmp Caracteristica distinctivă astfel de tipuri valide sunt LINIA, Director.Culori Tip Director.Gusturi.

Uneori devine necesar să turnați valorile unui câmp compus la un anumit tip.

Să listăm toate valorile câmpului Caracteristica distinctivă a tasta Referință.Culori:

Ca rezultat, toate valorile elementului care au fost de tip Director.Culori, au rămas umplute și au fost convertite la tipul specificat. Toate valorile de alte tipuri ( LINIA, Director.Gusturi) sunt acum egale NUL. Aceasta este particularitatea turnării tipului folosind funcția EXPRES.

Puteți arunca un tip fie într-un tip primitiv ( BOOLEAN, NUMĂR, LINIA, DATA) sau la un tip de referință. Citiți o versiune de probă a lecției, sunt disponibile lecții complete. Dar tipul la care se face turnarea trebuie inclus în lista de tipuri pentru acest câmp compozit, altfel sistemul va arunca o eroare.

Faceți testul

Începeți testul

1. Alegeți afirmația cea mai corectă

2. Sunt numite detalii care pot lua valori de unul dintre mai multe tipuri

3. Pentru a determina tipul valorii atributului, utilizați funcția

4. Detaliile goale ale unui tip compozit sunt importante

— am început să discutăm ce sunt tipurile de valori 1C și conversia tipurilor 1C.

Astăzi vom vorbi mai detaliat despre tipurile de obiecte de configurare 1C (tip document 1C, tip director 1C etc.)

Din moment ce în codul programului Din moment ce lucrăm cu valori, trebuie să le cunoaștem periodic tipul. Tipul 1C este întotdeauna indicat în metadatele detaliilor - în directoare și documente.

Lucrul cu tipuri 1C este adesea folosit:

  • Condiții în program
    Acțiuni diferite în funcție de tipul valorii 1C în construcția „Dacă ... Atunci ...”.
  • Limitări atunci când lucrați în interfață
    Interzicerea sau permiterea utilizatorului să introducă valori ale anumitor tipuri de 1C într-un câmp din formular.
  • Determinarea parametrului actual al funcției/procedurii
    Dacă un parametru de funcție/procedură poate fi de orice tip 1C, atunci trebuie să îl definiți pentru a obține corect valoarea.

Tipul 1C poate fi obținut:

  • Determinați tipul valorii reale 1C
  • Obiectele de valoare au proprietăți care indică tipul 1C permis (de exemplu, tipurile 1C permise într-o coloană de tabel, într-un câmp dintr-un formular, în metadate) sau metode care returnează aceste tipuri 1C
  • Din metadate - puteți obține tipul 1C așa cum este specificat în metadatele din configurator.

Tipurile 1C pot fi împărțite în trei tipuri:

  • Tipuri de bază 1C
  • Tipuri de baze de date 1C (referință, obiecte)
  • Tipurile 1C.

Definirea tipului 1C și compararea tipurilor 1C

Puteți afla tipul valorii 1C folosind funcția TypeValue(Variable)

Pentru a înțelege ce tip 1C a returnat această funcție, trebuie să specificăm tipul de care avem nevoie („TypeName”)

De exemplu, definiția (comparația) a unei variabile de tip 1C:
Dacă TypeValue(Variable) = Type("TypeName"), atunci

Ce tipuri ar trebui să scriu ca TypeName?

Tipuri de bază

Tipuri de bază de 1C - număr, șir, dată, boolean.

De exemplu:
Znch = 12;
Dacă TypeValue(Value) = Type(„Număr”), atunci
Valoarea ElseIf = Type(„Șir”) Atunci
ElseIf Value = Type ("Data") Atunci
Valoarea ElseIf = Type ("Boolean") Atunci
endIf;

Tipuri de baze de date

1C stochează datele într-o bază de date, dar nu sub formă de înregistrări individuale, ci sub formă de obiecte.

Cele mai multe obiecte salvate (inclusiv: directoare, documente, enumerări, procese de afaceri, sarcini) sunt disponibile ca Obiect (pentru editare și scriere) și ca Link (pentru citire). Consultați „Legături și obiecte” pentru mai multe detalii.

De exemplu:
Valoare = Directories.Organizations.EmptyLink();
Dacă TypeValue(Value) = Type("DirectoryLink.Organizations"), atunci
OtherwiseIf Value = Type("DirectoryObject.Organization") Then
Altfel, dacă TypeValue(Value) = Type("DocumentLink.Receipt of Goods"), atunci
Altfel, Dacă Valoarea = Type(„Obiect Document.Recepția Bunurilor”) Atunci
endIf;

Pot fi prezentate registre diverse tipuri. Numele tipului de registru este compus:
RegisterRegisterTypeAccessType.RegisterName

Tipuri de registre 1C:

  • Informaţii
  • Economii
  • Contabilitate
  • Calcul.

Există mai multe tipuri de acces la registru. Cel mai des folosit:

  • Set de înregistrări
  • Listă
  • Eşantion
  • Înregistra
  • RecordKey.

Total, exemplu:
Dacă TypeValue(Value) = Type("InformationRegisterList.RegisterName"), atunci
OtherwiseIf Value = Type ("AcumulationRegisterRecordSet.RegisterName") Then
endIf;

Limbajul 1C vă permite să lucrați cu multe obiecte create dinamic în program, de exemplu, o matrice, o listă de valori, un tabel de valori, o structură...

Astfel de tipuri 1C sunt indicate prin numele lor (într-un cuvânt, fără spații). De exemplu:
Dacă TypeValue(Value) = Type(„Matrice”), atunci
ElseIf Value = Type ("Lista de valori") Then
endIf;

Determinarea valorii unui tip de referință 1C

Lucrul cu toate obiectele bazei de date (directoare, documente...) se realizează prin link-uri. De exemplu, dacă dorim să facem o referință într-un document, atunci tipul său 1C va fi „DirectoryLink.DirectoryName”.

De exemplu:
Valoare = Directories.Organizations.EmptyLink();
Dacă Directories.TypeAllLinks().Contains(TypeValue(Value)) Atunci
//aceasta este o carte de referință
ElseIf Documents.TypeAllLinks().Contains(TypeValue(Value)) Then
//acesta este un document
endIf;

Într-o cerere, tipul 1C poate fi verificat în două moduri.

Primul este similar cu cel descris, dar numele tipului 1C nu indică „Link” sau „Object”, adică în loc de „DirectoryLink.Organizations” scriem „Directory.Organizations”

pentru a obține tipul după nume.

Obținerea tipurilor 1C disponibile

Multe obiecte au o proprietate.ValueType, care conține o listă de tipuri 1C:

  • Câmp de pe formularul de client gras
    Form Elements.FieldName.ValueType
  • Câmp de pe formular client subțire(excepție: numită AvailableTypes)
    Elements.FieldName.AvailableTypes
  • Coloana tabelului de valori, arborele de valori
  • Detalii formular
  • Element de selecție

Cum să lucrați cu această listă de tipuri 1C în câmp.ValueType - vedeți „Descrierea tipurilor” în secțiunea „Limbaj 1C”.

Lucrul cu tipuri de detalii 1C în metadatele de configurare

La adăugarea și editarea detaliilor în configurator, programatorul specifică tipul (tipurile) de detalii 1C. În codul programului în limbajul 1C, puteți obține (aflați) tipul (tipurile) de detalii 1C.

Metode de bază:

  • Pentru un obiect 1C, apelați metoda Metadata(), care returnează metadatele unui anumit obiect și apoi lucrați cu lista de detalii (și detaliile secțiunii tabelului)
    Documente.Recepția mărfurilor.EmptyLink().Metadate().Detalii
  • Utilizați variabila globală „Metadate”, care returnează toate metadatele de configurare și apoi accesați detaliile unui anumit obiect
    Metadate.Documente.Recepția Bunurilor.Detalii

Atributul are o proprietate.Type, care conține o listă de tipuri 1C setate în configuratorul pentru acest atribut.

Cum să lucrați cu această listă de tipuri 1C - consultați „Descrierea tipurilor” în secțiunea „Limba 1C”.

Specificați filtru de tip 1C

Pentru multe obiecte este posibil să se specifice un filtru de tipuri de valori 1C care pot fi utilizate, de exemplu:

  • Lista de valori (.AvailableValues)
  • Câmp pentru formularul client gestionat (.AvailableTypes)

Acolo unde filtrul nu este disponibil pentru modificare, este posibil să se specifice filtrul în metoda obiectului. De exemplu, o coloană a unui tabel (arborele) de valori are.ValueType și nu o putem modifica, dar atunci când adăugați o coloană folosind metoda.Add(), al doilea parametru poate fi folosit pentru a specifica o listă de 1C disponibile. tipuri.

Pentru a specifica o listă de tipuri 1C pentru un filtru, se folosește o listă de tipuri 1C, cum se lucrează cu acesta, consultați „Descrierea tipurilor” în secțiunea „Limbaj 1C”.