1s 8.2 numer seryjny znaku w linii. Nowe funkcje do pracy z ciągami znaków. Funkcja formatująca StrTemplate()

CZĘŚĆ 1. METODY (26).

1.1. Metody podstawowe (10). Niezależny, zbudowany w oparciu o własne proste algorytmy.

Page_Add() (dodawanie od prawej do lewej z określonymi znakami).

Page_Inverse () (inwersja - znaki od prawej do lewej).

Page_Codes() (kody znaków do „”,” i tablica z kodami)

Page_Characters() (ciąg kodów oddzielonych znakiem „”,” lub z tablicy z kodami)

Page_ReplaceSymbols() (zastępowanie niektórych znaków innymi).

String_FromArray() (ciąg z tablicy fragmentów oddzielonych separatorem)

Page_FindIn() (szukaj podciągu (w tym po prawej stronie) o podanym numerze wystąpienia).

Page_FindGr() (Wyszukaj grupę znaków zawartych w określonym zestawie znaków)

Page_FindNumber() (Wyszukaj liczbę, w tym po prawej stronie za pomocą określony numer zdarzenia)

Page_Interpret() (do tablicy, zgodnie z ustaloną składnią)

1.2. Metody pochodne (12). W rzeczywistości jest to zastosowanie czterech uogólnionych metod algorytmicznych (patrz część 2)

