Provjerite tip vrijednosti 1s 8.3. Korištenje definiranih tipova

31.10.2021

Definirani tipovi su novi 1C objekt metapodataka koji se pojavio u verziji platforme 8.3. Objekat je pomoćne prirode. Razmotrimo koji su definirani tipovi i zadatke koje ovaj objekt može riješiti.

Definirani su novi tipovi podataka, čiji skup definira programer aplikativnog rješenja. Sastoji se od nekoliko važećih tipova. Ovaj tip podataka može biti tip bilo kojeg konfiguracijskog atributa, osim samog definiranog tipa i objekta “ “.

Nabavite 267 video lekcija na 1C besplatno:

Postavke

Nema toliko postavki za ovaj objekt:

One. pored imena i sinonima u 1C, definisani tipovi imaju samo skup tipova objekata.

Primjer korištenja definiranih tipova u 1C 8.3

Za ovaj objekat se može naći veliki izbor aplikacija.

Primjeri upotrebe:

  • možete opisati u konfiguraciji detalje koji se odnose na podatke koji će biti definirani kada se fragment ugradi u određenu konfiguraciju;
  • dodijeliti jedan skup pretplata na događaje jednom tipu definiranih podataka kada se skup tipova promijeni, izvor će se dinamički promijeniti za sve pretplate;
  • koristiti kao alternativu planu tipova karakteristika

i još mnogo toga.

