Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Fier
  • 1c verificați pentru o valoare de șir goală. Lucrul cu valori nule într-o interogare

1c verificați pentru o valoare de șir goală. Lucrul cu valori nule într-o interogare

Ce se înțelege prin linie în 1c

Șiruri în 1, cum să distingem un șir de alte tipuri, până la urmă, toate caracterele din modul sunt text și, prin urmare, un șir. Fiecare set alăturat de caractere înconjurat de ghilimele duble ("") este considerat un șir, implicit în configurator este negru.

Raport („Bună ziua, lume!”);

De asemenea, trebuie amintit că unele metode, atât de sistem, cât și scrise de sine, pot returna o valoare șir.

Pentru a afla dacă valoarea care ne interesează este un șir, putem compara tipul acestuia cu tipul " Linia":

If TypeZnch ("Un text") = Type ("String") Then Report ("Value type - String"); EndIf;

Există mai multe funcții speciale pentru lucrul cu șiruri care convertesc alte tipuri în șiruri și invers. Aici sunt cateva exemple:

String to Number

Număr ("123,45");

Număr ("123,45");

Dacă parametrul conține caractere nevalide, cum ar fi litere, va provoca o eroare.

String to Date

Data ("20101220235959");

Ora este opțională (ultimele 6 caractere).

Se verifică un șir gol

EmptyString () - această funcție verifică dacă șirul transmis conține caractere semnificative (caracterele nesemnificative sunt în mare parte invizibile pe ecran: spațiu, întrerupere de linie etc.)

Linie goală (" ");
EmptyString ("a");

Număr în șir

șir (123,45); Format (1253,25);

Pentru a compara șiruri, puteți utiliza pur și simplu semnul egal

Dacă joi = joi Atunci
EndIf;

Semnul plus (+) este folosit pentru a concatena șiruri. Concatenarea șirurilor în programare se numește concatenare.

Viclean! Dacă se adaugă mai multe variabile de diferite tipuri, programul va lua ca bază tipul primei variabile. Prin urmare, pentru a obține valoarea exactă a unui tip de șir, puteți utiliza următoarea notație:

WhatToString = "" + YearDay (CurrentDate ()) + DayWeek (CurrentDate ());

Dacă obțineți rezultatul din lista anterioară, atunci vizualizarea va fi cam așa:

După cum puteți vedea, nu există suficient spațiu care să separe ziua anului și ziua săptămânii, pentru aceasta puteți adăuga un spațiu ("") după cum urmează:

WhatToString = "" + Ziua anului (CurrentDate ()) + "" + Ziua săptămânii (CurrentDate ());

Rupere de linie

Pentru a întrerupe o linie, puteți utiliza fie un caracter de întrerupere de linie:

WhatToString = "" + Ziua anului (CurrentDate ()) + Symbols.PS + DayWeek (CurrentDate ());

sau o linie dreaptă

WhatToString = "" + Ziua anului (CurrentDate ()) + "|" + Ziua săptămânii (CurrentDate ());

Când lucrează cu interogări, orice programator trebuie să interacționeze cu valori goale într-un fel sau altul. Ce înțelegem prin valoare goală?

O valoare goală este fie nicio valoare, fie o valoare implicită pentru tipul de date. Cu tipurile primitive, totul este destul de simplu: valoarea implicită este o valoare inițială care servește ca punct de plecare.

Tipuri de valori nule

Să luăm în considerare tipurile de valori nule care pot fi întâlnite sau necesare într-o solicitare.

  • Pentru Număr - valoarea nulă este zero - 0.
  • Pentru tipul String - un șir gol - "".
  • Pentru tipul Data - 1 ianuarie a primului an - 01.01.0001 00:00:00. De la această dată, timpul se numără în 1C. *
  • Pentru un tip boolean, implicit este tehnic False, dar logic ambele valori ale tipului sunt completate. Prin urmare, decizia dacă valoarea goală este falsă sau nu se bazează pe logica unui anumit algoritm.

* Atenție, în afara 1C există diferite sisteme de numărare a datei cu puncte de referință diferite.

Valoarea lipsă în sensul deplin corespunde doar tipului Nul. Acest tip conține o singură valoare, ceea ce nu indică nicio valoare.

