Legg til en linje i den tabellformede delen av dokument 1s 8.3. Hurtigtaster: generelle handlinger

For det forrige eksemplet kan du legge til følgende kodelinjer:

Form Elements.TableField1.AddRow(); side = FormElements.TableField1.CurrentRow; p.Først = 3; p.Second = "Mel"; p. Mengde = 350;

Hvordan bestemme antall rader i en verditabell i 1s 8?

countRows = table.Quantity(); Rapport("Antall rader i tabell over tabellverdier = " + antall rader);

Resultat:

Antall rader i tabellen med tabellverdier = 3

Hvordan slette en rad i en verditabell i 1s 8?

rowTable = tabell; table.Delete(rowTable);

Hvordan skjule en verditabell i 1s 8?

Kollapse:

table.Collapse("Andre", "Antall");

Vi får etter konvolusjon:

Hvordan sortere en tabell med verdier i 1s 8?

Sorter etter andre og tredje kolonne:

table.Sort("Second, Quantity");

Hvordan plassere et tabellfelt på en linje i 1c 8?

På den andre linjen:

Form Elements.TableField1.CurrentRow = tabell;

Utskrivbart skjema i 1s 8

Først lager vi en layout (navnet på området: velg de nødvendige linjene i layouten, i egenskapene, i Navn-feltet, skriv inn navnet på området), og vis det deretter i et regnearkdokument:

Prosedyre CommandPanel1Print(Button) variabel td, rs, rs1, layout, kode, navn, nomen; kode = 0; layout = GetLayout("Produkter"); header = layout.GetArea("Header"); header.Parameters.datta = CurrentDate(); pc = layout.GetArea("pc"); pc1 = layout.GetArea("pc1"); td = Nytt tabelldokument; td.Output(cap); nomen = Kataloger.Nomenklatur; utvalg = nom.SelectHierarchically(); while fetch.Next() loop code = kode + 1; hvis sample.ThisGroup = True så pc1.Parameters.code = kode; pc1.Parameters.name = utvalg.Navn; td.Output(rs1); annet rs.Parameters.code = kode; rs.Parameters.name = utvalg.Navn; td.Uttak(rs); slutt om; endCycle; etc.ViewOnly = Sant; td.Show("Katalog ""Nomenklatur"""); Slutt på prosedyre

De grunnleggende egenskapene til et programmeringsspråk inkluderer vanligvis arbeid med tall og strenger. Vanligvis er disse funksjonene hardkodet inn i kompilatorkoden (eller "base"-klassene til programmeringsspråket er implementert).

I 1C er muligheten til å jobbe med strenger programmert i selve plattformen. I dag skal vi se på funksjonene ved å jobbe med 1C-strenger i programmer i det innebygde 1C-språket.

Linjeverdi 1C

1. La oss starte med det enkleste. Å lage en variabel og tilordne en konstant strengverdi til den ser slik ut i 1C:

Variable = "Hei, verden!";

Hvis du trenger å spesifisere et anførselstegn i en konstant 1C-strengverdi, må du doble det ""

Variabel = "Hei, verden"!;

2. Linjeskift 1C kan angis på to måter samtidig. Den første bruker symbolet |

Variabel = "Hei,
| verden! ";

Den andre er å bruke symbolsystemet. Den lar deg legge til både 1C-linjeskift og andre tegn som ikke skrives ut, for eksempel TAB.

Variabel = "Hei" + Symboler.PS + "fred!";

3. Konfigurasjoner i 1C kan utvikles ikke bare for ett språk (russisk, engelsk eller et annet) - men samtidig for flere språk. I dette tilfellet velges språket som brukes for øyeblikket nederst i 1C-vinduet.

Listen over språk er plassert i konfigurasjonsvinduet i General/Languages-grenen. Hvert språk har en kort identifikator som f.eks ru eller eng.

Det er klart at når man programmerer en slik konfigurasjon, kan 1C-linjer også være flerspråklige. For å gjøre dette er det mulig å lage en slik 1C-linje ved å spesifisere gjennom; alternativer etter språkidentifikator:

