1c فاصله ها را در یک خط حذف کنید.

نوع String در همه زبان های برنامه نویسی یافت می شود. ابتدایی است و در 1C توابع زیادی برای کار با آن وجود دارد. در این مقاله نگاه دقیق تری خواهیم داشت راه های مختلفکار با انواع رشته در 1C 8.3 و 8.2 با استفاده از مثال.

خط

برای تبدیل یک متغیر از هر نوع به رشته، تابعی به همین نام "String()" وجود دارد. پارامتر ورودی خود متغیر خواهد بود که نمایش رشته ای آن باید بدست آید.

رشته (نادرست) // "نه" را برمی گرداند
String(12345) // "12,345" را برمی گرداند
رشته (تاریخ فعلی()) //"07/21/2017 11:55:36"

این امکان وجود دارد که نه تنها انواع ابتدایی را به یک رشته تبدیل کنید، بلکه سایر موارد را نیز مانند عناصر دایرکتوری ها و اسناد تبدیل کنید.

SokrLP، SokrL، SokrP

پارامترهای ورودی این توابع متغیری از نوع رشته هستند. توابع نویسه‌های بی‌اهمیت (فضاها، برگشت‌های کالسکه و غیره) را حذف می‌کنند: از سمت چپ و سمت راست، به ترتیب فقط در سمت چپ و فقط در سمت راست.

مخفف (" فاصله ها از دو طرف حذف خواهند شد ") // "فضاها از دو طرف حذف خواهند شد"
مخفف (" فاصله های دو طرف حذف خواهد شد") // "فضاهای سمت چپ حذف خواهند شد"
مخفف (" فاصله های دو طرف حذف خواهد شد") // "فضاهای سمت راست حذف خواهند شد"

لئو، راست، متوسط

این توابع به شما امکان می دهند بخشی از یک رشته را برش دهید. تابع "Left()" بخشی از یک رشته را از سمت چپ آن در طول مشخص شده برمی گرداند. تابع "Right()" مشابه است، اما از سمت راست برش می‌دهد. تابع "Avg()" به شما امکان می دهد تعداد کاراکتری که خط از آن انتخاب می شود و طول آن را مشخص کنید.

Lev("متغیر رشته"، 4) // "Str" را برمی گرداند
Right("String variable", 7) // "variable" را برمی گرداند
Medium("String variable", 2, 5) // "troco" را برمی گرداند

StrLength

تابع تعداد کاراکترهای موجود در یک متغیر رشته را تعیین می کند.

StrLength("Word") // نتیجه اجرا عدد 5 خواهد بود

پیدا کنید

این تابع امکان جستجوی بخشی از یک رشته را در متغیر رشته ای فراهم می کند. مقدار برگشتی عددی خواهد بود که موقعیت ابتدای رشته پیدا شده را نشان می دهد. اگر مطابقت پیدا نشد، صفر برگردانده می شود.

لطفا توجه داشته باشید که جستجو به حروف کوچک و بزرگ حساس است. اگر بیش از یک مورد از زیر رشته جستجو در رشته اصلی وجود داشته باشد، تابع شروع اولین وقوع را برمی گرداند.

Find("یک، دو، یک، دو، سه"، "دو") // تابع عدد 6 را برمی گرداند.

EmptyString

استفاده از این تابع به شما امکان می دهد تا مشخص کنید که آیا یک رشته خالی است یا خیر. کاراکترهای جزئی مانند فضا، بازگشت کالسکه و موارد دیگر در نظر گرفته نمی شوند.

تابع EmptyString("Pupkin Vasily Ivanovich") // مقدار False را برمی گرداند.
تابع EmptyString(" ") // مقدار True را برمی گرداند

VReg، NReg، Treg

این توابع هنگام مقایسه و تبدیل متغیرهای رشته ای بسیار مفید هستند. "Adreg()" رشته اصلی را با حروف بزرگ، "HPreg()" با حروف کوچک، و "Treg()" آن را به گونه ای قالب بندی می کند که اولین کاراکتر هر کدام تک کلمهبا حروف بزرگ نوشته می شود و تمام موارد بعدی با حروف بزرگ نوشته می شود.

Vreg ("مدیر کل") // مقدار بازگشتی - "مدیر کل"
NReg ("مدیرعامل") // مقدار بازگشتی - "مدیر عامل"
TREG ("مدیرعامل") // مقدار بازگشتی - "مدیر کل"

PageReplace

این تابعمشابه جایگزینی در است ویرایشگرهای متن. این به شما امکان می دهد یک کاراکتر یا مجموعه ای از کاراکترها را با دیگری در متغیرهای رشته جایگزین کنید.

StrReplace("قرمز، سفید، زرد"، "،"، ";") // "قرمز; سفید؛ زرد"

StrNumberLines

این تابع به شما امکان می دهد تعداد خطوطی را که با برگرداندن حامل در یک متغیر متنی جدا شده اند تعیین کنید.

