1s 8 als bewerkingen met een string. Nieuwe functies voor het werken met strings. Formaatfunctie StrTemplate()

Het type String is te vinden in alle programmeertalen. Het is primitief en in 1C zijn er veel functies om ermee te werken. In dit artikel zullen we de verschillende manieren om met stringtypes in 1C 8.3 en 8.2 te werken in detail bekijken aan de hand van voorbeelden.

Lijn

Om een ​​variabele van elk type naar een string te converteren, is er de functie "String ()" met dezelfde naam. De invoerparameter zal de variabele zelf zijn, waarvan de stringvoorstelling moet worden verkregen.

String(Fals) // geeft "Nee" terug
String (12345) // geeft als resultaat "12 345"
String (huidige datum ()) //"21.07.2017 11:55:36"

Het is mogelijk om niet alleen primitieve typen naar een string te converteren, maar ook andere, bijvoorbeeld elementen van mappen en documenten.

Afgekorte LP, Afgekorte L, Afgekorte P

De invoerparameters van deze functies zijn een stringtype variabele. De functies verwijderen onbeduidende tekens (spaties, regelterugloop, enz.): respectievelijk van de linker- en rechterkant, alleen van de linkerkant en alleen van rechts.

abbrl ("Spaties aan beide zijden worden verwijderd") // "Spaties aan beide zijden worden verwijderd"
abbr ("Spaties aan beide zijden worden verwijderd") // "Spaties aan de linkerkant worden verwijderd"
abbr(" Spaties aan beide zijden worden verwijderd ") // "Spaties aan de rechterkant worden verwijderd"

Leeuw, Rechts, Midden

Met deze functies kunt u een deel van een string afsnijden. De functie Lion() retourneert het deel van de tekenreeks aan de linkerkant van de opgegeven lengte. De functie "Right()" is vergelijkbaar, maar het bijsnijden gebeurt aan de rechterkant. Met de functie "Wed()" kunt u het tekennummer opgeven waaruit de tekenreeks wordt geselecteerd en de lengte ervan.

Lion ("String-variabele", 4) // geeft "Stro" terug
Right("Tekenreeksvariabele", 7) // geeft "variabele" terug
avg("Tekenreeksvariabele", 2, 5)// geeft "troco" terug

SterkLengte

De functie bepaalt het aantal tekens dat een stringvariabele bevat.

StrLength("Woord") // het resultaat van de uitvoering is het getal 5

Vinden

De functie maakt het mogelijk om te zoeken naar een deel van een string in een stringvariabele. De geretourneerde waarde is een getal dat de positie van het begin van de gevonden string aangeeft. Als er geen overeenkomsten worden gevonden, wordt nul geretourneerd.

Houd er rekening mee dat de zoekopdracht hoofdlettergevoelig is. Als de zoeksubtekenreeks meer dan één keer voorkomt in de oorspronkelijke tekenreeks, retourneert de functie het begin van de eerste instantie.

Find("een, twee, een, twee, drie", "twee") // de functie retourneert het getal 6

Lege regel

Met deze functie kunt u bepalen of een string leeg is. Onbeduidende tekens, zoals spatie, regelterugloop en andere worden niet in aanmerking genomen.

EmptyString ("Vasily Ivanovich Pupkin") // de functie retourneert False
EmptyString(" ") // de functie retourneert True

VReg, NReg, TReg

Deze functies zijn erg handig bij het vergelijken en converteren van stringvariabelen. "Vreg()" retourneert de oorspronkelijke tekenreeks in hoofdletters, "HReg()" in kleine letters, en "TReg()" formatteert deze zodat het eerste teken van elk afzonderlijk woord een hoofdletter is en alle volgende tekens kleine letters.

VReg ("GENERAL DIRECTOR") // retourwaarde - "GENERAL DIRECTOR"
HReg ("ALGEMENE DIRECTEUR") // retourwaarde - "CEO"
TReg ("ALGEMEEN DIRECTEUR") // retourwaarde - "Algemeen directeur"

StrVervangen

