- Göreve uygun evrensel koleksiyonu seçmek ve yöntemlerini kullanmak
- Bir değer tablosunu gruplamak, sıralamak ve toplamını almak
- İstisnaları yakalamak, oluşturmak ve olay günlüğüne yazmak
Bir programın verileri çoğu zaman geçici olarak tutması gerekir: şehir listesi, bir ürünün “kartı”, koda göre fiyat listesi, satış tablosu. 1C'de bunun için birkaç evrensel koleksiyon vardır. Doğru koleksiyonu seçmek kodu iki kat kısa ve hızlı yapabilir.
Dizi
Массив (Array), değerlerin sıralı bir listesidir; dizinler 0'dan başlar. Temel yöntemler: Добавить() (sona ekle), Вставить(Dizin, Değer), Количество() (Count), Найти() (dizin ya da Неопределено), Удалить(Dizin), Очистить() (Clear). Öğeye Города[1] biçiminde erişilir.
Города = Новый Массив;
Города.Добавить("Bakı");
Города.Добавить("Gəncə");
Города.Добавить("Şəki");
Города.Вставить(0, "Sumqayıt");
Сообщить(Города.Количество());
Сообщить(Города[1]);
Сообщить(Города.Найти("Şəki"));
Города.Удалить(0);
Для Каждого Город Из Города Цикл
Сообщить(Город);
КонецЦикла;4 Bakı 3 Bakı Gəncə Şəki
Yapı ve eşleme
Структура (Structure), metin anahtarlı “anahtar → değer” çiftlerini tutar; anahtar bir değişken adı gibi yazılmalıdır, değere nokta ile erişilir: Товар.Цена. Соответствие (Map) ise anahtar olarak her türü kabul eder: referanslar, sayılar, boşluklu metinler. Olmayan bir anahtar için Получить() (Get) Неопределено döndürür.
Товар = Новый Структура("Наименование, Цена", "Çay", 3);
Товар.Вставить("Количество", 10);
Сообщить(Товар.Наименование + ": " + Товар.Цена * Товар.Количество);
Скидка = Неопределено;
Если Товар.Свойство("Скидка", Скидка) Тогда
Сообщить("Скидка: " + Скидка);
Иначе
Сообщить("Скидки нет");
КонецЕсли;
Цены = Новый Соответствие;
Цены.Вставить("A-100", 3.5);
Цены.Вставить("B-200", 12);
Сообщить(Цены.Получить("B-200"));
Если Цены.Получить("C-300") = Неопределено Тогда
Сообщить("Цена не найдена");
КонецЕсли;Çay: 30 Скидки нет 12 Цена не найдена
Свойство() (Property) bir anahtarın var olup olmadığını denetler. Соответствие Для Каждого ile dolaşıldığında her öğenin .Ключ (Key) ve .Значение (Value) özellikleri vardır.Değer listesi ve değer tablosu
СписокЗначений (ValueList), her değere bir gösterim ve bir işaret ekler; formlardaki seçim listeleri için kullanışlıdır. ТаблицаЗначений (ValueTable) ise sütunları ve satırları olan bir tablodur: sorgu sonuçları ve hesaplamalar için temel araçtır. Gruplama (Свернуть), sıralama (Сортировать), toplam (Итог) ve arama (НайтиСтроки) yapabilir.
Продажи = Новый ТаблицаЗначений;
Продажи.Колонки.Добавить("Товар", Новый ОписаниеТипов("Строка"));
Продажи.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
Данные = СтрРазделить("Çay:30;Qənd:12;Çay:18", ";");
Для Каждого Элемент Из Данные Цикл
Части = СтрРазделить(Элемент, ":");
НоваяСтрока = Продажи.Добавить();
НоваяСтрока.Товар = Части[0];
НоваяСтрока.Сумма = Число(Части[1]);
КонецЦикла;
Продажи.Свернуть("Товар", "Сумма"); // группируем по товару, суммируем сумму
Продажи.Сортировать("Сумма Убыв");
Для Каждого Стр Из Продажи Цикл
Сообщить(Стр.Товар + ": " + Стр.Сумма);
КонецЦикла;
Сообщить("Итого: " + Продажи.Итог("Сумма"));Çay: 48 Qənd: 12 Итого: 60
| Koleksiyon | Anahtar / erişim | Tipik kullanım |
|---|---|---|
Массив | 0'dan dizin | basit listeler |
Структура | ad biçiminde anahtar | parametreler, küçük kayıtlar |
Соответствие | her türde anahtar | hızlı arama: ürün → fiyat |
СписокЗначений | dizin + gösterim | formlarda seçim listeleri |
ТаблицаЗначений | satırlar ve sütunlar | sorgu sonuçları, hesaplamalar (yalnızca sunucuda) |
Hata yönetimi
Riskli kod bir Попытка (Try) bloğuna yazılır. Hata oluşursa kontrol Исключение (Except) bloğuna geçer; ОписаниеОшибки() (ErrorDescription) hata metnini, ИнформацияОбОшибке() (ErrorInfo) ise ayrıntılı bir nesneyi döndürür. Kendi hatanı oluşturmak için ВызватьИсключение "Metin"; (Raise) yazılır; Исключение bloğunda parametresiz ВызватьИсключение; yakalanan hatayı yukarı iletir.
Функция Разделить(Делимое, Делитель)
Если Делитель = 0 Тогда
ВызватьИсключение "Делитель не может быть равен нулю";
КонецЕсли;
Возврат Делимое / Делитель;
КонецФункции
Процедура Рассчитать()
Попытка
Результат = Разделить(10, 0);
Сообщить(Результат);
Исключение
Текст = ОписаниеОшибки();
ЗаписьЖурналаРегистрации("Расчеты", УровеньЖурналаРегистрации.Ошибка, , , Текст);
Сообщить("Не удалось посчитать: " + Текст);
КонецПопытки;
КонецПроцедурыЖурнал регистрации) yazılır; yönetici bunu daha sonra Администрирование menüsünden görebilir.Birkaç kaydın ya hep birlikte ya da hiç kaydedilmemesi gerektiğinde bir işlem (transaction) kullanılır. 1C standartlarına göre НачатьТранзакцию() (BeginTransaction) doğrudan Попытка'dan önce çağrılır; hata olursa önce işlem geri alınır, ardından hata yukarı iletilir:
НачатьТранзакцию();
Попытка
// несколько записей в базу данных
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение; // передаём ошибку выше
КонецПопытки;Önemli noktalar
Массивdizinleri 0'dan başlar;Найти()bir şey bulamazsaНеопределеноdöndürür.Структураad biçiminde anahtarlara,Соответствиеher türde anahtara sahiptir.ТаблицаЗначенийyalnızca sunucuda çalışır veСвернуть,Сортировать,Итог,НайтиСтрокиyöntemlerine sahiptir.Попытка … Исключение … КонецПопыткиhataları yakalar;ВызватьИсключениеhata oluşturur veya yukarı iletir.- İşlem:
НачатьТранзакцию()→Попытка→ЗафиксироватьТранзакцию(); hatadaОтменитьТранзакцию().
Kendini test et
10 soru. Her doğru cevap XP kazandırır.
Массив'in ilk öğesinin dizini nedir?