حلقه در مثال زیر از سه دور عبور می کند زیرا تابع LineNumberRow مقدار 3 را برمی گرداند:

برای ind = 1 توسط StrNumber of strings ("Line1" + Symbols.PS + "Line2" + Symbols.PS + "Line3") چرخه
<тело цикла>
چرخه پایان

StrGetString

این تابع با متن چند خطی به همان روش قبلی کار می کند. این به شما امکان می دهد یک رشته خاص را از یک متغیر متنی دریافت کنید.

StrGetString("String1" + Characters.PS + "String2" + Characters.PS + "String3"، 2) // برگرداندن "String2"

Page NumberOccurrences

تابع تعداد تکرار یک کاراکتر یا زیررشته را در رشته جستجو می شمارد.

تابع StrNumberAttachments("a;b;c;d; ", ";") // عدد 4 را برمی گرداند.

نماد و رمز نماد

این توابع به شما امکان می دهد یک کاراکتر را با کد آن در رمزگذاری یونیکد به دست آورید و همچنین این کد را توسط خود کاراکتر تعیین کنید.

تابع 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 = "First Line" + Symbols.PS + "Second Line"

نحوه حذف فضاها

به منظور حذف فضاهای سمت راست یا چپ، می توانید از تابع "ScrAP()" (و همچنین "ScrL()" و "ScrP()" استفاده کنید:

StringNoSpaces = مخفف ("حروف بسیار") // تابع مقدار "حروف بسیار" را برمی گرداند.

اگر بعد از تبدیل یک عدد به رشته، باید فضاهای بدون شکست را حذف کنید، از ساختار زیر استفاده کنید:

StringNoSpaces = StrReplace(String(99999),Characters.NPP,"") // "99999" را برمی گرداند

برنامه نویسان همچنین اغلب از ساختار زیر استفاده می کنند که به شما امکان می دهد تمام فضاهای یک متغیر متنی را حذف یا با کاراکتر دیگری جایگزین کنید:

StringNoSpaces = StrReplace("Hello","") // "Hello" را برمی‌گرداند

مقایسه رشته ها با یکدیگر

می توانید اصطلاحات را با علامت مساوی معمولی مقایسه کنید. مقایسه به حروف کوچک و بزرگ حساس است.

"Hello" = "Hello" // False را برمی‌گرداند
"Hello" = "Hello" // True را برمی گرداند
"Hello" = "Goodbye" // False را برمی گرداند

اغلب اتفاق می افتد که هنگام بارگیری و تخلیه داده ها از 1C 8.2 و 8.3، فضاهایی در اعداد وجود دارد که در پردازش عادی داده ها اختلال ایجاد می کند. راه حل این مشکل بسیار ساده است.

بیایید ببینیم چه نوع فضاهایی وجود دارد.

فضاها می توانند دو نوع باشند:

  • فضای بدون شکست؛
  • فضای "منظم"

حذف فضاهای بدون شکست

StringRepresentation = String(Number); // سیستم "10000" را روی متغیر خواهد نوشت

حذف چنین فضاهایی در 1C با استفاده از تابع قالب شماره بسیار آسان است:

شماره = قالب (10000، "NH =")؛

StringRepresentation = String(Number); // سیستم به متغیر "10000" می نویسد

ما گروه بندی در رشته قالب را روی مقدار خالی قرار می دهیم (همچنین می توانید "0" بنویسید).

اگر نوع داده از قبل "رشته" باشد، می توان از روش زیر استفاده کرد:

StringRepresentation = StrReplace(String(StringRepresentation), Characters.NPP, ""); // در متغیر StringRepresentation "10000" بود، اکنون "10000" است

یعنی به سادگی فضای بدون شکست (Characters.NPP) در خط را با یک مقدار خالی جایگزین کردیم.

فضاهای منظم

برداشتن یک فضای منظم در یک خط به آسانی پوست انداختن گلابی است. کافی است عملکرد زیر را انجام دهید:

StringRepresentation = StrReplace(String(StringRepresentation)، " "، ""); // "10000"، "10000" شد

مثال مشابه روش قبلی است. با این حال، به جای Characters.NPP، از یک رشته با یک فاصله استفاده می کنیم.

اگر شروع به یادگیری برنامه نویسی 1C کرده اید، دوره رایگان ما را توصیه می کنیم (فراموش نکنید مشترک شدن در یوتیوب - ویدیوهای جدید به طور منظم منتشر می شوند).

ردیف‌های 1C 8.3 در زبان داخلی 1C مقادیری از نوع اولیه هستند خط. ارزش ها از این نوعشامل یک رشته یونیکد با طول دلخواه است. متغیرهای نوع رشته مجموعه ای از کاراکترهای محصور در گیومه هستند.

مثال 1. بیایید یک متغیر رشته ای با متن ایجاد کنیم.

StringVariable = "سلام دنیا!";

توابع کار با رشته ها در 1s 8.3

این بخش توابع اصلی را ارائه می دهد که به شما امکان می دهد خطوط را در 1c تغییر دهید یا اطلاعات موجود در آنها را تجزیه و تحلیل کنید.

StrLength

طول (<Строка>) . تعداد کاراکترهای موجود در رشته ارسال شده به عنوان پارامتر را برمی‌گرداند.

مثال 2. بیایید تعداد کاراکترهای خط "سلام دنیا!"

String = "سلام دنیا!"; NumberofCharacters = StrLength(String); گزارش (تعداد کاراکترها)؛

نتیجه اجرای این کد نمایش تعداد کاراکترهای خط: 11 خواهد بود.

AbbrL

AbbrL(<Строка>) . کاراکترهای غیر معنی دار را در سمت چپ اولین کاراکتر مهم در رشته برش می دهد.
شخصیت های فرعی:

  • فضا؛
  • فضای بدون شکست؛
  • جدول بندی
  • بازگشت کالسکه؛
  • خوراک خط؛
  • ترجمه فرم (صفحه).

مثال 3. تمام فاصله ها را از سمت چپ خط "world!" و خط "Hello" را به آن اضافه کنید.

String = مخفف ("جهان!"); String = "سلام" + رشته; گزارش (رشته)؛

نتیجه اجرای این کد، نمایش خط «سلام جهان!» در صفحه نمایش خواهد بود.

به اختصار

اببر(<Строка>) . کاراکترهای غیر معنی دار را در سمت راست اولین کاراکتر مهم در رشته برش می دهد.

مثال 4. از خطوط "سلام" و "صلح!" عبارت "سلام دنیا!"

Line = مخفف("سلام")+" "+ مخفف("دنیا!"); گزارش (رشته);

AbbrLP

AbbrLP(<Строка>) . نویسه‌های غیر معنی‌دار را در سمت راست اولین نویسه معنی‌دار رشته برش می‌دهد و همچنین کاراکترهای غیر معنی‌دار را در سمت چپ اولین کاراکتر معنی‌دار رشته برش می‌دهد. این تابع بیشتر از دو تابع قبلی استفاده می شود، زیرا جهانی تر است.

مثال 5. نویسه های بی اهمیت در سمت چپ و راست به نام طرف مقابل را حذف کنید.

طرف مقابل = دایرکتوری ها. یافتن بر اساس جزئیات ("TIN", "0777121211"); AccountObject = Account.GetObject(); CounterpartyObject.Name = AbbrLP(CounterpartyObject.Name); AccountObject.Write();

شیر

شیر(<Строка>, <ЧислоСимволов>) . اولین کاراکترهای رشته را می گیرد، تعداد کاراکترها در پارامتر مشخص می شود تعداد کاراکترها

مثال 6. اجازه دهید در ساختار کارمندشامل نام اول، نام خانوادگی و نام خانوادگی کارمند باشد. یک رشته با نام خانوادگی و حروف اول دریافت کنید.

NameInitial = Lev(Employee.Name, 1); نام اصلی = Leo(Employee. Patronymic, 1); FullName = Employee.LastName + " " + FirstName Initial + "."

+ ابتدایی میانی + ".";

درسته<Строка>, <ЧислоСимволов>) درسته( تعداد کاراکترها. آخرین کاراکترهای یک رشته، تعداد کاراکترهای مشخص شده در پارامتر را دریافت می کند

اگر تعداد کاراکترهای مشخص شده از طول رشته بیشتر شود، کل رشته برگردانده می شود. مثال 7. اجازه دهید یک تاریخ با فرمت "yyyymmdd" در انتهای یک متغیر رشته نوشته شود، یک رشته با تاریخ دریافت کنید و آن را به نوع تبدیل کنید..

تاریخ

String = "تاریخ فعلی: 20170910"; StringDate = حقوق (رشته، 8); تاریخ = تاریخ (StringDate);

چهارشنبه<Строка>, <НачальныйНомер>, <ЧислоСимволов>) چهارشنبه( خط. یک رشته فرعی از رشته ارسال شده به عنوان پارامتر دریافت می کند ، از کاراکتری که شماره آن در پارامتر مشخص شده است شروع می شودشماره اولیه تعداد کاراکترهاو طول به پارامتر منتقل شد ، از کاراکتری که شماره آن در پارامتر مشخص شده است شروع می شودشماره گذاری کاراکترها در یک خط از 1 شروع می شود. اگر در پارامتر مقدار کمتر یا مساوی صفر مشخص می شود، سپس پارامتر مقدار 1 را می گیرد. اگر پارامترتعداد کاراکترها

مشخص نشده است، سپس کاراکترهای تا انتهای خط انتخاب می شوند.

مثال 8. اجازه دهید متغیر رشته ای که از موقعیت نهم شروع می شود حاوی کد منطقه باشد، باید آن را دریافت کرده و در یک خط جداگانه بنویسید.

رشته = "منطقه: 99 مسکو"; منطقه = میانگین (رشته، 9، 2);

PageFind<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) StrFind(

  • خط. یک زیررشته مشخص را در یک رشته جستجو می‌کند و شماره موقعیت اولین کاراکتر زیررشته پیدا شده را برمی‌گرداند. بیایید به پارامترهای این تابع نگاه کنیم:
  • . رشته منبع؛جستجوی رشته فرعی
  • . جستجوی زیر رشته؛جهت جستجو
    • . جهت جستجوی یک زیررشته در یک رشته را مشخص می کند. می تواند مقادیر را بگیرد:;
    • جستجوی Direction.From Start;
  • جستجو. پایان جهتموقعیت اولیه
  • . موقعیتی را در رشته ای که جستجو در آن شروع می شود مشخص می کند.. تعداد وقوع رشته فرعی جستجو شده در رشته منبع را مشخص می کند.

مثال 9. در خط "سلام دنیا!" موقعیت آخرین وقوع کاراکتر "و" را تعیین کنید.

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

Treg(<Строка>) . یک رشته را به صورت زیر تبدیل می کند: اولین کاراکتر هر کلمه به آن تبدیل می شود حروف بزرگ، کاراکترهای باقیمانده کلمه به حروف کوچک تبدیل می شوند.

مثال 12: حروف اول کلمات را در خط "سلام دنیا!"

StringTreg = Treg ("سلام دنیا!"); گزارش (StringTreg)؛

نتیجه اجرای این کد نمایش خط “Hello World!” خواهد بود.

نماد

نماد(<КодСимвола>) . با کد یونیکد خود یک کاراکتر دریافت می کند.

مثال 13. چپ و راست را به خط "Hello World!" اضافه کنید. نماد ★

StringWithStars = Symbol("9733")+"Hello World!"+Symbol("9733"); گزارش (StringWithStars)؛

نتیجه اجرای این کد نمایش خط ★Hello World!★ خواهد بود.

کد نماد

SymbolCode(<Строка>, <НомерСимвола>) . کد کاراکتر یونیکد را از رشته مشخص شده در پارامتر اول که در موقعیت مشخص شده در پارامتر دوم قرار دارد دریافت می کند.

مثال 14. کد آخرین کاراکتر در خط "Hello World!" را پیدا کنید.

String = "سلام دنیا!"; CharacterCode = CharacterCode(String, StrLength(String)); اطلاع رسانی (شخصیت کد)؛

نتیجه اجرای این کد نمایش رمز نماد "!" خواهد بود. - 33.

EmptyString

EmptyString(<Строка>) . بررسی می کند که آیا رشته فقط از کاراکترهای ناچیز تشکیل شده است، یعنی خالی است یا خیر.

مثال 15. بررسی کنید که آیا رشته ای متشکل از سه فاصله خالی است یا خیر.

Empty = EmptyString(" "); گزارش (خالی)؛

نتیجه اجرای این کد نمایش کلمه "Yes" (یک عبارت رشته ای از یک مقدار منطقی) خواهد بود. درست است).