Deze functie is vergelijkbaar met vervanging in teksteditors. Hiermee kunt u een teken of een reeks tekens vervangen door een ander in tekenreeksvariabelen.

StrReplace("rood, wit, geel", ",", ";") // geeft als resultaat "rood; Wit; geel"

StrAantalRijen

Met deze functie kunt u het aantal regels bepalen, gescheiden door een regelterugloop in een tekstvariabele.

De lus in het onderstaande voorbeeld gaat door drie cirkels omdat de functie StrNumberRows de waarde 3 retourneert:

Voor ind \u003d 1 door StrAantal regels ("Line1" + Symbols.PS + "String2" + Symbols.PS + "Line3") Loop
<тело цикла>
Eindcyclus;

StrGetString

Deze functie werkt met tekst met meerdere regels op dezelfde manier als de vorige. Hiermee kunt u een specifieke tekenreeks uit een tekstvariabele halen.

StrGetString("String1" + Symbolen.PS + "String2" + Symbolen.PS + "String3", 2) // retourneert "Lijn2"

StrAantalVoorvallen

De functie telt het aantal keren dat een teken of subtekenreeks voorkomt in de gezochte tekenreeks.

StrNumberInstallations("a;b;c;d;", ";") // de functie retourneert het getal 4

Symbool en SymboolCode

Met deze functies kunt u een teken krijgen aan de hand van de Unicode-code en deze code bepalen aan de hand van het teken zelf.

SymbolCode ("A") // de functie retourneert het getal 1 040
SymbolCode (1040) // de functie retourneert "A"

Veel voorkomende taken bij het werken met strings

String aaneenschakeling

Om meerdere strings samen te voegen (samenvoegen) gebruik je gewoon de add-operator.

"Lijn 1" + "Lijn 2" // het resultaat van het toevoegen van twee regels is "Lijn 1 Lijn 2"

Type conversie

Om een ​​type om te zetten in een tekenreeks, bijvoorbeeld een verwijzing naar een woordenboekelement, een getal, enzovoort, volstaat het om de functie "String ()" te gebruiken. Functies zoals "ShortLP()" zullen variabelen ook converteren naar een string, maar dan onmiddellijk met het afsnijden van onbelangrijke karakters.

String (1000) // retourneert "1000"

Houd er rekening mee dat bij het converteren van een getal naar een tekenreeks, het programma automatisch een spatie heeft toegevoegd die de duizend scheidt. Om dit te voorkomen, kunt u de volgende structuren gebruiken:

StrReplace(String(1000),Tekens.NPP,"") // geeft als resultaat "1000"

String(Format(1000,"CH=")) // retourneert "1000"

Aanhalingstekens in een string

Heel vaak zult u te maken krijgen met de noodzaak om aanhalingstekens in een stringvariabele te plaatsen. Het kan een verzoektekst zijn die in de configurator is geschreven, of gewoon een variabele. Om dit probleem op te lossen, hoeft u alleen maar twee aanhalingstekens in te stellen.

Header = String ("Horns and Hooves LLC is ons!") // geeft als resultaat "Roga and Hooves LLC is ons!"

Meerdere regels, regeleinde

Om een ​​tekst met meerdere regels te maken, volstaat het om er regeleindetekens (Symbols.PS) aan toe te voegen.

MultilineText = "Eerste regel" + Characters.PS + "Tweede regel"

Spaties verwijderen

Om spaties aan de rechter- of linkerkant te verwijderen, kunt u de functie "Stretch()" gebruiken (evenals "Scrpt()" en "ScreenP()"):

StringWithoutSpaces = ShortLP("Veel letters") // de functie retourneert de waarde "Veel letters"

Als u na het converteren van een getal naar een tekenreeks niet-afbrekende spaties moet verwijderen, gebruik dan de volgende constructie:

StringWithoutSpaces = StrReplace(String(99999),Characters.NPP,"") // geeft als resultaat "99999"

Ook gebruiken programmeurs vaak de volgende constructie, waarmee je alle spaties van een tekstvariabele kunt verwijderen of vervangen door een ander teken:

StringWithoutSpaces = StrReplace(" hallo", " " ,"") // geeft "hallo" terug