Gen similar cu el Nedefinit conține de asemenea o singură valoare, dar Nedefinit nu înseamnă absența datelor, ci doar imposibilitatea definirii unei valori implicite pentru tip. Nedefinit este valoarea implicită pentru tipurile compuse, inclusiv cele care nu sunt definite în mod explicit. De exemplu, o valoare dintr-un rând nou al unui tabel de valori dintr-o coloană pentru care tipul nu este definit în mod explicit.

Cu referinţă tipurile sunt mult mai puțin ambigue. Toate tipurile de referință sunt nule. O valoare goală este aceeași referință cu o indicație a tipului de date, dar fără identificatorul unic al unei anumite valori. Datorită acestui lucru, putem trata un link gol ca pe unul normal și îi putem aplica toate metodele oferite de platformă, lucrând cu el ca valoare completă.

Lucrul cu valori nule într-o interogare

Indiferent dacă trebuie să introduceți în mod explicit o valoare nulă în rezultatul interogării sau să comparați valorile existente cu aceasta, trebuie să știți cum să descrieți valorile nule într-o interogare.

Tipuri Număr, șir, boolean sunt descrise în cerere ca în limbajul încorporat:

SELECTAȚI 0 CA EXEMPLU DE NUMĂR DE TIP, „Hello world” CA EXEMPLU DE TIP șir, TRUE CA EXEMPLU DE TIP Boolean

Nedefinit, fiind în esență un tip primitiv, este descris în mod similar:

Selectați Lots.Period din Registrul de acumulare.Loturi ca loturi unde solduri.DocumentBatches = nedefinit

Valorile de referință goale sunt puțin mai dificil de definit. Toate obiectele la care se face referire au o valoare de serviciu predefinită EmptyRef. Datorită acestui fapt, este posibil să selectați o legătură goală într-un mod unificat - prin funcția Valoare:

Selectați Valoare(Reference.Nomenclature.EmptyRef) Ca nomenclatură goală

Posibilitățile de lucru cu valori Null sunt oarecum mai bogate. Ca și alte tipuri primitive, Null este descris în același mod ca și în limbajul încorporat. În plus, există un operator special Yes Null și funcția YesNull.

  • Operatorul este nul vă permite să creați o expresie booleană care compară valoarea selectată cu o valoare nulă.
  • Funcția YesNull returnează primul argument dacă nu este Null, iar al doilea argument în caz contrar.

Expresiile care specifică valori nule pot fi folosite în orice clauză de interogare care acceptă expresii. De exemplu, puteți adăuga un link gol la secțiunea Selectare sau verificare nulă în Condiție.

Exemple practice

Folosind funcția Value

Selectați Products.Ref ca nomenclatură, Products.Ref = Valoare (Directory.Nomenclature.EmptyRef) Ca acestaLink gol din WTProducts As WTProducts

Folosind operatorul Yes Null

Selectați Products.Ref ca nomenclatură, Products.Ref este nul ca acesta Link gol din WTGoods ca TueProducts

Null la stânga sau alăturare completă

Se verifică Null

Exemplul demonstrează o situație practică obișnuită când, cu o îmbinare stânga, nu există nicio potrivire pentru prima masă în a doua. În acest caz, toate câmpurile celui de-al doilea tabel vor fi egale cu Null.

Selectați TuProducts.Ref ca nomenclatură, Balance.Quantity Balance ca Cantitate, Balance.Quantity Balance este nulă, deoarece nu există un sold de TuProducts ca TuProducts Conexiune din stânga Registrul de acumulare.ProduseÎn depozite.Solduri ca solduri de TuGoods.Ref = Solduri.Nomenclatură

Gestionarea valorilor nule

Modificarea interogării anterioare pentru a demonstra o tehnică comună pentru obținerea unor valori implicite în loc de cele lipsă. În acest exemplu, folosind funcția YesNull, valoarea rămasă lipsă este înlocuită cu 0 logic corect.

Selectați TuProducts.Ref ca nomenclatură, au nul (Balance.QuantityLeft, 0) ca cantitate din TuProducts ca TuProducts Conexiune din stânga Registrul de acumulare.ProduseÎn depozite.Solduri ca solduri de TuGoods.Ref = Solduri.Nomenclatură