PageReplace

StrReplace(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) . تمام رخدادهای زیررشته جستجو را در رشته منبع پیدا می کند و آن را با رشته فرعی جایگزین جایگزین می کند.

مثال 16. در خط "سلام جهان!" کلمه "صلح" را با کلمه "دوستان" جایگزین کنید.

String = StrReplace("Hello World!"، "World"، "Friends"); گزارش (رشته)؛

نتیجه اجرای این کد نمایش خط "سلام دوستان!"

StrNumberLines

StrNumberRow(<Строка>) . به شما امکان می دهد تعداد خطوط یک رشته چند خطی را بشمارید. برای رفتن به یک خط جدید در 1s 8، از نماد استفاده کنید PS(شخصیت خط جدید).

مثال 17. تعداد خطوط متن را تعیین کنید:
"خط اول
خط دوم
خط سوم"

Number = StrNumberString("First line"+Characters.PS +"Second line"+Symbols.PS +"Third line"); گزارش (شماره)؛

نتیجه اجرای این کد نمایش تعداد خطوط متن خواهد بود: 3

StrGetString

StrGetString(<Строка>, <НомерСтроки>) . یک خط را در یک رشته چند خطی با شماره آن بدست می آورد. شماره گذاری خطوط از 1 شروع می شود.

مثال 18. آخرین خط متن را دریافت کنید:
"خط اول
خط دوم
خط سوم"

