1C-də ədədlərlə işləmək ilk baxışda çox sadə görünür. Lakin maliyyə hesablamaları, anbar qalıqları və ƏDV kimi məsələlərdə kiçik bir diqqətsizlik bazada bir neçə qəpiklik fərqə, sonra isə tapılması çətin uçot xətalarına çevrilə bilər. Bu məqalədə Число (ingiliscə Number) tipinin beş vacib xüsusiyyətini praktiki nümunələrlə izah edirik.
Ədədlərin 1C-də necə saxlanıldığını, kodda kəsr ədədin düzgün yazılışını, yuvarlaqlaşdırmanın nə vaxt və necə aparılmalı olduğunu, ЗначениеЗаполнено() funksiyasının sıfıra münasibətini və ədəd ilə mətn arasında çevirmənin təhlükəsiz üsullarını.
| № | Məsələ | Qısa nəticə |
|---|---|---|
| 1 | Vahid ədəd tipi | Tam və kəsr ədədlər üçün ayrıca tip yoxdur; 150 / 4 = 37.5 |
| 2 | Onluq ayırıcı | Kodda yalnız nöqtə: 12.5 |
| 3 | Yuvarlaqlaşdırma | Təsadüfi aralıq yuvarlaqlaşdırmadan çəkinin; qaydanı əvvəlcədən müəyyən edin |
| 4 | Sıfır və “boş” dəyər | ЗначениеЗаполнено(0) nəticəsi Ложь-dur |
| 5 | Ədəd ↔ mətn | Açıq çevirmədən və xətaya qarşı qoruyucudan istifadə edin |
1. Vahid tip: bütün ədədlər Число tipindədir
C++ və Java kimi dillərdə tam ədədlər (int) və kəsr ədədlər (float, double) ayrı tiplərdir. Bu dillərdə iki tam ədədi bir-birinə böləndə nəticə də tam ədəd olur və kəsr hissə atılır: 150 / 4 ifadəsi 37 verir.
1C-də isə müsbət, mənfi, tam və kəsr ədədlərin hamısı eyni Число tipinə aiddir. Ona görə bölmənin nəticəsi kəsr hissəni saxlayır.
TamEded = 150; // tam ədəd
KesrEded = 12.5; // kəsr ədəd
MenfiEded = -7; // mənfi ədəd
Cem = TamEded + KesrEded; // 162.5
Nisbet = TamEded / 4; // 37.5
Tipin vahid olması hər yerdə sərbəst dəqiqlik demək deyil. Verilənlər bazasında saxlanılan rekvizitlərin, qeydiyyat sahələrinin və sütunların ədəd üçün uzunluq və dəqiqlik (onluq rəqəm sayı) göstəriciləri var. Dəyər yazılanda bu ölçülərə uyğunlaşdırılır. Məsələn, məbləğ üçün 2 onluq işarəsi olan rekvizitdə ikidən artıq kəsr rəqəm saxlanılmır.
2. Kodda onluq ayırıcı həmişə nöqtədir
İstifadəçi interfeysində ədəd regional ayarlara görə vergüllə göstərilə bilər, məsələn 12,5. Proqram kodunda isə kəsr ədəd yalnız nöqtə ilə yazılır.
// Düzgün
KesrEded = 12.5;
// Səhv: sintaksis xətası verir
// KesrEded = 12,5;
Səbəb sadədir: vergül 1C dilində ayırıcı işarədir. O, metod və funksiyaların parametrlərini bir-birindən ayırır:
Cem = Макс(12, 5); // iki ayrı parametr: 12 və 5
Buna görə Макс(12,5) yazanda platforma 12,5 ədədini yox, 12 və 5 ədədlərini görür.
| Harada | Necə yazılır | Nümunə |
|---|---|---|
| Proqram kodu | Nöqtə | Qiymet = 12.5; |
| İstifadəçi interfeysi | Regional ayarlardan asılıdır | 12,5 və ya 12.5 |
| Mətndən ədədə çevirmə | Mətnin formatına və yerli ayarlara diqqət edin | Число("12.5") |
3. Yuvarlaqlaşdırma: Окр, Цел və Формат
1C-də kəsr hissə ilə işləmək üçün iki əsas funksiya var. Onların ingilis dilli sintaksisdəki qarşılıqları da mötərizədə verilib.
| Funksiya | Nə edir | Nümunə | Nəticə |
|---|---|---|---|
Окр (Round) | Verilən dəqiqliyə qədər riyazi qaydada yuvarlaqlaşdırır | Окр(2.567, 2) | 2.57 |
Окр | Yarımı yuxarı yuvarlaqlaşdırır (standart rejim) | Окр(2.5, 0) | 3 |
Цел (Int) | Kəsr hissəni sadəcə atır | Цел(2.9) | 2 |
Цел | Mənfi ədəddə sıfıra doğru kəsir | Цел(-2.9) | -2 |
Формат (Format) | Ədədi göstərmək üçün mətn qaytarır | Формат(2.5, "ЧДЦ=2") | "2,50" (mətn) |
Окр funksiyasının üçüncü parametri yuvarlaqlaşdırma rejimidir: Окр15как10 (standart) və Окр15как20. Mühasibat qaydası fərqli rejim tələb edirsə, rejimi açıq göstərmək məsləhətdir.
Əsas qayda: yuvarlaqlaşdırma siyasəti əvvəlcədən müəyyən olunmalıdır
Çox yayılmış səhv hesablamanın hər addımında Окр çağırmaqdır. Çoxaddımlı hesablamalarda (endirim, ƏDV, gömrük rüsumu, valyuta çevirməsi) belə kiçik fərqlər toplanır və yekun məbləğ gözlənilən nəticədən sapır.
Konkret nümunə: sənəddə 3 sətir var, hər birinin məbləği endirimdən sonra 10.025-dir.
| Yanaşma | Hesablama | Yekun |
|---|---|---|
| Dəqiq cəm (yuvarlaqlaşdırmasız) | 3 × 10.025 | 30.075 |
| Hər sətri ayrıca yuvarlaqlaşdırmaq | 3 × Окр(10.025, 2) = 3 × 10.03 | 30.09 |
| Yalnız yekunu yuvarlaqlaşdırmaq | Окр(30.075, 2) | 30.08 |
Fərq cəmi 1 qəpikdir, amma sətir sayı artdıqca böyüyür. Aşağıdakı diaqram ən pis hal üçündür: bütün sətirlərin məbləği eyni qaydada üçüncü onluq mərtəbədə 5-lə bitir.
Bəzi sənədlərdə (məsələn, qaimə və ya ƏDV hesablamasında) sətir üzrə yuvarlaqlaşdırma qanuni və ya biznes qaydası kimi tələb olunur. Bu halda qayda “heç vaxt yuvarlaqlaşdırma” deyil, “yuvarlaqlaşdırmanı müəyyən edilmiş yerdə və hər dəfə eyni qaydada aparın” olur. Əsas səhv bunun təsadüfi və ardıcıl olmamasıdır.
Формат ilə Окр eyni şey deyil
Формат() ədədi mətnə çevirir və ekranda ya çap formasında göstərmək üçündür. Ondan sonra alınan nəticə ilə riyazi əməliyyat aparmaq olmaz. Bazaya yazılacaq məbləği isə Окр() ilə yuvarlaqlaşdırın.
// Məbləğin hesablanması (ədəd olaraq qalır)
Mebleg = Cemi * Faiz / 100;
Mebleg = Окр(Mebleg, 2); // bazaya yazılacaq dəyər
// Yalnız göstərmək üçün (mətn)
Metn = Формат(Mebleg, "ЧДЦ=2"); // "125,50" (regional ayarlara görə)
4. Sıfır “boş” sayılır: ЗначениеЗаполнено(0) = Ложь
ЗначениеЗаполнено() (ValueIsFilled) dəyərin doldurulub-doldurulmadığını yoxlayır. Funksiya boş dəyər anlayışına əsaslanır: hər tipin öz “boş” dəyəri var. Ədəd üçün boş dəyər sıfırdır.
| Dəyər | Tip | ЗначениеЗаполнено() |
|---|---|---|
0 | Число | Ложь |
25 | Число | Истина |
"" və ya yalnız boşluqlardan ibarət mətn | Строка | Ложь |
'00010101' (boş tarix) | Дата | Ложь |
Неопределено, NULL | — | Ложь |
| Boş ссылка | СправочникСсылка... | Ложь |
Ложь / Истина | Булево | həmişə Истина |
Əgər sıfır sizin sahə üçün etibarlı dəyərdirsə (məsələn, qalıq 0, endirim 0%, qiymət 0), ЗначениеЗаполнено() ilə yoxlama bu halı “doldurulmayıb” hesab edəcək. Bu, səhv xəbərdarlıqlara və ya düzgün məlumatın rədd edilməsinə səbəb ola bilər.
// Sıfır etibarlı dəyər ola bilər: yalnız məlumatın olub-olmadığını yoxlayırıq
Если Qaliq = Неопределено Тогда
Сообщить("Qalıq daxil edilməyib");
КонецЕсли;
// Sıfır "boş" sayılmalıdırsa, standart yoxlama işləyir
Если Не ЗначениеЗаполнено(Miqdar) Тогда
Сообщить("Miqdar sıfırdan fərqli olmalıdır");
КонецЕсли;
5. Ədəd və mətn arasında çevirmə
1C dinamik tipləşməyə malikdir, ona görə ədəd və mətn bir ifadədə qarışa bilər. Bu zaman nəticə operandların yerinə və tipinə görə dəyişir. Belə “gizli” çevirmələrə güvənmək xətaya aparır, düzgün yol isə çevirməni açıq yazmaqdır.
| Məqsəd | Təhlükəsiz yazılış |
|---|---|
| Ədədi mətnə birləşdirmək | "Qiymət: " + Строка(25) və ya "Qiymət: " + Формат(25, "ЧДЦ=2") |
| Mətni ədədə çevirmək (məlumat etibarlıdır) | Число("25") |
| Mətni ədədə çevirmək (məlumat kənardan gəlir) | ОписаниеТипов("Число").ПривестиЗначение(Metn) |
| Dəyərin tipini yoxlamaq | ТипЗнч(Deyer) = Тип("Число") |
Ədədə çevrilə bilməyən mətni Число() funksiyasına versəniz, məsələn Число("salam"), icra zamanı istisna yaranır və prosedur dayanır. Fayldan, API-dən və ya istifadəçidən gələn mətnləri bu funksiyaya qoruyucusuz verməyin.
// Variant 1: tip təsvirinə uyğunlaşdırma (xəta vermir, çevrilə bilmirsə 0 qaytarır)
Eded = ОписаниеТипов("Число").ПривестиЗначение(Metn);
// Variant 2: xətanı özünüz idarə etmək istəyirsinizsə
Попытка
Eded = Число(Metn);
Исключение
Сообщить("Mətn ədədə çevrilə bilmədi: " + ОписаниеОшибки());
Eded = 0;
КонецПопытки;
Birinci variantda səhv məlumat səssizcə 0 olur. Maliyyə məlumatında bu özü də problem ola bilər, çünki yanlış sətir “0” kimi qəbul olunur. Belə hallarda ikinci variant və ya əvvəlcədən yoxlama daha doğrudur.
Yekun: 5 qayda yadda saxlayın
- Tip vahiddir, amma bazada saxlanılan dəyər rekvizitin uzunluq və dəqiqlik ayarlarına tabedir.
- Kodda onluq ayırıcı nöqtədir. Vergül parametr ayırıcısıdır.
- Yuvarlaqlaşdırma siyasətini əvvəlcədən seçin,
Окрilə bazaya yazın,Форматilə yalnız göstərin. - Sıfır boş dəyər sayılır (
ЗначениеЗаполнено(0) = Ложь); sıfırın etibarlı olduğu yerdəНеопределеноilə yoxlayın. - Mətni ədədə çevirəndə qoruyucu istifadə edin. Kənar məlumata etibar etməyin.
Tez-tez verilən suallar
1C-də Число tipi float kimi dəqiqlik itkisi yaradırmı?
Maliyyə hesablamalarında əsas risk tipin özündən çox yuvarlaqlaşdırma qaydasının səhv seçilməsindən yaranır. Bununla belə, kritik hesablamaları öz platforma versiyanızda test nümunələri ilə yoxlamaq yaxşı təcrübədir.
Окр yoxsa Формат istifadə etməliyəm?
Bazaya yazılan və sonrakı hesablamalarda iştirak edən məbləğ üçün Окр, ekranda və çap formasında göstərmək üçün Формат istifadə edin.
Sıfır məbləği necə düzgün yoxlayım?
Sıfırın etibarlı dəyər olub-olmadığını əvvəlcə müəyyən edin. Etibarlıdırsa Неопределено ilə, deyilsə ЗначениеЗаполнено() ilə yoxlayın.
Kənar mənbədən gələn mətni ədədə necə çevirim?
ОписаниеТипов("Число").ПривестиЗначение() və ya Попытка…Исключение blokundan istifadə edin; birbaşa Число() çağırışı xəta verə bilər.
1C-də maliyyə hesablamaları, inteqrasiya və avtomatlaşdırma ü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.







