Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Iron
  • 1s provjerava praznu vrijednost niza. Rad sa nultim vrijednostima u upitu

1s provjerava praznu vrijednost niza. Rad sa nultim vrijednostima u upitu

Šta se podrazumijeva pod linijom u 1s

Redovi u 1s, kako razlikovati red od drugih tipova, jer u modulu su svi znakovi tekst, a samim tim i linija. Svaki kontinuirani skup znakova okružen dvostrukim navodnicima ("") smatra se stringom, po defaultu je crn u konfiguratoru.

Show("Zdravo svijet!");

Takođe treba imati na umu da neke metode, i sistemske i samonapisane, mogu vratiti vrijednost niza.

Da biste saznali da li je vrijednost koja nas zanima string, možete uporediti njen tip sa tipom " Linija":

Ako je TypeValue("Neki tekst") = Tip("String") Onda Report("Tip vrijednosti - String"); EndIf;

Postoji nekoliko posebnih funkcija za rad sa stringom koje pretvaraju druge tipove u string i obrnuto. Evo nekoliko primjera:

String to Number

Broj("123,45");

Broj("123,45");

Ako parametar sadrži nevažeće znakove, kao što su slova, to će uzrokovati grešku.

String to Date

Datum("20101220235959");

Vrijeme je opciono (zadnjih 6 znakova).

Provjerava se prazan niz

EmptyString() - ova funkcija provjerava da li niz koji je proslijeđen kao parametar sadrži značajne znakove (nebitni znakovi su uglavnom nevidljivi na ekranu: razmak, prijelom reda, itd.)

Prazna linija(" ");
EmptyString(" a ");

Broj u niz

String(123.45); Format(1253.25);

Da biste uporedili nizove, možete jednostavno koristiti znak jednakosti

Ako je "četvrtak" = "četvrtak" Onda
EndIf;

Znak plus (+) se koristi za spajanje nizova. Spajanje stringova u programiranju naziva se konkatenacija.

Lukavo! Ako se doda nekoliko varijabli različitih tipova, tada će program za osnovu uzeti tip prve varijable. Stoga, da biste dobili tačnu vrijednost tipa stringa, možete koristiti sljedeću notaciju:

SomeThingString = ""+DayYear(CurrentDate()) +DayWeek(CurrentDate());

Ako dobijete rezultat iz prethodnog popisa, to će izgledati otprilike ovako:

Kao što vidite, nema dovoljno prostora za razdvajanje dana u godini i dana u nedelji, za ovo možete dodati razmak ("") na sledeći način:

SomeString = ""+DayYear(CurrentDate()) + " " +DayWeek(CurrentDate());

Prelom linije

Možete koristiti bilo koji znak za prekid da biste prekinuli red:

SomeThingString = ""+DayYear(CurrentDate()) + Symbols.PS + DayWeek(CurrentDate());

ili prava linija

SomeThingString = ""+DayYear(CurrentDate()) + " |"+DayWeek(CurrentDate());

U toku rada sa upitima, svaki programer mora na ovaj ili onaj način komunicirati s praznim vrijednostima. Šta podrazumijevamo pod praznom vrijednošću?

Prazna vrijednost je ili odsustvo vrijednosti ili zadana vrijednost za tip podataka. Kod primitivnih tipova stvari su prilično jednostavne: zadana vrijednost je neka početna vrijednost koja služi kao referentna tačka.

Vrste nulti

Razmotrite vrste praznih vrijednosti koje se mogu naići ili zahtijevati u upitu.

  • Za tip Broj - prazna vrijednost je nula - 0.
  • Za tip String - prazan niz - "".
  • Za tip Datuma, prvi januar prve godine je 01.01.0001 00:00:00. Od ovog datuma vrijeme se računa u 1C. *
  • Za Boolean tip, zadana vrijednost je tehnički False, ali logično su obje vrijednosti tipa popunjene. Stoga je odluka da li je prazna vrijednost False ili ne zasnovana na logici određenog algoritma.

*Budite oprezni, izvan 1C postoje različiti sistemi datuma sa različitim referentnim tačkama.

Vrijednost koja nedostaje u potpunosti odgovara samo tipu Null. Ovaj tip sadrži samo jednu vrijednost, koja označava odsustvo vrijednosti.

