Proqramlaşdırmaya yeni başlayan çoxları dəyişənlərə yaddaşda məlumat saxlayan sadə “qutu” kimi baxır. 1C:Enterprise (1С:Предприятие) daxili dilində isə bu anlayışın arxasında kodun etibarlılığını müəyyən edən qaydalar var: adlandırma, görünüş sahəsi, ilkin qiymət, tip və parametrlərin ötürülməsi.
Bu məqalədə dəyişənlərlə bağlı beş vacib məqamı nümunələrlə nəzərdən keçirəcəyik.
1Adlandırma qaydaları və hərf həssaslığının olmaması
Dəyişənlərə, prosedurlara və funksiyalara verilən adlar identifikator adlanır. Ad seçərkən həm sintaksis qaydalarına, həm də oxunaqlılığa diqqət yetirmək lazımdır.
- İdentifikator hərflərdən, rəqəmlərdən və alt xətt (
_) işarəsindən ibarət ola bilər. - Ad rəqəmlə başlaya bilməz:
Say1düzgündür,1ciSayyanlışdır. - Adın daxilində boşluq, nöqtə, vergül, tire kimi işarələr ola bilməz.
Если,Для,Цикл,Процедураkimi dilin açar sözlərini identifikator kimi işlətmək olmaz.
Yadda saxla: 1C-də identifikatorlar hərf registrinə həssas deyil. Say, say və SAY eyni identifikatordur.
Sərbəstlik olsa da, layihə boyu vahid üslub saxlamaq vacibdir: MusteriKodu, CemiMebleg kimi aydın adlar seçin.
Praktiki tövsiyə: nümunələrdə olduğu kimi adları latın hərfləri ilə, Azərbaycan dilinə məxsus xüsusi hərflər (ə, ş, ı) olmadan yazın. Beləcə kod müxtəlif mühitlərdə və redaktorlarda problemsiz işləyir.
2Görünüş sahəsi və ömür: “stəkan” və “şkaf” məntiqi
Dəyişənin harada elan olunması onun haradan əlçatan olmasını və nə qədər mövcud qalmasını müəyyən edir. Lokal dəyişən otaqdakı stəkana, modul dəyişəni isə eyni modulun bir neçə prosedurunun istifadə etdiyi şkafa bənzəyir.
| Növ | Harada elan olunur? | Əlçatanlıq | Vacib qeyd |
|---|---|---|---|
| Lokal dəyişən | Prosedur və ya funksiyanın daxilində | Yalnız həmin prosedur/funksiya daxilində | Prosedur bitəndə yox olur; başqa prosedur ona birbaşa müraciət edə bilməz. |
| Modul dəyişəni | Modulun yuxarı hissəsində, prosedurlardan əvvəl Перем ilə | Həmin modulun bütün prosedurlarında | Modulun icra konteksti ilə yaşayır. Ümumi modullarda (Общий модуль) modul dəyişəni elan etmək olmur. |
| Eksport edilən modul dəyişəni | Modul səviyyəsində, Экспорт ilə | Uyğun modul tiplərində (məsələn, forma və obyekt modulları) həmin modulun obyekti vasitəsilə digər koddan | Bütün tətbiq üzrə sərbəst qlobal dəyişən yaratmır. |
// Modulun yuxarı hissəsində:
Перем ModulMeblegi;
Процедура Hesabla()
LokalMebleg = 150;
ModulMeblegi = LokalMebleg * 2;
КонецПроцедурыLokalMebleg yalnız Hesabla() daxilində mövcuddur. ModulMeblegi modul səviyyəsində elan olunub və həmin modulun digər prosedurlarında da görünür.
Risk: modul dəyişənini bir neçə prosedur dəyişirsə, birinin yazdığı qiymət digərinin gözlədiyini poza bilər. Mümkün qədər dəyişəni lokal saxlayın və məlumatı parametr vasitəsilə ötürün.
3İlkin qiymət və Неопределено sürprizi
Перем Say; kimi elan olunmuş və hələ qiymət almamış dəyişənin qiyməti Неопределено olur. Bu, sıfır (0) və ya boş mətn ("") ilə eyni deyil: Неопределено “qiymət yoxdur” deməkdir.
0
Ədəddir. Hesablamalarda istifadə oluna bilər.
""
Boş mətndir: uzunluğu sıfır olan mətn qiyməti.
Неопределено
Qiymətin olmadığı və ya təyin edilmədiyi xüsusi vəziyyət.
ЗначениеЗаполнено()
Qiymətin doldurulub-doldurulmadığını yoxlayır. Неопределено, 0 və "" üçün Ложь qaytarır.
Qızıl qayda: dəyişən və ya funksiya nəticəsi üzərində əməliyyat aparmazdan əvvəl onun gözlənilən qiymətə malik olduğunu yoxlayın.
Процедура Emal()
Netice = AxtarisEt();
Если Netice = Неопределено Тогда
Сообщить("Uyğun məlumat tapılmadı.");
Возврат;
КонецЕсли;
// Yalnız yoxlamadan sonra Netice-dən istifadə edin.
КонецПроцедурыFunksiya heç nə tapmayanda Неопределено qaytarırsa, nəticəni yoxlamadan onunla hesablama aparmaq icra xətasına səbəb olur. Burada = Неопределено müqayisəsi dəqiq yoxlamadır. ЗначениеЗаполнено() isə qiymət 0 və ya "" olanda da Ложь verdiyi üçün onu yalnız “boşdur” məntiqi nəzərdə tutulanda seçin.
4Çevik qutu: dinamik tipləşdirmə
1C daxili dilində dəyişən elan edilərkən sərt tipə bağlanmır. Eyni dəyişənə proqramın müxtəlif mərhələlərində müxtəlif tipli qiymətlər mənimsətmək olar.
Deyer = 25; // Число
Deyer = "KodYaz"; // Строка
Deyer = ТекущаяДата(); // Дата
Deyer = Истина; // БулевоBu, müxtəlif mənbələrdən gələn məlumatı emal etməyi asanlaşdırır. Lakin eyni dəyişənin tipini səbəbsiz dəyişmək kodu oxunmaz edir və tip uyğunsuzluğu xətalarına gətirib çıxarır.
Tipi necə yoxlamaq olar?
ТипЗнч(Deyer)dəyişənin hazırkı faktiki tipini qaytarır.Тип("Число")verilmiş tipin təsvirini qaytarır, müqayisə üçün istifadə olunur.
Ededdir = (ТипЗнч(Deyer) = Тип("Число"));
Если Ededdir Тогда
// Deyer ədəd tipindədir.
КонецЕсли;Praktiki tövsiyə: forma sahələrindən, xarici inteqrasiyalardan və funksiya parametrlərindən gələn qiymətləri emal etməzdən əvvəl tipini və məzmununu yoxlayın.
5Parametrlərin ötürülməsi: istinad və Знач
1C-də parametrlər standart olaraq istinadla ötürülür. Prosedur daxilində parametrə yeni qiymət mənimsədilsə, çağıran koddakı dəyişən də dəyişir. Bu, ədəd və mətn kimi sadə tiplərə də aiddir. Знач açar sözü isə parametri qiymətlə ötürür: prosedur surət üzərində işləyir, çağıran tərəfin dəyişəni toxunulmaz qalır.
Процедура Artir(Say)
Say = Say + 1;
КонецПроцедуры
Процедура ArtirKopya(Знач Say)
Say = Say + 1;
КонецПроцедуры
Процедура Test()
X = 10;
Artir(X); // X artıq 11-dir
ArtirKopya(X); // X yenə 11-dir
КонецПроцедурыBənzətmə: istinadla ötürmə orijinal sənədin özünü vermək, Знач isə onun surətini vermək kimidir.
Mürəkkəb obyektlərdə nəzərə alın
Массив, Структура, ТаблицаЗначений kimi obyektlər istinad tiplidir. Знач ilə ötürəndə də eyni obyektə istinad ötürülür. Ona görə prosedur daxilində obyektin məzmununu dəyişmək çağıran tərəfə görünür. Знач yalnız parametr dəyişəninə başqa obyekt mənimsədilməsinin çağıran tərəfə təsir etməsinin qarşısını alır. Yəni Знач dərin surət yaratmır.
Процедура Doldur(Знач Massiv)
Massiv.Добавить(1); // çağıran tərəfdəki massivə də əlavə olunur
Massiv = Новый Массив; // yalnız lokal parametr dəyişir
КонецПроцедурыPeşəkar vərdiş: parametrin dəyişdirilməsi nəzərdə tutulmursa, Знач yazın və prosedurun nə etdiyini ad və ya şərhlə aydın göstərin. Komanda layihələrində bu, kodun niyyətini anlaşıqlı edir.
?Özünü yoxla
Suallara cavab verin, sonra açıqlamanı açıb yoxlayın.
1. 1C-də Say və say iki ayrı dəyişəndirmi?
Cavabı göstər
Xeyr. 1C identifikatorları hərf registrinə həssas deyil, bunlar eyni identifikatordur.
2. Lokal dəyişənə başqa prosedurdan birbaşa müraciət etmək olarmı?
Cavabı göstər
Xeyr. Lokal dəyişən yalnız elan olunduğu prosedur və ya funksiya daxilində görünür.
3. Неопределено ilə 0 eyni məna daşıyırmı?
Cavabı göstər
Xeyr. Sıfır ədədi qiymətdir, Неопределено isə “qiymət yoxdur” vəziyyətidir.
4. Dəyişənin tipini yoxlamaq üçün nədən istifadə edilir?
Cavabı göstər
ТипЗнч() faktiki tipi qaytarır, onu Тип("Число") kimi tip təsviri ilə müqayisə edirik.
5. Знач yazmadan ötürülən parametri prosedur dəyişsə, çağıran dəyişənə təsir edirmi?
Cavabı göstər
Bəli. Standart ötürmə istinadladır, ona görə dəyişiklik çağıran koddakı dəyişəndə də görünür. Знач bunun qarşısını alır, lakin istinad tipli obyektlərin məzmununun dəyişməsini dayandırmır.
Nəticə: kodunuz nə qədər təhlükəsizdir?
1C-də dəyişənlər yalnız məlumat saxlamaq üçün deyil, proqramın arxitekturasını qurmaq üçün də istifadə olunur. Aydın identifikator seçmək, görünüş sahəsini düzgün müəyyənləşdirmək, Неопределено hallarını yoxlamaq, dinamik tipləşdirməyə nəzarət etmək və parametrlərin standart olaraq istinadla ötürüldüyünü bilmək kodun etibarlılığını artırır.
Bəs siz gündəlik 1C kodlaşdırmasında parametrlərin ötürülmə qaydasına diqqət yetirirsinizmi?
Qeyd: nümunələr tədris məqsədi daşıyır. Konkret davranış platformanın versiyasından, modul tipindən və icra kontekstindən (müştəri/server) asılı ola bilər.








