1c намира второто срещане в низа. Нови функции за работа с низове

💖 Харесва ли ви?Споделете връзката с приятелите си

Внедрено във версия 8.3.6.1977.

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

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

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

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

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

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

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

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

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

ще има ред:

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

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

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

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

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

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

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

Например, те са удобни за използване в оператора If:

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

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

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

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

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

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

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

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

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

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

ИЗБЕРЕТЕ "Име: " + Име на контрагенти 1 от директория КАТО контрагенти WHERE Връзка

Поднизова функция

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

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

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

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

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

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

ИЗБЕРЕТЕ Контрагенти КАТО Колона 1 ОТ Указател КАТО Контрагенти WHERE Име = "Газпром".

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

LIKE — Оператор за проверка на низ за сходство с модел. Аналог на LIKE в SQL.

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

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

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

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

здравейте всички
Днес ме помолиха да не показвам префикса на документа при отпечатване на документ за внедряване, реших проблема по следния начин.

StrReplace(Number, Lev(Number, 3), "" );

Когато погледнах асистента за синтаксис, ми хареса толкова много, че исках да пиша за него работа с низове в 1C:Enterprise.

Низът в 1C се отнася до примитивен тип данни.

Ако погледнете помощта на 1C, ще видим следното описание на типа String:
Ценности от този типсъдържа Unicode низ с произволна дължина.
Ако използвате собствените си думи за низовете, ще работи. Низът е константа, състояща се от различни знаци, винаги оградени с кавички.

Задаване на линия
Поздрав = „Здравей, пътнико“;

Многоредовите линии в типичните конфигурации най-често се създават с помощта на вертикалния разделител „|“:
Низ = "Многоредов
|низ
|пишете
|текст";

Кавичките в рамките на низ се определят от двойни кавички.
String = ""Текст в кавички"";

Има много операции върху низове (търсене вътре в низа, определяне на първите и т.н.), по-добре е да погледнете Syntax Assistant.
Syntax Helper - Общо описание на вградения език -> вградени функции -> функции за работа с низове.

Функции за работа с низове

Тук ще дам кратко резюме на функциите за работа с низове:

VReg(<Строка>) — Функцията преобразува всички знаци в низа в главни букви.

Символен код(<Строка>, <НомерСимвола>) – Функцията получава кода на символа, намиращ се в предавания низ на позиция с зададения номер.

лъв (<Строка>, <ЧислоСимволов>) – Функцията избира първите леви символи на низа.

намери(<Строка>, <ПодстрокаПоиска>) — Функцията намира срещане на търсения низ като подниз в изходния низ.

NReg(<Строка>) — Функцията преобразува всички знаци в низа в малки букви.

точно(<Строка>, <ЧислоСимволов>) Тази функциясе различава от функциите Left по това, че избира последните символи отдясно на низа.

EmptyString(<Строка>) — Функцията проверява низа за наличие на значими знаци.

символ (<КодСимвола>) — Функцията преобразува кода на знака в низ, съдържащ знака.

AbbrL(<Строка>) — Функцията отрязва незначещите знаци вляво от първия значим знак в низа.

AbbrLP(<Строка>) — Функцията изрязва незначещи знаци отляво на първия значим знак в реда и интервали отдясно на последния значим знак в реда.

съкращение (<Строка>) — Функцията отрязва незначещите знаци вдясно от последния значим знак в низа.

сряда(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) — Функцията избира низ от знаци, започвайки със знака<НачальныйНомер>, общ брой<ЧислоСимволов>.

StrLength(<Строка>) — Функцията получава броя знаци в реда.

StrReplace(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) — Функцията намира всички срещания на търсения подниз в изходния низ и го замества с заместващия подниз.

StrGetString(<Строка>, <НомерСтроки>) - Функцията получава многоредов низ по номер.

StrNumberOccurrences(<Строка>, <ПодстрокаПоиска>) — Функцията изчислява броя на срещанията на търсения подниз в изходния низ.

StrNumberRow(<Строка>) — Функцията отчита броя на редовете в многоредов низ. В многоредов низ редовете са разделени с нови редове.

TReg(<Строка>) — Функцията преобразува низа в главни букви на заглавието. Това означава, че първият знак на всяка дума се преобразува в главни букви или в главни букви, ако главните букви не са посочени за знака. Останалите знаци се преобразуват в малки букви.

Типови преобразувания
За явно преобразуване на типове данни има функции със същото име с типа данни, към който се извършва преобразуването: String(<Значение>)

StringFromNumbers = Низ(Число);

Всички тези функции са описани подробно в асистента за синтаксис; в статията описах как асистентът за синтаксис може да помогне на начинаещ програмист.

Примери за работа с низове

Преобразуване на число в низ и обратно.

За да получите низово представяне на годината, използвайте функцията Format.

Година = Format(CurrentDate(), "DF=yyyy") // Година = "2012"

За да преобразувате число в низ, без да вмъквате знак за разделител на групи ( непрекъсваемо пространство), трябва да приложите функцията Format с параметър BH=0:

Число = 2012 Ред = Формат (Число, "NH=0");

// Низ = "2012"

Низ Без интервали.

Бележки от „През огледалото“.

Внедрено във версия 8.3.6.1977.

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

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

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

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

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

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

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

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

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

ще има ред:

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

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

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

18.08.2014 г. Нови функции за работа с низове Можете да извършите същото действие по-рано, като използвате обекта:

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

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

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

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

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

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

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

Ако Вместо старата функциянамери ()

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

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

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

Препоръчително е да не се използва повторно.

Основните възможности на езика за програмиране обикновено включват работа с числа и низове. Обикновено тези възможности са твърдо кодирани в кода на компилатора (или са внедрени „базовите“ класове на езика за програмиране).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Работа с 1C низове

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

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

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

Както знаете, най-популярният формат за обмен на структурирана информация в момента е XML. Даже най-новата версия MS Office Wordи Excel запазват файлове в този формат (docx и xlsx, съответно, променете разширението на zip, отворете в архиватор).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4. Ако всички възможности на полето за въвеждане не са ви достатъчни, има вграден редактор. За да го добавите към формуляра, трябва да добавите поле към контролното меню Form/Insert текстов документ. В свойствата му можете да посочите режима му на работа – свойството Разширение.

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

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

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

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

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


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

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

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

    FormattedDocument = CurrentObject.Attributes.Get();
    Край на процедурата

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

    &На сървъра
    Процедура при четене на сървър (текущ обект)
    CurrentObject.Props = NewValueStorage(FormattedDocument);
    Край на процедурата

Кажете на приятели