1c 8 низови функции. Нови низови функции

ДА СЕ основни възможностиезиците за програмиране обикновено включват работа с числа и низове. Обикновено тези функции са вградени в кода на компилатора (или са внедрени "базови" класове на езика за програмиране).

В 1C възможностите за работа с низове са програмирани в самата платформа. Днес ще разгледаме характеристиките на работата с 1C низове в програми на вградения 1C език.

Стойност на линията 1C

1. Да започнем с най-простото. Създаването на променлива и присвояването на стойност на низова константа изглежда така в 1C:

Променлива = "Здравей свят!";

Ако искате да посочите символ за кавички в константна низова стойност 1C, тогава трябва да го удвоите ""

Променлива = "Здравей, "свят""!";

2. Прекъсване на ред 1C може да се посочи по два начина наведнъж. Първият е използването на символа |

Променлива = "Здравейте,
| мир! ";

Вторият е използването на система Symbols enum. Позволява ви да добавяте както прекъсване на ред 1C, така и други непечатащи се знаци, като например TAB.

Променлива = "Здравей" + Symbols.ps + "мир!";

3. Конфигурациите в 1C могат да бъдат разработени не само за един език (руски, английски или друг) - но едновременно за няколко езика. В този случай използваният в момента език се избира в долната част на прозореца 1C.

Списъкът с езици се намира в прозореца за конфигурация в клона Общи/Езици. Всеки език има кратък идентификатор като enили инж.

Ясно е, че при програмирането на такава конфигурация 1С линиите могат да бъдат и многоезични. За да направите това, е възможно да създадете такава 1C линия, като посочите чрез; опции по идентификатор на езика:

Променлива = "ru=""Здравей, свят!""; en=""Здравей, свят! """;

Ако използвате линията 1C, образувана по този начин, както обикновено, тогава това ще бъде това, което е написано в него. За да може системата да го раздели на две опции и да използва желаната, трябва да използвате функцията NStr():

//правилно за двуезични конфигурации
Отчет(NStr(Променлива));

Подпори с линия тип 1С

Реквизитът е поле от указателя/документа 1C. Тя се различава от променлива в програма на езика 1C по това, че нейният тип е точно посочен за атрибута (число, низ 1C и т.н.). Ако трябва да освежите какви са реквизитите, вижте урока на .

Ако посочите типа на атрибута - ред 1C, тогава трябва допълнително да посочите параметрите.

1C низовете са с неограничена дължина (посочена като дължина = 0) и ограничена дължина, което показва точния брой знаци. 1C низове с неограничена дължина се съхраняват в отделно SQL таблица, така че използването им е по-малко продуктивно, отколкото ограничено.

Ето защо използването на 1C низове с неограничена дължина има своите ограничения - не е възможно да ги използвате навсякъде. Например, не е възможно като номер на документ, код на директория, измерване.

Работа с 1С линии

За работа с низове има няколко вградени функции на платформата 1C.

  • AbbrLP("Невероятно, но истина!")
    Премахва от ред 1C допълнителни пространства. Може да се използва и за преобразуване на произволен тип в 1C низ (например числа).
  • Променлива = "Вася" + Abbrl("плюс") + "Оля"; //ще бъде "Вася плюс Оля"
    Пример за сумиране на няколко стойности на низове 1C. Резултатът е един ред 1C.
  • Променлива = Лъв("Музика", 2); // ще бъде "Mu"
    Променлива = Ср.("Музика", 2, 2); // ще бъде "ps"
    Променлива = Права("Музика", 2); // ще бъде "ka"
    Различни опции за получаване на подниз от низ 1C.
  • Променлива = Find("Музика", "ps"); //ще бъде 3
    Потърсете подниз в низ 1C, започвайки със знак 1.
  • Променлива = StrLength("Музика"); //ще бъде 6
    Връща броя на знаците в низ 1C.
  • Notify("Здравей") //в полето за съобщения в долната част на прозореца 1C
    alert("здравей") //изскачащ диалогов прозорец
    Status("Hello") //в реда за показване на състоянието долу вляво
    .

Привеждане на обекти в линия 1C

Както знаете, най-популярният формат за обмен на структурирана информация в момента е XML. Дори последна версияГОСПОЖИЦА Office Wordи Excel запазват файлове в този формат (съответно docx и xlsx, променете разширението на zip, отворете в архиватор).

Платформата 1C за обмен на данни предоставя няколко опции, основната от които също е XML.

1. Най-простият метод е да използвате функцията ShortLP() или String(). Можете да използвате функцията REPRESENTATION() в текста на заявката. Резултатът от тяхното действие е същият - те генерират низово представяне на всеки 1C обект за потребителя.

За директорията по подразбиране това ще бъде нейното име. За документ името, номера и датата на документа.

2. Всеки 1C обект (с ограничения) може да бъде конвертиран в XML и обратно. Процесът на преобразуване се нарича сериализация.

ViewStringXml = XMLString(стойност); //получаване на XML от стойност 1C
Value1С = XMLValue(Type("CatalogReference.Nomenclature"),ViewStringXml); //получаваме стойността на 1C от XML низа, трябва да посочите типа 1C, който трябва да бъде получен

