1c премахнете излишните интервали в реда. Как да премахнете интервали

ЧЗВ или платформа 8 за манекени.

Съдейки по форумите, посветени на теми за 1C, програмистите, които за първи път са се сблъскали с платформата 1C v 8 или преминават от 7.7, често имат същите въпроси. Тук реших да събера най-често срещаните според мен...

В:Как да премахнете интервала в числото 12 600,00?
ЗА:Важно е да се разбере, че тук не се използва символът за интервал, а така нареченото „непрекъснато пространство“, така че например тази конструкция:

StrReplace(VariableNumber," ","");

няма да работи. Има два варианта за решаване на проблема, или посочете Symbols.NPP за замяна вместо интервал, или използвайте функцията Format().

StrReplace(VariableNumber,Characters.NPP,""); // 1-ва опция
Format(VariableNumber,"HG="); // 2-ра опция

В:Как да задам условие в заявка, така че само документи от определен тип да бъдат включени в резултантната селекция?
ЗА:Това може да стане с помощта на оператора на езика за заявки REF, който ви позволява да проверите дали стойността на израза, посочен вляво от него, е препратка към таблицата, посочена вдясно. Нека да разгледаме пример, изберете от регистъра за натрупване Продажби на услуги само онези записи, за които регистраторът е документът Продажби на стоки и услуги:

