İstifadəçi adları, e-poçt ünvanları, barkodlar, sənəd nömrələri və müqavilə şərtləri biznes tətbiqlərində ən çox məhz mətn (Строка, ingiliscə String) tipində saxlanılır. Mətn yazmaq asan görünür: dırnaq qoyursan və hazırdır. Amma boşluqlardan ibarət “boş” sahələr, mətnin ədədlə birləşməsi, sətirlərin 1-dən nömrələnməsi və NULL kimi məqamlar kodda gizli xətalara səbəb olur. Bu məqalədə Строка tipinin 6 vacib məqamını praktiki nümunələrlə izah edirik.
Mətn və ədədin birləşmə qaydasını, СтрДлина, Лев, Прав, Сред funksiyalarını, Найти və СтрНайти fərqini, СтрРазделить ilə СтрСоединить cütlüyünü, boş sahələrin düzgün yoxlanmasını və NULL ilə təhlükəsiz işləməyi.
| № | Məsələ | Qısa nəticə |
|---|---|---|
| 1 | Mətn + ədəd | Nəticəni sol operandın tipi müəyyən edir; "5" + 5 nəticəsi "55"-dir |
| 2 | Sətir funksiyaları | Mövqe nömrələnməsi 1-dən başlayır |
| 3 | Axtarış | Найти() tapmayanda 0 qaytarır |
| 4 | Bölmə və birləşdirmə | СтрРазделить massiv qaytarır, СтрСоединить massivi sətirə yığır |
| 5 | Boş sahə yoxlaması | ПустаяСтрока(" ") nəticəsi Истина-dır |
| 6 | NULL və Неопределено | Строка() bunları xəta vermədən mətnə çevirir, amma nəticə faydasızdır |
1. Mətn və ədədin birləşməsi: sol operand qərar verir
1C-də mətn dəyərləri qoşa dırnaq daxilində yazılır. Dırnağın özünü mətnə daxil etmək üçün onu ikiqat yazırlar: "Ad: ""Ali""". Mətnlər + operatoru ilə birləşdirilir (konkatenasiya).
Mətn və başqa tipli dəyər + ilə birləşəndə nəticə solda duran operandın tipinə görə müəyyən olunur. Sol operand mətndirsə, sağ operand mətnə çevrilir və iki mətn birləşir.
| İfadə | Nəticə | İzah |
|---|---|---|
"Qiymət: " + 25 | "Qiymət: 25" | Sol operand mətn → ədəd mətnə çevrilir |
"5" + 5 | "55" | Mətn birləşməsi, riyazi toplama deyil |
Число("5") + 5 | 10 | Açıq çevirmədən sonra riyazi toplama |
Bildiris = "Qiymət: " + 25; // "Qiymət: 25"
Metn5 = "5" + 5; // "55" (mətn)
DogruCem = Число("5") + 5; // 10 (ədəd)
Gizli çevirməyə güvənməyin. Mətn hazırlayanda СтрШаблон() (StrTemplate) istifadə edin; bu funksiya platformanın 8.3.6 və sonrakı versiyalarında mövcuddur. Həm oxunaqlıdır, həm də mətni tərcümə etməyi asanlaşdırır:
Bildiris = СтрШаблон("Qiymət: %1 AZN, miqdar: %2", Формат(25, "ЧДЦ=2"), 3);
// "Qiymət: 25,00 AZN, miqdar: 3" (onluq ayırıcı regional ayarlardan asılıdır)
2. Mətni hissələrə ayırmaq: СтрДлина, Лев, Прав, Сред
| Funksiya | İngilis qarşılığı | Nə edir |
|---|---|---|
СтрДлина(Metn) | StrLen | Simvolların ümumi sayını qaytarır |
Лев(Metn, Say) | Left | Soldan göstərilən sayda simvolu götürür |
Прав(Metn, Say) | Right | Sağdan göstərilən sayda simvolu götürür |
Сред(Metn, Baslanqic, Say) | Mid | Verilən mövqedən etibarən simvolları götürür |
C++, Java və Python kimi dillərdən gələn proqramçılar indeksi 0-dan saymağa öyrəşiblər. 1C-nin sətir funksiyalarında isə ilk simvolun nömrəsi 1-dir.
Metn = "Salam kodyazlılar";
Uzunluq = СтрДлина(Metn); // 17
SolHisse = Лев(Metn, 5); // "Salam"
SagHisse = Прав(Metn, 11); // "kodyazlılar"
OrtaHisse = Сред(Metn, 7, 6); // "kodyaz" (7-ci simvoldan 6 simvol)
Şəkil 3. Funksiyaların qaytardığı hissələrin simvol sayı
3. Axtarış: Найти tapmayanda 0 qaytarır
Найти(Metn, Axtarilan) alt-mətni tapanda onun ilk simvolunun mövqeyini (1-dən başlayaraq) qaytarır. Tapmayanda isə 0 verir; -1 və ya xəta yoxdur. Yoxlamanı həmişə > 0 şəklində qurun.
| Çağırış | Nəticə | İzah |
|---|---|---|
Найти("info@kodyaz.az", "@") | 5 | @ beşinci simvoldur |
Найти("info.kodyaz.az", "@") | 0 | Tapılmadı |
Найти("Kodyaz", "kod") | 0 | Axtarış böyük-kiçik hərfə həssasdır |
Email = "info@kodyaz.az";
AtMovqeyi = Найти(Email, "@");
Если AtMovqeyi > 0 Тогда
Сообщить("@ işarəsi tapıldı, mövqeyi: " + AtMovqeyi);
Иначе
Сообщить("Xəta: yanlış e-poçt ünvanı!");
КонецЕсли;
Platformanın yeni versiyalarında СтрНайти() (StrFind) funksiyası var. O, axtarış istiqamətini, başlanğıc mövqeyi və neçənci uyğunluğun axtarıldığını seçməyə imkan verir. Qaytarma qaydası eynidir: tapılmasa 0. Kodunuz hansı versiyada işləyəcəksə, ona uyğun funksiyanı seçin.
Əvəzləmə və müqayisə
СтрЗаменить(Metn, Axtarilan, Yeni)uyğun gələn bütün hissələri əvəz edir və hərf registrini nəzərə alır.СтрСравнить(Metn1, Metn2)registrdən asılı olmadan müqayisə edir: birinci kiçikdirsə -1, bərabərdirsə 0, böyükdürsə 1 qaytarır.
Metn = СтрЗаменить("a-b-c", "-", "/"); // "a/b/c"
Netice = СтрСравнить("Alma", "alma"); // 0 (registr nəzərə alınmır)
4. СтрРазделить və СтрСоединить cütlüyü
Mətni ayırıcıya görə hissələrə bölmək və ya massivin elementlərini bir mətndə birləşdirmək CSV emalında və ayırıcılı məlumat sətirlərində tez-tez lazım olur. Bunu muncuqlu boyunbağı ilə müqayisə etmək olar: СтрРазделить ipi kəsib muncuqları massivə tökür, СтрСоединить isə muncuqları seçdiyiniz ayırıcı ilə yenidən düzür.
MehsulMetni = "Alma; Armud; Nar";
// 1. Ayırıcıya görə massivə bölürük
MehsulMassivi = СтрРазделить(MehsulMetni, ";");
// ["Alma", " Armud", " Nar"] (boşluqlar elementlərdə qalır)
// 2. Hər elementi təmizləyib massivə yığırıq
TemizMassiv = Новый Массив;
Для Каждого Mehsul Из MehsulMassivi Цикл
TemizMassiv.Добавить(СокрЛП(Mehsul));
КонецЦикла;
// 3. Yeni ayırıcı ilə birləşdiririk
YeniMetn = СтрСоединить(TemizMassiv, " - ");
// "Alma - Armud - Nar"
1. СтрРазделить-in ikinci parametrində yazdığınız hər simvol ayrıca ayırıcı sayılır. Məsələn, ";," yazsanız, həm nöqtəli vergül, həm vergül bölücü olacaq. СтрСоединить-də isə ayırıcı bütöv mətn kimi istifadə olunur (məsələn, " - ").
2. Üçüncü parametr (ВключатьПустые) göstərilməyibsə, boş elementlər də massivə daxil olur. "a;;b" mətni üç element verir: "a", "" və "b".
5. İstifadəçi “hiylələri” və boş sahənin düzgün yoxlanması
İstifadəçilər məcburi sahəni tez keçmək üçün bəzən mətn əvəzinə bir neçə dəfə Space düyməsini basırlar. Yoxlamanı düzgün qurmasanız, belə sətir “doldurulmuş” sayıla bilər.
ПустаяСтрока() (IsBlankString) yalnız boş sətri yox, yalnız boşluqlardan (görünməyən simvollardan) ibarət sətri də boş hesab edir və Истина qaytarır. Yəni ПустаяСтрока(" ") nəticəsi Истина-dır.
| Dəyər | ПустаяСтрока() | ЗначениеЗаполнено() |
|---|---|---|
"" | Истина | Ложь |
" " (yalnız boşluq) | Истина | Ложь |
" Əli " | Ложь | Истина |
"Əli" | Ложь | Истина |
DaxilEdilenMetn = " "; // yalnız boşluqlar
Если ПустаяСтрока(DaxilEdilenMetn) Тогда
Сообщить("Sahəni həqiqi məlumatla doldurun!");
КонецЕсли;
// Verilənləri saxlamazdan əvvəl artıq boşluqları təmizləmək üçün:
Ad = СокрЛП(DaxilEdilenMetn);
СокрЛП() sətrin həm solundakı, həm sağındakı artıq boşluqları silir; СокрЛ() yalnız soldakıları, СокрП() isə yalnız sağdakıları silir. Bu funksiya yoxlama üçün deyil, məlumatı təmizləmək üçündür.
Registr funksiyaları
| Funksiya | Nümunə | Nəticə |
|---|---|---|
НРег() (Lower) | НРег("SALAM") | "salam" |
ВРег() (Upper) | ВРег("salam") | "SALAM" |
ТРег() (Title) | ТРег("salam dünya") | "Salam Dünya" |
İ/ı, Ə/ə kimi hərflərdə registr çevirməsinin nəticəsini platformanın lokalizasiya ayarlarında test edin. Ad və ya e-poçt müqayisəsi üçün hər iki tərəfi eyni funksiya ilə normallaşdırın.
Если НРег(СокрЛП(Email1)) = НРег(СокрЛП(Email2)) Тогда
Сообщить("Ünvanlar eynidir");
КонецЕсли;
6. NULL, Неопределено və Строка()
Неопределено BSL dilinin öz “dəyər yoxdur” göstəricisidir. NULL isə daha çox verilənlər bazasından, xüsusən sorğu nəticələrindən gəlir: məsələn, LEFT JOIN-də qarşılığı tapılmayan sahə NULL olur.
Hər iki dəyər Строка() funksiyasına xəta vermədən ötürülə bilər. Lakin nəticə boş mətn deyil, dəyərin adının özüdür:
| Çağırış | Nəticə |
|---|---|
Строка(Неопределено) | "Неопределено" |
Строка(NULL) | "NULL" |
Строка(25) | "25" |
Proqram çökmür, amma sənədə, hesabata və ya xarici sistemə göndərilən mətndə istifadəçi “NULL” və ya “Неопределено” sözünü görür. Bu daha pis ola bilər, çünki xəta səssiz keçir.
Düzgün həll: yoxlamanı tipə görə qurun
Burada ЗначениеЗаполнено() uyğun deyil. Çünki ədəd sıfır, 0, onun üçün də Ложь qaytarır və Строка(0) yerinə boş mətn alarsınız. Aşağıdakı funksiya yalnız NULL və Неопределено halını ayırır:
Функция EtibarliMetn(Deyer)
Если Deyer = Неопределено Или ТипЗнч(Deyer) = Тип("Null") Тогда
Возврат "";
КонецЕсли;
Возврат Строка(Deyer);
КонецФункции
Sorğuda problemi daha tez, bazaya yaxın səviyyədə həll etmək mümkündür. ЕстьNULL() funksiyası (IsNull) NULL dəyəri başqa dəyərlə əvəz edir:
ВЫБРАТЬ
Клиенты.Наименование КАК Ad,
ЕстьNULL(Адреса.Адрес, "") КАК Unvan
ИЗ
Справочник.Клиенты КАК Клиенты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Адреса КАК Адреса
ПО Клиенты.Ссылка = Адреса.Клиент
Yekun: 6 qayda yadda saxlayın
- Sol operand tipi müəyyən edir.
"5" + 5nəticəsi"55"-dir; riyazi toplama üçünЧисло()istifadə edin. - Mövqelər 1-dən başlayır.
Лев,Прав,СредvəНайтиbu qaydaya tabedir. Найтиtapmayanda 0 qaytarır. Yoxlamanı> 0ilə qurun, registrə həssas olduğunu unutmayın.СтрРазделитьiləСтрСоединитьcütlüyü massiv və mətn arasında körpüdür; elementləriСокрЛПilə təmizləyin.- Boş sahə üçün
ПустаяСтрока()yalnız boşluqlardan ibarət sətri də tutur. NULLvəНеопределеноmətnə çevriləndə “NULL” və “Неопределено” sözləri alınır; əvvəlcədən yoxlayın və ya sorğudaЕстьNULL()istifadə edin.
Tez-tez verilən suallar
"5" + 5 1C-də nə qaytarır?
Sol operand mətn olduğu üçün nəticə "55" mətnidir. Ədədi toplama üçün mətni əvvəlcə Число("5") ilə çevirmək lazımdır.
Найти() yoxsa СтрНайти() istifadə etməliyəm?
Sadə axtarış üçün hər ikisi uyğundur. Axtarış istiqaməti, başlanğıc mövqe və ya neçənci uyğunluq lazımdırsa, СтрНайти() daha rahatdır. Platformanın versiyasını nəzərə alın.
Yalnız boşluqdan ibarət sətri necə yoxlayım?
ПустаяСтрока() bu halı özü tutur. Məlumatı saxlayarkən əlavə olaraq СокрЛП() ilə təmizləmək məsləhətdir.
Строка(NULL) proqramı çökdürürmü?
Xeyr, “NULL” mətnini qaytarır. Əsas risk bu mətnin istifadəçiyə və ya xarici sistemə sızmasıdır. Əvvəlcədən yoxlayın və ya sorğuda ЕстьNULL() istifadə edin.
1C-də mətn emalı, import/ekspor və inteqrasiya üzrə dəstək lazımdır?
KodYaz komandası 1C proqramlaşdırması, fərdi həllər və təlimlər üzrə sizə kömək edə bilər. Bizimlə əlaqə saxlayın.







