Koji su formalni parametri postupka 1c. Opis procedura i funkcija

Funkcije 1C i procedure u 1C radu na sličan način na druge jezike - funkcija je nazvana podprogram za pozivanje s drugih lokacija softvera.

Postupak za deklariranje funkcija u proizvoljnom modulu (to je da je moguće u tekstu postupka koji se nalazi na samom početku modula za upotrebu procedura čiji će se tekst nalazi u ovom modulu). Slično tome, 1C funkcije se mogu izvesti.

Da biste "izlazni" iz izvršenja 1C funkcije i procedura, koristite naredbu "Povratak;". Funkcija (za razliku od postupka) "vraća" rezultat proračuna, odnosno potrebno je pisati "povratnu vrijednost;". Funkcije 1C se ne unose, tada mogu vratiti vrijednost različitih vrsta, ovisno o parametrima ili uvjetima.

Funkcija se razlikuje od postupka za mogućnost vraćanja rezultata izračuna, na primjer:

Funkcija funkcija1 (parametar)
POVRATAK PARAMETAR * 2;
Enfunkcija

Varijabl1 \u003d funkcija1 (10);
// varijable1 će biti jednak 20

Parametri funkcije i procedura 1c su veze do varijabli koje postoje na mjestu poziva. "Reference" znači prilikom promjene vrijednosti parametra "Unutra" funkcija 1c, bit će promijenjena i "izvana". Tako da se to ne dogodi - parametar se prenosi s vrijednošću AC. Međutim, ovo ne radi sa vrijednostima objekta (liste, tablice, objekti baze podataka), oni će se i dalje prenijeti referencom.

Prilikom prenosa parametra na postupak / funkciju, prenosi se "po referenci". To znači da promjena u postupku mijenjate njegovu vrijednost prilikom pristupa nakon završetka funkcije 1C. Dakle, prethodni primjer može se napisati ovako:

Postupak postupka1 (parametar)
Parametar \u003d parametar * 2;
Ekstrudres

Varijabla1 \u003d 10;
Postupak1 (varijabla1);
Izvještaj (varijabla1);
// Rezultat će biti 20

Preći u postupak, vrijednost varijable, a ne samo:

Postupak postupka1 (parametar vrijednosti)
//akcije..
Ekstrudres

Pri radu sa objektima (direktoriji, dokumenti), mora se imati na umu da se u 1C / postupku 1C mogu izvršiti postupke.
Ako se 1C / postupak funkcionira 1C višestruki parametri, zatim nepotreban može se preskočiti (navođenje zareza ako parametar nedostaje u sredini), bit će prenosit ili neodređen (vidi dolje) ili zadana vrijednost:

Funkcijska funkcija1 (parametar1, parametar2, parametar3 \u003d "vrijednost string")
// radi nešto
Enfunkcija

// pozivanje funkcije bez nekih parametara
// parametar2 će biti jednak neizvjesnoj
// parametar3 bit će jednak "vrijednosti niza"
Funkcija1 (10);

// pozivanje funkcije bez drugog parametra
Funkcija1 (10, "vrijednost");

Kao što je već spomenuto, 1C procedure koriste se kao predavači događaja koji proizlaze iz korisnika sa obrascem (otvaranjem, zatvaranjem, pritiskom na tipke itd.) Ili rad platforme (start, dovršavanje itd.). Moguće vrste obrasca ili njenih elemenata mogu se vidjeti u svojstvima - klikom na odgovarajući element obrasca (i uroling prozora Svojstva dolje). Vrste rukovatora u objektnom modulu mogu se vidjeti korištenjem padajućeg popisa na ploči u konfiguraču - gdje se prikazuje popis čak i neodređenih i već određenih događaja. U različitim događajima, različitim parametrima, kada dodaju 1c upravljač, automatski propisuje popis parametara.

Ugrađeni 1C: Preduzeća podržavaju dva načina za prenošenje parametara u postupke i funkcije: prenošenje parametara referentnim i prenosnim parametrima po vrijednosti.

Prema zadanim postavkama, na ugrađenom jeziku 1c: Preduzeća 8 prenose parametre u postupke i funkcije referencom. To znači da će se mijenjati formalni parametar unutar postupka ili funkcije odraziti na vrijednost stvarnog parametra koji se prenosi kada se naziva postupak ili funkcija.