متن = "خط اول" + نمادها PS + "خط دوم" + "خط سوم". LastRow = StrGetRow(Text, StrNumberLines(Text)); گزارش (آخرین خط)؛

نتیجه اجرای این کد نمایش خط "خط سوم" خواهد بود.

Page NumberOccurrences

StrNumberOccurrences(<Строка>, <ПодстрокаПоиска>) . تعداد تکرار رشته فرعی مشخص شده در یک رشته را برمی گرداند. تابع به حروف بزرگ و کوچک حساس است.

مثال 19. مشخص کنید که حرف "c" بدون توجه به حروف، چند بار در خط "خطوط در 1s 8.3 و 8.2" ظاهر می شود.

Line = "خطوط در 1s 8.3 و 8.2"; NumberOccurrences = StrNumberOccurrences(Vreg(String)، "With"); گزارش (NumberOccurrences);

نتیجه اجرای این کد نمایش تعداد رخدادها خواهد بود: 2.

PageStartsWith

StrStartsWith(<Строка>, <СтрокаПоиска>) . بررسی می کند که آیا رشته ارسال شده در پارامتر اول با رشته در پارامتر دوم شروع می شود یا خیر.

مثال 20. تعیین کنید که آیا TIN طرف مقابل انتخاب شده با عدد 1 شروع می شود یا خیر. اجازه دهید متغیر طرف مقابل طرف مقابل.