Strings met elkaar vergelijken

U kunt termen vergelijken met het gebruikelijke gelijkteken. De vergelijking is hoofdlettergevoelig.

"hallo" = "hallo" // zal false retourneren
"Hallo" = "Hallo" // zal True retourneren
"Hallo" = "Tot ziens" // zal False retourneren

Geïmplementeerd in versie 8.3.6.1977.

We hebben de set functies voor het werken met strings uitgebreid. We hebben dit gedaan om u geavanceerdere tools te bieden voor het ontleden van stringgegevens. Nieuwe functies zullen handig en nuttig zijn bij technologische taken van tekstanalyse. Bij taken die verband houden met het ontleden van tekst die gegevens in opgemaakte vorm bevat. Dit kan de analyse zijn van enkele bestanden die van de apparatuur zijn ontvangen, of bijvoorbeeld de analyse van een technologisch logboek.

Alle acties die de nieuwe functies uitvoeren, kon u eerder uitvoeren. Met behulp van min of meer complexe algoritmen geschreven in een embedded taal. Nieuwe functies geven je dus geen fundamenteel nieuwe kansen. Ze stellen u echter in staat om de hoeveelheid code te verminderen, de code eenvoudiger en begrijpelijker te maken. Bovendien kunt u hiermee de uitvoering van acties versnellen. Omdat de functies die in het platform zijn geïmplementeerd, natuurlijk sneller werken dan een vergelijkbaar algoritme dat in de ingebouwde taal is geschreven.

Formaatfunctie StrTemplate()

Deze functie vervangt parameters in een string. De behoefte aan een dergelijke conversie ontstaat bijvoorbeeld vaak bij het weergeven van waarschuwingsberichten. De syntaxis voor deze functie is als volgt:

StrTemplate(<Шаблон>, <Значение1-Значение10>)

<Шаблон>is de string waarin de parameterrepresentaties moeten worden vervangen.

<Значение1> , ... <Значение10>- dit zijn de parameters (maximaal - tien), waarvan de representaties in de string moeten worden vervangen.

Om een ​​specifieke plaats in de sjabloon op te geven waarnaar u de vervanging wilt uitvoeren, moet u markeringen van de vorm %1, ... %10 gebruiken. Het aantal markeringen dat betrokken is bij de sjabloon en het aantal parameters dat waarden bevat, moet overeenkomen.

Het resultaat van het uitvoeren van een dergelijke operator is bijvoorbeeld:

er zal een regel zijn:

Gegevensfout op regel 2 (datumtype vereist)

Tekenreeks Functie StrCompare()

Deze functie vergelijkt twee strings hoofdletterongevoelig. Bijvoorbeeld als volgt:

U kunt dezelfde actie uitvoeren voordat u het ValueComparison-object gebruikt:

Het gebruik van de nieuwe functie ziet er echter eenvoudiger uit. En bovendien werkt de functie, in tegenstelling tot het Value Compare-object, zowel in de thin client als in de webclient.

Tekenreeksfuncties StrBeginsC(), StrEndsTo()

Deze functies bepalen of een string begint met een gespecificeerde substring, of dat een string eindigt met een gespecificeerde substring. Het algoritme van deze functies is niet moeilijk te implementeren in een ingebouwde taal, maar door hun aanwezigheid kunt u schonere en begrijpelijkere code schrijven. En ze werken sneller.

Ze zijn bijvoorbeeld handig om te gebruiken in het If-statement:

Functies voor het werken met strings StrSplit(), StrJoin()

Deze functies splitsen de tekenreeks in delen volgens het opgegeven scheidingsteken. Of omgekeerd, ze combineren meerdere regels in één, waarbij het geselecteerde scheidingsteken ertussen wordt ingevoegd. Ze zijn handig voor het maken of analyseren van logs, een technologisch logboek. U kunt bijvoorbeeld een technologische logboekinvoer eenvoudig uit elkaar halen in onderdelen die geschikt zijn voor verdere analyse:

Functie van het werken met strings StrFind()