Заявка=Нова заявка("
|ИЗБЕРЕТЕ
| Изпълнение на услугите на Регистратор.
| Продажба на услуги
| ОТ
| Регистър на натрупвания Изпълнение на услуги КАК Изпълнение на услуги
|КЪДЕ
| Регистратор LINK Документ за продажби на стоки и услуги");

В:Как да прехвърля определени документи/справочници между еднакви конфигурации?
ЗА:Това може да стане с помощта на стандартна обработка UploadLoadDataXML.epf, доставена на ITS дискове.

В:Как да прехвърлям данни между различни конфигурации (или от 7.7 до 8)?
ЗА: Най-добрият вариант, по мое мнение, е да се използва стандартната конфигурация „Преобразуване на данни“, която се доставя на ITS дискове; има и няколко статии, описващи използването на тази конфигурация.

В:Как мога да добавя конкретен низ към поле без тип низ в заявка, например SELECT Продажби на стоки и услуги + " RUR "?
ЗА:Няма начин. Преобразуването на типа не е възможно в заявка. Някои хора са объркани от конструкцията на езика за заявки EXPRESS, но тя връща само стойността композитен типкъм един от типовете, които съставят тази стойност и в никакъв случай не преобразува типа, така че не е приложим в тази ситуация.

В:Как мога да задам условие в заявка за поле с тип низ с неограничена дължина, например да избера всички документи с определен коментар?
ЗА:За да направите това, трябва да ограничите дължината на полето, като използвате оператора на езика за заявки EXPRESS. Например:

Заявка=Нова заявка("
|ИЗБЕРЕТЕ
| Продажба на стоки и услуги
| ОТ
| Документ. Продажби на стоки и услуги. КАК да извършвате продажби на стоки и услуги
|КЪДЕ
| EXPRESS(SalesProductsServices.Comment AS ROW(100)) = &Comment");

В:Има ли аналог на функция 7.7 CatalogIB() във версия 8?
ЗА:Не, тъй като подобна функция не би имала смисъл при режим на работа клиент-сървър. Въпреки това, за файловия режим на работа е възможно да се получи директория информационна базаизползвайки следната конструкция:

CatalogIB=NStr(InformationBaseConnectionString(),"Файл");

В:Как да прекъсна връзката на възел от разпределена информационна база?
ЗА:Използвайки следната конструкция:

ExchangePlans.SetMainNode(недефиниран);

Или стартирайте конфигуратора с параметъра команден ред/ResetMasterNode (за основни версиине се използва).

В:Как да получа името на документа (аналогично на метод 7.7 View())?
ЗА:Използване на метаданни. Например:

В:Как да изберете документи от всички видове в една заявка?
ЗА:Използване на метаданни и възможност за комбиниране на заявки В:

Заявка=Нова заявка;
Текст="";
За всеки документ от метаданни. Цикъл на документи
Text=Text+"SELECT Link FROM Document."+Document.Name+"MERGE";
EndCycle;
Query.Text=Left(Text,StrLength(Text)-StrLength(" COMBINE "));
Изберете=Query.Run().Select();

В:Как да прекъсна отчет/обработка?
ЗА:Използването на оператора UserInterrupt Handling() се препоръчва да се използва вътре в цикли. Когато потребителят натисне клавишната комбинация Ctrl+Break, изпълнението се прекъсва и се показва съответното съобщение. Например:

Докато Select.Next() цикъл
UserInterruptHandling();

EndCycle;

В:Формулярът има TableField с тип ValueTree и набор от свойства Tree. Защо дървото на стойностите не се показва?
ЗА:Освен това трябва да зададете свойството Показване на йерархия за една от колоните.

В:Как да използвате рутинни задачи в файлов режимработа на информационната база?
ЗА:За разлика от клиент-сървър, във файлов режим, отговорността за внедряването автоматичен старт рутинни задачиостава на разработчика. За да реализирате автоматично стартиране на задачи, имате нужда от Waiting Handler, който периодично проверява „просрочените“ задачи и ги стартира. Силно препоръчително е да използвате отделна сесия за това. Пример:

Процедура CheckTasks()
ExecuteTaskProcessing();
Край на процедурата
ConnectWaitingHandler("Проверка на задачи",3);

В:Как да получа масив от ограничен низ?
ЗА:Като пример ще дам моята версия на функция, която работи „и в двете посоки“, т.е. при подаване на ограничен низ образува масив, а при подаване на масив формира от него разделен низ.

Функция StringArray(стойност стойност, разделител)
Ако TypeValue(Value)=Type("String") Тогава
MnStr = StrReplace(стойност, разделител, символи.PS);
Array=Нов масив;
За n=1 по StrNumber of Rows(MnStr) цикъл
Array.Add(StrGetString(MnStr,n));
EndCycle;
Върнете масив;
ElseIfTypeValue(Value)=Type("Array") Тогава
Линия="";
За всеки елемент от цикъла на стойността
Низ=Низ+?(Низ"",Разделител,"")+Елемент;
EndCycle;
връщане на низ;
В противен случай
Връщане Недефинирано;
endIf;
EndFunction

В:Как да активирате възможността за извършване на промени в конфигуратора в стандартна конфигурация?
ЗА:Тъй като се поддържат стандартни конфигурации (което позволява автоматичен режимактуализиране), тогава по подразбиране възможността за извършване на промени в конфигурацията е деактивирана. За да активирате тази функция, трябва да изберете елемента от менюто „Конфигурация > Поддръжка > Настройки за поддръжка” в конфигуратора и в прозореца, който се отваря, щракнете върху бутона „Активиране на възможността за промяна”.

В:Как да задам парола за обработка/конфигуриране?
ЗА:В 1C v 8 паролите могат да се задават само за обектни модули. За да зададете парола, трябва да отворите обектния модул и да изберете елемента от менюто „Текст > Задаване на парола”. Също така е възможно да се предостави конфигурация без изходния код на обектни модули (конфигуриран в „Конфигурация > Доставка на конфигурация > Настройки за доставка”). Бих искал да отбележа, че на в момента, нито един от тези методи не е надеждна защитаот преглед на изходния код на модула.

В:Защо не се търси документ чрез метода FindByNumber(<Номер документа>)?
ЗА:Трябва да се помни, че ако за този тип документ в конфигуратора е зададено периодично номериране, в допълнение към номера на документа трябва да посочите интервалната дата като втори параметър. В противен случай ще се извърши търсене на документ с празна дата, което очевидно няма да доведе до желания резултат.

В:В 1C 8.1, ако е необходимо, свържете се с вече работещо приложениеза отстраняване на грешки (Конфигуратор > Отстраняване на грешки > Връзка) наличните елементи за отстраняване на грешки са празни. каква е причината
ЗА:Въпросът е, че за приложението, което ще отстраняваме, трябва изрично да разрешим отстраняване на грешки. Меню "Инструменти" > "Опции" > раздел "Система" > флаг "Активирано отстраняване на грешки".

В:Как да организираме итерация върху низове динамичен списък(например DirectoryList или DocumentList)?
ЗА:Това може да стане с помощта на Report Builder, например:

Builder=NewReportBuilder;
Builder.DataSource=NewDataSourceDescription(DocumentList);
Избор=Builder.Result.Select();
Докато Select.Next() цикъл
Доклад(Избор.Връзка);
EndCycle;

Забележка: селекцията ще включва редове в съответствие с текущо избраната селекция.

В:Как да проверя стойностите на свойствата на обекти с метаданни? Например вида на йерархията на директорията или режима на запис в регистъра, или честотата на номера на документа?
ЗА:Всички тези свойства са изброими свойства на обекти с метаданни. Можете също да получите стойности от този тип чрез метаданни. Примери:

// Пример 1. Тип йерархия на директорията
Ако Metadata.Directories[Име на директория].Hierarchy View = Metadata.Object Properties.Hierarchy View.Hierarchy of Groups and Elements Then...
// Пример 2. Режим RegisterRecord
Ако Metadata.InformationRegisters[RegisterName].RegisterRecordMode = Metadata.ObjectProperties.RegisterRecordMode.Submission toRegistrar Тогава...
// Пример 3. Периодичност на номера на документа
Ако Metadata.Documents[DocumentName].PeriodicityNumbers = Metadata.ObjectProperties.PeriodicityDocumentNumbers.Non-periodic Тогава...

В:Как да внедрим квадратче за отметка с три състояния в дърво на стойностите?
ЗА:Нека разгледаме формулировката на проблема по-подробно. Формата има таблично поле, източникът на данни за което е дърво на стойностите. В една от колоните има контролен елемент “Checkbox”. Необходимо е той да може да приема три състояния: “Включено”, “Изключено” и “Недефинирано”. В този случай състоянието е “Undefined” или т.нар. “сив флаг”, т.е. частично избрано е зададено, ако не всички подчинени редове имат едно и също състояние на квадратчето за отметка. Освен това, ако даден ред има подчинени редове, тогава, когато флагът му се промени, флаговете на всички подчинени редове трябва да се променят съответно.
Първо, нека добавим нашата колона с квадратчета за отметка към дървото на стойностите:

Tree.Columns.Add("Mark", New TypeDescription("Number"));
FormElements.Tree.CreateColumns();
TreeColumns=FormElements.Tree.Columns;
TreeColumns.Mark.FlagData="Маркиране";
TreeColumns.Mark.SetControlElement(Type("Checkbox"));
Дървовидни колони.Mark.EditMode=Редактиране на колони.Директно
абсолютно;
TreeColumns.Mark.ThreeStatesFlag=Вярно;

Второ, когато променяте квадратче за отметка, трябва да зададете съответните стойности в подчинените редове и да контролирате стойността на квадратчето за отметка в „родителския ред“:

Процедура TreeWhenChangingFlag(елемент, колона)
CurrentRow=Element.CurrentRow;
Ако CurrentLine.Mark=2 Тогава
CurrentLine.Mark=0;
endIf;
SettingFlags(CurrentRow,CurrentRow.Mark);
Докато CurrentRow.Parent Недефиниран цикъл
CurrentRow.Parent.Mark=?(SetForAll(CurrentRow),CurrentRow.Mark, 2);
CurrentRow = CurrentRow.Parent;
EndCycle;
Край на процедурата

Тук процедурата SetFlags() рекурсивно задава квадратчетата за отметка в подчинените редове:

Процедура SettingFlags(CurrentRow,Value)
За всяка страница от цикъл CurrentRow.Rows
PageMark=Стойност;
SetChecks(Page,PageMark);
EndCycle;
Край на процедурата

И функцията SetForAll() проверява дали същата стойност е зададена за всички редове на текущото ниво:

Функция SetForAll(низ)
За всяка страница от цикъл Row.Parent.Rows
Ако Page.MarkLine.Mark Then
Връща невярно;
endIf;
EndCycle;
Връщане True;
EndFunction

В:Как мога да внедря сортиране по мои собствени атрибути във формата на списък?
ЗА:Ако атрибутът е от примитивен тип, тогава е достатъчно да зададете свойството на атрибута „Индекс“ на стойност „Индекс“ или „Индекс с доп. подреждане" (не е налично за атрибути от типа Съхранение на стойност). Ако атрибутът е референтен тип, тогава е необходимо изрично да се разреши наличието на сортиране за него. Например:

Element UP=Form Elements.DirectoryList.Order Settings.Find("Props1");
Ако елементът UP е недефиниран, тогава
ElementUP.Availability=Вярно;
endIf;

Редовете в 1C 8.3 във вградения език 1C представляват стойности от примитивен тип Линия. Ценности от този типсъдържа Unicode низ с произволна дължина. Променливите тип низ са набор от знаци, затворени в кавички.

Пример 1. Нека създадем низова променлива с текст.

StringVariable = "Здравей свят!";

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

IN този разделЩе бъдат дадени основните функции, които ви позволяват да променяте редове в 1c или да анализирате информацията, съдържаща се в тях.

StrLength

StrLength(<Строка>) . Връща броя знаци, съдържащи се в низа, подаден като параметър.

Пример 2. Нека преброим броя на знаците в реда „Здравей свят!“

String = "Здравей свят!"; NumberofCharacters = StrLength(String); Доклад (число знаци);

Резултатът от изпълнението на този код ще бъде показването на броя знаци в реда: 11.

AbbrL

AbbrL(<Строка>) . Изрязва незначещите знаци отляво на първия значим знак в низа.
Второстепенни герои:

  • пространство;
  • непрекъсваемо пространство;
  • табулиране;
  • връщане на карета;
  • подаване на линия;
  • превод на формуляра (страница).

Пример 3. Премахнете всички интервали от лявата страна на реда "свят!" и добавете реда „Здравей“ към него.

Низ = Съкращение ("свят!"); String = "Hello"+String; Доклад (низ);

Резултатът от изпълнението на този код ще бъде показването на реда „Здравей, свят!“ на екрана.

Съкратено

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

Пример 4. Формуляр от редовете „Здравей“ и „мир!“ фразата „Здравей свят!“

Ред = Съкращение("Здравей ")+" "+ Съкращение("свят!"); Доклад (низ);

AbbrLP

AbbrLP(<Строка>) . Изрязва незначещите знаци отдясно на първия значим знак в низа и също така изрязва незначещите знаци отляво на първия значим знак в низа. Тази функциясе използва по-често от предишните две, тъй като е по-универсален.

Пример 5. Премахване на незначещите знаци отляво и отдясно в името на контрагента.

Контрагент = Справочници. Намери по детайли ("TIN", "0777121211"); AccountObject = Account.GetObject(); CounterpartyObject.Name = AbbrLP(CounterpartyObject.Name); AccountObject.Write();

лъв

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

Пример 6. Нека в структурата служителсъдържат собственото, фамилното и бащиното име на служителя. Вземете низ с фамилия и инициали.

NameInitial = Lev(Employee.Name, 1); Бащино име = Лео (Служител. Бащино име, 1); Пълно име = Employee.LastName + " " + FirstName Initial + "."

+ Среден инициал + ".";

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

Ако зададеният брой знаци надвишава дължината на низа, тогава се връща целият низ. Пример 7. Нека дата във формат "ггггммдд" бъде записана в края на низова променлива, вземете низ с датата и го преобразувайте във вид.

Дата низ = "Текуща дата

: 20170910"; StringDate = Права(String, 8); Дата = Дата(StringDate);

сряда<Строка>, <НачальныйНомер>, <ЧислоСимволов>) сряда( Линия. Получава подниз от низа, предаден като параметър , започвайки от знака, чийто номер е посочен в параметъраНачален номер Брой знаци.Номерирането на знаците в ред започва от 1. Ако в параметъра , започвайки от знака, чийто номер е посочен в параметърае зададена стойност, по-малка или равна на нула, тогава параметърът приема стойност 1. Ако параметърът Брой знацине е указано, тогава се избират символи до края на реда.

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

String = "Регион: 99 Москва"; Регион = ср.(низ, 9, 2);

PageFind

StrFind(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) . Търси определен подниз в низ, връщайки номера на позицията на първия знак от намерения подниз. Нека да разгледаме параметрите на тази функция:

  • Линия. Изходен низ;
  • Подниз за търсене. Подниз за търсене;
  • Посока на търсене. Указва посоката за търсене на подниз в низ. Може да приема стойности:
    • Посока на търсене. От началото;
    • Search.End Direction;
  • Начална позиция. Указва позицията в низа, от която започва търсенето;
  • NumberOccurrences. Указва номера на срещане на търсения подниз в изходния низ.

Пример 9. В реда "Hello world!" Определете позицията на последното срещане на знака "и".

PositionNumber = StrFind("Здравей свят!", "и", SearchDirection.End); Доклад (номер на позиция);

Резултатът от изпълнението на този код ще бъде показване на номера на последното срещане на символа „и“: 9.

VReg

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

Пример 10: Преобразуване на низа "hello world!" до главни букви.

StringVreg = VReg("здравей свят!"); Доклад (StringVreg);

Резултатът от изпълнението на този код ще бъде показването на реда „HELLO WORLD!“

NReg

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

Пример 11: Преобразуване на низа "HELLO WORLD!" до малки букви.

StringNreg = NReg("HELLO WORLD!"); Доклад (StringVreg);

Резултатът от изпълнението на този код ще бъде показването на реда „здравей свят!“

Трег

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

Пример 12: Напишете с главни букви първите букви на думите в реда „здравей свят!“

StringTreg = TReg("здравей свят!"); Доклад(StringTreg);

Резултатът от изпълнението на този код ще бъде показването на реда "Hello World!"

Символ

символ (<КодСимвола>) . Получава знак чрез неговия Unicode код.

Пример 13. Добавете ляво и дясно към реда „Hello World!“ символ ★

StringWithStars = Symbol("9733")+"Hello World!"+Symbol("9733"); Доклад(StringWithStars);

Резултатът от изпълнението на този код ще бъде показването на реда „★Hello World!★“

Код на символа

Символен код(<Строка>, <НомерСимвола>) . Получава кода на символа Unicode от низа, посочен в първия параметър, разположен на позицията, посочена във втория параметър.

Пример 14. Разберете кода на последния знак в реда „Hello World!“

String = "Здравей свят!"; Код на символ = Код на символ (низ, дължина на низа (низ)); Известяване (Код на символ);

Резултатът от изпълнението на този код ще бъде показването на символния код “!” - 33.

EmptyString

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

Пример 15. Проверете дали низ, състоящ се от три интервала, е празен.

Empty = EmptyString(" "); Доклад (празен);

Резултатът от изпълнението на този код ще бъде показването на думата „Да“ (низов израз с логическа стойност вярно).

PageReplace

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

Пример 16. В реда "Hello World!" заменете думата „Мир“ с думата „Приятели“.

String = StrReplace("Здравей свят!", "Свят", "Приятели"); Доклад (низ);

Резултатът от изпълнението на този код ще бъде показването на реда „Здравейте приятели!“

StrNumberLines

StrNumberRow(<Строка>) . Позволява ви да преброите броя на редовете в многоредов низ. За да отидете на нов редв 1s 8 се използва символът PS(знак за нов ред).

Пример 17. Определете броя на редовете в текста:
„Първи ред
Втора линия
Трети ред"

Number = StrNumberString("Първи ред"+Characters.PS +"Втори ред"+Symbols.PS +"Трети ред"); Доклад (номер);

Резултатът от изпълнението на този код ще бъде показването на броя редове в текста: 3

StrGetString

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

Пример 18. Вземете последния ред в текста:
„Първи ред
Втора линия
Трети ред"

Текст = "Първи ред" + "Втори ред" + "Трети ред". LastRow = StrGetRow(Текст, StrNumberLines(Текст)); Доклад (последен ред);

Резултатът от изпълнението на този код ще бъде показването на реда „Трети ред“.

PageNumberOccurrences

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

Пример 19. Определете колко пъти се появява буквата „c“ в реда „Редове в 1s 8.3 и 8.2“, независимо от главния й регистър.

Line = "Редове в 1s 8.3 и 8.2"; NumberOccurrences = StrNumberOccurrences(Vreg(String), "C"); Доклад (Брой Случвания);

Резултатът от изпълнението на този код ще бъде показването на броя на срещанията: 2.

PageStartsWith

StrStartsWith(<Строка>, <СтрокаПоиска>) . Проверява дали низът, подаден в първия параметър, започва с низа във втория параметър.

Пример 20. Определете дали TIN на избрания контрагент започва с числото 1. Нека във променливата Контрагент Контрагенти.

TIN = Контрагент.TIN; StartsUNits = StrStartsWith(TIN, "1"); If Започва с единици Then //Вашият код EndIf;

PageEndsOn

StrEndsWith(<Строка>, <СтрокаПоиска>) . Проверява дали низът, предаден в първия параметър, завършва с низа във втория параметър.

Пример 21. Определете дали TIN на избрания контрагент завършва с числото 2. Нека във променливата Контрагентсе съхранява препратка към елемент от директория Контрагенти.

TIN = Контрагент.TIN; EndsWithTwo = StrEndsWith(TIN, "2"); If EndsInTwo Then //Вашият код EndIf;

PageSplit

StrDivide(<Строка>, <Разделитель>, <ВключатьПустые>) . Разделя низ на части с помощта на посочените разделителни знаци и записва получените низове в масив. Първият параметър съхранява изходния низ, вторият съдържа низа, съдържащ разделителя, а третият показва дали празните низове трябва да бъдат записани в масива (по подразбиране вярно).

Пример 22. Нека имаме низ, съдържащ числа, разделени със символа “;”, получаваме масив от числа от низа.

Низ = "1; 2; 3"; Array = StrDivide(String, ";"); За брой = 0 чрез Array.Quantity() - 1 опит за цикъл Array[Count] = Number(AbbrLP(Array[Count]));

Изключение Array[Sch] = 0;

EndAttemptsEndCycle;

В резултат на изпълнението ще се получи масив с числа от 1 до 3.<Строки>, <Разделитель>) PageConnect

StrConnect(

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

Пример 23. Използвайки масива от числа от предишния пример, вземете оригиналния низ.

За сметка = 0 чрез Array.Quantity() - 1 цикъл Array[Act] = String(Array[Act]); EndCycle; Ред = StrConnect(Масив, "; ");

Често се случва при зареждане и разтоварване на данни от 1C 8.2 и 8.3 да има интервали в числата, които пречат на нормалната обработка на данните. Решението на този проблем е много просто.

  • непрекъсваемо пространство;
  • Нека да разгледаме какви видове пространства има.

Пространствата могат да бъдат два вида:

"обикновено" пространство.

Премахване на неразривни интервали

StringRepresentation = String(Number); // системата ще запише „10 000“ в променливата

Много е лесно да премахнете такива интервали в 1C с помощта на функцията за форматиране на номера:

Число = формат (10000, “NH=”); StringRepresentation = String(Number); // системата ще запише "10000" в променливатаСъздадохме групировка в

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

StringRepresentation = StrReplace(String(StringRepresentation), Characters.NPP, ""); // в променливата StringRepresentation беше „10 000“, стана „10 000“

Тоест ние просто заменихме непрекъснатия интервал (Characters.NPP) в реда с празна стойност.

Редовни пространства

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

StringRepresentation = StrReplace(String(StringRepresentation), " ", ""); // "10 000", стана "10 000"

Примерът е подобен на предишния метод. Въпреки това, вместо Characters.NPP, ние използваме низ с един интервал.

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

Типът String се среща във всички езици за програмиране. Той е примитивен и в 1C има много функции за работа с него. В тази статия ще разгледаме по-отблизо различни начиниработа с типове низове в 1C 8.3 и 8.2 с помощта на примери.

Линия

За да конвертирате променлива от всякакъв тип в низ, има функция със същото име „String()“. Входният параметър ще бъде самата променлива, чието низово представяне трябва да бъде получено.

String(False) // връща "Не"
String(12345) // връща "12 345"
Низ(CurrentDate()) //"07/21/2017 11:55:36″

Възможно е да се преобразуват не само примитивни типове в низ, но и други, например елементи на директории и документи.

SokrLP, SokrL, SokrP

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

Съкращение (" Интервалите ще бъдат премахнати от двете страни ") // "Интервалите ще бъдат премахнати от двете страни"
Abbreviation(" Интервалите от двете страни ще бъдат премахнати ") // " Интервалите отляво ще бъдат премахнати "
Съкращение (" Интервалите от двете страни ще бъдат премахнати ") // " Интервалите отдясно ще бъдат премахнати "

Лъв, десен, среден

Тези функции ви позволяват да изрежете част от низ. Функцията "Left()" ще върне частта от низ от лявата му страна на указаната дължина. Функцията "Right()" е подобна, но изрязва отдясно. Функцията “Avg()” ви позволява да посочите номера на знака, от който ще бъде избран редът и неговата дължина.

Lev("Променлива на низ", 4) // връща "Str"
Right("Променлива на низ", 7) // връща "променлива"
Medium("Променлива на низ", 2, 5) // връща "troco"

StrLength

Функцията определя броя на символите, които се съдържат в низова променлива.

StrLength("Word") // резултатът от изпълнението ще бъде числото 5

Намерете

Функцията дава възможност да се търси част от низ в низова променлива. Върнатата стойност ще бъде число, което показва позицията на началото на намерения низ. Ако не бъде намерено съвпадение, се връща нула.

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

Find("one, two, one, two, three", "two") // функцията ще върне числото 6

EmptyString

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

EmptyString("Pupkin Vasily Ivanovich") // функцията ще върне стойността False
EmptyString(" ") // функцията ще върне стойността True

VReg, NReg, TReg

Тези функции са много полезни при сравняване и конвертиране на низови променливи. „Vreg()“ ще върне оригиналния низ с главни букви, „HPreg()“ с малки букви, а „TReg()“ ще го форматира така, че първият знак на всяка отделна дума да е с главни букви, а всички следващи знаци са с главни букви.

VReg("ГЕНЕРАЛЕН ДИРЕКТОР") // върната стойност - "ГЕНЕРАЛЕН ДИРЕКТОР"
NReg(“CEO DIRECTOR”) // върната стойност – “CEO”
TREG(“CEO DIRECTOR”) // върната стойност – “Генерален директор”

PageReplace

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

StrReplace("red, white, yellow", ","", ";") // връща "red; бяло; жълт"

StrNumberLines

Функцията ви позволява да определите броя на редовете, разделени с връщане на каретка в текстова променлива.

Цикълът в примера по-долу ще премине през три кръга, защото функцията LineNumberRow ще върне стойността 3:

За ind = 1 от StrNumber of Strings("Line1" + Symbols.PS + "Line2" + Symbols.PS + "Line3") Цикъл
<тело цикла>
EndCycle;

StrGetString

Тази функция работи с многоредов текст по същия начин като предишната. Позволява ви да получите конкретен низ от текстова променлива.

StrGetString("Низ1" + Знаци.PS + "Низ2" + Знаци.PS + "Низ3", 2) // върне "String2"

PageNumberOccurrences

Функцията отчита броя на срещанията на знак или подниз в търсения низ.

StrNumberAttachments("a;b;c;d; ", ";") // функцията ще върне числото 4

Символ и символен код

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

SymbolCode("A") // функцията ще върне числото 1040
CharacterCode(1040) // функцията ще върне „A“

Често срещани задачи при работа с низове

Конкатениране на низове

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

„Ред 1″ + „Ред 2″ //резултатът от добавянето на два реда ще бъде „Ред 1 Ред 2“

Тип преобразуване

За да конвертирате тип в низ, например връзка към елемент от директория, номер и т.н., е достатъчно да използвате функцията „String()“. Функции като “ScrLP()” също ще конвертират променливи в низ, но незабавно с отрязване на незначителните знаци.

String(1000) // връща "1000"

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

StrReplace(String(1000),Characters.NPP,"") // връща "1000"

String(Format(1000,"HG=")) // връща "1000"

Кавички в низ

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

Header = String("Horns and Hooves LLC - това сме ние!") // ще върне "Horns and Hooves LLC - това сме ние!"

Многоредов, нов ред

За да създадете многоредов текст, просто добавете нови редове (Symbols.PS) към него.

MultilineText = “Първи ред” + Symbols.PS + “Втори ред”

Как да премахнете интервали

За да премахнете интервали отдясно или отляво, можете да използвате функцията “ScrAP()” (както и “ScrL()” и “ScrP()”):

StringNoSpaces = Abbreviation(" Много букви ") // функцията ще върне стойността "Много букви"

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

StringNoSpaces = StrReplace(String(99999),Characters.NPP,"") // връща "99999"

Програмистите също често използват следната конструкция, която ви позволява да премахнете или замените с друг знак всички интервали в текстова променлива:

StringNoSpaces = StrReplace("hello","") // връща "hello"

Сравняване на низове един с друг

Можете да сравнявате термини с обичайния знак за равенство. Сравнението е чувствително към главни и малки букви.

"Hello" = "hello" // връща False
"Hello" = "Hello" // връща True
„Здравей“ = „Довиждане“ // ще върне False

Споделете