Postupak postupka1 (formalni parametar1)

FormalPameter1 \u003d 2 * 3;

Ekstrudres

ActualParameter \u003d 10;
Postupak1 (stvarni parametar);

// bit će prikazana vrijednost 6 - promjena u formalnom
// parametar unutar postupka uticao je na promjenu

// Postupak poziva: Prema zadanim postavkama, parametri se prenose
// veza!

Parametri prenosa po vrijednosti

Kada se prenosi parametar nazvanog postupka ili funkcije, promjena vrijednosti formalnog parametra unutar postupka ili funkcije ne utječe na stvarni parametar koji se prenosi kada se naziva postupak ili funkcija. Imajte na umu da se parametar mora prenijeti po vrijednosti, provodi se pomoću ključne riječi vrijednosti.

Primjer:


Postupak postupka2 (formalna vrijednost parametra)

FormalPameter1 \u003d 2 * 3;

Ekstrudres

ActualParameter \u003d 10;
Postupak2 (stvarni parametar);

// Prikazaće se vrijednost 10 - promjena u formalnom
// parametar unutar postupka nije utjecao na promjenu
// Vrijednosti stvarnog parametra koji se prenose kada
// Postupak poziva: Parametar se prenosi po vrijednosti!
Izvještaj (stvarni parametar);

Značajke prenošenja varijabli različitih vrsta podataka po vrijednosti

Prijenos varijabli različitih vrsta podataka po vrijednosti ima svoje karakteristike. Sastoje se od rada sa metodama i svojstvima konteksta formalnih parametara, stanje stvarnog parametra koji se prenosi kada se poziva postupak ili funkcija.

Razmislite kao primjer situacije u kojoj je parametar postupka koji se prenose vrijednosti vrijednosti vrijednosti. Unutar pozive procedure kreira se procesni hod () nova instanca tablice vrijednosti koja dodaje tri retka. To ne utiče na status tablice vrijednosti TK prenošenog kao stvarnog parametra prilikom pozivanja postupka za ručno ():


Postupak za preraduTrack (tabela znaka)


Vrednost kartice \u003d Nove tablice;

// Dodajte dva zvučnika na tablicu vrijednosti
Tab Compex. Tablo. Adredno ("Stupac1");
Tab priključivanja. Adredno ("stupac2");


Za n \u003d 1 do 3 ciklus
Novstok \u003d vrijednost kartice. Adredno ();
Novstok.colonka1 \u003d "Stupac";
Novstok.colonka2 \u003d p;
Endcycle;

Ekstrudres

// stvoriti novu tablicu vrijednosti
Tk \u003d novi stolovi;



// Dodajte nekoliko reda u tablicu vrijednosti
Za n \u003d 1 do 10 ciklusa
Novstok \u003d tz. Adredno ();

Novstok.colonka3 \u003d p;
Endcycle;

// će se povući 10


Tretirano (TK);

// povuče se 10: unutar postupka postupka
// u formalnom parametru spremio je novu tablicu vrijednosti

Razmislite kao primjer situacije u kojoj je parametar postupka koji se prenose vrijednosti vrijednosti vrijednosti. Unutar rezultirajućeg postupka, kolateralni () tablica vrijednosti prenosi se kao parametar kada se poziva postupak je urušen:


// naznačeno je da se prijenos parametra vrijednosti tablice provodi po vrijednosti
Suradnik postupka: Signal tablice)

// hoćemo sa tablicom vrijednosti na stupcima1 i stupac3
Sažetak kartice ("Stupac1", "Stupac3");

Ekstrudres

// stvoriti novu tablicu vrijednosti
Tk \u003d novi stolovi;

// Dodajte tri stupca na tablicu vrijednosti
Tk.colonki. Adredly ("stupac1");
Tk.colonki. Adredly ("stupac2");
Tk.colonki. Adredly ("stupac3");

// Dodajte nekoliko reda u tablicu vrijednosti
Za n \u003d 1 do 10 ciklusa
Novstok \u003d tz. Adredno ();
Novstok.colonka1 \u003d "Stupac1";
Novstok.colonka2 \u003d "stupac2";
Novstok.colonka3 \u003d p;
Endcycle;