Variable = "ru=""Hei, verden! ""; en=""Hei, verden! """;

Hvis du bruker 1C-linjen dannet på denne måten som vanlig, vil det være det som er skrevet i den. For at systemet skal dele det opp i to alternativer og bruke ønsket, må du bruke НStr()-funksjonen:

//korrekt for tospråklige konfigurasjoner
Rapport(NStr(Variabel));

Rekvisitter med line type 1C

Attributtet er et felt i 1C-katalogen/dokumentet. Den skiller seg fra en variabel i et program på 1C-språket ved at dens type er nøyaktig angitt for attributtet (nummer, 1C-streng, etc.). Hvis du trenger å friske opp minnet om hva en rekvisitt er, kan du se leksjonen om.

Hvis du spesifiserer typen attributt - linje 1C, må du i tillegg spesifisere parametrene.

1C-linjer kommer i ubegrenset lengde (angitt som lengde = 0) og begrenset lengde, som indikerer nøyaktig antall tegn. 1C-rader med ubegrenset lengde lagres i en separat SQL-tabell, så bruken av dem er mindre produktiv enn begrensede.

Det er derfor bruken av 1C-strenger med ubegrenset lengde har sine begrensninger - det er ikke mulig å bruke dem overalt. Det er for eksempel ikke tillatt som dokumentnummer, referansekode eller måling.

Arbeid med 1C-strenger

Det er flere innebygde funksjoner i 1C-plattformen for arbeid med strenger.

  • AbbrLP ("Utrolig, men sant!")
    Fjerner ekstra mellomrom fra 1C-linjen. Kan også brukes til å konvertere alle typer til en 1C-streng (for eksempel tall).
  • Variabel = "Vasya" + AbbrLP(" pluss") + "Olya"; //det vil være "Vasya pluss Olya"
    Et eksempel på summering av flere 1C-strengverdier. Resultatet blir en linje 1C.
  • Variabel = Lev("Musikk", 2); //vil være "Mu"
    Variabel = Medium("Musikk", 2, 2); //det vil være "trussel"
    Variabel = Rettigheter("Musikk", 2); //det vil være "ka"
    Ulike alternativer for å få en delstreng fra en 1C-streng.
  • Variabel = Finn("Musikk", "zy"); //det blir 3
    Søk etter en delstreng i streng 1C, start med tegn 1.
  • Variabel = StrLength("Musikk"); //det blir 6
    Returnerer antall tegn i 1C-linjen.
  • Report("Hei") //i meldingsvinduet nederst i 1C-vinduet
    Alert("Hei") //popup-dialog
    Status("Hei") //i statusvisningslinjen nederst til venstre
    .

Bringe objekter til linje 1C

Som du vet, er det mest populære formatet for utveksling av strukturert informasjon for tiden XML. Selv den nyeste versjonen av MS Office Word og Excel lagrer filer i dette formatet (henholdsvis docx og xlsx, endre utvidelsen til zip, åpne i et arkiv).

1C-plattformen for datautveksling gir flere alternativer, hvorav den viktigste også er XML.

1. Den enkleste metoden er å bruke funksjonen Abbreviation() eller String(). Du kan bruke REPRESENTATION()-funksjonen i forespørselsteksten. Resultatet av handlingen deres er det samme - de genererer en strengrepresentasjon av et hvilket som helst 1C-objekt for brukeren.

For en katalog som standard vil dette være navnet. For et dokument – ​​dokumentnavn, nummer og dato.

2. Ethvert 1C-objekt (med restriksjoner) kan konverteres til XML og omvendt. Konverteringsprosessen kalles serialisering.

StringViewXml = XMLString(Verdi); //hent XML fra 1C-verdi
Verdi1C = XMLValue(Type("DirectoryLink.Nomenclature"),TypeStringXml); //hent 1C-verdien fra XML-strengen, må du spesifisere 1C-typen som skal mottas