In plaats van de oude functie Find() hebben we een nieuwe functie geïmplementeerd met extra functies:

  • Zoek in verschillende richtingen (vanaf het begin, vanaf het einde);
  • Zoek vanaf de opgegeven positie;
  • Zoek naar een voorkomen met het opgegeven nummer (tweede, derde, etc.).

In feite dupliceert het de mogelijkheden van de oude functie. Dit wordt gedaan om de compatibiliteit te behouden met modules die in oudere versies zijn gecompileerd. Het wordt aanbevolen om de oude Find()-functie niet meer te gebruiken.

Hieronder ziet u een voorbeeld waarin de nieuwe zoekmogelijkheden worden gebruikt. Achterwaarts zoeken is handig wanneer u het laatste stukje van een geformaliseerde tekenreeks nodig hebt, zoals de volledige naam van een bestand in een URL. En zoeken vanaf een bepaalde positie helpt in gevallen waarin u in een bekend fragment moet zoeken en niet in de hele string.

DEEL 1. METHODEN (26).

1.1. Basismethoden (10). Onafhankelijk, gebouwd op hun eenvoudige algoritmen.

Str_Complete() (rechts-links opvulling met gespecificeerde symbolen).

Str_Inverse () (inversie - tekens van rechts naar links).

Str_Codes() (tekencodes tot en met "," en een array met codes)

Str_Symbols() (string van codes gescheiden door ”,” of uit een array met codes)

Str_ReplaceCharacters() (een teken vervangen door een ander).

Str_FromArray() (tekenreeks uit de reeks fragmenten gescheiden door een scheidingsteken)

Str_FindIn() (zoek naar een subtekenreeks (ook aan de rechterkant) met het opgegeven invoernummer).

Str_FindGr() (Zoeken naar een groep tekens in de opgegeven tekenset)

Str_FindNumber() (Zoek naar een nummer, ook aan de rechterkant met het opgegeven nummer van de vermelding)

Str_Interpret() (naar een array, volgens de vastgestelde syntaxis)

1.2. Afgeleide methoden (12). Eigenlijk is dit het gebruik van vier gegeneraliseerde methoden-algoritmen (zie deel 2)