// će se povući 10
Izvještaj ("Broj elemenata u TK-u za okretanje:" + tz. N'tr. ());

// nastavite postupak podnošenjem stvarnog parametra TK po vrijednosti
Raspoređivanje (TK);

// Tabela vrijednosti sada je minimizirano: Vrijednost će biti prikazana 1
Izvještaj ("Broj elemenata u TK-u nakon sklopivog:" + TK. Nacionalnost ());

Dakle, prijenos stvarnog parametra vrijednošću u ovom slučaju nije doveo do stvaranja kopije tablice vrijednosti. Pri radu sa nekretninama i metodama vrijednosti vrijednosti, radimo sa nekretninama i metodama tablice vrijednosti koje su korištene kada se postupak naziva naredbama ().

Razlika za sve vrste pri prenošenju parametra postupka ili funkcije referencom ili se vrijednost očituje u dodjeli stvarnog parametra postupka ili funkciji nove vrijednosti. Pozivanje svojstava i metoda konteksta stvarnog parametra, ako bilo koji, utječe na formalni parametar, bez obzira da li se prenosi referencom ili po vrijednosti.

1. Opis procedura i funkcija preporučuje se izvođenje u obliku komentara na njih. Potreba za komentare na određene odjeljke procedura i funkcija trebala bi se odrediti razvojem na osnovu složenosti i nestandarj specifičnog dijela Kodeksa.

2. Obavezni komentar zahtijeva procedure i funkcije modula koji su uključeni u softversko sučelje - takve procedure i funkcije namijenjene su za upotrebu u drugim funkcionalnim podsistemima (ili drugim aplikacijama) za koje mogu biti odgovorni drugi programeri, tako da moraju biti odgovorni dokumentovani.

Vidi i:Ograničenja za upotrebu izvoznih procedura i funkcija i upotreba izvoznih postupaka i funkcija u modulima obrasci

4. Treba izbjegavati komentare koji ne daju dodatna objašnjenja o radu ne-izvoznog postupka (funkcija).
Na primjer, pogrešno:

// Postupak - događaj procesora "izlazni" obrasci // i prorezan postupak recircuita () // Postupak obrade "Izračunajte" // i ispravan postupak izračunajte () // Postupak obrade događaja "nametanje" elementa pločica za uređivanje tolena // & i klauzula Postupak ulaz ulazTolkovdiaHepression (element)

U ovim primjerima, komentari su suvišni, jer je očito iz imena postupaka za koje su to rukovatelji događaja. A sa njihovim opisom i dodjelom parametara mogu se naći u asistentu sintaksu.

// Funkcija se vraća prema dokumentu Funkcija klausedenost (podaci)

Ovaj komentar ne daje nikakve dodatne informacije o funkciji.

5. Komentar se stavlja prije najave postupka (funkcija) i ima sljedeći obrazac.

5.1. Odjeljak "Opis"sadrži verbalni kratak opis odredišta i / ili principe postupka (funkcije). To može biti jedini odjeljak za postupke bez parametara.

5.2. Odjeljak "Parametri"opisuje parametre postupka (funkcije). Ako nisu, dio je preskočen. Prethodio nizu "parametri:" , zatim iz nove linije postoje opisi svih parametara.

5.2.1. Opis parametra Počinje s novom linijom, a zatim naziv parametra, zatim crticom i liste tipa (*), a zatim crtica i tekst opisa parametra.
Na primjer:

// Parametri:

Također, za svaki parametar možete odrediti jedan ili više dodatnih opisa vrsta parametara. Svaki dodatni opis započinje novom linijom, a zatim obaveznom crticom, zatim popis vrsta parametara (*), a zatim crtica i tekst.
Na primjer:

// Parametri: // Detalji - String - imena detalja navedenih putem zareza. // Na primjer, "kod, ime, roditelj." // - struktura, fiksne konstrukcije - kao ključ preneseni // polja pseudonim za vraćenu strukturu s rezultatom, // i kao vrijednost (neobavezno), stvarno naziv polja u tabeli. // Ako vrijednost nije definirana, naziv polja uzima se iz ključa. // - niz, fiksnasiv - niz rekvizite rekvizite.

5.3. Odjeljak "Povratna vrijednost"opisuje vrstu i sadržaj funkcije funkcije. Za postupke ovaj odjeljak nedostaje. Prethodio nizu "povratna vrijednost:". Zatim iz nove linije vrsta vrsta (*), zatim crtica i teksta.
Na primjer:

// Vrijednost povrata: // boolevo - istina, ako je barem jedna od prenesenih uloga dostupna trenutnom korisniku,

5.4. Odjeljak "Primer" Sadrži primjer korištenja postupka ili funkcije. Pripremio je string "Primjer:". Dalje, iz nove retke primjer upotrebe.

(*) Bilješka: Pod "Lista kvaliteta" znači imena vrsta odvojenih zarezima. Naziv tipa može biti jednostavan (u jednoj riječi) ili kompozit - u dvije riječi odvojene tačkom.
Na primjer: Liniju, Struktura, ShipderSetstries.

Prilikom razvoja na 1C platformi: Enterprise 8.3 Tekst komentara prikazuje se i u kontekstualnim brzim postupcima, funkcijama i njihovim parametrima. Za detalje pogledajte odjeljak "Kontekstualni nagovještaj prilikom unošenja tekstova modula" Poglavlja 26 "Razvojni alati" u dokumentaciji za platformu.

Primjer opisa funkcije jednim parametrom:

// određuje raspoloživost uloge u ulogu trenutnom korisniku, // kao i dostupnost administrativnih prava. // // Parametri: // Tamers - niz - imena imena, čija je dostupnost odvojena, odvojena zarezima. // // Vrijednost povrata: // boolevo - istina, ako je barem jedna od prenesenih uloga dostupna trenutnom korisniku, // ili on ima administrativna prava. // // Primer: // ako je Rolly Access ("Dodatni masovni izgovor, pošalji") onda ... // Funkcijski pristup rola (imena na imena) Izvoz

Primjer opisa postupka bez parametara:

// U ruderu događaja se vrši ažuriranje dokumenta; // - čišćenje tablice dijela usluge, ako je ugovor naveden kod agenta Komisije; // - provjeravanje ispunjavanja potrebne jedinice transakcija u tablici. dijelovi robe; // - sinhronizacija sa "podređenim" fakturama; // - punjenje skladišta i narudžbe kupca u tablice dijelova robe i povrata; // - brisanje neiskorištenih linija tablice "serijski brojevi"; // - popunjavanje varijable objektnog modula. // Postupak za prepisivanje () krajnje kontrole

6. Ako želite komentirati postupak ili funkciju koja se koristi sa direktivom o kompilaciji, prvo biste trebali objaviti komentar, a zatim -
direktiva o kompilaciji. Na primjer:

// Postupak - obrasci za rukovanje događajima "Polazak". // obrađuje parametre obrasca i ispunjava detalje vrijednosti oblika. // a također i obavlja sljedeće radnje: // ... // & nasserver postupak očuvanja (neuspjeh, standardžba)

Ovaj stil plasmana komentara omogućava vam prvo obratiti pažnju na definiciju funkcije i direktive o kompilaciji, a zatim - na komentaru koji može zauzimati dovoljno veliki broj linija.

7. Kodeks procedure i funkcija treba se odvojiti jedni od drugih u tekstu modula sa praznim nizovima.

Automatski naručite komentare na postupke ili funkcije sa kompilacijskim direktivama

Da biste automatski dogovorili komentare u postupke ili funkcije sa kompilacijskim direktivama, možete koristiti primijenjenu obradu FormatiMedizerZpilacija.epf.. Za ovo vam je potrebno:

  1. Uključite konfiguracijske module (naredba menija konfiguracije -\u003e Konfiguracijske datoteke za istovar ...)
  2. Način otvorenog obrade 1c: Enterprise i odredite direktorij u kojem su moduli istovareni - sljedeći, kliknite gumb "Format"
  3. Preuzmite module u konfiguraciji (naredba menija konfiguracije -\u003e Preuzmite konfiguracijske datoteke ...)

Mi nalazimo: primjer najave i opisi postupka bez parametara, procedura parametara za prevlačenje ()Hlađenje za upotrebu vilica za 1c, kako izvršiti postupak u 1c, koji se nazivi funkcija ili postupaka trebaju ispraviti?, Da biste razumjeli i čitali u Kodu 1C Postupak i funkciju, 1C 77 Opis funkcije, Komentar na Komentar Količina, procedure i funkcije u 1C, 1C dokumentima procedura i funkcije


Unaprijed se izvinjavam na patosu napomenu o "postavljanju bodova", ali potrebno vas je nekako odvesti u članak)) za moj dio, pokušat ću apstraktno da vam i dalje opravdavamo vaša očekivanja.