În cadrul acestui articol, am examinat diferitele tipuri de valori nule și proprietățile lor, am studiat cum să definim diferite tipuri de valori nule în interogări, iar în partea practică, ne-am convins de simplitatea aplicației. a materialului avut în vedere.

Query.Text = "SELECT | StorageUnits.Ref | FROM | Directory.UnitsStorageUnits AS StorageUnits // Exemplul 1.comparație cu o valoare booleană goală: | WHERE | StorageUnits.AllowChooseFrom BackupZone = False // Exemplul 2.definit, dar dacă este boolean mai bine așa: // condiție pentru un boolean negativ: | WHERE | NOT STORAGE UNITS.AllowSelectionFrom the ReserveZone // Exemplul 3. Selectarea după condiție a unui câmp gol de tip „specific tip referință” | WHERE | ) // Exemplul 3a . Selectarea după condiție a unui câmp gol de tipul „document de un anumit tip” | WHERE | OurRegisterData.Document = VALUE (Document.OurDocument.EmptyLink) // Exemplul 3b. Selectarea după condiție a unui câmp gol de tip „documente ale diferite tipuri „(câmp compus) | WHERE | (OurRegisterData.Document = VALUE (Document.OurDocument1.EmptyLink) | SAU OurRegisterRegister.Document = VALUE (Document) .Documentul nostru2.EmptyLink) | SAU ... (etc. - enumerați secvențial condițiile pentru toate tipurile posibile ale acestui câmp compus)) // Exemplul 4. sau invers, dacă trebuie să selectați o valoare completată de tipul „șir”, atunci condiția va ajuta : | UNDE | unitStorage.Name> "" "" // Exemplul 5. Dacă trebuie să selectați documente de un anumit tip, cu un tip de date compus, de exemplu, în registrul „Running Tasks”, resursa „Task” are un tip compus , dintre valorile cărora este posibil documentul „Selectare” | UNDE | EXPRESS (InformationRegisterTasks Executed.Task AS Document.Selection) REFERINȚĂ Document.Selection // Exemplul 5a. Un alt exemplu similar, când trebuie să selectați documente de un anumit tip | ALEGEREA | CÂND SE EXPRIMĂ (agConformityDokumentov.DokumentBU AS Dokument.PriplenieTovarovSlug) LINK Dokument.PriplenieGoodsServices | ATUNCI "" Primirea Bunurilor si Serviciilor "| CÂND SE EXPRIMĂ (agConformityDokumentov.DokumentBU AS Dokument.RealizatsiyaTovarovSlug) LINK Dokument.RealizatsiyaTovarovServices | ATUNCI "" Vânzări de bunuri și servicii "| Altfel "" "" | END AS Tip document // Exemplu 6. selectarea după condiție a unei valori nedefinite: | SavedSettings.User = NEDEFINIT // Exemplu 7. selectarea registrului de acumulare după tipul de mișcare „Sosire”, „Consum” – similar): | RegGoodsVRaznitsa.MotionType = VALUE (AccumulationMotionKind.Arrival) // Exemplul 8. Cum să specificați într-o cerere că nu trebuie să executați o solicitare (de exemplu, trebuie să returnați în mod programatic un rezultat al interogării necompletate - Solicitare). Text = StrReplace (Query.Text, „WHERE Doc.Link = & DocumentLink”, „WHERE FALSE”);). Pentru a face acest lucru, trebuie doar să adăugați condiția „Unde este fals”. Apropo, indiferent de cantitatea de date solicitată în eșantion, o astfel de solicitare va fi executată instantaneu. | WHERE FALSE // Exemplul 9. Verificarea faptului că rezultatul interogării conține date: Dacă NU Query.Run () Empty () Then // Exemplul 10. Selectarea după condiția unei date goale: | WHERE | tbLines.CancelDate = DATA ORA (1, 1, 1)

În 1C, o verificare pentru o valoare goală este efectuată de o funcție specială. Pentru a verifica dacă elementele de recuzită existente sau o variabilă sunt completate, ar trebui să utilizați o funcție din contextul global ValueFilled (<Значение>) .