Str_Number() (vanaf het begin en vanaf het einde van de tekenreeks, wees niet "bang" voor niet-cijferige tekens.

Str_Find() (zoek naar een subtekenreeks (inclusief hoofdletterongevoelig en aan de rechterkant) met het opgegeven invoernummer).

Str_Replace() (zoek (inclusief niet-hoofdlettergevoelig en aan de rechterkant), en vervang substrings van scheidingstekens).

Str_Piece() (een stuk string tussen de gespecificeerde voorkomens van het scheidingsteken (links of rechts)).

Str_ReplacePiece() (vervanging in de bronstring "piece" door de gespecificeerde string).

Str_VArray() (tussen de gespecificeerde voorkomens van het scheidingsteken (inclusief aan de rechterkant en zonder hoofdletters).

Str_MoveBySyllables() (opgesplitst in substrings "Hard", met een koppelteken).

Str_MoveWords() (opgesplitst in substrings "Softly")

Str_Cut() (“Knippen” in substrings van gespecificeerde lengtes)

Str_Short() (vervang de linkergroep van "gereduceerde" tekens door een "vervangende tekenreeks"

Str_Short() (vervang de juiste groep "gereduceerde" tekens door een "vervangende tekenreeks"

Str_Short() (vervang in het midden van een groep "gereduceerde" tekens door een "vervangende tekenreeks"

Str_Expand (uitbreiding tot gespecificeerde lengte door het aantal gespecificeerde tekens te verhogen)

1.3. Gedetailleerde methoden (3). "Voorbereiding" van een regel met overdracht naar een tabel met gedetailleerde informatie.

Str_inTableIn() (naar de tabel volgens het systeem van geneste scheidingstekens).

Str_inTableGroup (naar de tabel volgens het multilevel filter).

Str_inTableNumbers (in een tabel met getallen en fragmenten ertussen).

DEEL 2. ALGEMENE METHODEN-ALGORIMS (3).

Str_Entry() (methoden "Zoeken" en "Vervangen").

Str_Fragments() (methoden "Piece", "ReplacePiece", "ToArray", "ToTableIn").

Str_Short() (methoden "Short", "ShortP", "Short", "Expand".

Str_Split() (methoden "Verplaats op lettergrepen", "Verplaats op woorden", "Knippen").

DEEL 3. UNIVERSELE FUNCTIE.

Het is een soort voorwaardelijke programmeerinterface die het mogelijk maakt:

pas meerdere methoden tegelijk toe op een string. Geïmplementeerd als

functies met zeven parameters ("Demo" is gebouwd op deze functie):

Str_(Methoden, Submethoden, Input, Param1, Param2, Length_Position_Number, AdditionalOutput)

Parameters:

- "Methoden" - verschillende "gecombineerde" en (of) één "exclusieve" methode

(eencijferige codes of namen, mogelijk via ",")

- ”Submethoden” - verschillende ”combineerbare” en (of) “exclusieve” opties

"exclusieve" methode (codes of namen van één teken);

- "Invoer" - String, of Array of Tabel met waarden;

- "Param1" - zoekreeks, vervangingen, scheidingstekens, filters;

- "Param2" - vervangende tekenreeks of symbolen;

- "Length_Number_Position" -Nummer, getallen door een scheidingsteken of een array met getallen;

- "Exit" - Nummer of tekenreeks of matrix of tabel met waarden;

Namen en (of) codes van één teken van methoden-submethoden, evenals nummers in

(Length_Position_Number) kan in ieder geval en gescheiden zijn

een van de volgende scheidingstekens: ”, :;”.

DEEL 4. ENKELE VOORBEELDEN.

HaveNumbersINString=(Str_FindNumbers(InString)<>niet gedefinieerd);

HaveDigitsINString=(Str_FindGr(InString,"+0123456789")>0);

ThereLatin=(Str_FindGr(VxStr, Str_Interpret("lL"))>0);

HaveSpecifiedSigns=(Str_NfindGr(VxStr, "+ naar hornYu.0p9")>0);

IsUnprintable=(Str_FindGr(VxStr, Str_Interpret("-l-L-r-R-P-Z-C"))>0);

DEEL 5. CONCLUSIE.

Waar mogelijk beheerd met één pas langs de lijn. De tweede pas - meestal al in fragmenten. De ingebouwde functie StrNumberOccurrences() is niet gebruikt.

Gebruikte ingebouwde functies: Left(),Right()Mid(),StrLength()

- (het plaatsen en ophalen van een deel van een string -moet "snel" zijn).

Er zijn weinig mechanismen om met strings in 1C-query's te werken. Ten eerste kunnen strings worden toegevoegd. Ten tweede kan een substring uit een string worden gehaald. Ten derde kunnen strings worden vergeleken, ook op patroon. Dat is ongeveer alles wat je met snaren kunt doen.

String toevoeging

De operator "+" wordt gebruikt om tekenreeksen in een query toe te voegen. U kunt alleen strings van beperkte lengte toevoegen.

SELECTEER "Naam: " + Aannemers.Naam AS Kolom1 UIT Directory.Aannemers AS Aannemers WHERE Aannemers.Referentie = &Referentie

Substring functie

SUBSTRING(<Строка>, <НачальнаяПозиция>, <Длина>)

Een analoog van de Environment()-functie uit het objectmodel. De functie Substring() kan worden toegepast op gegevens van het stringtype en stelt u in staat een fragment te selecteren <Строки> , beginnend met een cijfer <НачальнаяПозиция> (tekens in een string zijn genummerd vanaf 1) en lengte <Длина> karakters. Het resultaat van de functie-evaluatie heeft een stringtype van variabele lengte, en de lengte wordt als onbeperkt beschouwd als <Строка> heeft onbeperkte lengte en parameter <Длина> is geen constante of groter dan 1024.

Als de tekenreekslengte kleiner is dan gespecificeerd in de tweede parameter, retourneert de functie een lege tekenreeks.

Aandacht! Het wordt niet aanbevolen om de functie SUBSTRING() te gebruiken om strings van onbeperkte lengte om te zetten in strings van beperkte lengte. In plaats daarvan is het beter om de cast-operator EXPRESS() te gebruiken.

Functie Vergelijkbaar

Als we ervoor moeten zorgen dat het tekenreekskenmerk aan bepaalde criteria voldoet, vergelijken we het:

SELECT Counterparties.Name AS Column1 FROM Directory.Counterparties AS Counterparties WHERE Counterparties.Name = "Gazprom"

Maar wat als een meer subtiele vergelijking nodig is? Niet alleen voor gelijkheid of ongelijkheid, maar voor gelijkenis met een bepaald patroon? Dat is precies waar de LIKE-functie voor is gemaakt.

LIKE - Een operator om te controleren of een tekenreeks lijkt op een patroon. Analoog van LIKE in SQL.

Met de LIKE-operator kunt u de waarde van de expressie die links ervan is opgegeven, vergelijken met de sjabloontekenreeks die rechts is opgegeven. De expressiewaarde moet van het type string zijn. Als de waarde van de uitdrukking overeenkomt met de sjabloon, is het resultaat van de operator WAAR, anders is het ONWAAR.

De volgende tekens in de sjabloontekenreeks zijn servicetekens en hebben een andere betekenis dan het tekenreeksteken:

  • % (percentage): een reeks die een willekeurig aantal willekeurige tekens bevat;
  • _ (underscore): één willekeurig teken;
  • […] (een of meer tekens tussen vierkante haken): elk afzonderlijk teken tussen vierkante haken. Een opsomming kan bereiken bevatten, zoals a-z, dat wil zeggen elk teken binnen het bereik, inclusief de uiteinden van het bereik;
  • [^…] (tussen vierkante haken een ontkenningsteken gevolgd door een of meer tekens): Elk afzonderlijk teken anders dan de tekens die na het ontkenningsteken worden vermeld.

Elk ander symbool betekent zichzelf en draagt ​​geen extra lading. Als het nodig is om een ​​van de vermelde tekens als zichzelf te schrijven, moet dit worden voorafgegaan door<Спецсимвол>. Mezelf<Спецсимвол>(elk geschikt teken) wordt gedefinieerd in dezelfde instructie na het sleutelwoord SPECIAL CHARACTER.

De basiskenmerken van een programmeertaal omvatten meestal het werken met cijfers en tekenreeksen. Gewoonlijk zijn deze functies ingebed in de compilercode (of worden "basis"-klassen van de programmeertaal geïmplementeerd).

In 1C zijn de mogelijkheden van het werken met strings in het platform zelf geprogrammeerd. Vandaag zullen we de kenmerken van het werken met 1C-strings in programma's in de ingebouwde 1C-taal beschouwen.

Lijnwaarde 1C

1. Laten we beginnen met de eenvoudigste. Het maken van een variabele en het toewijzen van een stringconstante waarde ziet er als volgt uit in 1C:

Variabele = "Hallo wereld!";

Als u een aanhalingsteken wilt opgeven in een constante tekenreekswaarde 1C, moet u deze verdubbelen ""

Variabele = "Hallo, "wereld""!";

2. Regeleinde 1C kan op twee manieren tegelijk worden opgegeven. De eerste gebruikt het symbool |

Variabele = "Hallo,
| vrede! ";

De tweede is het gebruik van de symbolensysteem enum. Hiermee kunt u zowel een regeleinde 1C als andere niet-afdrukbare tekens, zoals TAB, toevoegen.

Variabele = "Hallo" + Symbols.ps + "vrede!";

3. Configuraties in 1C kunnen niet alleen voor één taal (Russisch, Engels of andere) worden ontwikkeld, maar tegelijkertijd voor meerdere talen. In dit geval wordt de momenteel gebruikte taal geselecteerd onderaan het 1C-venster.

De lijst met talen bevindt zich in het configuratievenster in de sectie Algemeen/Talen. Elke taal heeft een korte identifier zoals: en of eng.

Het is duidelijk dat bij het programmeren van een dergelijke configuratie 1C-lijnen ook meertalig kunnen zijn. Om dit te doen, is het mogelijk om zo'n 1C-lijn te maken door door op te geven; opties op taal-ID:

Variabele = "ru=""Hallo, wereld!""; en=""Hallo, wereld! """;

Als u de op deze manier gevormde 1C-lijn zoals gewoonlijk gebruikt, dan is dit wat erin staat. Om het systeem het in twee opties te laten splitsen en de gewenste te gebruiken, moet u de NStr()-functie gebruiken:

//corrigeer voor tweetalige configuraties
Rapport (NStr(variabele));

Props met lijntype 1C

Het vereiste is een veld van de directory / document 1C. Het verschilt van een variabele in een programma in de 1C-taal doordat het type precies wordt aangegeven voor het attribuut (getal, string 1C, enz.). Als je wilt weten wat rekwisieten zijn, bekijk dan de tutorial op .

Als u het attribuuttype - regel 1C opgeeft, moet u bovendien de parameters specificeren.

1C-strings hebben een onbeperkte lengte (aangegeven als lengte = 0) en een beperkte lengte, wat het exacte aantal tekens aangeeft. 1C-strings van onbeperkte lengte worden opgeslagen in een aparte SQL-tabel, dus het gebruik ervan is minder productief dan beperkte strings.

Daarom heeft het gebruik van 1K-snaren van onbeperkte lengte zijn beperkingen - het is niet mogelijk om ze overal te gebruiken. Het is bijvoorbeeld niet mogelijk als documentnummer, adresboekcode, meting.

Werken met 1C-lijnen

Om met strings te werken zijn er verschillende ingebouwde functies van het 1C platform.

  • AbbrLP("Ongelooflijk, maar waar!")
    Verwijdert extra spaties uit tekenreeks 1C. Het kan ook worden gebruikt om elk type naar een 1C-reeks te converteren (bijvoorbeeld cijfers).
  • Variabele = "Vasya" + Abbrl("plus") + "Olya"; // zal "Vasya plus Olya" zijn
    Een voorbeeld van het optellen van meerdere stringwaarden 1C. Het resultaat is één regel 1C.
  • Variabele = Leeuw("Muziek", 2); // zal "Mu" zijn
    Variabele = Avg("Muziek", 2, 2); // zal "ps" zijn
    Variabele = Rechten ("Muziek", 2); // zal "ka" zijn
    Verschillende opties om een ​​substring uit een string 1C te halen.
  • Variabele = Find("Muziek", "ps"); // wordt 3
    Zoek naar een subtekenreeks in tekenreeks 1C, beginnend met teken 1.
  • Variabele = StrLength("Muziek"); // wordt 6
    Retourneert het aantal tekens in een tekenreeks 1C.
  • Notify ("Hi") // in het berichtvenster onder aan het 1C-venster
    alert ("hallo") // pop-upvenster
    Status ("Hallo") // in de statusweergaveregel linksonder
    .

Objecten naar lijn 1C . brengen

Zoals u weet, is XML het meest populaire formaat voor de uitwisseling van gestructureerde informatie op dit moment. Zelfs de nieuwste versie van MS Office Word en Excel slaat bestanden op in dit formaat (respectievelijk docx en xlsx, verander de extensie in zip, open het in een archiver).

Het 1C-platform voor gegevensuitwisseling biedt verschillende mogelijkheden, waarvan ook XML de belangrijkste is.

1. De eenvoudigste methode is om de functie ShortLP() of String() te gebruiken. U kunt de functie REPRESENTATION() gebruiken in de querytekst. Het resultaat van hun actie is hetzelfde: ze genereren een tekenreeksrepresentatie van elk 1C-object voor de gebruiker.

Voor de standaardmap is dit de naam. Voor een document: de documentnaam, het nummer en de datum.

2. Elk 1C-object (met beperkingen) kan worden geconverteerd naar XML en vice versa. Het conversieproces wordt serialisatie genoemd.

ViewStringXml = XMLString(Waarde); // haal XML uit waarde 1C
Value1С = XMLValue(Type("CatalogReference.Nomenclature"),ViewStringXml); // haal de 1C-waarde uit de XML-tekenreeks, u moet het type 1C opgeven dat moet worden ontvangen

3. Er is een native manier van het 1C-platform om elk 1C-object in een string te converteren. Het is gemigreerd van versie 1C 7.7. Dit formaat wordt niet begrepen door andere programma's, maar begrijpt een ander 1C, waardoor het gemakkelijk is om het te gebruiken om tussen 1C-databases uit te wisselen.

String = WaardeInStringInt(Waarde1S); // haal string 1C op van waarde 1C
ValueToFile("C:\MijnBestand.txt", Waarde1C); // een andere optie, we krijgen een bestand met een opgeslagen string van de waarde 1C
Waarde1C = WaardeVanStringInt(String); // terug van regel 1C
Value1C = ValueFromFile("C:\MijnBestand.txt"); //terug uit bestand

Regels 1C op het formulier bewerken

Naast het werken met 1C-strings in een 1C-programma, wil ik natuurlijk dat de gebruiker ze kan bewerken. Hiervoor zijn verschillende mogelijkheden:

1. De eenvoudigste manier is om de invoer van de 1C-lijn op aanvraag op te vragen. Deze methode wordt gebruikt bij het aanleren van 1C programmeren, in het leven wordt het veel minder vaak gebruikt (maar het wordt gebruikt!).

Variabele = "";
String = EnterValue(Variabele, "Voer volledige naam in");

2. Om de details van het 1C-object (directory / document) of de details van het formulier (zie) weer te geven, wordt meestal het invoerveld gebruikt. Dit is de meest gebruikte tool in 1C voor de gebruiker om met bewerkingsvelden te werken.

3. De mogelijkheden van het invoerveld kunnen worden uitgebreid (zie de eigenschappen van het invoerveld, klik er met de rechtermuisknop op, voor meer details):

  • Selectievakje Bewerkingsmodus voor meerdere regels
  • Selectievakje Geavanceerd bewerken (beschikbaar als het vorige selectievakje is aangevinkt)
  • Selectievakje Wachtwoordmodus (zie ).

4. Mochten alle mogelijkheden van het invoerveld je niet genoeg zijn, dan is er een ingebouwde editor. Om het aan het formulier toe te voegen, moet u het veld van het tekstdocument toevoegen in het menu Formulier / besturingselement invoegen. In de eigenschappen kunt u de werkingsmodus specificeren - de eigenschap Extension.

Een tekstdocumentveld kan niet direct aan gegevens worden gekoppeld. Het is noodzakelijk om de volgende functie te schrijven in de gebeurtenishandler van het formulier OnOpening() (zie ):

FormElements.ElementNameTextDocumentField.SetText(StringValue); // hier is ValueString de tekst die bijvoorbeeld wordt ontvangen van het attribuut

En voeg in de save-handler - bijvoorbeeld in de Save-knop - een save toe:

ValueString = FormElements.ElementNameTextDocumentField.GetText(); //ValueString hier zijn de rekwisieten waar we de waarde opslaan

5. In 1C versie 8.2.11 is er in beheerde formulieren een nieuwe mogelijkheid om de 1C-regel weer te geven - het veld Opgemaakt document.


Net als bij het veld van een tekstdocument, is het noodzakelijk om in te stellen bij het openen en te schrijven wanneer u de tekst zelf opslaat met behulp van het programma.

  • In het 1C-object, waarvan we de vorm maken (referentieboek, document, verwerking, enz.) - voeg een attribuut toe met het type Value Storage
  • Stel in de functie OnReadOnServer() de tekst van het attribuut in

    // hier Vereiste is het toegevoegde attribuut van het 1C-object
    // hier is FormattedDocument de naam van het veld op het bewerkingsformulier
    &Op server

    FormattedDocument = CurrentObject.Attributes.Get();
    EindeProcedure

  • In de BeforeWriteOnServer()-functie of door op de knop te drukken, schrijft u de tekst uit het veld

    &Op server
    Procedure OnReadingOnServer(CurrentObject)
    CurrentObject.Attributes = NewValueStorage(FormattedDocument);
    EindeProcedure