Page_Number() (od początku i od końca linii, nie „bój się” znaków nienumerycznych.

Page_Find() (szuka podciągu (w tym bez uwzględniania wielkości liter i po prawej stronie) z określonym numerem wystąpienia).

Page_Replace() (wyszukiwanie (w tym bez uwzględniania wielkości liter i dla osób praworęcznych) i zastępowanie podciągów ograniczników).

String_Piece() (fragment ciągu pomiędzy określonymi wystąpieniami ogranicznika (lewego lub prawego)).

Page_ReplacePiece() (zastępuje „fragment” w ciągu źródłowym określonym ciągiem).

Page_ÂArray() (pomiędzy określonymi wystąpieniami separatora (włączając te po prawej stronie i bez wielkości liter).

Page_TransferBySyllables() (podzielone na podciągi „Prawie” z łącznikiem).

Page_MoveByWords() (podzielone na podciągi „Miękko”)

Page_Cut() („Wytnij” na podciągi o określonej długości)

Str_Shorten() (zamień lewą grupę „skróconych” znaków na „ciąg zastępczy”

Page_Abbreviation() (zamień prawą grupę „zredukowanych” znaków na „ciąg zastępczy”

Str_ShortenS() (zastąp środek grupy „skróconych” znaków „łańcuchem zastępczym”

Page_Extend (rozszerzenie do określonej długości poprzez zwiększenie liczby określonych znaków)

1.3. Metody szczegółowe (3). „Rozcięcie” linii z przeniesieniem do tabeli ze szczegółowymi informacjami.

Page_vTableIn() (do tabeli zgodnie z systemem zagnieżdżonych ograniczników).

Page_vTableGr (do tabeli według filtra wielopoziomowego).

Page_inTableNumbers (w tabeli z liczbami i fragmentami pomiędzy nimi).

CZĘŚĆ 2. METODY OGÓLNE - ALGORYMY (3).

Page_Occurrence() (metody „Znajdź” i „Zamień”).

Page_Fragments() (metody „Piece”, „ReplacePiece”, „InArray”, „inTableIn”).

Page_Abcr() (metody „AbcrL”, „AbcrP”, „AbcrS”, „Rozwiń”.

Page_Split() (metody „Przesuń po sylabach”, „Przesuń po słowach”, „Wytnij”).

CZĘŚĆ 3. FUNKCJA UNIWERSALNA.

Jest to rodzaj interfejsu programowania warunkowego, który umożliwia

zastosować kilka metod do ciągu jednocześnie. Wdrożony jako

funkcje z siedmioma parametrami („Demo” jest zbudowane na tej funkcji):

Strona_(metody, podmetody, dane wejściowe, parametr1, parametr2, długość_liczby_pozycji, dodatkowe wyjście)

Opcje:

- „Metody” - kilka metod „połączonych” i (lub) jedna „wyłączna”.

(jednoznakowe kody lub nazwy, możliwe za pomocą „,”)

- „Podmetody” - kilka opcji „połączonych” i (lub) „wyłącznych”.

metoda „wyłączna” (jednoznakowe kody lub nazwy);

- „Wejście” - Ciąg znaków, tablica lub tabela wartości;

- „Param1” - ciąg wyszukiwania, podstawienia, separatory, filtry;

- „Param2” – ciąg lub znaki zastępcze;

- „Length_Number_Position” -Number, Liczby poprzez separator lub tablicę z Liczbami;

- „Dodatkowe dane wyjściowe” – liczba, ciąg znaków, tablica lub tabela wartości;

Nazwy i/lub jednoznakowe kody podmetod oraz numery w

(Długość_Number_Pozycja) może być w każdym przypadku oddzielona

dowolny z następujących ograniczników: ”, :;”.

CZĘŚĆ 4. KILKA PRZYKŁADÓW.

IstniejąNumbersInLine=(Str_FindNumber(InLine)<>Nieokreślony);

W wierszu znajdują się liczby = (String_FindGr(Inline,”+0123456789”)>0);

Istnieje łacina = (Str_FindGr(InStr, Str_Interpret("lL"))>0);

Istnieją określone znaki = (Str_NfindGr(VxStr, "+to rogYu.0p9")>0);

IsNotPrinted=(Str_FindGr(InxStr, Line_Interpret("-l-L-r-R-P-Z-C"))>0);

CZĘŚĆ 5. WNIOSKI.

Tam, gdzie było to możliwe, zadowalałem się jednym przejściem wzdłuż linii. Drugie przejście jest zwykle we fragmentach. Nie korzystałem z wbudowanej funkcji StrNumberOccurrences().

Wykorzystywane są funkcje wbudowane: Left(), Right(), Middle(), StrLength()

- (pozycjonowanie i zdobycie części linii musi być „szybkie”).

Istnieje kilka mechanizmów pracy z ciągami w zapytaniach 1C. Po pierwsze, można dodać linie. Po drugie, możesz pobrać podciąg z ciągu. Po trzecie, ciągi znaków można porównywać, także według wzorca. To chyba wszystko, co można zrobić za pomocą sznurków.

Dodanie ciągu

Aby dodać wiersze w zapytaniu, stosuje się operację „+”. Można dodawać tylko ciągi o ograniczonej długości.

WYBIERZ "Nazwa: " + Kontrahenci. Nazwa AS Kolumna 1 Z katalogu. Kontrahenci JAKO Kontrahenci GDZIE Kontrahenci. Link = &Link

Funkcja podciągu

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

Analog funkcji Environment() z modelu obiektowego. Funkcję Substring() można zastosować do danych łańcuchowych i umożliwia wybranie fragmentu <Строки> , zaczynając od numeru znaku <НачальнаяПозиция> (znaki w linii numerowane są od 1) i długość <Длина> postacie. Wynik obliczenia funkcji ma typ ciągu o zmiennej długości, a długość zostanie uznana za nieograniczoną, jeśli <Строка> ma nieograniczoną długość i parametry <Длина> nie jest stałą ani większą niż 1024.

Jeśli długość ciągu jest mniejsza niż podana w drugim parametrze, funkcja zwróci pusty ciąg.

Uwaga! Nie zaleca się używania funkcji SUBSTRING() do konwersji ciągów o nieograniczonej długości na ciągi o ograniczonej długości. Zamiast tego lepiej jest użyć operatora rzutowania EXPRESS().

Funkcja podobna

Jeśli chcemy się upewnić, że atrybut string spełnia określone kryteria, porównujemy go:

WYBIERZ Kontrahenci Nazwa AS Kolumna 1 Z Katalogu Kontrahenci JAKO Kontrahenci GDZIE Kontrahenci Nazwa = "Gazprom"

Ale co, jeśli potrzebujesz bardziej subtelnego porównania? Nie tylko równość czy nierówność, ale podobieństwo do pewnego wzorca? Właśnie po to stworzono funkcję PODOBNY.

LIKE — Operator sprawdzający podobieństwo łańcucha do wzorca. Analog LIKE w SQL.

Operator SIMILAR umożliwia porównanie wartości wyrażenia określonego po jego lewej stronie z ciągiem wzorca określonym po prawej stronie. Wartość wyrażenia musi być typu string. Jeśli wartość wyrażenia pasuje do wzorca, wynikiem operatora będzie PRAWDA, w przeciwnym razie będzie to FAŁSZ.

Następujące znaki w ciągu szablonu są znakami usługowymi i mają inne znaczenie niż znak ciągu:

  • % (procent): ciąg zawierający dowolną liczbę dowolnych znaków;
  • _ (podkreślenie): jeden dowolny znak;
  • […] (w nawiasy kwadratowe jeden lub więcej znaków): dowolny pojedynczy znak umieszczony w nawiasach kwadratowych. Wyliczenie może zawierać zakresy, np. a-z oznaczające dowolny znak zawarty w zakresie, łącznie z końcami zakresu;
  • [^...] (w nawiasach kwadratowych znak negacji, po którym następuje jeden lub więcej znaków): dowolny pojedynczy znak inny niż te wymienione po znaku negacji.

Każdy inny symbol oznacza sam siebie i nie niesie ze sobą żadnego dodatkowego obciążenia. Jeśli jeden z wymienionych znaków ma być zapisany jako sam, należy go poprzedzić<Спецсимвол>. Ja<Спецсимвол>(dowolny odpowiedni symbol) jest zdefiniowany w tym samym stwierdzeniu po słowo kluczowe SYMBOL SPECJALNY.

Typ String występuje we wszystkich językach programowania. Jest prymitywny, aw 1C istnieje wiele funkcji do pracy z nim. W tym artykule przyjrzymy się bliżej różne drogi praca z typami ciągów w 1C 8.3 i 8.2 na przykładach.

Linia

Aby zamienić zmienną dowolnego typu na ciąg znaków, dostępna jest funkcja o tej samej nazwie „String()”. Parametrem wejściowym będzie sama zmienna, której reprezentację w postaci ciągu należy uzyskać.

String(False) // zwraca „Nie”
String(12345) // zwraca „12,345”
String(bieżąca data()) //"21.07.2017 11:55:36″

Na string można konwertować nie tylko typy pierwotne, ale także inne, na przykład elementy katalogów i dokumentów.

SokrLP, SokrL, SokrP

Parametry wejściowe tych funkcji są zmienną typu string. Funkcje usuwają znaki nieistotne (spacje, znaki powrotu karetki itp.): odpowiednio z lewej i prawej strony, tylko z lewej i tylko z prawej strony.

Skrót(" Spacje zostaną usunięte po obu stronach ") // "Spacje zostaną usunięte po obu stronach"
Skrót(" Spacje po obu stronach zostaną usunięte ") // " Spacje po lewej stronie zostaną usunięte "
Skrót(" Spacje po obu stronach zostaną usunięte ") // " Spacje po prawej stronie zostaną usunięte"

Leo, prawda, średni

Funkcje te umożliwiają przycięcie części ciągu. Funkcja „Left()” zwróci część ciągu znaków z jego lewej strony o określonej długości. Funkcja „Right()” jest podobna, ale przycina obraz od prawej strony. Funkcja „Średnia()” pozwala określić liczbę znaków, z których zostanie wybrana linia oraz jej długość.

Lev("Zmienna łańcuchowa", 4) // zwraca "Str"
Right("Zmienna string", 7) // zwraca "zmienną"
Medium("Zmienna string", 2, 5) // zwraca "troco"

Długość str

Funkcja określa liczbę znaków zawartych w zmiennej łańcuchowej.

StrLength("Word") // wynikiem wykonania będzie liczba 5

Znajdować

Funkcja umożliwia wyszukiwanie części ciągu znaków w zmiennej łańcuchowej. Wartością zwracaną będzie liczba pokazująca położenie początku znalezionego ciągu. Jeśli nie zostanie znalezione żadne dopasowanie, zwracane jest zero.

Należy pamiętać, że w wyszukiwaniu uwzględniana jest wielkość liter. Jeśli w oryginalnym ciągu występuje więcej niż jedno wystąpienie szukanego podciągu, funkcja zwróci początek pierwszego wystąpienia.

Find("jeden, dwa, jeden, dwa, trzy", "dwa") // funkcja zwróci liczbę 6

Pusta linia

Użycie tej funkcji pozwala określić, czy ciąg znaków jest pusty. Drobne znaki, takie jak spacja, powrót karetki i inne, nie są brane pod uwagę.

PustyString("Pupkin Wasilij Iwanowicz") // funkcja zwróci wartość False
Funkcja PustyString(" ") // zwróci wartość True

VReg, NReg, TReg

Funkcje te są bardzo przydatne przy porównywaniu i konwertowaniu zmiennych łańcuchowych. „Vreg()” zwróci oryginalny ciąg znaków wielkimi literami, „HPreg()” małymi literami, a „TReg()” sformatuje go w taki sposób, że pierwszy znak każdego pojedynczego słowa będzie pisany wielką literą, a wszystkie kolejne znaki będą pisane wielką literą.

VReg("DYREKTOR GENERALNY") // zwracana wartość - "DYREKTOR GENERALNY"
NReg(“CEO DIRECTOR”) // zwracana wartość – “CEO”
TREG(„CEO DIRECTOR”) // zwracana wartość – „Dyrektor Generalny”

StronaZastąp

Funkcja ta jest analogiczna do zamiany w redaktorzy tekstu. Umożliwia zamianę jednego znaku lub zestawu znaków na inny w zmiennych łańcuchowych.

StrReplace("czerwony, biały, żółty", ","", ";") // zwraca "czerwony; biały; żółty"

Linie StrNumber

Funkcja pozwala określić liczbę wierszy oddzielonych znakami powrotu karetki w zmiennej tekstowej.

Pętla w poniższym przykładzie wykona trzy rundy, ponieważ funkcja LineNumberRow zwróci wartość 3:

Dla ind = 1 przez StrNumber of Strings („Linia1” + Symbole.PS + „Linia2” + Symbole.PS + „Linia3”) Cykl
<тело цикла>
Koniec cyklu;

StrGetString

Funkcja ta działa z tekstem wielowierszowym w taki sam sposób jak poprzednia. Pozwala uzyskać określony ciąg znaków ze zmiennej tekstowej.

StrGetString("String1" + Znaki.PS + "String2" + Znaki.PS + "String3", 2) // zwróć „Ciąg2”

Numer stronyWystąpienia

Funkcja zlicza liczbę wystąpień znaku lub podciągu w wyszukiwanym ciągu.

StrNumberAttachments("a;b;c;d; ", ";") // funkcja zwróci liczbę 4

Symbol i kod symbolu

Funkcje te pozwalają uzyskać znak na podstawie jego kodu w kodowaniu Unicode, a także określić ten kod na podstawie samego znaku.

SymbolCode("A") // funkcja zwróci liczbę 1040
CharacterCode(1040) // funkcja zwróci „A”

Typowe zadania podczas pracy z ciągami znaków

Łączenie ciągów

Aby połączyć kilka ciągów (aby wykonać konkatenację), wystarczy skorzystać z operatora dodawania.

„Linia 1” + „Linia 2” //wynikiem dodania dwóch linii będzie „Linia 1 Linia 2”

Konwersja typu

Aby zamienić typ na ciąg znaków, np. odnośnik do elementu katalogu, liczbę itp., wystarczy skorzystać z funkcji „String()”. Funkcje takie jak „ScrLP()” również konwertują zmienne na ciąg znaków, ale natychmiast z obcięciem nieistotnych znaków.

String(1000) // zwraca „1000”

Należy pamiętać, że podczas konwersji liczby na ciąg program automatycznie dodał spację oddzielającą tysiąc. Aby tego uniknąć, możesz zastosować następujące konstrukcje:

StrReplace(String(1000),Characters.NPP,””) // zwraca „1000”

String(Format(1000,"HG=")) // zwraca "1000"

Cytaty w ciągu

Dość często będziesz miał do czynienia z koniecznością określenia cudzysłowów w zmiennej łańcuchowej. Może to być albo tekst żądania zapisany w konfiguratorze, albo po prostu zmienna. Aby rozwiązać ten problem, wystarczy ustawić dwa cudzysłowy.

Header = String("Horns and Hooves LLC - to my!") // zwróci "Horns and Hooves LLC - to my!"

Wiele linii, podział linii

W celu utworzenia tekst wielowierszowy Wystarczy dodać do niego podziały linii (Symbole.PS).

MultilineText = „Pierwsza linia” + Symbole.PS + „Druga linia”

Jak usunąć spacje

Aby usunąć spacje po prawej lub lewej stronie, możesz użyć funkcji „ScrAP()” (oraz „ScrL()” i „ScrP()”):

StringNoSpaces = Abbreviation("Wiele liter") // funkcja zwróci wartość "Wiele liter"

Jeśli po konwersji liczby na ciąg znaków konieczne będzie usunięcie spacji nierozdzielających, należy zastosować następującą konstrukcję:

StringNoSpaces = StrReplace(String(99999),Characters.NPP,””) // zwraca „99999”

Programiści często stosują także następującą konstrukcję, która pozwala usunąć lub zastąpić innym znakiem wszystkie spacje w zmiennej tekstowej:

StringNoSpaces = StrReplace("cześć","") // zwraca "witaj"

Porównywanie ciągów między sobą

Możesz porównywać terminy ze zwykłym znakiem równości. W porównaniu rozróżniana jest wielkość liter.

„Witam” = „witam” // zwraca wartość Fałsz
„Hello” = „Hello” // zwraca wartość True
„Hello” = „Do widzenia” // zwróci wartość False

Zaimplementowano w wersji 8.3.6.1977.

Rozszerzyliśmy zestaw funkcji przeznaczonych do pracy z ciągami znaków. Zrobiliśmy to, aby zapewnić bardziej zaawansowane narzędzia do analizowania danych łańcuchowych. Nowe funkcje będą wygodne i przydatne w technologicznych zadaniach analizy tekstu. W zadaniach związanych z analizowaniem tekstu zawierającego dane w sformatowanej formie. Może to być analiza niektórych plików otrzymanych ze sprzętu lub np. analiza dziennika technologicznego.

Można było wykonać wszystkie wcześniejsze akcje, które wykonywały nowe funkcje. Korzystanie z mniej lub bardziej skomplikowanych algorytmów napisanych w wbudowanym języku. Dlatego nowe funkcje nie dają żadnych zasadniczo nowych możliwości. Pozwalają jednak zmniejszyć ilość kodu i sprawić, że kod będzie prostszy i bardziej zrozumiały. Dodatkowo pozwalają przyspieszyć realizację działań. Ponieważ funkcje zaimplementowane w platformie działają oczywiście szybciej niż podobny algorytm napisany w wbudowanym języku.

Funkcja formatująca StrTemplate()

Ta funkcja zamienia parametry na ciąg znaków. Konieczność takiej konwersji często pojawia się np. przy wyświetlaniu komunikatów ostrzegawczych. Składnia tej funkcji jest następująca:

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

<Шаблон>- jest to ciąg znaków, w który należy podstawić reprezentacje parametrów.

<Значение1> , ... <Значение10>- są to parametry (maksymalnie dziesięć), których reprezentacje należy podstawić do ciągu znaków.

Aby wskazać konkretne miejsce w szablonie, w którym chcesz dokonać podstawienia, musisz użyć znaczników takich jak %1, ...%10. Liczba znaczników biorących udział w szablonie i liczba parametrów zawierających wartości muszą się zgadzać.

Przykładowo wynik wykonania takiego operatora:

będzie linijka:

Błąd danych w linii 2 (wymagany typ daty)

Funkcja do pracy z ciągami znaków StrCompare()

Ta funkcja porównuje dwa ciągi znaków bez uwzględniania wielkości liter. Na przykład tak:

Możesz wykonać tę samą akcję wcześniej, używając obiektu Porównanie wartości:

Jednak korzystanie z nowej funkcji wygląda na łatwiejsze. Poza tym funkcja, w przeciwieństwie do obiektu Porównanie wartości, działa zarówno w kliencie cienkim, jak i kliencie internetowym.

Funkcje do pracy z ciągami znaków StrStartsWith(), StrEndsAt()

Funkcje te określają, czy ciąg znaków zaczyna się od określonego podciągu, czy też kończy się na określonym podciągu. Algorytm dla tych funkcji nie jest trudny do zaimplementowania w języku osadzonym, ale ich obecność pozwala na pisanie czystszego i bardziej zrozumiałego kodu. I działają szybciej.

Na przykład wygodnie jest ich używać w instrukcji If:

Funkcje do pracy z ciągami znaków StrDivide(), StrConnect()

Funkcje te dzielą ciąg znaków na części przy użyciu określonego ogranicznika. Lub odwrotnie, łączą kilka linii w jedną, wstawiając między nie wybrany separator. Są wygodne do tworzenia lub analizowania logów i dzienników technologicznych. Można na przykład łatwo rozbić wpis dziennika technologicznego na części nadające się do dalszej analizy:

Funkcja do pracy z ciągami znaków StrFind()

Zamiast starej funkcji Find() zaimplementowaliśmy Nowa cecha, który posiada dodatkowe funkcje:

  • Szukaj w różnych kierunkach (od początku, od końca);
  • Szukaj z określonej pozycji;
  • Wyszukaj wystąpienie o podanym numerze (drugi, trzeci itd.).

W rzeczywistości powiela możliwości starej funkcji. Odbywa się to w celu zachowania kompatybilności z modułami skompilowanymi w starszych wersjach. Zaleca się, aby nie używać już starej funkcji Find().

Poniżej znajduje się przykład wykorzystania nowych możliwości wyszukiwania. Wyszukiwanie odwrotne jest przydatne, gdy potrzebny jest na przykład ostatni fragment sformalizowanego ciągu znaków pełne imię i nazwisko plik w adresie URL. A wyszukiwanie od określonej pozycji pomaga w przypadkach, gdy trzeba szukać w znanym fragmencie, a nie w całej linii.

DO podstawowe możliwości Języki programowania zwykle obejmują pracę z liczbami i ciągami znaków. Zwykle te funkcje są zakodowane na stałe w kodzie kompilatora (lub implementowane są „podstawowe” klasy języka programowania).

W 1C możliwość pracy z ciągami jest programowana w samej platformie. Dzisiaj przyjrzymy się funkcjom pracy z ciągami 1C w programach we wbudowanym języku 1C.

Wartość linii 1C

1. Zacznijmy od najprostszego. Utworzenie zmiennej i przypisanie jej stałej wartości ciągu wygląda tak w 1C:

Variable = "Witaj, świecie!";

Jeśli chcesz określić cudzysłów w stałej wartości ciągu 1C, musisz go podwoić „”

Zmienna = "Witaj, świecie"!;

2. Podział linii 1C można określić na dwa sposoby jednocześnie. Pierwszym z nich jest użycie symbolu |

Zmienna = „Witam,
| świat! ";

Drugi polega na użyciu wyliczenia systemowego Symbols. Umożliwia dodawanie zarówno znaków podziału linii 1C, jak i innych znaków niedrukowalnych, takich jak TAB.

Zmienna = „Witam” + Symbole.PS + „pokój!”;

3. Konfiguracje w 1C można opracowywać nie tylko dla jednego języka (rosyjski, angielski lub inny) - ale jednocześnie dla kilku języków. W takim przypadku aktualnie używany język wybiera się na dole okna 1C.

Lista języków znajduje się w oknie konfiguracyjnym w gałęzi Ogólne/Języki. Każdy język ma krótki identyfikator, np ru Lub inż.

Oczywiste jest, że podczas programowania takiej konfiguracji linie 1C mogą być również wielojęzyczne. Aby to zrobić, można utworzyć taką linię 1C, określając przez; opcje według identyfikatora języka:

Variable = "ru=""Witaj, świecie! ""; en=""Witaj, świecie! """;

Jeśli użyjesz linii 1C utworzonej w ten sposób jak zwykle, będzie to to, co jest w niej napisane. Aby system podzielił to na dwie opcje i użył tej żądanej, należy skorzystać z funkcji НStr():

//poprawne dla konfiguracji dwujęzycznych
Raport(NStr(zmienna));

Rekwizyty z linią typu 1C

Atrybut jest polem w katalogu/dokumencie 1C. Różni się od zmiennej w programie w języku 1C tym, że dla atrybutu jest dokładnie wskazany jej typ (liczba, ciąg 1C itp.). Jeśli chcesz odświeżyć sobie pamięć o tym, czym jest rekwizyt, obejrzyj lekcję dalej.

Jeśli określisz typ atrybutu - linia 1C, musisz dodatkowo określić parametry.

Linie 1C mają nieograniczoną długość (oznaczoną jako długość = 0) i ograniczoną długość, wskazującą dokładną liczbę znaków. Linie 1C o nieograniczonej długości są przechowywane w osobnym miejscu Tabela SQL, więc ich użycie jest mniej produktywne niż ograniczone.

Dlatego użycie strun 1C o nieograniczonej długości ma swoje ograniczenia - nie da się ich zastosować wszędzie. Na przykład nie jest dozwolony jako numer dokumentu, kod referencyjny lub pomiar.

Praca ze strunami 1C

Istnieje kilka wbudowanych funkcji platformy 1C do pracy z ciągami znaków.

  • AbbrLP („Niesamowite, ale prawdziwe!”)
    Usuwa dodatkowe spacje z linii 1C. Można go również użyć do konwersji dowolnych typów na ciąg 1C (na przykład liczby).
  • Zmienna = „Wasja” + AbbrLP(” plus”) + „Ola”; //będzie „Wasja i Ola”
    Przykład sumowania kilku wartości ciągu 1C. Rezultatem będzie jedna linia 1C.
  • Zmienna = Lev("Muzyka", 2); //będzie "Mu"
    Zmienna = Średnia("Muzyka", 2, 2); //będzie „zagrożenie”
    Zmienna = Prawa("Muzyka", 2); //będzie „ka”
    Różne opcje uzyskania podciągu z ciągu 1C.
  • Zmienna = Find("Muzyka", "zy"); //będzie 3
    Wyszukaj podciąg w ciągu 1C, zaczynając od znaku 1.
  • Zmienna = StrLength("Muzyka"); //będzie 6
    Zwraca liczbę znaków w wierszu 1C.
  • Report("Hello") //w oknie wiadomości na dole okna 1C
    Alert("Witam") //wyskakujące okno dialogowe
    Status("Hello") //w linii wyświetlania statusu w lewym dolnym rogu
    .

Doprowadzenie obiektów do linii 1C

Jak wiadomo, obecnie najpopularniejszym formatem wymiany ustrukturyzowanych informacji jest XML. Nawet Ostatnia wersja SM Słowo biurowe i Excel zapisują pliki w tym formacie (odpowiednio docx i xlsx zmieniają rozszerzenie na zip, otwierają w archiwizatorze).

Platforma 1C do wymiany danych zapewnia kilka opcji, z których główną jest także XML.

1. Najprostszą metodą jest użycie funkcji Abbreviation() lub String(). W treści żądania można użyć funkcji REPRESENTACJA(). Wynik ich działania jest taki sam - generują dla użytkownika ciąg znaków reprezentujący dowolny obiekt 1C.

W przypadku katalogu domyślnie będzie to jego nazwa. Dla dokumentu – nazwa dokumentu, numer i data.

2. Dowolny obiekt 1C (z ograniczeniami) można przekonwertować na XML i odwrotnie. Proces konwersji nazywa się serializacją.

StringViewXml = XMLString(Wartość); //pobierz XML z wartości 1C
Wartość1C = XMLValue(Typ("DirectoryLink.Nomenklatura"),TypeStringXml); //pobierz wartość 1C z ciągu XML, musisz określić typ 1C, który powinien zostać odebrany

3. Istnieje własny sposób platformy 1C na konwersję dowolnego obiektu 1C na ciąg znaków. Migrowano z wersji 1C 7.7. Ten format nie jest rozumiany przez inne programy, ale inny 1C go rozumie, co ułatwia używanie go do wymiany między bazami danych 1C.

Wiersz = ValueInRowInt(Wartość1C); //pobierz ciąg 1C z wartości 1C
ValueVFile("C:\MójPlik.txt", Wartość1C); //inna opcja, otrzymamy plik z zapisanym ciągiem znaków z wartości 1C
Wartość1C = WartośćOdStringInt(Ciąg); //powrót z linii 1C
Wartość1C = PlikWartości("C:\MójPlik.txt"); //powrót z pliku

Edycja linii 1C w formularzu

Oprócz pracy z ciągami 1C w programie w języku 1C, oczywiście chciałbym, aby użytkownik mógł je edytować. Istnieje kilka możliwości:

1. Najłatwiej jest poprosić o wprowadzenie linii 1C na żądanie. Tę metodę stosuje się podczas nauczania programowania 1C, w życiu jest ona używana znacznie rzadziej (ale jest używana!).

Zmienna = „”;
Row = EnterValue(Zmienna, „Wprowadź pełne imię i nazwisko”);

2. Aby wyświetlić szczegóły obiektu 1C (katalog/dokument) lub szczegóły formularza (patrz), najczęściej używane jest pole wejściowe. Jest to najpopularniejsze narzędzie w 1C, umożliwiające użytkownikowi pracę z polami edycyjnymi.

3. Możliwości pola wejściowego można rozszerzyć (patrz właściwości pola wejściowego, kliknij prawym przyciskiem myszy na nim więcej szczegółów):

  • Pole wyboru Tryb edycji wielowierszowej
  • Pole wyboru Zaawansowana edycja (dostępne, jeśli zaznaczono poprzednie pole wyboru)
  • Pole wyboru Tryb hasła (patrz).

4. Jeśli wszystkie możliwości pola wejściowego nie są dla Ciebie wystarczające, istnieje wbudowany edytor. Aby dodać je do formularza należy dodać Pole do menu kontrolnego Formularz/Wstaw dokument tekstowy. We właściwościach możesz określić jego tryb działania – właściwość Rozszerzenie.

Pole dokumentu tekstowego nie może być bezpośrednio powiązane z danymi. Konieczne jest napisanie funkcji w obsłudze zdarzenia OnOpen() formularza (patrz):

Elementy formularza.ElementNameTextDocumentField.SetText(StringValue); //tutaj ValueString to tekst otrzymany na przykład z atrybutu

A w module obsługi zapisu - na przykład w przycisku Zapisz - dodaj zapis:

ValueString = FormElements.ElementNameTextDocumentField.GetText(); //WartośćLinia tutaj jest atrybutem, w którym zapisujemy wartość

5. W wersji 1C 8.2.11 w kontrolowane formy, pojawił się Nowa okazja Reprezentacja linii 1C – sformatowane pole dokumentu.


Podobnie jak w przypadku dokumentu tekstowego, należy je ustawić podczas jego otwierania i zapisać podczas samodzielnego zapisywania za pomocą programu.

  • W obiekcie 1C, którego formę tworzymy (katalog, dokument, przetwarzanie itp.) - dodaj atrybut o typie Value Storage
  • W funkcji OnReadOnServer() ustawiamy tekst z atrybutu

    //tutaj atrybut jest dodanym atrybutem obiektu 1C
    //tutaj FormattedDocument to nazwa pola w formularzu do edycji
    &Na serwerze

    FormattedDocument = CurrentObject.Attributes.Get();
    Koniec procedury

  • W funkcji BeforeWritingOnServer() lub za pomocą przycisku napiszemy tekst z pola

    &Na serwerze
    Procedura podczas odczytu na serwerze (CurrentObject)
    CurrentObject.Props = NewValueStorage(FormattedDocument);
    Koniec procedury