Sličan tip Nedefinisano također sadrži samo jednu vrijednost, ali Undefined ne znači odsustvo podataka, već samo nemogućnost određivanja zadane vrijednosti za tip. Nedefinirano je zadana vrijednost za kompozitne tipove, uključujući one koji nisu eksplicitno definirani. Na primjer, vrijednost u novom redu u tablici vrijednosti u stupcu za koji tip nije eksplicitno definiran.

Dakle referenca tipovi je mnogo manje dvosmislen. Svi referentni tipovi daju praznu vrijednost. Prazna vrijednost je ista referenca s tipom podataka, ali bez jedinstvenog identifikatora za određenu vrijednost. Zahvaljujući tome, praznu referencu možemo tretirati kao normalnu i na nju primijeniti sve metode koje nudi platforma, radeći s njom kao punopravnom vrijednošću.

Rad sa nultim vrijednostima u upitu

Bilo da trebate eksplicitno unijeti nultu vrijednost u rezultat upita ili usporediti postojeće vrijednosti s njom, morate znati kako opisati nul vrijednosti u upitu.

Vrste Broj, String, Boolean su opisani u zahtjevu kao na ugrađenom jeziku:

SELECT 0 AS ExampleTypeNumber, "Hello World" AS ExampleTypeString, True AS ExampleTypeBoolean

Undefined, budući da je u suštini primitivan tip, opisan je slično:

Odaberite Lots.Period iz registra akumulacije.Lots As Lots Where Remains.BatchDocument = Undefined

Prazne referentne vrijednosti je malo teže definirati. Svi referentni objekti imaju unaprijed definiranu vrijednost usluge EmptyReference. Zahvaljujući tome, moguće je odabrati praznu vezu na jedan način - kroz Value funkciju:

Odaberite Vrijednost(Reference.Nomenclature.EmptyReference) Kao prazna nomenklatura

Mogućnosti za rad sa Null vrijednostima su nešto bogatije. Kao i drugi primitivni tipovi, Null je opisan na isti način kao u ugrađenom jeziku. Dodatno, obezbeđeni su specijalni operator Is Null i funkcija Is Null.

  • Operator Is Null vam omogućava da kreirate Boolean izraz koji upoređuje odabranu vrijednost sa Null vrijednošću.
  • Funkcija IsNull vraća prvi argument ako nije Null, a drugi argument u suprotnom.

Izrazi koji definiraju null mogu se koristiti u bilo kojem dijelu upita koji podržava izraze. Na primjer, možete dodati nultu vezu u odjeljak za odabir ili nulti test u uvjet.

Praktični primjeri

Korištenje funkcije Value

Odaberite Goods.Reference As Nomenclature, Goods.Reference = Value(Catalog.Nomenclature.EmptyReference) Like ThisReferenceEmpty From wRoods As wRoods

Korištenje operatora je Null

Odaberite Goods.Link kao nomenklaturu, Goods.Link je nul kao ova VezaPrazna

Null lijevo ili potpuno spajanje

Null check

Primjer pokazuje čestu praktičnu situaciju kada, sa lijevim spojem, za prvi sto nema podudaranja na drugom. U ovom slučaju, sva polja druge tabele će biti jednaka Null.

Odaberite WProducts.Reference As Nomenclature, Remains.QuantityRemainder As Quantity, Remains.QuantityRemainder je Null kao NoRemainder iz WProducts As WProducts Left Join Registar akumulacije.Roba u skladištima.Ostaci kao stanja po utoGoods.Referenca = Ostaci.Nomenklatura

Rukovanje nultim vrijednostima

Modifikacija prethodnog upita kako bi se demonstrirala uobičajena tehnika za dobivanje nekih zadanih vrijednosti umjesto onih koje nedostaju. U ovom primjeru, korištenjem funkcije IsNull, vrijednost ostatka koja nedostaje zamjenjuje se logički ispravnom 0.

Odaberite TueProducts.Reference As Nomenclature, IsNull(Remains.QuantityRemainder, 0) As Quantity From TueProducts As WProducts Left Join Registar akumulacije.Roba u skladištima.Ostaci kao stanja po utoGoods.Referenca = Ostaci.Nomenklatura