TIN = Counterparty.TIN; StartsUNits = StrStartsWith(TIN، "1"); اگر با واحدها شروع می شود سپس //کد شما EndIf;

PageEndsOn

StrendsWith(<Строка>, <СтрокаПоиска>) . بررسی می کند که آیا رشته ارسال شده در پارامتر اول به رشته در پارامتر دوم ختم می شود یا خیر.

مثال 21. تعیین کنید که آیا TIN طرف مقابل انتخاب شده به عدد 2 ختم می شود یا خیر. اجازه دهید متغیر طرف مقابلیک مرجع به یک عنصر دایرکتوری ذخیره می شود طرف مقابل.

TIN = Counterparty.TIN; EndsWithTwo = StrEndsWith(TIN، "2"); اگر EndsInTwo سپس //کد شما EndIf;

PageSplit

StrDivide(<Строка>, <Разделитель>, <ВключатьПустые>) . یک رشته را با استفاده از کاراکترهای جداکننده مشخص شده به قطعات تقسیم می کند و رشته های حاصل را در یک آرایه می نویسد. پارامتر اول رشته منبع را ذخیره می کند، دومی رشته حاوی جداکننده، سومین پارامتر نشان می دهد که آیا باید در آرایه نوشته شود یا خیر. خطوط خالی(پیش فرض درست است).

مثال 22. اجازه دهید یک رشته حاوی اعدادی داشته باشیم که با علامت ";" از هم جدا شده اند، آرایه ای از اعداد را از رشته بدست آوریم.

رشته = "1; 2; 3"; آرایه = StrDivide(String, ";"); برای تعداد = 0 توسط Array.Quantity() - 1 Cycle Attempt Array[Count] = Number(AbbrLP(Array[Count]));

آرایه استثنایی[Sch] = 0;

EndAttemptsEndCycle;

در نتیجه اجرا، آرایه ای با اعداد از 1 تا 3 به دست می آید.<Строки>, <Разделитель>) PageConnect