Ako počinjete učiti 1C programiranje, preporučujemo naše besplatni kurs(ne zaboravi

— počeli smo da raspravljamo o tome šta su 1C tipovi vrednosti i konverziji 1C tipova.

Danas ćemo detaljnije govoriti o vrstama 1C konfiguracijskih objekata (tip 1C dokumenta, tip 1C direktorija itd.)

Pošto u programskom kodu radimo sa vrijednostima, povremeno moramo znati njihov tip. Tip 1C je uvijek naveden u metapodacima detalja - u imenicima i dokumentima.

Često se koristi rad sa tipovima 1C:

  • Uslovi u programu
    Različite radnje ovisno o vrsti 1C vrijednosti u konstrukciji „Ako ... Onda ...”.
  • Ograničenja pri radu u interfejsu
    Zabrana ili dopuštanje korisniku da unese vrijednosti određenih tipova 1C u polje na obrascu.
  • Određivanje stvarne funkcije/parametra procedure
    Ako parametar funkcije/procedure može biti bilo kojeg tipa 1C, onda ga morate definirati kako biste ispravno dobili vrijednost.

Tip 1C se može nabaviti:

  • Odredite vrstu stvarne vrijednosti 1C
  • Objekti vrijednosti imaju svojstva koja ukazuju na dozvoljeni 1C tip (na primjer, 1C tipovi dozvoljeni u koloni tablice, u polju na obrascu, u metapodacima) ili metode koje vraćaju ove 1C tipove
  • Iz metapodataka - možete dobiti tip 1C kako je navedeno u metapodacima u konfiguratoru.

Tipovi 1C mogu se podijeliti u tri tipa:

  • Osnovni tipovi 1C
  • Vrste 1C baza podataka (reference, objekti)
  • Tipovi 1C.

Definicija tipa 1C i poređenje tipova 1C

Možete saznati vrstu vrijednosti 1C pomoću funkcije TypeValue(Variable)

Da bismo razumjeli koji je 1C tip vratila ova funkcija, moramo navesti vrstu koja nam je potrebna (“TypeName”)

Na primjer, definicija (poređenje) varijable tipa 1C:
Ako TypeValue(Variable) = Type("TypeName") Onda

Koje tipove treba da napišem kao TypeName?

Osnovni tipovi

Osnovni tipovi 1C - broj, string, datum, boolean.

na primjer:
Znch = 12;
Ako TypeValue(Value) = Type("Broj") Onda
ElseIf vrijednost = Tip("String") Zatim
ElseIf Vrijednost = Tip("Datum") Zatim
ElseIf Value = Type("Boolean") Zatim
endIf;

Tipovi baza podataka

1C pohranjuje podatke u bazu podataka, ali ne iu obrazac pojedinačne evidencije, ali u obliku objekata.

Većina sačuvanih objekata (uključujući: direktorije, dokumente, enumeracije, poslovne procese, zadatke) dostupni su kao objekt (za uređivanje i pisanje) i kao link (za čitanje). Pogledajte "Veze i objekti" za više detalja.

na primjer:
Vrijednost = Directories.Organizations.EmptyLink();
Ako TypeValue(Value) = Type("DirectoryLink.Organizations") Onda
InačeAko je vrijednost = Tip("DirectoryObject.Organization") Zatim
U suprotnom Ako TypeValue(Value) = Type("DocumentLink.Prijem robe") Tada
InačeAko Vrijednost = Tip("Objekat dokumenta. Prijem robe") Onda
endIf;

Registri se mogu prezentirati razne vrste. Ime tipa registra je složeno:
RegisterRegisterTypeAccessType.RegisterName

Vrste 1C registara:

  • Informacije
  • Štednja
  • Računovodstvo
  • Kalkulacija.

Postoji nekoliko vrsta pristupa registrima. Najčešće korišteni:

  • Set rekorda
  • Lista
  • Uzorak
  • Zapis
  • RecordKey.

Ukupno, primjer:
Ako TypeValue(Value) = Type("InformationRegisterList.RegisterName") Tada
Inače Ako je vrijednost = Tip("AkumulacijaRegisterRecordSet.RegisterName") Tada
endIf;

1C jezik vam omogućava da radite sa mnogim objektima kreiranim dinamički u programu, na primjer, nizom, listom vrijednosti, tablicom vrijednosti, strukturom...

Takvi tipovi 1C označeni su njihovim imenom (jednom riječju, bez razmaka). na primjer:
Ako je TypeValue(Value) = Type("Array") Onda
ElseIf Value = Type("Lista vrijednosti") Zatim
endIf;

Određivanje vrijednosti referentnog tipa 1C

Rad sa svim objektima baze podataka (direktoriji, dokumenti...) odvija se preko linkova. Na primjer, ako želimo napraviti referencu u dokumentu, tada će njegov 1C tip biti “DirectoryLink.DirectoryName”.

na primjer:
Vrijednost = Directories.Organizations.EmptyLink();
Ako Directories.TypeAllLinks().Contains(TypeValue(Value)) Tada
//ovo je referentna knjiga
ElseIf Documents.TypeAllLinks().Sadrži(TypeValue(Value)) Zatim
//ovo je dokument
endIf;

U zahtjevu se tip 1C može provjeriti na dva načina.

Prvi je sličan opisanom, ali naziv tipa 1C ne označava "Link" ili "Object", odnosno umjesto "DirectoryLink.Organizations" pišemo "Directory.Organizations"

na primjer:

Potvrda dostupne vrste 1C

Mnogi objekti imaju svojstvo.ValueType, koje sadrži listu 1C tipova:

  • Polje na obrascu debelog klijenta
    Elementi obrasca.Ime polja.ValueType
  • Polje na obrascu tanki klijent(izuzetak: zove se AvailableTypes)
    Elements.FieldName.AvailableTypes
  • Kolona tablice vrijednosti, stablo vrijednosti
  • Detalji obrasca
  • Element selekcije

Kako raditi sa ovom listom tipova 1C u polju.ValueType - pogledajte “Opis tipova” u odjeljku “1C jezik”.

Rad sa tipovima detalja 1C u metapodacima konfiguracije

Prilikom dodavanja i uređivanja detalja u konfiguratoru, programer specificira tip(ove) 1C detalja. U programskom kodu na 1C jeziku možete dobiti (saznati) vrstu(e) 1C detalja.

Osnovne metode:

  • Za 1C objekat, pozovite metodu Metadata(), koja vraća metapodatke određenog objekta, a zatim radite sa listom detalja (i detaljima odeljka tabele)
    Dokumenti.Prijem robe.EmptyLink().Metapodaci().Detalji
  • Koristite globalnu varijablu “Metadata”, koja vraća sve konfiguracijske metapodatke, a zatim pristupite detaljima određenog objekta
    Metapodaci.Dokumenti.Prijem robe.Detalji

Atribut ima svojstvo.Type, koje sadrži listu 1C tipova postavljenih u konfiguratoru za ovaj atribut.

Kako raditi s ovom listom tipova 1C - pogledajte “Opis tipova” u odjeljku “1C jezik”.

Navedite filter tipa 1C

Za mnoge objekte moguće je navesti filter tipova vrijednosti 1C koji se mogu koristiti, na primjer:

  • Lista vrijednosti (.AvailableValues)
  • Polje obrasca upravljanog klijenta (.AvailableTypes)

Kada filter nije dostupan za modifikaciju, moguće je navesti filter u metodi objekta. Na primjer, stupac tablice (stablo) vrijednosti ima.ValueType i ne možemo ga promijeniti, ali kada dodajete kolonu pomoću metode.Add(), drugi parametar se može koristiti za određivanje liste dostupnih 1C vrste.

Da biste naveli listu tipova 1C za filter, koristi se lista tipova 1C kako se radi s njim, pogledajte „Opis tipova“ u odjeljku „Jezik 1C“.

Nastavljamo upoznavanje s novom funkcionalnošću 1C: Enterprise, koja je započela u prethodnom članku serije. Nakon proučavanja materijala u ovom članku, naučit ćete:

  • Šta su definisani tipovi i kako ih koristiti?
  • Za što se koristi konfiguracijsko svojstvo “Primary Roles”?
  • Kako koristiti pomoćnik za kreiranje klijentskih obrađivača događaja za obrazac?
  • Kako i zašto se koristi prijenos konfiguracije u XML datoteke?

Primjenjivost

U članku se govori o verziji platforme 1C:Enterprise 8.3.4.437, ali njeni materijali mogu biti korisni i onima koji rade na starijim izdanjima.

Kako olakšati razvoj u 1C:Enterprise 8.3

Nastavljamo da razmatramo inovacije na platformi 1C:Enterprise 8 koje imaju za cilj olakšavanje konfiguracije.

Definirani tipovi

U platformi 8.3, novi objekat je dodan u konfiguracijsku granu “Općenito” – Definirani tipovi.

Ovo je poseban konfiguracijski objekt koji je dizajniran da definira tip podataka koji opisuje često korišteni entitet ili će se vjerojatno promijeniti kada se implementira neko aplikativno rješenje.

Na primjer, uzmite u obzir složeni tip koji uključuje vezu do direktorija “Counterparties” i “Individuals”.

I ovaj tip se, u nekoj razvijenoj konfiguraciji, često koristi kao dimenzija u registru informacija koja opisuje kontakt informacije, kao detalj u dokumentu „Prijemni nalog“ itd.

Tokom implementacije takve konfiguracije, sastav ovog tipa se može promijeniti - mogu mu se dodati novi objekti, a također i obrnuto - mogu se isključiti nepotrebni tipovi.

Ako umjesto našeg novog “definiranog tipa” koristimo kompozitni tip na svakom mjestu gdje se koristi takav entitet, onda ćemo morati svugdje promijeniti sastav tipova. Dug je, težak, radno intenzivan, a postoji mogućnost da zaboravite na neke rekvizite.

Ako koristite definisani tip, tada će tokom procesa finalizacije aplikativnog rješenja, samo definicija ovog tipa (i programski kod koji obrađuje takva polja) biti potrebno mijenjati.

Svi detalji za koje je definirani tip naveden kao tip bit će automatski promijenjeni.

Evo još jednog primjera korištenja definiranog tipa.

Za neke detalje postoji standard za kucanje unutar konfiguracije. Na primjer, definiramo količinu kao broj dužine 15 s preciznošću od 3, a zbir kao broj dužine 15 s preciznošću od 2.

Pretpostavimo da je kompanija morala da vodi evidenciju o skupoj robi visoka tačnost njihovu težinu.

Shodno tome, trebalo je da povećamo tačnost detalja za obračun količine na 4 decimale. Ove promjene se moraju izvršiti istovremeno na svim detaljima dokumenta i resursima registra.

Ovo nije težak zadatak, ali je vrlo radno intenzivan i zahtijeva veliku pažnju i upornost programera.

Kada kreirate novi definirani tip, trebate samo navesti njegov tip. Zatim, kada kreirate detalje dokumenta i registrujete resurse, možete odabrati vezu do kreiranog definisanog tipa.

Ovaj pristup nam omogućava da garantujemo isti tip podataka (ista dužina, preciznost, isti sastav za polja kompozitnog tipa, itd.) na svim mestima gde se koristi.

Zatim, ako trebate promijeniti tip podataka svih detalja, ne morate ručno ispravljati svaki atribut posebno, dovoljno je izvršiti promjene u odgovarajućem definiranom tipu.

Definirani tip se može kreirati kao kompozitni tip. Međutim, postoje ograničenja za korištenje ovog konfiguracijskog objekta. Dakle, tip koji se definira ne može biti dio tipa vrijednosti plana tipova karakteristika, a također ne može biti dio složenog tipa podataka drugog atributa.

Imajte na umu da su u verziji platforme 8.3.5 mogućnosti korištenja definiranih tipova povećane proširenjem skupa tipova koji mogu biti dio definiranog tipa.

Nema više promjena do trenutne verzije platforma 8.3.10/8.3.11 nije radila sa definisanim tipom.

Svojstvo konfiguracije “Primarne uloge”

U Platformi 8.2, element root konfiguracije imao je svojstvo “Primary Role” u kojem je programer definirao ulogu koja će se koristiti ako baza informacija nijedan korisnik nije kreiran.

U platformi 8.3 postalo je moguće specificirati više uloga koje će se koristiti za određivanje prava pristupa kada je lista korisnika prazna. Shodno tome, imovina je preimenovana u “Glavne uloge”.

Za uvećanje kliknite na sliku.

Kreiranje obrasca Client Event Handlera

Prilikom konfigurisanja upravljana aplikacija programer mora pažljivo pratiti kontekst izvršavanja programskog koda, koristeći odgovarajuće predprocesorske direktive.

Pošto je ograničen skup tipova podataka i metoda dostupan na klijentu, programer često treba da kreira klijentsku proceduru iz koje će preneti kontrolu na server.

U platformi 8.3 pojavio se pomoćnik za kreiranje rukovalaca za događaje obrasca klijenta.

Za uvećanje kliknite na sliku.

Sada programer ne mora ručno kreirati serversku metodu i specificirati njen poziv unutar klijentske procedure, već se može u potpunosti koncentrirati na implementaciju aplikativne logike sistema.

Učitavanje konfiguracije u fajlove

Još jedna inovacija platforme 8.3 je mogućnost upload-ovanja cijele konfiguracije na disk u obliku skupa datoteka određene strukture.

Konfiguracija se uvijek učitava samo kao cjelina, bez mogućnosti filtriranja učitanih objekata.

Da biste otpremili konfiguraciju u fajlove, potrebno je da u meniju izaberete Konfiguracija – Prenesi konfiguraciju u datoteke, a u dijalogu koji se otvori izaberite direktorijum u koji će datoteke biti sačuvane.

Objekti konfiguracije se učitavaju kao skup XML datoteka. Moduli i rasporedi teksta se čuvaju kao TXT fajlovi. Slike iz konfiguracije se pohranjuju kao slikovne datoteke (BMP, PNG, itd.). Informacije o pomoći se učitavaju u HTML datoteke.

Za uvećanje kliknite na sliku.

Kao što možete vidjeti, rezultirajuće datoteke imaju uobičajeno korištene univerzalne formate. Da ih uredite postoji veliki broj razne softverske proizvode.

Također možete koristiti sisteme kontrole verzija treće strane. Omogućuju vam da pohranite više verzija istog dokumenta i, ako je potrebno, vratite se na više ranije verzije, utvrditi ko je i kada izvršio ovu ili onu promjenu.

Uređene datoteke se mogu ponovo učitati u konfiguraciju koristeći stavku menija Konfiguracija – Učitaj konfiguraciju iz datoteka.

Rad s novom funkcijom preuzimanja/učitavanja je također dostupan pomoću parametara komandna linija LoadConfigFromFiles i DumpConfigToFiles. Na primjer, ovako:

“c:\Program Files (x86)\1cv8\8.3.4.437\bin\1cv8.exe” DESIGNER /F “X:\Platform8Demo” /N “Administrator” /DumpConfigToFiles “X:\1\”

Ranije, još u platformi 8.2, postojao je mehanizam za učitavanje/preuzimanje konfiguracijskih datoteka, koji je omogućavao selektivno učitavanje/preuzimanje nekih svojstava konfiguracijskih objekata (moduli, rasporedi i referentne informacije).

Primijećeno je da su prema zadanim postavkama naredbe “Učitaj konfiguracijske datoteke” i “Učitaj konfiguracijske datoteke” isključene iz konfiguratora na platformi 8.3.

Međutim, prilagođavanjem glavnog menija, možete prikazati ove komande u meniju i koristiti ih.

Novi mehanizam za učitavanje konfiguracija u fajlove uvek učitava kompletne podatke o konfiguraciji nije obezbeđena, čime se obezbeđuje integritet konfiguracije;

Uobičajeni obrasci i interfejsi se učitavaju u binarnom obliku (interno) i ne mogu se uređivati. Konfiguracija provajdera također nije namijenjena za uređivanje.

Preostali objekti se učitavaju u datoteke univerzalni formati. U suštini, mehanizam je fokusiran na upravljanu aplikaciju.

Novi mehanizam pruža programeru mogućnost da automatski obradi konfiguraciju pokretanjem konfiguratora u batch modu.

Također sada konfiguraciju može uređivati ​​eksterno softver zahvaljujući upotrebi, na primjer, XML formata.

Prilikom rasterećenja vrši se dodatna obrada konfiguracije: zamrznute veze se brišu, neiskorištene informacije se također ne učitavaju (na primjer, pomoć za nepostojeći jezik).

A prilikom učitavanja konfiguracije, provjerava se njen integritet, nije dozvoljeno učitavanje datoteka s nejedinstvenim identifikatorima, objektima metapodataka, netočnim nazivima tipova podataka, itd.

Imajte na umu da se od verzije 8.3.7 pojavio novi format za učitavanje koji se zove „hijerarhijski“. Stari format postao je poznat kao "linearni". Izbor formata je dostupan u prozoru za otpremanje datoteke:

Počevši od verzije 8.3.11, "hijerarhijski" format je postao jedini dostupan za odabir tokom interaktivnog učitavanja:

Ako koristite ovu funkciju, preporučujemo:

  • prvo, koristite "hijerarhijski" format za učitavanje;
  • drugo, koristite platformu koja nije niža od verzije 8.3.8+, jer počevši od toga, brzina učitavanja/učitavanja XML datoteka je značajno povećana.

U verziji 8.3.10 počelo je biti podržano djelomično učitavanje konfiguracije u XML datoteke. Kao rezultat toga, postalo je moguće koristiti prijenos konfiguracije u XML-u u kombinaciji s Gitom.

Tipovi podataka u 1C:Enterprise 8.x

Prije nego što zaronimo u ugrađene jezičke konstrukcije, trebali bismo se upoznati s osnovnim tipovima podataka. na sreću,:

Oni koji počnu proučavati 1C platformu ponekad postanu zbunjeni oko definicije tipova podataka i svih vrsta jezičkih nijansi koje se pojavljuju. Ovaj prvi članak je uvodni i posvećen je primitivnim tipovima podataka 1C, njih nema toliko.

Broj. Brojevi u 1C znače i cjelobrojne i vrijednosti s pomičnim zarezom. Maksimalna dužina vrijednosti tipa broja može biti 32 znaka, uključujući decimalni zarez. Također je vrijedno uzeti u obzir da se ograničenje od 32 cifre odnosi na brojeve koji će biti upisani u bazu podataka. Moguće je deklarisati varijablu i dodijeliti joj vrijednost veću od 32 znaka. Za numeričke vrijednosti koje su pohranjene u memoriji, ovo ograničenje ne radi. Jednom deklarisana kao varijabla tipa "Broj", njena vrijednost će biti 0.

Linija. Kao i svaki drugi programski jezik, 1C implementira sve potrebne funkcije za manipulaciju stringovima. Vrijednosti ovog tipa predstavljen u Unicode-u. Dužina varijabli tipa string nije ograničena.

Datum. Osim samog datuma, vrijednosti ovog tipa sadrže i vrijeme. Vrijeme se odnosi na sate, minute i sekunde. Odmah nakon inicijalizacije varijabilni tip“Datumu” će biti dodijeljena vrijednost (datum) “01. januar 0001 00 sati 00 minuta 00 sekundi.” Ovo ponekad izaziva iritaciju, ali s vremenom se naviknete.

Boolean. Jasno je da varijable ovog tipa mogu imati samo dvije vrijednosti: True, False.

Nedefinisano. Vrijednosti tipa "nedefinirano" koriste se u slučajevima kada trebate navesti praznu vrijednost koja ne pripada nijednom drugom tipu podataka. Na primjer, trebate deklarirati varijablu koja će se tada negdje koristiti. Možete mu dodijeliti vrijednost poput 0 ili “” (tj. prazan niz), ali na taj način odmah postavljamo odgovarajući tip za njega (broj ili niz). Ali što ako instaliranje jednog od ovih tipova može kasnije ometati? U takvim slučajevima možete koristiti vrijednost tipa “nedefinirano”. Također je vrijedno napomenuti da mnoge funkcije ugrađenog jezika, u slučaju neuspješnog izvršenja, vraćaju vrijednost ovog tipa kao rezultat. Kada opisujete svoje funkcije, preporučuje se da se pridržavate istog pravila.

Null. Opšte značenje Null je gotovo isto kao i "nedefinirano". Vrijednosti ovog tipa se koriste za označavanje vrijednosti koja nedostaje u bazi podataka. Najčešće možete dobiti vrijednosti ove vrste koristeći jezik upita. Na primjer, upit koji koristi spajanja tablica. Recimo da jedna od tabela nema vrijednost koja zadovoljava uslov. U ovom slučaju, vrijednost koja nedostaje bit će zamijenjena vrijednošću tipa Null.

Moguće je naići na vrijednost tipa Null ne samo kada radite s upitima. Na primjer, vrijednosti tipa Null prihvaćaju atributi koje objekt ne koristi. Zamislimo da imamo hijerarhijski direktorij sa atributom "količina". Prilikom kreiranja ovog atributa, njegovo svojstvo “Upotreba” je postavljeno na “Za element”. Ako pokušate pristupiti ovom atributu za element direktorija tipa “group”, tada će njegova vrijednost biti Null.

Tip. Ovaj tip se koristi za definiranje dostupnih tipova. Zvuči malo zbunjujuće? Ok, pokušat ću objasniti na primjeru. Zamislite da ste suočeni sa zadatkom poređenja tipova dvije varijable. U kodu bi to izgledalo otprilike ovako:

Varijabla1 = 123; //Pošto smo dodijelili broj, tip varijable će biti “number”.
Varijabla2 = "string"; //Ovdje smo dodijelili string, što znači da će tip varijable biti string.

Sada morate biti 100% sigurni da je varijabla1 numerička. Tu dobro dolazi tip “Type” (zvuči smiješno), kao i nekoliko pomoćnih funkcija. Za sada neću ulaziti u detalje. Samo pogledajte i pokušajte razumjeti primjer u nastavku:

Ako (Vrijednost tipa(Variable1) = Tip("Broj")) Onda

Izvještaj("Varijabla1 je numerička!");

Inače

Izvještaj("Varijabla1 NIJE numerička:()");

endIf;

U ovom malom komadu koda prvo dobijam tip varijable koristeći funkciju TypeValue(). Ova funkcija uzima kao parametar vrijednost čiji tip želite da dobijete. U našem slučaju to je “Varijabla1”. Zatim moram dobiti vrijednost tipa "Type" koja karakterizira tip "Number". U tu svrhu, ugrađeni jezik pruža funkciju “Type()”. Potreban je samo jedan argument - string reprezentacija imena tipa. Pošto moramo da uporedimo sa tipom “Broj”, parametar za funkciju će biti “Broj”.

Hvala Igoru Antonovu na pomoći u pisanju ovog članka.

Ovaj članak nastavlja seriju članaka „Prvi koraci u razvoju 1C“. Govorit će o primitivnim tipovima podataka i najčešćim funkcijama pri radu s njima. Nakon čitanja materijala naučit ćete:

  • Koji tipovi podataka su primitivni?
  • Kako možete raditi sa stringovima i koje karakteristike treba uzeti u obzir?
  • Koje su suptilnosti rada sa numeričkim izrazima?
  • Kako opisati datum sa određenom vrijednošću? Kako postaviti prazan datum?
  • Kako funkcionira konverzija tipova?
  • Null i Undefined – šta su i koje su razlike?
  • Kako odrediti koji je tip objekta/varijable?

Primjenjivost

Članak je napisan za 1C platformu verziju 8.3.4.496, tako da su informacije relevantne i za trenutna verzija platforme. Međutim, treba napomenuti da su u verziji 8.3.6.1977 dodane nove funkcije za rad sa stringovima. Stoga, kada ponovite korake iz članka, nemojte se iznenaditi ako u odgovarajućem odjeljku Syntax Assistant vidite neke funkcije koje nisu prikazane na našoj slici ekrana. Također preporučujemo da se upoznate s novom metodom StringWithNumber() dodanom u platformi 8.3.10.

Primitivni tipovi podataka i neke od njihovih funkcija

Razlikuju se sljedeći primitivni tipovi podataka:

String konstante

Primitivni tip podataka Linija(string konstanta) sastoji se od raznih znakova. Linija je uvijek okružen navodnicima. Primjer string konstante:

Message.Text = “Postoje prazni podaci”;

One. atributu se dodjeljuje red “Postoje prazni podaci”. Tekst objekt Poruka. Sve što je okruženo navodnicima smatra se nizom.

Niz se može sastojati od bilo kojeg karaktera. Stringovi mogu biti višeredni. U ovom slučaju, svaki novi red mora biti definiran pod navodnicima. na primjer:

Tekst = “Nevažeći podaci popunjeni”
“Nemoguće je postaviti dokument”;

Tačka i zarez se stavlja samo na kraj zadnjeg reda.

Postoji još jedan način - da se cijeli tekst uokviri samo jednim navodnikom, ali svakim nova linija treba početi s okomitom trakom.

Ova sintaksa se najčešće koristi u tipične konfiguracije. Konkretno, u jeziku upita. na primjer:

Request.Text =
„IZABIR
| Employees.Name AS Employee,
| Employees.Birthdate AS DatumBirth
|OD
| Directory.Employees KAKO Zaposleni
|WHERE
| NE Zaposleni Ovo je Grupa”;

Treba napomenuti da je operacija sabiranja definirana za nizove. Ovo nije aritmetička operacija, to se zove operacija spajanja.

One. trebate kombinirati, na primjer, dva reda, sa znakom za dodavanje "+" između redova:

Text = “Detalji su pogrešno popunjeni” + “Nemoguće je postaviti dokument”;

Tako su linije spojene. Operacija konkatenacije je, naravno, primjenjiva na više nizova. Druge operacije (oduzimanje, množenje, dijeljenje) nisu dozvoljene za nizove.

Ako se riječ unutar stringa mora staviti u navodnike, tada se navodnik unutar stringa mora definirati dvostrukim navodnikom. na primjer:

Text = “Greška u modulu “General module1””;

IN u ovom primjeru Prvi navodnik otvara string. Drugi i treći navodnik jedan pored drugog označavaju navodnike.

I na kraju su tri navodnika: poslednji navodnik zatvara red, dva prethodna označavaju navodnik.

Različite operacije konverzije nizova su moguće na stringovima, identificiranje prvih nekoliko znakova s ​​lijeve strane, identificiranje nekoliko krajnjih desnih znakova, traženje podniza unutar niza itd.

Sve ove funkcije su dostupne bilo gdje u konfiguraciji.

U pomoćniku za sintaksu oni su u odjeljku Opšti opis ugrađenog jezikaUgrađene funkcijeFunkcije za rad sa vrijednostima tipa String.

Postoji prilično veliki broj funkcija i obično su dovoljne za rad sa string konstantama.

Pogledajmo primjer rješavanja problema korištenjem string funkcija.

Stanje problema:

Treba razviti funkciju. Proizvoljni string se prosljeđuje kao parametar funkciji. Znakovi u redu mogu biti i brojevi.

Niz brojeva (jedan ili više), odvojen od ostalih znakova razmacima, čini pozitivan cijeli broj.

Na primjer, red “72 ABC 6AP 31 54f -22” sadrži dva cijela broja pozitivni brojevi: 72 i 31. Osim razmaka, drugi znakovi koji nisu značajni (kao što su tabulator, povratak na red) se ne koriste. Funkcija mora vratiti broj pozitivnih cijelih brojeva.

Mora se nalaziti u modulu upravljane aplikacije. Potrebno je osigurati da se poziva pri pokretanju sistema. Definirajte string koristeći varijablu.

Dakle, otvorimo modul upravljane aplikacije i izaberemo sa liste u polju za odabir na panelu konfiguratora Modul standardni rukovalac AtSystemStart().

Unutar rukovatelja definiramo varijablu Linija, Na primjer:

Red = “72 ABC 6AP 31 54f -22”;

Količina = Broj cijelih brojeva(niz);

Pošaljimo poruku o broju cijelih brojeva:

Izvještaj("Linija sadrži " + Broj + " cijele brojeve");

U ovom slučaju, varijabla Količinaće biti implicitno pretvoren u tip String konstanta. Tada će se operacija spajanja izvršiti na tri niza i poruka će biti poslana.

Definirajmo početak i kraj (tj. šablon) funkcije Broj cijelih brojeva (niz).

Pogledajmo sada jedan od moguće opcije razvoj karakteristika Broj cijelih brojeva (niz). Istovremeno ćemo se upoznati s nekim ugrađenim funkcijama dizajniranim za rad sa stringovima.

Prije svega, trebali biste se upoznati sa funkcijom Šifra simbola. Ova funkcija dobija kod karaktera koji se nalazi u prenesenom nizu na poziciji sa navedenim brojem.

sintaksa:

CharacterCode(,)

Parametri:

(obavezno)

(opciono) – ovo je broj znaka u redu čiji kod želite da dobijete. Numeracija znakova u retku počinje od 1.

Povratna vrijednost:
Šifra prenesenog karaktera. Kod se vraća prema Unicode kodiranju.

Imajte na umu da parametar Postoji zadana vrijednost 1.

Niz se takođe može sastojati od jednog znaka. Tako je moguće odrediti kod 0 i kod 9, a kodovi svih ostalih cifara su, kao što je poznato, u intervalu između njih.

Definirajmo odgovarajuće varijable i njihove vrijednosti:

Code0 = CharacterCode(“0”);
Code9 = CharacterCode(“9”);

Da bismo riješili problem, biramo sljedeću shemu:

  1. Ako linija sadrži početne ili zadnje razmake u bilo kojoj količini, onda ćemo ih se riješiti posebna funkcija. Zatim će nas zanimati grupe znakova između unutrašnjih prostora. Ako se grupa sastoji samo od cifara, onda je to cijeli broj. Postoji posebna funkcija koja se može koristiti za određivanje položaja prvog prostora.
  2. Kada dobijete poziciju prvog razmaka, možete koristiti drugu funkciju da dobijete grupu znakova (podniz) lijevo od razmaka.
  3. Analizirajmo likove koji čine grupu i utvrdimo da li je to cijeli broj. Identificirani cijeli brojevi će biti zbrojeni u posebnu varijablu.
  4. Skratimo početni red odabirom, koristeći drugu funkciju, sve znakove sada desno od razmaka. Ovaj prostor ne može biti samo jedan, već čitav niz razmaka u nizu, pa u preostalom redu koristite posebnu funkciju da se riješite svih krajnjih razmaka (u nizu) i vratite se na tačku 2. Ponovićemo korake od tačke 2 do tačke 4 dok ne dođemo do uslova da u liniji nema mesta. U ovom slučaju, skraćeni niz će činiti posljednju grupu raščlanjenih znakova.

Pogledajmo sada funkcije koje su nam potrebne da riješimo problem.

AbbrLP
Sintaksa: AbbrLP()
Parametri: (obavezno).
Sječe razmake (beznačajne znakove) lijevo od prvog smisleni simbol u redu i pojavljuje se desno od posljednjeg značajnog znaka u retku.

Nađi
Sintaksa: Find(,)
Parametri: (obavezno), (obavezno).
Vraća poziciju prvog znaka pronađenog podniza.
Numeracija znakova u nizu počinje od 1. Ako string ne sadrži navedeni podniz, onda se vraća 0. U našem slučaju ćemo koristiti razmak (“ ”).

Lav
Sintaksa: Lev(,)
Parametri: (obavezno), (obavezno).
Odabire prve lijeve znakove niza. Pomoću ove funkcije odredit ćemo grupe znakova za analizu (od lijevog do prvog razmaka).

Snaga
Sintaksa: StrLength()
Parametri: (obavezno).
Dobiva broj znakova u nizu. Koristićemo ga da odredimo dužinu niza.
Funkcija Šifra simbola, koji ćemo koristiti za identifikaciju grupa znakova koji su cijeli brojevi, opisan je ranije.

U redu
Sintaksa: desno(,)
Parametri: (obavezno), (obavezno).
Odabire krajnje desne znakove u nizu. Koristeći ovu funkciju, izabraćemo još neobrađeni dio niza.

AbbrL
Sintaksa: Skraćenica()
Parametri: (obavezno).
Sječe razmake (neznačajne znakove) lijevo od prvog značajnog znaka u nizu. Koristimo ovu funkciju da uklonimo moguće razmake na lijevoj strani ostatka niza.

Ispod je mogući algoritam za funkciju sa komentarima.

Numerički izrazi

Varijable modula i detalji objekata baze podataka mogu biti numerički.
Postoji ograničenje broja cifara. Za numeričke atribute, dužina celobrojnog dela ne može biti veća od 32 znaka.

Preciznost razlomka ne može biti veća od 10 cifara. Kada je varijabla deklarirana i dodijeljena joj numerička vrijednost, tada se njegova bitna dubina nigdje ne bilježi. Međutim, postoje i ograničenja za varijable.

Sintaktički pomoćnik kaže da je maksimalna dozvoljena dubina bita za broj 38 znakova. Takvo ograničenje ne sprječava rješavanje bilo kakvih ekonomskih problema, tj. Bilo koja novčana vrijednost može se opisati pomoću ovih brojeva.

Međutim, ako još uvijek trebate opisati velike količine da biste riješili neke matematičke probleme, onda u teoriji programiranja postoje algoritmi koji vam omogućavaju da opišete brojeve s bilo kojom dimenzijom na temelju postojećih ograničenja.

Operacije koje se odnose na brojeve:

  • običan aritmetičke operacije(-, +, *, /). Množenje i dijeljenje imaju prednost nad sabiranjem i oduzimanjem. Zagrade imaju najveći prioritet. Postoje i unarni operatori + i -, čiji je prioritet odmah iza zagrada;
  • operacija “ostatak od podjele” (%). Na primjer, 12%5=2;
  • matematičke funkcije koje se mogu koristiti za brojeve (trigonometrijske funkcije, eksponencijacija, kvadratni korijen, zaokruživanje na određenu vrijednost mjesta, odabir cjelobrojnog dijela broja)

Ako govorimo o tačnosti numeričkih vrijednosti, što se tiče detalja baze podataka, onda postoje prirodna ograničenja.

Ali što se varijabli tiče, tu postoji jedna posebnost. U stvari, možete vrlo rado sa varijablama veliki brojevi, ali vrijednosti s dužinom cijelog broja ne više od 32 znaka bit će pohranjene u bazi podataka.

Boolean vrijednosti

Što se tiče tipa podataka Boolean, postoje samo dvije vrijednosti, True i False, koje se mogu dobiti na različite načine.

Možete, na primjer, koristiti operacije poređenja između brojeva ili datuma. Kao rezultat, dobiće se određena Booleova vrijednost, koja se u budućnosti najčešće koristi u uvjetnim izjavama i operatorima petlje.

Literali tipa Datum

Postoje dva načina da se opiše datum. Jedan od njih je korištenje literala. Bukvalno se piše u jednostrukim navodnicima.

Prvo se upisuje godina, zatim mesec i onda dan.

Po potrebi možete odrediti i vrijeme, jer u sistemu 1C:Enterprise 8, svaki datum sadrži i datum i vrijeme. na primjer:

DocumentDate = '20140315121020';

Ako vrijeme nije navedeno, zadano je nula. Možete koristiti bilo koji separator u opisu datuma. na primjer:

Datum dokumenta = '2014.03.15';

Drugi način za određivanje datuma je korištenje funkcije globalnog konteksta datum(). U ovom slučaju ovoj funkciji prosljeđujemo istu stvar kao parametre: godinu, mjesec, dan odvojene zarezima.

Također možete odrediti vrijeme. Ako nije specificirano, tada će se po defaultu postaviti na početak dana.

U sistemu 1C:Enterprise 8, prazan datum je sam početak kalendara. Opcije snimanja:

EmptyDate = '00010101';
EmptyDate = Datum(1,1,1);

Oba unosa će dati isti rezultat, a ovaj datum će se smatrati praznim.

Pogodnost funkcije datum() Poenta je u tome da u njega možemo prenijeti ne određene vrijednosti, već neke varijable. Odnosno, ponekad konstruišemo datum prikupljanjem različitih varijabli.

Operacija sabiranja je primjenjiva na datum. Operacija sabiranja dodaje datumu određeni broj sekundi.

Primitivne konverzije tipova podataka

U iskazu o dodjeli u kojem se sumira više varijabli (na primjer, Varijabla = A + B + C), moguća je konverzija primitivnih tipova podataka. Konverzija tipa podataka se izvodi na vrijednosti prvog tipa podataka.

Dakle, ako je prvi tip podataka string, onda će sistem pokušati da cijeli izraz učini stringom. Ako je prvi tip podataka broj, tada će sistem pokušati dobiti numerički tip podataka.

I tako, string + broj = string. Ponekad se nizu može dodati broj, ako se iz stringa može izdvojiti neka numerička vrijednost (na primjer, 123 + “456”).

Za logički tip podataka primjenjuju se sljedeći izrazi:

Tačno I 1 = Tačno;
Tačno I 0 = Netačno.

Svaki broj veći od nule pretvara se u Tačno, 0 se pretvara u Netačno.

Datum se može, kao što je ranije navedeno, dodati broju. Datumi se također mogu dodati u Boolean tip podataka.

U ovom slučaju, Tačno se pretvara u 1, a Netačno u 0.

Osim konverzije tipa u operatorima, moguća je i eksplicitna konverzija tipa pomoću odgovarajućih funkcija: String(), Broj(), Datum(), Boolean().

TO Linija bilo koji tip podataka se konvertuje.

Broj se može dobiti iz stringa ili iz logičke vrijednosti. Boolean pretvara: Tačno u 1, Netačno u 0.

Možete baciti string na Date ako sadrži vrijednost datuma. Na primjer, Datum(“20140315”). Kao što je ranije navedeno, moguće je pretvoriti po poziciji:

Datum(,).

Broj i samu Booleovu vrijednost možete pretvoriti u Boolean.

Ove funkcije se mogu koristiti u programskom kodu za izvođenje eksplicitne konverzije tipa.

Primitivni tipovi podataka Broj, String, Datum i Boolean mogu djelovati kao polja baze podataka.

Null i Undefined vrijednosti

NULL je literal. Obično se koristi u upitima baze podataka kada su dvije ili više tablica spojene.

Zapisi koji nedostaju u drugoj tabeli su popunjeni NULL vrijednošću. One. to je vrsta vrijednosti koja nedostaje.

U budućnosti, prilikom obrade rezultirajućeg rezultata, to se mora uzeti u obzir, jer NULL nije nula, već odgovarajući tip podataka.

Da bi se vrijednost obrađivala, NULL mora biti dovedena u neki regularni tip podataka koji se može ispisati ili koristiti u aritmetičkim operacijama.

Vrijednost tipa NULL se također može dobiti u ugrađenom jeziku. Možete definirati varijablu i dodijeliti joj istu NULL vrijednost. Međutim, takva dodjela se gotovo nikada ne koristi u programskom kodu.

One. NULL je zapravo tip podataka koji se dobija kada se radi sa upitima. NULL vrijednošću u jeziku upita treba rukovati na poseban način.

Naime, poređenje A=NULL neće raditi na nivou upita; Međutim, u ugrađenom jeziku, poređenje sa NULL vrijednošću će biti ispravno obrađeno.

Tip podataka Undefined je neprazna vrijednost nekog atributa.

Na primjer, ako atribut direktorija ima vezu na neki drugi direktorij kao tip podataka, tada prazna vrijednost ovog atributa neće biti jednaka Nedefinirano.

Ovaj tip (Nedefinirano) se pojavljuje, prvo, ako imamo određenu varijablu i nije inicijalizirana (tip podataka nije definiran).

Drugi primjer: Nedefinirani tip podataka vraćaju mnoge funkcije ugrađenog jezika ako se radnja ne može izvesti.

Na primjer, traženje elementa direktorija po imenu ako neki direktorij nema takvo ime elementa. Metoda FindByNameće vratiti vrijednost Nedefinisano.

U isto vreme Nedefinisano je ključna riječ, označeno je crvenom bojom. Ovo je takođe bukvalno, za pisanje Nedefinisano nema potrebe za korištenjem navodnika, zareza, zagrada itd.

Ako postoji lista dokumenata, a ova lista je prazna (dakle, nema reda u njoj), tada će trenutni red uzeti vrijednost Nedefinisano.

Ako baza podataka ima atribut sa složenim tipom podataka, tada će prazna vrijednost ovog atributa biti jednaka Nedefinisano.

Ali ako tip podataka nije kompozitni, tada će prazna vrijednost odgovarati praznoj vrijednosti ovog tipa (za datum, ovo je prva sekunda prvog sata prvog dana prvog mjeseca prve godine).

NULL i Undefined su i tipovi podataka i vrijednosti u ovim tipovima, i jedan i samo jedan. Za NULL to je vrijednost NULL, za Nedefinirano je Nedefinirano.

Tip podataka Tip

Glavna upotreba ovog tipa podataka je upoređivanje vrijednosti određene varijable ili atributa baze podataka sa određenim tipom.

One. U algoritmu morate razumjeti koji je tip dati objekt.

Značajno je da ovaj tip podataka nema literal. Ne možemo ga napisati kao NULL ili Undefined, ali možemo dobiti vrijednost ovog tipa pomoću dvije funkcije Tip I TypeValue.

Da bi se dobio tip nekog objekta (može biti varijabla, ili atribut baze podataka, ili atribut forme), koristi se funkcija TypeValue.

Ovoj funkciji se prosljeđuje objekt za koji želite dobiti tip podataka.

Ova funkcija vraća tip tipa kao povratnu vrijednost.

U budućnosti to treba uporediti sa bilo kojom vrstom interesa. na primjer:

Ako je TypeValue(Element) = Tip (“DirectoryLink.Nomenclature”) Tada
Report("Ovo je proizvod");
endIf;

U zaključku, sumiramo sav obrađeni materijal.

Pogledali smo osnovne strukture ugrađenog 1C jezika, naučili kako koristiti varijable i operatore i shvatili zašto i kako koristiti procedure i funkcije. Imajte na umu da je u osnovi sav naš programski kod do ove točke bio samodovoljan - sve smo sami napisali od nule i koristili neke konfiguracijske objekte ili ugrađeni jezik na minimum.

Detaljnije ćemo istražiti ove objekte u sljedećem članku, pa ostanite s nama! ;)