Məzmuna keç
Educora
Başlanğıc18 dəq6 / 14

Universal kolleksiyalar və xətaların emalı

`Массив`, `Структура`, `Соответствие`, `СписокЗначений` və `ТаблицаЗначений` ilə məlumatları yaddaşda saxla, `Попытка … Исключение` ilə xətaları tut, `ВызватьИсключение` ilə özün xəta yarat.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • Tapşırığa uyğun universal kolleksiya seçmək və onun metodlarından istifadə etmək
  • Qiymətlər cədvəlini qruplaşdırmaq, çeşidləmək və yekunlaşdırmaq
  • İstisnaları tutmaq, yaratmaq və qeydiyyat jurnalına yazmaq

Proqram tez-tez məlumatları müvəqqəti saxlamalıdır: şəhərlərin siyahısı, malın «kartı», kod üzrə qiymət cədvəli, satışların cədvəli. 1C-də bunun üçün bir neçə universal kolleksiya var. Düzgün kolleksiya seçmək kodu iki dəfə qısaldıb sürətləndirə bilər.

Massiv

Массив (Array) — qiymətlərin nizamlı siyahısıdır; indekslər 0-dan başlayır. Əsas metodlar: Добавить() (sona əlavə), Вставить(İndeks, Qiymət), Количество(), Найти() (indeks və ya Неопределено), Удалить(İndeks), Очистить(). Elementə Города[1] kimi müraciət olunur.

1C
Города = Новый Массив;
Города.Добавить("Bakı");
Города.Добавить("Gəncə");
Города.Добавить("Şəki");
Города.Вставить(0, "Sumqayıt");

Сообщить(Города.Количество());
Сообщить(Города[1]);
Сообщить(Города.Найти("Şəki"));

Города.Удалить(0);
Для Каждого Город Из Города Цикл
    Сообщить(Город);
КонецЦикла;
Gözlənilən nəticə
4
Bakı
3
Bakı
Gəncə
Şəki

Struktur və uyğunluq

Структура (Structure) — açarları sətir olan «açar → qiymət» cütləridir; açar dəyişən adı kimi yazılmalıdır, qiymətə nöqtə ilə müraciət olunur: Товар.Цена. Соответствие (Map) isə açar kimi istənilən tipi qəbul edir — istinadları, ədədləri, boşluqlu sətirləri. Olmayan açar üçün Получить() Неопределено qaytarır.

1C
Товар = Новый Структура("Наименование, Цена", "Çay", 3);
Товар.Вставить("Количество", 10);
Сообщить(Товар.Наименование + ": " + Товар.Цена * Товар.Количество);

Скидка = Неопределено;
Если Товар.Свойство("Скидка", Скидка) Тогда
    Сообщить("Скидка: " + Скидка);
Иначе
    Сообщить("Скидки нет");
КонецЕсли;

Цены = Новый Соответствие;
Цены.Вставить("A-100", 3.5);
Цены.Вставить("B-200", 12);
Сообщить(Цены.Получить("B-200"));
Если Цены.Получить("C-300") = Неопределено Тогда
    Сообщить("Цена не найдена");
КонецЕсли;
Gözlənilən nəticə
Çay: 30
Скидки нет
12
Цена не найдена
Свойство() açarın olub-olmadığını yoxlayır. Соответствие-ni Для Каждого ilə keçəndə hər element .Ключ və .Значение xassələrinə malikdir.

Qiymətlər siyahısı və qiymətlər cədvəli

СписокЗначений (ValueList) hər qiymətə təqdimat və qeyd (bayraq) əlavə edir — formalarda seçim siyahıları üçün əlverişlidir. ТаблицаЗначений (ValueTable) isə sütunları və sətirləri olan cədvəldir: sorğu nəticələri və hesablamalar üçün əsas alətdir. O, qruplaşdırmanı (Свернуть), çeşidləməni (Сортировать), yekunu (Итог) və axtarışı (НайтиСтроки) bacarır.

1C
Продажи = Новый ТаблицаЗначений;
Продажи.Колонки.Добавить("Товар", Новый ОписаниеТипов("Строка"));
Продажи.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));