StrConnect(

. آرایه رشته ها را از پارامتر اول به رشته ای تبدیل می کند که شامل تمام عناصر آرایه است که توسط جداکننده مشخص شده در پارامتر دوم از هم جدا شده اند.

مثال 23. با استفاده از آرایه اعداد مثال قبلی، رشته اصلی را بدست آورید.

برای حساب = 0 توسط Array.Quantity() - 1 Cycle Array[Act] = String(Array[Act]); چرخه پایان Row = StrConnect(Array, ";");

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.با قضاوت بر اساس انجمن های اختصاص داده شده به موضوعات 1C، برنامه نویسانی که برای اولین بار با پلتفرم 1C v 8 مواجه شده اند یا از 7.7 حرکت می کنند، اغلب سوالات مشابهی دارند. در اینجا تصمیم گرفتم به نظر من رایج ترین ها را جمع آوری کنم ...
در:چگونه فضای موجود در عدد 12600.00 را حذف کنیم؟

در مورد:

درک این نکته مهم است که این کاراکتر فضا نیست که در اینجا استفاده می شود، بلکه به اصطلاح "فضای بدون شکست" است، بنابراین، به عنوان مثال، این ساختار:

StrReplace(VariableNumber, ","");
کار نخواهد کرد دو گزینه برای حل مشکل وجود دارد، یا به جای فاصله، Symbols.NPP را برای جایگزینی مشخص کنید، یا از تابع Format() استفاده کنید.

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها. StrReplace(VariableNumber, Characters.NPP,""); // گزینه 1
در:قالب (VariableNumber,"HG="); // گزینه دوم

چگونه یک شرط را در یک پرس و جو تنظیم کنیم تا فقط اسناد یک نوع خاص در انتخاب حاصل گنجانده شود؟
این را می توان با استفاده از عملگر زبان پرس و جو REF انجام داد، که به شما امکان می دهد بررسی کنید که آیا مقدار عبارت مشخص شده در سمت چپ آن ارجاع به جدول مشخص شده در سمت راست است یا خیر. بیایید به یک مثال نگاه کنیم، از ثبت انباشت فروش خدمات فقط آن دسته از رکوردهایی را انتخاب کنید که ثبت کننده آنها سند فروش کالا و خدمات است:
Request=New Request("
|انتخاب کنید
| اجرای خدمات ثبت،
| میزان فروش خدمات
|از
| ثبت انباشته خدمات چگونه پیاده سازی خدمات

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.چگونه می توان اسناد / کتاب های مرجع خاص را بین پیکربندی های یکسان انتقال داد؟
در:این را می توان با استفاده از پردازش استاندارد UploadLoadDataXML.epf که بر روی دیسک های ITS ارائه شده است انجام داد.

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.چگونه داده ها را بین پیکربندی های مختلف (یا از 7.7 به 8) انتقال دهیم؟
در:به نظر من بهترین گزینه استفاده از پیکربندی استاندارد "تبدیل داده" است که در دیسک های ITS ارائه شده است.

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.چگونه می توانم یک رشته خاص را به یک فیلد نوع غیر رشته ای در یک پرس و جو اضافه کنم، به عنوان مثال SELECT Sales of Goods and Services + "RUR"؟
در:به هیچ وجه. تبدیل نوع در یک پرس و جو امکان پذیر نیست. برخی از افراد توسط ساخت زبان پرس و جو EXPRESS گمراه می شوند، اما فقط مقدار یک نوع ترکیبی را به یکی از انواع تشکیل دهنده مقدار می دهد و به هیچ وجه نوع را تبدیل نمی کند، بنابراین در این شرایط قابل اجرا نیست.

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.چگونه می توانم یک شرط را در یک پرس و جو در یک فیلد با نوع رشته ای با طول نامحدود تنظیم کنم، به عنوان مثال، همه اسناد را با یک نظر خاص انتخاب کنم؟
در:برای انجام این کار، باید طول فیلد را با استفاده از عملگر زبان پرس و جو EXPRESS محدود کنید. به عنوان مثال:

چگونه یک شرط را در یک پرس و جو تنظیم کنیم تا فقط اسناد یک نوع خاص در انتخاب حاصل گنجانده شود؟
این را می توان با استفاده از عملگر زبان پرس و جو REF انجام داد، که به شما امکان می دهد بررسی کنید که آیا مقدار عبارت مشخص شده در سمت چپ آن ارجاع به جدول مشخص شده در سمت راست است یا خیر. بیایید به یک مثال نگاه کنیم، از ثبت انباشت فروش خدمات فقط آن دسته از رکوردهایی را انتخاب کنید که ثبت کننده آنها سند فروش کالا و خدمات است:
| لینک فروش کالا و خدمات
| اجرای خدمات ثبت،
| سند فروش کالا و خدمات چگونه به فروش کالا و خدمات
|از
| EXPRESS(SalesProductsServices.Comment AS ROW(100)) = &Comment");

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.آیا آنالوگ تابع 7.7 CatalogIB() در v 8 وجود دارد؟
در:نه، از آنجایی که چنین عملکردی برای حالت عملکرد سرویس گیرنده-سرور منطقی نیست. با این حال، برای حالت فایل، می توان یک دایرکتوری به دست آورد پایگاه اطلاع رسانیبا استفاده از ساختار زیر:

CatalogIB=NStr(InformationBaseConnectionString(),"File");

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.چگونه یک گره را از یک پایگاه اطلاعاتی توزیع شده جدا کنیم؟
در:با استفاده از ساختار زیر:

ExchangePlans.SetMainNode (تعریف نشده)؛

یا پیکربندی را با پارامتر اجرا کنید خط فرمان/ResetMasterNode (برای نسخه های اصلی استفاده نمی شود).

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.چگونه می توان نام سند (مشابه روش 7.7 View()) را بدست آورد؟
در:استفاده از ابرداده به عنوان مثال:

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.چگونه اسناد همه نوع را در یک پرس و جو انتخاب کنیم؟
در:استفاده از ابرداده و توانایی ترکیب کوئری ها پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.

درخواست=درخواست جدید;
متن="";
برای هر سند از چرخه Metadata.Documents
Text=Text+"انتخاب پیوند از سند."+Document.Name+"MERGE";
چرخه پایان
Query.Text=Left(Text,StrLength(Text)-StrLength("COMBINE"));
Select=Query.Run().Select();

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.چگونه گزارش/پردازش را قطع کنیم؟
در:با استفاده از عملگر UserInterrupt Handling()، توصیه می شود از آن در داخل حلقه ها استفاده کنید. هنگامی که کاربر کلید ترکیبی Ctrl+Break را فشار می دهد، اجرا قطع می شود و پیام مربوطه نمایش داده می شود. به عنوان مثال:

در حالی که حلقه () Select.Next
UserInterruptHandling();

چرخه پایان

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.فرم دارای یک TableField با نوع ValueTree و مجموعه ویژگی Tree است. چرا درخت ارزش نمایش داده نمی شود؟
در:علاوه بر این، باید ویژگی Display Hierarchy را برای یکی از ستون ها تنظیم کنید.

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.چگونه از وظایف روتین در حالت فایل پایگاه اطلاعاتی استفاده کنیم؟
در:برخلاف سرویس گیرنده-سرور، در حالت فایل، مسئولیت اجرای راه اندازی خودکار است کارهای روتینمتعلق به توسعه دهنده است. برای اجرای خودکار شروع کارها، به یک Waiting Handler نیاز دارید که به طور دوره‌ای وظایف «موقع شده» را بررسی کرده و آنها را شروع کند. به شدت توصیه می شود که از یک جلسه جداگانه برای این کار استفاده کنید. مثال:

Procedure CheckTasks()
RunTaskProcessing();
پایان رویه
ConnectWaitingHandler ("CheckingTasks"،3);

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.چگونه یک آرایه از یک رشته محدود شده بدست آوریم؟
در:به عنوان مثال، من نسخه خود را از یک تابع ارائه می کنم که "در هر دو جهت" کار می کند، یعنی. هنگام ارسال یک رشته محدود، یک آرایه و هنگام ارسال یک آرایه، یک رشته محدود از آن تشکیل می دهد.

تابع StringArray (مقدار ارزش، جداکننده)
اگر TypeValue(Value)=Type("String") سپس
MnStr = StrReplace(Value, Separator, Characters.PS);
آرایه=آرایه جدید;
برای n=1 توسط چرخه StrNumber Of Rows(MnStr).
Array.Add(StrGetString(MnStr,n));
چرخه پایان
آرایه بازگشت؛
ElseIfTypeValue(Value)=Type("Array") سپس
خط = "";
برای هر عنصر از چرخه ارزش
String=String+?(String""Separator,"")+Element;
چرخه پایان
بازگشت رشته;
در غیر این صورت
بازگشت تعریف نشده؛
endIf;
EndFunction

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.چگونه می توان امکان ایجاد تغییرات در پیکربندی را در یک پیکربندی استاندارد فعال کرد؟
در:از آنجایی که تنظیمات استاندارد پشتیبانی می شوند (که اجازه می دهد حالت خودکاربه روز رسانی)، سپس به طور پیش فرض، توانایی ایجاد تغییرات در پیکربندی غیرفعال است. برای فعال کردن این ویژگی، باید آیتم منو "Configuration > Support > Support Settings" را در پیکربندی انتخاب کنید و در پنجره باز شده، روی دکمه "Enable the ability to change" کلیک کنید.

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.چگونه یک رمز عبور پردازش/پیکربندی تنظیم کنیم؟
در:در 1C v 8، رمزهای عبور را فقط می توان بر روی ماژول های شی تنظیم کرد. برای تنظیم رمز عبور، باید ماژول شی را باز کنید و آیتم منو "Text > Set password" را انتخاب کنید. همچنین می‌توان پیکربندی را بدون کد منبع ماژول‌های شی (پیکربندی شده در «پیکربندی > تحویل پیکربندی > تنظیمات تحویل») ارائه کرد. من می خواهم توجه داشته باشم که در در حال حاضر، هیچ یک از این روش ها نیست حفاظت قابل اعتماداز مشاهده کد منبع ماژول.

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.چرا یک سند را با استفاده از روش FindByNumber جستجو نمی کنید(<Номер документа>)?
در:باید به خاطر داشت که اگر شماره گذاری دوره ای برای این نوع سند در پیکربندی تنظیم شده باشد، علاوه بر شماره سند، باید تاریخ فاصله را نیز به عنوان پارامتر دوم مشخص کنید. در غیر این صورت، سند با جستجو خواهد شد تاریخ خالی، که بدیهی است به نتیجه مطلوب منجر نخواهد شد.

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.در 1C 8.1، در صورت لزوم، به یک قبلا متصل شوید برنامه در حال اجرابرای اشکال زدایی (Configurator > Debugging > Connection) موارد اشکال زدایی موجود خالی هستند. دلیلش چیست؟
در:نکته این است که برای برنامه ای که می خواهیم اشکال زدایی کنیم، باید به صراحت اجازه اشکال زدایی را بدهیم. منوی ابزار > گزینه ها > برگه سیستم > پرچم "اشکال زدایی فعال شد".

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.چگونه تکرار را روی رشته ها سازماندهی کنیم لیست پویا(به عنوان مثال، فهرست فهرست یا فهرست اسناد)؟
در:این را می توان با استفاده از Report Builder انجام داد، برای مثال:

سازنده=NewReportBuilder;
Builder.DataSource=NewDataSourceDescription(DocumentList);
Selection=Builder.Result.Select();
در حالی که حلقه () Select.Next
گزارش (انتخاب. پیوند);
چرخه پایان

توجه: انتخاب شامل ردیف هایی مطابق با انتخاب فعلی انتخاب شده خواهد بود.

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.چگونه مقادیر ویژگی اشیاء ابرداده را بررسی کنیم؟ مثلا نوع سلسله مراتب دایرکتوری یا حالت ضبط رجیستر یا فرکانس شماره سند؟
در:همه این ویژگی ها ویژگی های قابل شمارش اشیاء ابرداده هستند. همچنین می توانید مقادیری از این نوع را از طریق ابرداده دریافت کنید. مثال ها:

// مثال 1. نوع سلسله مراتب دایرکتوری
If Metadata.Directories[Directory Name].Hierarchy View = Metadata.Properties Object.Hierarchy View.Hierarchy of Groups and Elements then...
// مثال 2. RegisterRecord Mode
اگر Metadata.InformationRegisters[RegisterName].RegisterRecordMode = Metadata.ObjectProperties.RegisterRecordMode.Submission toRegistrar سپس...
// مثال 3. تناوب بودن شماره سند
اگر Metadata.Documents[DocumentName].PeriodicityNumbers = Metadata.ObjectProperties.PeriodicityDocumentNumbers.Non-Periodic سپس...

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.چگونه یک چک باکس با سه حالت در درخت ارزش پیاده سازی کنیم؟
در:اجازه دهید فرمول مسئله را با جزئیات بیشتری در نظر بگیریم. فرم دارای یک فیلد جدول است که منبع داده آن درخت مقدار است. در یکی از ستون ها یک عنصر کنترلی "Checkbox" وجود دارد. لازم است که بتواند سه حالت "روشن"، "خاموش" و "تعریف نشده" را بپذیرد. در این مورد، ایالت "تعریف نشده" یا به اصطلاح "پرچم خاکستری" است، یعنی. اگر همه سطرهای فرعی دارای وضعیت چک باکس یکسان نباشند، قسمتی انتخاب شده تنظیم می شود. همچنین، اگر یک ردیف دارای ردیف‌های فرعی باشد، وقتی پرچم آن تغییر می‌کند، پرچم‌های تمام ردیف‌های فرعی نیز باید تغییر کند.
ابتدا، بیایید ستون چک باکس خود را به درخت ارزش اضافه کنیم:

Tree.Columns.Add("Mark", New TypeDescription("Number"));
FormElements.Tree.CreateColumns();
TreeColumns=FormElements.Tree.Columns;
TreeColumns.Mark.FlagData="Mark";
TreeColumns.Mark.SetControlElement(Type("Checkbox"));
Tree Columns.Mark.EditMode=EditModeColumns.مستقیم
مطلقا
TreeColumns.Mark.ThreeStatesFlag=True;

در مرحله دوم، هنگام تغییر یک چک باکس، باید مقادیر مربوطه را در ردیف های فرعی تنظیم کنید و مقدار چک باکس را در "ردیف والد" کنترل کنید:

Procedure TreeWhenChangingFlag (عنصر، ستون)
CurrentRow=Element.CurrentRow;
اگر CurrentLine.Mark=2 سپس
CurrentLine.Mark=0;
endIf;
SettingFlags (CurrentRow، CurrentRow.Mark)؛
در حالی که حلقه CurrentRow.Parent Undefined
CurrentRow.Parent.Mark=?(SetForAll(CurrentRow),CurrentRow.Mark, 2);
CurrentRow = CurrentRow.Parent;
چرخه پایان
پایان رویه

در اینجا، روال SetFlags() به صورت بازگشتی چک باکس ها را در ردیف های فرعی تنظیم می کند:

پرچم‌های تنظیم رویه (ردیف فعلی، مقدار)
برای هر صفحه از چرخه CurrentRow.Rows
PageMark=Value;
SetChecks (Page,PageMark)؛
چرخه پایان
پایان رویه

و تابع SetForAll() بررسی می کند که آیا یک مقدار برای همه ردیف ها در سطح فعلی تنظیم شده است یا خیر:

تابع SetForAll (رشته)
برای هر صفحه از چرخه Row.Parent.Rows
اگر Page.MarkLine.Mark Then
بازگشت نادرست؛
endIf;
چرخه پایان
بازگشت درست؛
EndFunction

پرسش‌های متداول یا پلتفرم 8 برای آدمک‌ها.چگونه می توانم مرتب سازی بر اساس ویژگی های خودم را در فرم لیست پیاده کنم؟
در:اگر مشخصه از نوع اولیه باشد، کافی است ویژگی ویژگی “Index” را روی مقدار “Index” یا “Index with extra” قرار دهیم. سفارش" (برای ویژگی های نوع ذخیره ارزش در دسترس نیست). اگر مشخصه یک نوع مرجع است، باید صریحاً اجازه مرتب سازی برای آن را بدهید. به عنوان مثال:

Element UP=Form Elements.DirectoryList.Order Settings.Find("Props1");
اگر عنصر UP تعریف نشده باشد سپس
ElementUP.Availability=True;
endIf;