1C proqramlaşdırmada peşəkar yanaşma – biznesiniz üçün optimal həllər

1c Proqramlasdirma Ucun F Rdi H Ll R
1C Avtomatlaşdırma

1C sisteminin fərdiləşdirilməsi, yeni modullar və mövcud funksiyaların genişləndirilməsi.

1c Il Biznesin R Q Msal Avtomatlasdirilmasi
Xidmətlərimiz

1C proqramlaşdırma, fərdi həllər, inteqrasiyalar və biznes proseslərinin avtomatlaşdırılması.

Kodyaz 1c Proqramlasdirma T Limi
Təlimlər

1C proqramlaşdırma dərsləri, praktiki tapşırıqlar və peşəkar inkişaf.

Kodyaz Il R Q Msal Inteqrasiya Ofisi
Rəqəmsal həllər

API inteqrasiyaları, avtomatlaşdırılmış iş axınları və süni intellekt əsaslı həllər.

1c D S Tir Proqramlasdirma D Rsi

1C Proqramlaşdırmada “Строка”

1C:EnterpriseProqramlaşdırma əsaslarıOxuma müddəti: ≈ 12 dəq

İ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əqalədə nələri öyrənəcəksiniz

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ə
1Mətn + ədədNəticəni sol operandın tipi müəyyən edir; "5" + 5 nəticəsi "55"-dir
2Sətir funksiyalarıMövqe nömrələnməsi 1-dən başlayır
3AxtarışНайти() tapmayanda 0 qaytarır
4Bölmə və birləşdirməСтрРазделить massiv qaytarır, СтрСоединить massivi sətirə yığır
5Boş sahə yoxlamasıПустаяСтрока(" ") nəticəsi Истина-dır
6NULL 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") + 510Açıq çevirmədən sonra riyazi toplama
"5" (Строка) + 5 (Число) "55" (Строка) Число("5") → 5 + 5 (Число) 10 (Число)
Şəkil 1. Eyni rəqəmlər, fərqli nəticə: tipi sol operand müəyyən edir
Bildiris = "Qiymət: " + 25;        // "Qiymət: 25"
Metn5    = "5" + 5;                // "55" (mətn)
DogruCem = Число("5") + 5;         // 10 (ədəd)
Tövsiyə

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)StrLenSimvolların ümumi sayını qaytarır
Лев(Metn, Say)LeftSoldan göstərilən sayda simvolu götürür
Прав(Metn, Say)RightSağdan göstərilən sayda simvolu götürür
Сред(Metn, Baslanqic, Say)MidVerilə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)
S a l a m ␣ k o d y a z l ı l a r 1234567891011121314151617 Simvol mövqeləri (1-dən başlayır) Лев(Metn, 5) = "Salam" Сред(Metn, 7, 6) = "kodyaz" Прав(Metn, 11) = "kodyazlılar"
Şəkil 2. “Salam kodyazlılar” mətni: 17 simvol, boşluq da simvol sayılır
Лев(Metn, 5)
5
Сред(Metn, 7, 6)
6
Прав(Metn, 11)
11
СтрДлина(Metn)
17

Şə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", "@")0Tapılmadı
Найти("Kodyaz", "kod")0Axtarış 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ı!");
КонецЕсли;
Daha yeni alternativ

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)
1С:Предприятие — Test bazası Test emalı: e-poçt yoxlaması E-poçt: info@kodyaz.az Yoxla Düyməyə basanda Найти(Email, "@") çağırılır. Mesajlar @ işarəsi tapıldı, mövqeyi: 5
Şəkil 4. 1C:Enterprise istifadəçi rejimi: nəticənin mesaj panelində görünüşü (illustrativ sxem, real ekran şəkli deyil)

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.

"Alma; Armud; Nar" ["Alma"," Armud"," Nar"]Массив "Alma - Armud - Nar" СтрРазделитьСокрЛП + СтрСоединить
Şəkil 5. Mətnin massivə bölünməsi və təmizləndikdən sonra yenidən birləşdirilməsi
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"
İki incəlik

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.

Vacib

ПустаяСтрока() (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"ЛожьИстина
Müştəri (yaratma) — 1С:Предприятие Yaz və bağla Yaz Ad: ····· Sahə doldurulmalıdır Telefon: +994 50 000 00 00 İstifadəçi Ad sahəsində yalnız boşluq daxil edib. Yoxlama: Если ПустаяСтрока(Объект.Ad) Тогда Отказ = Истина; КонецЕсли;
Şəkil 6. 1C:Enterprise forması: yalnız boşluqdan ibarət Ad sahəsi rədd edilir (illustrativ sxem, real ekran şəkli deyil)
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ı

FunksiyaNümunəNəticə
НРег() (Lower)НРег("SALAM")"salam"
ВРег() (Upper)ВРег("salam")"SALAM"
ТРег() (Title)ТРег("salam dünya")"Salam Dünya"
Azərbaycan hərfləri

İ/ı, Ə/ə 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"
Əsl təhlükə

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.

Sorğunəticəsi NULL və yaНеопределено? BəliBoş mətn "" və ya default dəyər XeyrСтрока(Deyer)
Şəkil 7. Mətnə çevirməzdən əvvəl yoxlama

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

  1. Sol operand tipi müəyyən edir. "5" + 5 nəticəsi "55"-dir; riyazi toplama üçün Число() istifadə edin.
  2. Mövqelər 1-dən başlayır. Лев, Прав, Сред və Найти bu qaydaya tabedir.
  3. Найти tapmayanda 0 qaytarır. Yoxlamanı > 0 ilə qurun, registrə həssas olduğunu unutmayın.
  4. СтрРазделить ilə СтрСоединить cütlüyü massiv və mətn arasında körpüdür; elementləri СокрЛП ilə təmizləyin.
  5. Boş sahə üçün ПустаяСтрока() yalnız boşluqlardan ibarət sətri də tutur.
  6. NULL və Неопределено 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.

Şərh yaz

Sizin e-poçt ünvanınız dərc edilməyəcəkdir. Gərəkli sahələr * ilə işarələnmişdir