Данные = СтрРазделить("Çay:30;Qənd:12;Çay:18", ";");
Для Каждого Элемент Из Данные Цикл
    Части = СтрРазделить(Элемент, ":");
    НоваяСтрока = Продажи.Добавить();
    НоваяСтрока.Товар = Части[0];
    НоваяСтрока.Сумма = Число(Части[1]);
КонецЦикла;

Продажи.Свернуть("Товар", "Сумма");  // группируем по товару, суммируем сумму
Продажи.Сортировать("Сумма Убыв");
Для Каждого Стр Из Продажи Цикл
    Сообщить(Стр.Товар + ": " + Стр.Сумма);
КонецЦикла;
Сообщить("Итого: " + Продажи.Итог("Сумма"));
Gözlənilən nəticə
Çay: 48
Qənd: 12
Итого: 60
KolleksiyaAçar / girişTipik istifadə
Массив0-dan indekssadə siyahılar
Структураad kimi açarparametrlər, kiçik yazılar
Соответствиеistənilən tipdə açarsürətli axtarış: mal → qiymət
СписокЗначенийindeks + təqdimatformalarda seçim siyahıları
ТаблицаЗначенийsətirlər və sütunlarsorğu nəticələri, hesablamalar (yalnız serverdə)

Xətaların emalı

Xəta verə biləcək kod Попытка (Try) blokuna yazılır. Xəta baş verərsə, idarəetmə Исключение (Except) blokuna keçir, ОписаниеОшибки() xətanın mətnini, ИнформацияОбОшибке() isə ətraflı obyekti qaytarır. Özün xəta yaratmaq üçün ВызватьИсключение "Mətn"; (Raise) yaz; Исключение blokunda parametrsiz ВызватьИсключение; tutulan xətanı yuxarı ötürür.

1C
Функция Разделить(Делимое, Делитель)
    Если Делитель = 0 Тогда
        ВызватьИсключение "Делитель не может быть равен нулю";
    КонецЕсли;
    Возврат Делимое / Делитель;
КонецФункции

Процедура Рассчитать()
    Попытка
        Результат = Разделить(10, 0);
        Сообщить(Результат);
    Исключение
        Текст = ОписаниеОшибки();
        ЗаписьЖурналаРегистрации("Расчеты", УровеньЖурналаРегистрации.Ошибка, , , Текст);
        Сообщить("Не удалось посчитать: " + Текст);
    КонецПопытки;
КонецПроцедуры
Xəta mesajda göstərilir və qeydiyyat jurnalına (Журнал регистрации) yazılır — administrator onu sonra Администрирование menyusundan görə bilər.

Bir neçə yazı ya hamısı birlikdə, ya da heç biri saxlanmalıdırsa, tranzaksiya istifadə olunur. 1C standartlarına görə НачатьТранзакцию() Попытка-dan dərhal əvvəl çağırılır, xəta olduqda isə əvvəlcə tranzaksiya ləğv edilir, sonra xəta yuxarı ötürülür:

1C
НачатьТранзакцию();
Попытка
    // несколько записей в базу данных
    ЗафиксироватьТранзакцию();
Исключение
    ОтменитьТранзакцию();
    ВызватьИсключение;  // передаём ошибку выше
КонецПопытки;

Əsas fikirlər

  • Массив-in indeksləri 0-dan başlayır; Найти() tapılmadıqda Неопределено qaytarır.
  • Структура — ad kimi açarlar, Соответствие — istənilən tipdə açarlar.
  • ТаблицаЗначений yalnız serverdə işləyir və Свернуть, Сортировать, Итог, НайтиСтроки metodlarına malikdir.
  • Попытка … Исключение … КонецПопытки xətanı tutur, ВызватьИсключение xəta yaradır və ya yuxarı ötürür.
  • Tranzaksiya: НачатьТранзакцию() → Попытка → ЗафиксироватьТранзакцию(); xətada ОтменитьТранзакцию().

Özünü yoxla

10 sual. Hər düzgün cavab XP qazandırır.

1 / 10
Массив-in ilk elementinin indeksi neçədir?