U ovom članku pogledali smo različite vrste praznih vrijednosti i njihova svojstva, proučavali kako definirati različite vrste praznih vrijednosti u upitima, a u praktičnom dijelu uvjerili smo se u jednostavnost korištenja razmatranog materijala .

Query.Text = "SELECT | withStorageUnits.Ref |FROM | Reference.usStorageUnits AS withStorageUnits // Primjer 1. poređenje s praznom booleanskom vrijednošću: |WHERE | withStorageUnits.AllowFilterFromStandbyArea = False // Primjer 2. ali ako je ovo definirano boolean onda bolje ovako: // uvjet na negativan boolean: |WHERE | NOT withStorageUnits.AllowFilterFromReserveZone // Primjer 3. izbor po uslovu praznog polja tipa "referenca na betonski tip" |WHERE | withStorageUnit.ActiveFilterArea = VALUE(Catalog .cFilterArea.EmptyReference ) // Primjer 3a izbor po uvjetu praznog polja tipa "dokument određenog tipa" |WHERE | NašRegistar informacija.Document = VRIJEDNOST(Document.OurDocument.NullReference) // Primjer 3b. odabir odabira. po uslovu praznog polja tipa " dokumenti različitih tipova" (složeno polje) |WHERE | (OurInformationRegister.Document = VALUE(Document.OurDocument1.EmptyReference) | OR OurInformationRegister.Document = VALUE(Document .OurDocument2.EmptyLink) | ILI...(itd. - uzastopno navesti uslove za sve moguće tipove ovog složenog polja)) // Primer 4. ili obrnuto, ako treba da izaberete popunjenu vrednost tipa "string", tada će uslov pomoć: |GDJE | usStorageUnits.Name > """" // Primjer 5. ako trebate odabrati dokumente određene vrste, sa složenim tipom podataka, na primjer, u registru "Izvršeni zadaci", resurs "Zadatak" ima kompozitni tip , među čijim vrijednostima je moguć dokument "Izbor" |WHERE | EXPRESS(InformationRegisterJobs koji treba izvršiti.Task AS Document.Selection) REF Document.Selection // Primjer 5a. Još jedan sličan primjer kada trebate odabrati dokumente određene vrste | IZBOR | KADA IZRAŽITI(usklađenost agDocumenta.DocumentBU AS Document.Incoming Goods/Services) REFERENCE Document.Incoming Goods/Services | ONDA ""Prijem dobara usluga"" | KADA IZRAŽITI(ar Korespondencija dokumenata.DokumentBU AS Document.Prodaja robe usluga) REFERENTNI dokument.Prodaja robe usluga | ONDA "Realizacija roba i usluga" | ELSE """" | END AS DocumentType // Primjer 6. odabir po uvjetu nedefinirane vrijednosti: |WHERE | SavedSettings.User = UNDEFINITION // Primjer 7. odabir po vrsti kretanja "Dolazni" registra akumulacije, "Rashod" - slično): |WHERE | RegProductsRetail.MovementType = VALUE(MovementTypeAccumulation.Income) // Primjer 8. Kako u upitu naznačiti da nije potrebno izvršiti upit (na primjer, potrebno je programski vratiti prazan rezultat upita ovisno o nekom uvjetu - Zahtjev. Text = StrReplace(Query.Text, "GDJE Doc.Link = &DocumentLink", "WHERE FALSE");). Da biste to učinili, samo dodajte uslov "Gdje je netačno". Inače, bez obzira na količinu traženih podataka u uzorku, takav zahtjev će biti izvršen momentalno. |WHERE FALSE // Primjer 9. Provjera da li rezultat upita sadrži podatke: Ako NIJE Query.Execute().Empty() Onda // Primjer 10. odabir prema uvjetu praznog datuma: |WHERE | tbRows.CancellationDate = DATETIME(1, 1, 1)

U 1C, provjera prazne vrijednosti provodi se posebnom funkcijom. Da biste provjerili da li je atribut ili varijabla koju imate popunjena, trebali biste koristiti funkciju iz globalnog konteksta ValueFilled(<Значение>) .