3. Det er 1C-plattformens egen måte å konvertere et hvilket som helst 1C-objekt til en streng. Den migrerte fra versjon 1C 7.7. Dette formatet er ikke forstått av andre programmer, men andre 1C forstår det, noe som gjør det enkelt å bruke det for utveksling mellom 1C-databaser.

Row = ValueInRowInt(Verdi1C); //hent streng 1C fra verdi 1C
ValueVFile("C:\MyFile.txt", Verdi1C); //et annet alternativ, vi får en fil med en lagret streng fra 1C-verdien
Value1C = ValueFromStringInt(String); //tilbake fra linje 1C
Verdi1C = VerdiFil("C:\MinFil.txt"); //tilbake fra fil

Redigering av 1C-linjer på skjemaet

I tillegg til å jobbe med 1C-strenger i et program på 1C-språket, vil jeg selvfølgelig gjerne at brukeren skal kunne redigere dem. Det er flere muligheter for dette:

1. Den enkleste måten er å be om oppføring av en 1C-linje på forespørsel. Denne metoden brukes når du lærer 1C-programmering; i livet brukes den mye sjeldnere (men den brukes!).

Variabel = "";
Row = EnterValue(Variable, "Angi fullt navn");

2. For å vise detaljene til et 1C-objekt (katalog/dokument) eller skjemadetaljer (se), brukes oftest et inndatafelt. Dette er det vanligste verktøyet i 1C for brukeren til å jobbe med redigeringsfelt.

3. Mulighetene til inndatafeltet kan utvides (se egenskapene til inndatafeltet, høyreklikk på det, flere detaljer):

  • Avmerkingsboks Multiline redigeringsmodus
  • Avmerkingsboks for avansert redigering (tilgjengelig hvis forrige avmerkingsboks er merket av)
  • Avmerkingsboks Passordmodus (se).

4. Hvis alle funksjonene til inndatafeltet ikke er nok for deg, er det en innebygd editor. For å legge det til i skjemaet, må du legge til et tekstdokumentfelt i menyen Skjema/Sett inn kontroll. I egenskapene kan du spesifisere driftsmodusen – utvidelsesegenskapen.

Et tekstdokumentfelt kan ikke knyttes direkte til data. Det er nødvendig å skrive en funksjon i OnOpen() hendelsesbehandleren til skjemaet (se):

Form Elements.ElementNameTextDocumentField.SetText(StringValue); //her er ValueString teksten mottatt, for eksempel fra attributtet

Og i lagrebehandleren - for eksempel i Lagre-knappen - legg til en lagring:

ValueString = FormElements.ElementNameTextDocumentField.GetText(); //Verdi Linjen her er attributtet der vi lagrer verdien

5. I 1C versjon 8.2.11, i administrerte skjemaer, har det dukket opp et nytt alternativ for å representere en 1C-linje - feltet Formatert dokument.


I likhet med feltet til et tekstdokument, må du angi det når du åpner det og skrive det ned når du lagrer det selv ved hjelp av programmet.

  • I 1C-objektet hvis form vi oppretter (katalog, dokument, behandling, etc.) - legg til et attributt med typen Verdilagring
  • I OnReadOnServer()-funksjonen setter vi teksten fra attributtet

    //her er attributtet tilleggsattributtet til 1C-objektet
    //here FormattedDocument er navnet på feltet på skjemaet for redigering
    &På server

    FormattedDocument = CurrentObject.Attributes.Get();
    Slutt på prosedyre

  • I BeforeWritingOnServer()-funksjonen eller ved å bruke knappen, vil vi skrive teksten fra feltet

    &På server
    Prosedyre ved lesing på server(CurrentObject)
    CurrentObject.Props = NewValueStorage(FormattedDocument);
    Slutt på prosedyre

Tabelldeler finnes for mange objekter i 1C:

  • Kataloger
  • Dokumentasjon
  • Rapporter og behandling
  • Kontoplaner
  • Karakteristiske typeplaner
  • Beregningstypeplaner
  • Forretningsprosesser og oppgaver