3. Има роден начин на платформата 1C да преобразува всеки 1C обект в низ. Мигрира от версия 1C 7.7. Този формат не се разбира от други програми, но разбира друг 1C, което го прави лесен за използване за обмен между 1C бази данни.

String = ValueInStringInt(Value1S); //получаване на низ 1C от стойност 1C
ValueToFile("C:\MyFile.txt", Value1C); //друга опция, получаваме файл със запазен низ от стойността 1C
Value1C = ValueFromStringInt(String); //назад от ред 1C
Value1C = ValueFromFile("C:\MyFile.txt"); // връщане от файла

Редактиране на редове 1C във формуляра

В допълнение към работата с 1C низове в 1C програма, разбира се, бих искал потребителят да може да ги редактира. Има няколко възможности за това:

1. Най-лесният начин е да поискате въвеждането на 1C линия при поискване. Този метод се използва при преподаване на 1C програмиране, в живота се използва много по-рядко (но се използва!).

Променлива = "";
String = EnterValue(Променлива, "Въведете пълно име");

2. За показване на детайлите на обекта 1C (директория/документ) или детайлите на формуляра (вижте), най-често се използва полето за въвеждане. Това е най-разпространеният инструмент в 1C за работа на потребителя с полета за редактиране.

3. Възможностите на полето за въвеждане могат да бъдат разширени (вижте свойствата на полето за въвеждане, Кликнете с десния бутонвърху него, за повече подробности):

  • Квадратче за отметка Режим на многоредово редактиране
  • Квадрат за отметка за разширено редактиране (достъпно, ако е отметнато предишното квадратче за отметка)
  • Поле за отметка Режим на парола (вижте ).

4. Ако всички възможности на полето за въвеждане не са ви достатъчни, има вграден редактор. За да го добавите към формуляра, трябва да добавите поле в менюто Формуляр / Контрола за вмъкване текстов документ. В неговите свойства можете да посочите режима на неговата работа - свойството Extension.

Полето на текстов документ не може да бъде свързано директно с данни. Необходимо е да напишете следната функция в манипулатора на събития на формата OnOpening() (вижте ):

FormElements.ElementNameTextDocumentField.SetText(StringValue); // тук ValueString е текстът, получен например от атрибута

И в манипулатора на записване - например в бутона Save - добавете запис:

ValueString = FormElements.ElementNameTextDocumentField.GetText(); //ValueString тук е реквизита, където запазваме стойността

5. Във версия 1C 8.2.11, в управлявани форми, се появи нова възможностлинейно представяне 1C - Форматирано поле на документ.


Подобно на полето на текстов документ, е необходимо да зададете при отваряне и да пишете, когато записвате текста сами с помощта на програмата.

  • В обекта 1C, чиято форма правим (справочник, документ, обработка и т.н.) - добавете атрибут с тип Съхранение на стойност
  • Във функцията OnReadOnServer() задайте текста от атрибута

    //тук Requisite е добавеният атрибут на обекта 1C
    //тук FormattedDocument е името на полето във формуляра за редактиране
    &На сървъра

    FormattedDocument = CurrentObject.Attributes.Get();
    EndProcedure

  • Във функцията BeforeWriteOnServer() или чрез натискане на бутона напишете текста от полето

    &На сървъра
    Процедура OnReadingOnServer(CurrentObject)
    CurrentObject.Attributes = NewValueStorage(FormattedDocument);
    EndProcedure

Има малко механизми за работа с низове в 1C заявки. Първо, могат да се добавят низове. Второ, подниз може да бъде взет от низ. На трето място, низовете могат да се сравняват, включително по модел. Това е всичко, което можете да правите с струните.

Добавяне на низ

Операторът "+" се използва за добавяне на низове в заявка. Можете да добавяте само низове с ограничена дължина.

ИЗБЕРЕТЕ "Име: " + Contractors.Name AS Column1 FROM Directory.Contractors AS Contractors WHERE Contractors.Reference = &Reference

Функция под низ

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

Аналог на функцията Environment() от обектния модел. Функцията Substring() може да се приложи към данни от типа низ и ви позволява да изберете фрагмент <Строки> , започвайки с цифра <НачальнаяПозиция> (символите в низ са номерирани от 1) и дължина <Длина> символи. Резултатът от оценката на функцията има тип низ с променлива дължина и дължината ще се счита за неограничена, ако <Строка> има неограничена дължина и параметър <Длина> не е константа или по-голяма от 1024.

Ако дължината на низа е по-малка от посочената във втория параметър, тогава функцията ще върне празен низ.

Внимание!Не се препоръчва използването на функцията SUBSTRING() за преобразуване на низове с неограничена дължина в низове с ограничена дължина. Вместо това е по-добре да използвате оператора EXPRESS().

Функция Подобна

Ако трябва да се уверим, че атрибутът низ отговаря на определени критерии, ние го сравняваме:

ИЗБЕРЕТЕ Counterparties.Name AS Column1 FROM Directory.Counterparties AS Counterparties WHERE Counterparties.Name = "Газпром"