În 1C 8, o valoare este considerată plină (nu goală) dacă diferă de valoarea implicită pentru acest tip. De exemplu, pentru un tip de referință, valoarea implicită este Link gol(acest ghid, document etc.). Variabilele și atributele care conțin valori sunt, de asemenea, goale. Nulși Nedefinit.

1c verificați valoarea goală. Exemple de

Variabilă = Directories.Nomenclature.EmptyRef (); Verificare = ValueFilled (variabilă);

În acest caz, variabila Examinare va contine valoarea Minciună... De asemenea, funcția ValueFilled (<Значение>) ... poate fi folosit direct in conditii.

Exemplul 1.1

If ValueFilled (Variable) Then Report ("Valoarea din variabilă nu este goală!"); EndIf;

Variabilă = Documents.AvailableReport.FindByNumber ("000000001"); Verificare = ValueFilled (variabilă);

În acest exemplu, dacă documentul Raport în avans cu număr 000000001 există, apoi în variabilă Examinare va contine valoarea Adevărat, in caz contrar Minciună.

Utilizați funcția ValueFilled nu este posibil pentru tipurile de variabile mutabile, cum ar fi Tabelul cu valori, Arborele valorii etc. Funcția funcționează pentru toate configurațiile.

Cum să verific dacă tabelul de valori este gol în 1c? Pentru a face acest lucru, utilizați metoda Cantitate(), poate fi folosit pentru a verifica câte rânduri sunt în tabelul cu valori.

Exemplul 3. Fie MyTable- tabelul de valori definit mai sus în cod.

Dacă MyTable.Quantity () = 0, atunci Return; EndIf;

Aceeași metodă poate fi utilizată pentru a determina plenitudinea arborelui de valori și pentru a selecta rezultatul interogării.

Exemplul 4. Fie Copacul meu- arborele valorilor definite mai sus în cod.

Dacă MyTree.Strings.Number () = 0, atunci Return; EndIf;

După cum puteți vedea, în arborele de valori verificăm prezența rândurilor de primul nivel, dacă nu există, atunci arborele este gol.

Exemplul 5. Fie Anchetă- o interogare la baza de date 1C 8, așa cum este definită mai sus.

Acest articol va analiza modalități de a verifica o valoare nulă în funcție de tipul de atribut înregistrat, inclusiv un link nul.

O valoare NULL este returnată atunci când pur și simplu nu există elemente de recuzită. Tipul în acest caz va fi, de asemenea, NULL. De exemplu, uniți două mese printr-o îmbinare la stânga. În cazul în care nu se găsesc valori în tabelul din dreapta pentru tabelul din stânga, va fi returnat NULL.

Verificarea acestei valori poate fi efectuată folosind construcțiile „IS NULL” și „”. În primul caz, returnează True sau False. În al doilea caz, puteți seta imediat o valoare diferită în cazul în care este returnat NULL.

Solicitarea 1C 8.3 de mai jos va returna o listă de persoane de contact pentru acei parteneri care nu au un segment specificat.

SELECTAȚI
ContactPartners.Link
DIN
Director.Persoanele de contact ale partenerilor CA PERSOANE DE CONTACT ALE PARTENERILOR
INTERNAL JOINT Directory.SegmentsPartners AS SegmentsPartners
Software Partner Contacts.Owner = Partner Segments.Parent
UNDE
Segmente partener.Ref ESTE NUL

Data goală

Validarea pentru o dată goală se realizează prin compararea acesteia cu construcția DATE TIME (1, 1, 1, 0, 0, 0). Un exemplu de utilizare este dat mai jos:

Link gol în cererea 1C

În cazul în care atributul returnat are un tip de referință, de exemplu, este un element al unui dicționar, document etc., se folosește următoarea construcție: VALUE (Directory.ReferenceName.EmptyRef).

În exemplul de mai jos, interogarea selectează toți partenerii care nu au o regiune de afaceri specificată.

Pentru a verifica „ValueFilled” trebuie să faceți condiția opusă:

Parteneri.BusinessRegion<>VALOARE (Directory.BusinessRegions.EmptyLink)

Linie goală

Pentru a verifica tipurile de șir, se face o comparație cu un alt model. În acest caz - "".

Interogarea de mai jos va selecta toți partenerii cu un nume necompletat.

Top articole similare