Tabelldeler lar deg lagre en ubegrenset mengde strukturert informasjon som tilhører ett objekt.

La oss se på noen teknikker for å jobbe med tabelldeler.

Hvordan omgå den tabellformede delen

For å krysse borddelen kan du bruke en løkke For hver

For hver rad fra den tabellformede delen av syklusen

Report(String. TabularPart-attributt) ;

EndCycle ;

Ved hver iterasjon inn i variabelen Linje neste rad i tabellseksjonen overføres. Verdiene til raddetaljene kan fås ved uttrykket Line.AttributeName.

Hvordan få og omgå valgte rader i tabelldelen

For å vise informasjon fra den tabellformede delen av objektet, bruk et skjemaelement Tabellfelt. For å aktivere muligheten til å velge flere rader i et tabellfelt, må du angi verdien Flere på eiendommen hans Valgmodus.

For å få en liste over valgte linjer, bruk følgende kode:

En løkke brukes til å iterere gjennom de valgte linjene. For hver:

SelectedRows = FormElements. Tabellfeltnavn. Selected Rows;

Løkke for hver rad fra utvalgte rader

//løkkeinnhold

EndCycle ;

Slik velger du rader i en tabelldel (tabellfelt) og fjerner markeringen av dem

Slik fjerner du markeringen av rader i et tabellfelt programmatisk:

Formelementer. Tabellfeltnavn. Utvalgte rader. Clear() ;

Slik velger du alle radene i et tabellfelt programmatisk:

For hver Current Row From Tabular Part Loop
Formelementer. Tabellfeltnavn. Utvalgte linjer. Add(Current Row) ;
EndCycle ;

Slik tømmer du borddelen

Tabelldel. Clear() ;

Hvordan få den gjeldende raden i en tabelldel

Den gjeldende linjen er tidslinjen der brukeren for øyeblikket har markøren. For å få det, må du få tilgang til kontrollelementet på skjemaet som er knyttet til tabelldelen.

For vanlige skjemaer vil koden se slik ut:

Formelementer. Tabellfeltnavn. CurrentData;

For administrerte skjemaer:

Elementer. Tabellfeltnavn. CurrentData;

Hvordan legge til en ny rad i en tabelldel

Legge til en ny linje på slutten av tabelldelen:

NewRow = TablePart. Legg til() ;

Legge til en ny linje hvor som helst i tabelldelen (påfølgende linjer vil bli forskjøvet):

NewRow = TablePart. Sett inn (indeks)
//Indeks - nummeret på den tilføyde linjen. Linjenummerering starter fra null.

Ny linje. Props1 = "Verdi" ;

Hvordan programmere fyller ut detaljene i en tabellrad

Hvis du må programmere fylle ut detaljene for en tabelldelrad som er lagt til av brukeren, må du bruke hendelsesbehandleren for tabellseksjonen Når du starter redigering.

Prosedyren opprettet av behandleren har tre parametere:

  • Element- inneholder et kontrollelement Tabellfelt.
  • Ny linje- boolsk. Inneholder verdi ekte, hvis en ny tabellrad legges til, og Å ligge, hvis brukeren begynte å redigere en allerede eksisterende linje.
  • Kopiere- boolsk. Inneholder verdi ekte, hvis brukeren kopierer linjen, og Å ligge i andre tilfeller.

La oss se på et eksempel. La oss si at vi må fylle ut detaljene i tabelldelen Kontokonto, i tilfelle en ny linje legges til. Når du redigerer en eksisterende linje, trenger du ikke endre regnskapskontoen.

Prosedyre TabularPartAtStartEditing(Element, NewRow, Copy)

//Hvis brukeren redigerer en eksisterende linje, gjør vi ingenting
Hvis IKKE NewRow Da
Komme tilbake;
Slutt om ;

//Hvis linjen er ny, sett regnskapskontoen
TechString = Vare. CurrentData; //Få den gjeldende raden i tabelldelen
TechString. Regnskap = Kontoplaner. Selvbærende. RequiredAccount;
Slutt på prosedyre