U 1C 8 vrijednost se smatra ispunjenom (ne praznom) ako se razlikuje od zadane vrijednosti za ovaj tip. Na primjer, za referentni tip, zadana vrijednost je Prazan link(ovog priručnika, dokumenta, itd.). Također su prazne varijable i rekviziti koji sadrže vrijednosti Null I Nedefinisano.

1s provjerava praznu vrijednost. Primjeri

Varijabla = Reference.Nomenclature.EmptyReference(); Provjera = ValueFilled(Variable);

U ovom slučaju, varijabla Ispitivanjeće sadržavati vrijednost Lazi. Također funkcija ValueFilled(<Значение>) . može se koristiti direktno u uslovima.

Primjer 1.1

Ako ValueFilled(Variable) Then Report("Vrijednost u varijabli nije prazna!"); EndIf;

Varijabla = Documents.Expense Report.FindBy Number("000000001"); Provjera = ValueFilled(Variable);

U ovom primjeru, ako dokument Izvještaj unaprijed sa brojem 000000001 postoji, zatim u varijabli Ispitivanjeće sadržavati vrijednost Tačno, inače Lazi.

koristiti funkciju ValueFilled nije moguće za varijable promjenjivih tipova kao što su Tabela vrijednosti, Stablo vrijednosti itd. Funkcija radi za sve konfiguracije.

Kako provjeriti da je za 1s tabela vrijednosti prazna? Za to se koristi metoda Količina(), pomoću njega možete provjeriti koliko se redova nalazi u tablici vrijednosti.

Primjer 3. Neka MyTable— tabela vrijednosti definiranih gore u kodu.

Ako je MyTable.Count() = 0 Onda Return; EndIf;

Ista metoda se može koristiti za određivanje kompletnosti stabla vrijednosti i odabir rezultata upita.

Primjer 4. Neka MyTree je stablo vrijednosti definirano gore u kodu.

Ako je MyTree.Rows.Count() = 0 Onda Return; EndIf;

Kao što vidite, u stablu vrijednosti provjeravamo prisustvo stringova prve razine, ako nisu, onda je stablo prazno.

Primjer 5. Neka Upit- upit prema bazi podataka 1C 8, definiranoj gore.

Ovaj članak će raspravljati o načinima za provjeru prazne vrijednosti, ovisno o tipu atributa koji se provjerava u , uključujući nultu referencu.

NULL vrijednost se vraća kada atribut jednostavno ne postoji. Tip u ovom slučaju će također biti NULL. Na primjer, spajate dvije tablice preko lijevog spoja. U slučaju da nije pronađena vrijednost za lijevu tablicu u desnoj, NULL će biti vraćeno.

Provjera ove vrijednosti može se izvršiti pomoću konstrukcije "IS NULL" i "". U prvom slučaju se vraća True ili False. U drugom slučaju, možete odmah postaviti drugu vrijednost u slučaju kada se vrati NULL.

Upit 1C 8.3 u nastavku će vratiti listu osoba za kontakt za one partnere koji nemaju postavljen segment.

SELECT
ContactPartners.Link
OD
Imenik. Kontakt osobe partnera AS Kontakt osobe partnera
INNER JOIN
PO ContactPartners.Owner = SegmentsPartners.Parent
GDJE
SegmentsPartners.Reference JE NULL

prazan datum

Vrijednost se provjerava za prazan datum uspoređivanjem s konstrukcijom DATETIME(1, 1, 1, 0, 0, 0). Primjer upotrebe je dat u nastavku:

Prazan link u zahtjevu 1C

U slučaju kada vraćeni atribut ima referentni tip, na primjer, to je element nekog direktorija, dokumenta itd., koristi se sljedeća konstrukcija: VALUE(Catalog.CatalogName.EmptyReference).

U primjeru ispod, upit odabire sve partnere koji nemaju specificiranu poslovnu regiju.

Da biste provjerili ima li "ValueFilled" potrebno je izvršiti suprotan uvjet:

Partners.BusinessRegion<>VALUE(Catalog.BusinessRegions.EmptyReference)

Prazan red

Da bi se provjerili tipovi nizova, vrši se poređenje s drugim uzorkom. U ovom slučaju - "".

Upit u nastavku će odabrati sve partnere sa praznim imenom.

Top Related Articles