Но какво ще стане, ако е необходимо по-фино сравнение? Не само за равенство или неравенство, а за сходство с определен модел? Точно за това е създадена функцията LIKE.

LIKE - Оператор за проверка дали низ е подобен на шаблон. Аналог на LIKE в SQL.

Операторът LIKE ви позволява да сравните стойността на израза, посочен вляво от него, с низа на шаблона, посочен отдясно. Стойността на израза трябва да е от тип низ. Ако стойността на израза съвпада с шаблона, резултатът от оператора ще бъде TRUE, в противен случай ще бъде FALSE.

Следните знаци в низа на шаблона са служебни знаци и имат различно значение от символа на низа:

  • % (процент): последователност, съдържаща произволен брой произволни знаци;
  • _ (долно черта): един произволен знак;
  • […] (един или повече знака в квадратни скоби): всеки единичен знак, посочен в квадратни скоби. Изброяването може да съдържа диапазони, като a-z, което означава всеки знак в диапазона, включително краищата на диапазона;
  • [^…] (в квадратни скоби знак за отрицание, последван от един или повече знака): Всеки единичен знак, различен от изброените след знака за отрицание.

Всеки друг символ означава себе си и не носи допълнителен товар. Ако е необходимо да напишете един от изброените знаци като себе си, тогава той трябва да бъде предшестван от<Спецсимвол>. себе си<Спецсимвол>(всеки подходящ знак) се дефинира в същия оператор след ключова думаСПЕЦИАЛЕН СИМВОЛ.

Бележки от Looking Glass

18.08.2014 Нови функции за работа с низове

Реализиран във версия 8.3.6.1977.

Разширихме набора от функции за работа с низове. Направихме това, за да ви дадем по-усъвършенствани инструменти за анализиране на низови данни. Новите функции ще бъдат удобни и полезни в технологичните задачи за анализ на текст. В задачи, свързани с анализа на текст, който съдържа данни във форматиран вид. Това може да бъде анализ на някои файлове, получени от оборудването, или, например, анализ на технологичен дневник.

Всички действия, които новите функции изпълняват, бихте могли да извършите преди. С помощта на повече или по-малко сложни алгоритми, написани на вграден език. Следователно новите функции не ви дават никакви принципно нови възможности. Те обаче ви позволяват да намалите количеството код, да направите кода по-опростен и по-разбираем. Освен това те ви позволяват да ускорите изпълнението на действията. Тъй като функциите, внедрени в платформата, работят, разбира се, по-бързо от подобен алгоритъм, написан на вградения език.

Функция за форматиране StrTemplate()

Тази функция замества параметрите в низ. Необходимостта от такова преобразуване често възниква, например, при показване на предупредителни съобщения. Синтаксисът на тази функция е както следва:

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

<Шаблон>е низът, в който да се заменят представянията на параметрите.

<Значение1> , ... <Значение10>- това са параметрите (максимум - десет), чиито представяния трябва да бъдат заместени в низа.

За да посочите конкретно място в шаблона, към което искате да извършите заместването, трябва да използвате маркери от формата %1, ... %10. Броят на маркерите, включени в шаблона, и броят на параметрите, съдържащи стойности, трябва да съвпадат.

Например, резултатът от изпълнението на такъв оператор:

ще има ред:

Грешка в данните на ред 2 (изисква тип дата)

Функция низ StrCompare()

Тази функция сравнява два низа без значение за малки и малки букви. Например, като това:

Можете да извършите същото действие, преди да използвате обекта Сравняване на стойности:

Използването на новата функция обаче изглежда по-лесно. И освен това, функция, за разлика от обект Сравняване на стойности, работи в тънък клиент, и в уеб клиента.

Низови функции StrBeginsC(), StrEndsTo()

Тези функции определят дали низ започва с определен подниз или дали низ завършва с определен подниз. Алгоритъмът на тези функции не е труден за изпълнение на вграден език, но тяхното присъствие ви позволява да пишете по-чист и по-разбираем код. И работят по-бързо.

Например, удобно е да ги използвате в оператора Ако:

Функции за работа с низове StrSplit(), StrJoin()

Тези функции разделят низа на части според посочения разделител. Или обратното, те комбинират няколко реда в един, като вмъкват избрания разделител между тях. Те са удобни за създаване или анализиране на логове, технологичен дневник. Например, можете лесно да разглобите запис от технологичен дневник на части, подходящи за по-нататъшен анализ:

Функция за работа с низове StrFind()

Вместо старата функция Намирам()ние сме приложили нова функция, който има допълнителни функции:

  • Търсене в различни посоки (от началото, от края);
  • Търсене от посочената позиция;
  • Търсене на събитие с посочения номер (второ, трето и т.н.).

Всъщност дублира възможностите на старата функция. Това се прави с цел поддържане на съвместимост с модули, компилирани в по-стари версии. стара функция Намирам()препоръчва се да не се използва отново.

По-долу е даден пример за използване на новите възможности за търсене. Търсенето назад е полезно, когато имате нужда от последния фрагмент от формализиран низ, например пълно имефайл в URL. А търсенето от определена позиция помага в случаите, когато трябва да търсите в известен фрагмент, а не в целия низ.

Дял