Ukratko o čemu se radi

Sve je to takođe poznato, ali još uvijek ću vas podsjetiti kako se parametri metode mogu prenijeti u 1c. Mogu se prenijeti "na linku" i "značenje". U prvom slučaju, prenosimo istu vrijednost na način kao na pozivu, a u drugom - njenoj kopiji.

Prema zadanim postavkama, 1C argumenti se prenose referencom, a promjena parametra unutar metode bit će viđena iz vanjske metode. Ovdje dalje razumijevanje problema ovisi o tome šta tačno razumijete pod riječi "Promijeni parametar". Dakle, postoji ponovni zadatak i ništa više. Štaviše, na primjer, dodjela može biti implicitna pozivom na način platforme koja vraća nešto u izlazni parametar.

Ali ako ne želimo da se naš parametar prenosi referencom, tada možemo odrediti ključnu riječ prije parametara Znak

Postupak za spoznaju (parametar vrijednosti) parametar \u003d 2; Dodatni parametar \u003d 1; Stvaranje (parametar); Izvještaj (parametar); // će izlaziti 1.

Sve radi kao što je obećano - promjena (i ispravnije kažu "zamjenu") Vrijednost parametra ne vodi do promjene vrijednosti izvan metode.

Pa, šta se šala?

Zanimljivi trenuci počinju kada počnemo prenositi kako parametri nisu primitivne vrste (linije, brojevi, datumi itd.), Ali objekti. Ovdje je "mala" i "duboka" kopija objekta, kao i pokazivača (ne u smislu C ++ i kao apstraktni deskriptori (ručke), pop.

Prilikom prenose objekta (na primjer, tablice) Ponovno prenosimo vrijednost vrijednosti pokazivača (nekih ručke), što u memoriji platforme "drži" objekt. Prilikom prenosa vrijednosti platforma će napraviti kopiju ovog pokazivača.

Drugim riječima, ako, prosljeđujući objekt referencom, u metodi dodijelimo vrijednost parametrima "Array", a zatim na mjestu poziva, dobivamo niz. Ponovno dodjeljivanje vrijednosti koja se prenosi referencom vidi se sa mjesta poziva.

Procedurni tretman (parametar) Parametar \u003d novi niz; Dodatni stanični stol \u003d Nova tabla; Tretman (tablica); Izvještaj (TINCH (tablica)); // učitati niz

Ako ćemo dati predmet po vrijednosti, a zatim na mjestu poziva, naš stol neće nestati.

Sadržaj objekta i njenog stanja

Kada se vrijednost prenosi, ne kopira se cijeli objekt, već samo njegov pokazivač. Primjer objekta ostaje isti. Nije važno kako prolazite objektom referencom ili po vrijednosti - čišćenje vrijednosti vrijednosti rezultirat će čišćenjem tablice. Ovo čišćenje će biti vidljivo svuda, jer Objekt je bio jedan i jedinstven i bez obzira na to kako se to prenosilo na metodu.

Parametar obrade postupaka (parametar). Radi (); Dodatni stanični stol \u003d Nova tabla; Tablica. Adredno (); Tretman (tablica); Izvještaj (tablica. Broj ()); // povući 0.

Prilikom prenose objekata na metode, platforma djeluje po pokazateljima (konvencionalno, a ne direktni analozi iz C ++). Ako se objekt prenosi referencom, tada je 1C virtualna memorijska ćelija za stroj u kojoj se ovaj objekt laže, može se prepisati drugi objekt. Ako se objekt prenosi vrijednosti, pokazivač se kopira i prepisivanje objekta ne dovodi do prebrisanja memorijske ćelije sa izvornim objektom.

Istovremeno bilo kakva promjena stanje Objekt (čišćenje, dodavanje svojstava itd.) Mjenja sam objekt, a općenito nije povezan s načinom na koji se i gdje je objekt prenesen. Status instancije objekta promijenio se, možda je gomila "reference" i "u vrijednostima", ali instanca je uvijek ista. Prenošenjem objekta na način, ne stvaramo kopiju cijelog objekta.

I uvijek je istina, osim ...

Interakcija klijenta-servera

Platforma je vrlo transparentno implementirana pozivima poslužitelja. Jednostavno nazivamo metodom, a ispod kapuljača se serializira platforma (pretvara se u niz) sve parametre metode, prenosi na poslužitelj, a zatim vraća izlazne parametre nazad na klijenta, gdje oni zadužuju i žive, kao da nisu Idite na bilo koji poslužitelj.

Kao što znate, nisu svi predmeti platforme serializiraju. Odavde je da ograničenje raste što nisu svi objekti ne mogu prenijeti na metodu poslužitelja od klijenta. Ako prenosite nereljeni objekt, platforma će se pokrenuti zakletiše loših riječi.

  • Izričita najava namjera programera. Gledajući potpis metode, možete jasno reći koji su parametri unosa i koji izlaz. Ovaj kôd je lakši za čitanje i praćenje
  • Da biste promijenili parametar "LINK" na poslužitelju, vidi se na pozivnom mjestu na klijentu,arametri prenose na server referencom, platforma će se sigurno vratiti klijentu kako bi se osiguralo ponašanje opisano na početku članka. Ako parametar ne treba vratiti, bit će preopterećenje prometa. Da biste optimizirali razmjenu podataka, parametri čije vrijednosti ne trebaju na izlazu, morate označiti riječ značenje.

Druga tačka je ovdje zapažena. Da biste optimizirali promet, platforma neće vratiti vrijednost parametra klijentu ako je parametar označen riječm vrijednošću. Sve je to prekrasno, ali vodi u zanimljiv učinak.

Kao što rekoh, kada se objekt prenese na server, pojavljuje se serializacija, i.e. Izvodi se "duboka" kopija objekta. A ako postoje riječi Vrijednostobjekt neće ići sa servera nazad klijentu. Ove dvije činjenice savijamo i dobijamo sljedeće:

& Brušenje parametara postupka (parametar). Preporučuju (); Postupak ekstrudsanja i nasserver za parametar Parametra o poznaniku (vrijednost). Preporučuju (); Izuzeti i postupka žalbenog postupka CleanAnt (vrijednost parametar) parametar. Preporučuje (); Krajnji kontrole i postupak zahtjeva Provjerite signal () lista1 \u003d Nove Snaps; List1. Dodati ("bok"); List2 \u003d list1.copy (); List3 \u003d list1.copy (); // objekt se u potpunosti kopira, // prenosi na server, a zatim se vraća. // čišćenje liste vidljivo je na post točki brze (liste1); // objekt se u potpunosti kopira, // prelazi na server. Povratak ne vraća. // čišćenje liste nije vidljiva na pozivnom mjestu kreiranja (lista2); // kopirajte samo pokazivač objekta // čišćenje liste vidljivo je na pozivnom mjestu spoznaje (lista3); Izvještaj (lista1. N'tvice ()); Izvještaj (lista2. Broj ()); Izvještaj (lista3. N'trb ()); Ekstrudres

Sažetak

Ako je kratko, moguće je sažeti na sljedeći način:

  • Prijenos po referenci omogućava vam da se "znojite" objektom sa potpuno različitim objektom
  • Prijenos nije dozvoljen "znojiti" objekt, ali promjene u unutrašnjem stanju objekta bit će vidljivo, jer Radite s istim instancama objekta
  • Kada se poslužitelj poziva, rad dolazi s različitim objektima objekta, jer Izvršeno je duboko kopiranje. Ključna riječ Vrijednost Onemogući kopiranje instancije poslužitelja natrag klijentu i promjenu internog stanja objekta na poslužitelju neće dovesti do slične promjene na klijentu.

Nadam se da će vam ovaj jednostavan popis pravila omogućiti da lakše riješite sporove sa kolegama o prijenosu parametara "po vrijednosti" i "na linku"