Değer tipi 1'leri kontrol edin 8.3. Tanımlı Türleri Kullanma

31.10.2021

Tanımlanan türler, platform sürüm 8.3'te ortaya çıkan yeni bir 1C meta veri nesnesidir. Nesne yardımcı niteliktedir. Tanımlanan türlerin neler olduğunu ve bu nesnenin çözebileceği görevleri ele alalım.

Tanımlananlar, uygulama çözümünün geliştiricisi tarafından belirlenen yeni veri türleridir. Birkaç geçerli türden oluşur. Bu veri türü, tanımlanan türün kendisi ve " " nesnesi dışında herhangi bir yapılandırma özelliğinin türü olabilir.

1C'de 267 video dersini ücretsiz alın:

Ayarlar

Bu nesne için çok fazla ayar yok:

Onlar. 1C'deki ismin ve eş anlamlının yanı sıra, tanımlanmış türler yalnızca bir dizi nesne türüne sahiptir.

1C 8.3'te tanımlanmış türlerin kullanımına bir örnek

Bu nesne için çok çeşitli uygulamalar bulunabilir.

Kullanım örnekleri:

  • parça belirli bir konfigürasyona yerleştirildiğinde tanımlanacak verilere atıfta bulunan konfigürasyon ayrıntılarını tanımlayabilirsiniz;
  • belirli bir etkinlik aboneliği kümesine bir tür tanımlanmış veri atayın; tür kümesi değiştiğinde, kaynak tüm abonelikler için dinamik olarak değişecektir;
  • özellik türleri planına alternatif olarak kullanın

ve daha fazlası.

1C programlamayı öğrenmeye başlıyorsanız, şunu öneririz: ücretsiz kurs(unutma

— 1C değer türlerinin ne olduğunu ve 1C türlerinin dönüşümünü tartışmaya başladık.

Bugün 1C yapılandırma nesnelerinin türleri (1C belge türü, 1C dizin türü vb.) hakkında daha ayrıntılı olarak konuşacağız.

Program kodunda değerlerle çalıştığımız için periyodik olarak onların türlerini bilmemiz gerekir. Tip 1C her zaman ayrıntıların meta verilerinde - dizinlerde ve belgelerde belirtilir.

1C türleriyle çalışmak sıklıkla kullanılır:

  • Programdaki koşullar
    “Eğer… Sonra…” yapısında 1C değerinin türüne bağlı olarak farklı eylemler
  • Arayüzde çalışırken sınırlamalar
    Kullanıcının belirli 1C türlerinin değerlerini formdaki bir alana girmesini yasaklamak veya izin vermek.
  • Gerçek fonksiyon/prosedür parametresinin belirlenmesi
    Bir işlev/prosedür parametresi herhangi bir 1C tipinde olabiliyorsa, değeri doğru bir şekilde elde etmek için bunu tanımlamanız gerekir.

Tip 1C elde edilebilir:

  • 1C gerçek değerinin türünü belirleyin
  • Değer nesneleri, izin verilen 1C türünü belirten özelliklere (örneğin, bir tablo sütununda, formdaki bir alanda, meta verilerde izin verilen 1C türleri) veya bu 1C türlerini döndüren yöntemlere sahiptir.
  • Meta verilerden - yapılandırıcıdaki meta verilerde belirtildiği gibi 1C türünü alabilirsiniz.

Tip 1C üç tipe ayrılabilir:

  • Temel tipler 1C
  • 1C veritabanlarının türleri (referans, nesneler)
  • 1C türleri.

1C tipinin tanımı ve 1C tiplerinin karşılaştırılması

TypeValue (Variable) fonksiyonunu kullanarak 1C değerinin türünü öğrenebilirsiniz.

Bu fonksiyonun hangi 1C tipini döndürdüğünü anlamak için ihtiyacımız olan Type (“TypeName”) belirtmemiz gerekir.

Örneğin, 1C tipi bir değişkenin tanımı (karşılaştırması):
TypeValue(Variable) = Type("TypeName") ise O zaman

TypeName olarak hangi türleri yazmalıyım?

Temel tipler

1C'nin temel türleri - sayı, dize, tarih, boolean.

Örneğin:
Çinko = 12;
Eğer TypeValue(Value) = Type("Numara") ise O zaman
ElseIf Değer = Type("String") Sonra
ElseIf Değer = Type("Tarih") Sonra
ElseIf Değeri = Tür("Boolean") Sonra
endIf;

Veritabanı türleri

1C, verileri bir veritabanında saklar ancak formda saklamaz bireysel kayıtlar, ancak nesneler biçiminde.

Kaydedilen nesnelerin çoğu (bunlar dahil: dizinler, belgeler, numaralandırmalar, iş süreçleri, görevler) Nesne (düzenleme ve yazma için) ve Bağlantı (okuma için) olarak mevcuttur. Daha fazla ayrıntı için "Bağlantılar ve Nesneler" konusuna bakın.

Örneğin:
Değer = Directoryes.Organizations.EmptyLink();
TypeValue(Value) = Type("DirectoryLink.Organizations") ise O zaman
Aksi takdirde Değer = Type("DirectoryObject.Organization") Sonra
Aksi takdirde TypeValue(Value) = Type("DocumentLink.Malın Alınması") Sonra
Aksi takdirde Değer = Tür("DocumentObject.Malların Alınması") Sonra
endIf;

Kayıtlar sunulabilir farklı şekiller. Kayıt tipi adı bileşiktir:
RegisterRegisterTypeAccessType.RegisterName

1C kayıt türleri:

  • Bilgi
  • Tasarruf
  • Muhasebe
  • Hesaplama.

Kayıt erişiminin birkaç türü vardır. En sık kullanılanlar:

  • Kayıtları Ayarla
  • Liste
  • Örnek
  • Kayıt
  • RecordKey.

Toplam, örnek:
TypeValue(Value) = Type("InformationRegisterList.RegisterName") ise O zaman
Aksi takdirde Değer = Type("AccumulationRegisterRecordSet.RegisterName") Sonra
endIf;

1C dili, programda dinamik olarak oluşturulan birçok nesneyle çalışmanıza olanak tanır; örneğin bir dizi, bir değerler listesi, bir değerler tablosu, bir yapı...

Bu tür 1C türleri adlarıyla belirtilir (tek kelimeyle, boşluksuz). Örneğin:
Eğer TypeValue(Value) = Type("Dizi") ise O zaman
ElseIf Değer = Tür("Değerler Listesi") Sonra
endIf;

1C referans tipinin değerini belirleme

Tüm veritabanı nesneleri (dizinler, belgeler...) ile çalışma bağlantılar aracılığıyla gerçekleştirilir. Örneğin bir belgede referans yapmak istiyorsak 1C tipi “DirectoryLink.DirectoryName” olacaktır.

Örneğin:
Değer = Directoryes.Organizations.EmptyLink();
If Directory.TypeAllLinks().Contains(TypeValue(Value)) Sonra
//bu bir referans kitabıdır
ElseIf Documents.TypeAllLinks().Contains(TypeValue(Value)) Sonra
//bu bir belgedir
endIf;

Bir istekte 1C tipi iki şekilde kontrol edilebilir.

Birincisi anlatılana benzer, ancak 1C tipinin adı “Bağlantı” veya “Nesne” anlamına gelmez, yani “DirectoryLink.Organizations” yerine “Directory.Organizations” yazıyoruz.

Örneğin:

Fiş mevcut türler 1C

Birçok nesnenin, 1C türlerinin listesini içeren bir property.ValueType vardır:

  • Şişman müşteri formundaki alan
    Form Elements.FieldName.ValueType
  • Formdaki alan zayıf müşteri(istisna: AvailableTypes olarak adlandırılır)
    Elements.FieldName.AvailableTypes
  • Değerler tablosunun sütunu, değerler ağacı
  • Form ayrıntıları
  • Seçim öğesi

Alandaki 1C türlerinin bu listesiyle nasıl çalışılır.ValueType - “1C Dili” bölümündeki “Türlerin Açıklaması”na bakın.

Yapılandırma meta verilerinde 1C ayrıntı türleriyle çalışma

Yapılandırıcıda ayrıntıları eklerken ve düzenlerken, programcı 1C ayrıntılarının türlerini belirtir. 1C dilindeki program kodunda, 1C ayrıntılarının türlerini alabilirsiniz (öğrenebilirsiniz).

Temel yöntemler:

  • Bir 1C nesnesi için, belirli bir nesnenin meta verilerini döndüren ve ardından ayrıntılar listesiyle (ve tablo bölümünün ayrıntılarıyla) çalışan Metadata() yöntemini çağırın.
    Documents.Malların Alınması.EmptyLink().Metadata().Detaylar
  • Tüm yapılandırma meta verilerini döndüren genel "Meta Veriler" değişkenini kullanın ve ardından belirli bir nesnenin ayrıntılarına erişin
    Meta Veriler.Belgeler.Malların Alınması.Detaylar

Öznitelik, bu öznitelik için yapılandırıcıda ayarlanan 1C türlerinin listesini içeren bir property.Type'a sahiptir.

Bu 1C türleri listesiyle nasıl çalışılır - “1C Dili” bölümündeki “Türlerin Açıklaması” konusuna bakın.

1C tipi filtreyi belirtin

Birçok nesne için kullanılabilecek 1C değer türlerinden oluşan bir filtre belirlemek mümkündür, örneğin:

  • Değerlerin listesi (.AvailableValues)
  • Yönetilen Müşteri Formu Alanı (.AvailableTypes)

Filtrenin değişiklik için uygun olmadığı durumlarda, filtreyi nesne yönteminde belirtmek mümkündür. Örneğin, bir değerler tablosunun (ağaç) bir sütununda.ValueType vardır ve bunu değiştiremeyiz, ancak.Add() yöntemini kullanarak bir sütun eklerken, ikinci parametre mevcut 1C'nin bir listesini belirtmek için kullanılabilir. türleri.

Bir filtre için 1C türlerinin bir listesini belirtmek için 1C türlerinin bir listesi kullanılır; onunla nasıl çalışılacağı, “1C Dili” bölümündeki “Türlerin açıklaması” konusuna bakın.

Serinin bir önceki yazısında başlayan 1C:Enterprise'ın yeni işlevselliği ile tanışmamıza devam ediyoruz. Bu makaledeki materyalleri inceledikten sonra şunları öğreneceksiniz:

  • Tanımlanmış türler nelerdir ve nasıl kullanılır?
  • “Birincil Roller” yapılandırma özelliği ne için kullanılır?
  • Bir form için istemci olay işleyicileri oluşturmak amacıyla yardımcı nasıl kullanılır?
  • Yapılandırmanın XML dosyalarına yüklenmesi nasıl ve neden kullanılıyor?

Uygulanabilirlik

Makalede 1C:Enterprise platformunun 8.3.4.437 sürümü tartışılmaktadır, ancak buradaki materyaller eski sürümler üzerinde çalışanlar için de yararlı olabilir.

1C:Enterprise 8.3'te geliştirme nasıl kolaylaştırılır

Yapılandırmayı kolaylaştırmayı amaçlayan 1C:Enterprise 8 platformundaki yenilikleri değerlendirmeye devam ediyoruz.

Tanımlanmış türler

Platform 8.3'te, "Genel" - Tanımlı türler yapılandırma dalına yeni bir nesne eklendi.

Bu, sık kullanılan bir varlığı tanımlayan veya bir uygulama çözümü uygulandığında değişmesi muhtemel bir veri türünü tanımlamak için tasarlanmış özel bir yapılandırma nesnesidir.

Örneğin, "Karşı Taraflar" ve "Bireyler" dizinlerine bağlantı içeren bileşik bir tür düşünün.

Ve bu tür, bazı gelişmiş konfigürasyonlarda, genellikle bilgi kaydında iletişim bilgilerini açıklayan bir boyut olarak, "Nakit makbuz siparişi" vb. belgede bir ayrıntı olarak kullanılır.

Böyle bir konfigürasyonun uygulanması sırasında, bu türün bileşimi değişebilir - ona yeni nesneler eklenebilir ve bunun tersi de geçerlidir - gereksiz türler hariç tutulabilir.

Eğer yeni “tanımlı tipimiz” yerine böyle bir varlığın kullanıldığı her yerde bileşik tip kullanırsak, o zaman her yerde tiplerin kompozisyonunu değiştirmek zorunda kalacağız. Uzundur, zordur, emek gerektirir ve bazı aksesuarların unutulma ihtimali vardır.

Tanımlanmış bir tür kullanıyorsanız, uygulama çözümünü sonlandırma sürecinde yalnızca bu türün tanımının (ve bu tür alanları işleyen program kodunun) değiştirilmesi gerekecektir.

Tip olarak tanımlanan tipin belirtildiği tüm detaylar otomatik olarak değişecektir.

Tanımlanmış bir türü kullanmanın başka bir örneğini burada bulabilirsiniz.

Bazı ayrıntılar için yapılandırmada bir yazma standardı vardır. Örneğin, bir miktarı 3 hassasiyetle uzunluk 15 olan bir sayı olarak, toplamı ise 2 hassasiyetle 15 uzunluk sayısı olarak tanımlarız.

Şirketin pahalı malların kayıtlarını tutması gerektiğini varsayalım. yüksek doğruluk onların ağırlığı.

Buna göre, miktarı hesaba katacak ayrıntıların doğruluğunu 4 ondalık basamağa çıkarmamız gerekiyordu. Bu değişikliklerin tüm belge ayrıntılarında ve kayıt kaynaklarında aynı anda yapılması gerekir.

Bu zor bir iş değildir ancak çok emek yoğundur ve geliştiricinin büyük özen ve azmini gerektirir.

Yeni bir tanımlı tip oluşturduğunuzda sadece tipini belirtmeniz yeterlidir. Daha sonra, belge ayrıntılarını oluştururken ve kaynakları kaydederken, oluşturulan tanımlı türe bir bağlantı seçebilirsiniz.

Bu yaklaşım, kullanıldığı her yerde aynı veri tipini (aynı uzunluk, hassasiyet, bileşik tipteki alanlar için aynı kompozisyon vb.) garanti etmemizi sağlar.

Daha sonra tüm detayların veri tipini değiştirmeniz gerekiyorsa, her bir özelliği ayrı ayrı manuel olarak düzeltmenize gerek yoktur; ilgili tanımlı tipte değişiklik yapmanız yeterlidir.

Tanımlı bir tür, bileşik tür olarak oluşturulabilir. Ancak bu yapılandırma nesnesinin kullanımına ilişkin kısıtlamalar vardır. Dolayısıyla, tanımlanan tip, karakteristik tipler planının değer tipinin parçası olamayacağı gibi, başka bir niteliğin bileşik veri tipinin de parçası olamaz.

Platform 8.3.5 sürümünde, tanımlanmış bir türün parçası olabilecek tür kümesinin genişletilmesiyle, tanımlanmış türleri kullanma olanaklarının artırıldığını unutmayın.

Şu ana kadar başka değişiklik yok güncel sürümler 8.3.10/8.3.11 platformu tanımlanan türle çalışmadı.

Yapılandırma özelliği "Birincil roller"

Platform 8.2'de kök yapılandırma öğesi, geliştiricinin aşağıdaki durumlarda kullanılacak rolü tanımladığı bir "Birincil Rol" özelliğine sahipti: bilgi tabanı hiçbir kullanıcı oluşturulmadı.

Platform 8.3'te, kullanıcı listesi boş olduğunda erişim haklarını belirlemek için kullanılacak birden fazla rolü belirlemek mümkün hale geldi. Buna göre özelliğin adı “Ana Roller” olarak değiştirildi.

Büyütmek için görselin üzerine tıklayın.

Form İstemcisi Olay İşleyicileri Oluşturma

Yapılandırma sırasında yönetilen uygulama geliştiricinin, uygun önişlemci direktiflerini kullanarak program kodunun yürütme bağlamını dikkatle izlemesi gerekir.

İstemcide sınırlı sayıda veri türü ve yöntem mevcut olduğundan, geliştiricinin genellikle kontrolü sunucuya aktaracağı bir istemci prosedürü oluşturması gerekir.

Platform 8.3'te, müşteri formu etkinlikleri için işleyiciler oluşturmaya yönelik bir asistan ortaya çıktı.

Büyütmek için görselin üzerine tıklayın.

Artık geliştiricinin manuel olarak bir sunucu yöntemi oluşturmasına ve çağrısını bir istemci prosedürü içinde belirtmesine gerek yoktur, ancak tamamen sistemin uygulama mantığını uygulamaya odaklanabilir.

Yapılandırmayı dosyalara yükleme

8.3 platformunun bir diğer yeniliği, tüm konfigürasyonu belirli bir yapıya sahip bir dizi dosya biçiminde diske yükleme yeteneğidir.

Konfigürasyon, yüklenen nesnelerin filtrelenmesi olanağı olmaksızın her zaman bütünüyle yüklenir.

Yapılandırmayı dosyalara yüklemek için menüde Yapılandırma – Yapılandırmayı dosyalara yükle seçeneğini seçmeniz ve açılan iletişim kutusunda dosyaların kaydedileceği dizini seçmeniz gerekir.

Yapılandırma nesneleri bir dizi XML dosyası olarak yüklenir. Modüller ve metin düzenleri şu şekilde kaydedilir: TXT dosyaları. Yapılandırmadaki resimler, görüntü dosyaları (BMP, PNG vb.) olarak kaydedilir. Yardım bilgileri HTML dosyalarına yüklenir.

Büyütmek için görselin üzerine tıklayın.

Gördüğünüz gibi, ortaya çıkan dosyalar yaygın olarak kullanılan evrensel formatlara sahiptir. Bunları düzenlemek için var çok sayıdaçeşitli yazılım ürünleri.

Üçüncü taraf sürüm kontrol sistemlerini de kullanabilirsiniz. Aynı belgenin birden fazla sürümünü saklamanıza ve gerekirse daha fazla sürüme geri dönmenize olanak tanır. önceki versiyonlar, bunu veya bu değişikliği kimin ve ne zaman yaptığını belirleyin.

Düzenlenen dosyalar, Yapılandırma – Yapılandırmayı dosyalardan yükle menü öğesi kullanılarak yapılandırmaya geri yüklenebilir.

Yeni indirme/yükleme işleviyle çalışmak aynı zamanda parametreler kullanılarak da mümkündür. Komut satırı LoadConfigFromFiles ve DumpConfigToFiles. Örneğin şöyle:

“c:\Program Files (x86)\1cv8\8.3.4.437\bin\1cv8.exe” TASARIMCI /F “X:\Platform8Demo” /N “Yönetici” /DumpConfigToFiles “X:\1\”

Daha önce, platform 8.2'de, yapılandırma nesnelerinin bazı özelliklerinin (modüller, düzenler ve referans bilgileri) seçici olarak yüklenmesine/indirilmesine izin veren, yapılandırma dosyalarının yüklenmesi/indirilmesi için bir mekanizma vardı.

Varsayılan olarak "Yapılandırma dosyalarını yükle" ve "Yapılandırma dosyalarını yükle" komutlarının platform 8.3'teki yapılandırıcıdan hariç tutulduğu belirtildi.

Ancak ana menüyü özelleştirerek bu komutları menüde görüntüleyebilir ve kullanabilirsiniz.

Yapılandırmaları dosyalara yüklemeye yönelik yeni mekanizma her zaman tüm yapılandırma verilerini yükler; yükleme için nesneleri yapılandırma yeteneği sağlanmaz, böylece yapılandırmanın bütünlüğü sağlanır.

Normal formlar ve arayüzler ikili biçimde (dahili) yüklenir ve düzenlenemez. Sağlayıcı yapılandırmasının da düzenlenmesi amaçlanmamıştır.

Kalan nesneler dosyalara yüklenir evrensel formatlar. Temel olarak mekanizma, yönetilen uygulamaya odaklanmıştır.

Yeni mekanizma geliştiriciye, yapılandırıcıyı toplu modda başlatarak yapılandırmayı otomatik olarak işleme yeteneği sağlar.

Ayrıca artık konfigürasyon harici olarak düzenlenebilir yazılımörneğin XML formatının kullanılması sayesinde.

Boşaltma sırasında ek yapılandırma işlemleri gerçekleştirilir: dondurulmuş bağlantılar silinir, kullanılmayan bilgiler de kaldırılmaz (örneğin, var olmayan bir dil için yardım).

Ve bir konfigürasyon yüklenirken bütünlüğü kontrol edilir; benzersiz olmayan tanımlayıcılara, meta veri nesnelerine, yanlış veri türü adlarına vb. sahip dosyaların yüklenmesine izin verilmez.

8.3.7 sürümünden bu yana "hiyerarşik" adı verilen yeni bir yükleme formatının ortaya çıktığını unutmayın. Eski format “doğrusal” olarak bilinmeye başlandı. Format seçimi dosya yükleme penceresinde mevcuttur:

8.3.11 sürümünden başlayarak, etkileşimli yükleme sırasında seçilebilen tek biçim "hiyerarşik" biçim haline geldi:

Bu işlevi kullanıyorsanız şunları öneririz:

  • ilk olarak “hiyerarşik” bir yükleme formatı kullanın;
  • ikinci olarak 8.3.8+ sürümünden daha düşük olmayan bir platform kullanın, çünkü bununla birlikte XML dosyalarını yükleme/yükleme hızı önemli ölçüde arttı.

8.3.10 versiyonunda konfigürasyonun XML dosyalarına kısmi yüklenmesi desteklenmeye başlandı. Sonuç olarak XML'de yapılandırma yüklemesini Git ile birlikte kullanmak mümkün hale geldi.

1C:Enterprise 8.x'teki veri türleri

Gömülü dil yapılarına dalmadan önce temel veri türlerine aşina olmalıyız. Neyse ki,:

1C platformunu incelemeye başlayanlar bazen veri türlerinin tanımı ve ortaya çıkan her türlü dil nüansı konusunda kafaları karışıyor. Bu ilk makale giriş niteliğindedir ve ilkel 1C veri türlerine ayrılmıştır, bunlardan çok fazla yoktur.

Sayı. 1C'deki sayılar hem tam sayı hem de kayan nokta değerleri anlamına gelir. Sayı türü değerinin maksimum uzunluğu, ondalık nokta dahil 32 karakter olabilir. Ayrıca veri tabanına yazılacak sayılar için 32 hane sınırının geçerli olduğunu da dikkate almakta fayda var. Bir değişken bildirmek ve ona 32 karakterden fazla değer atamak mümkündür. Bellekte saklanan sayısal değerler için, bu sınırlamaİşe yaramıyor. “Sayı” tipinde bir değişken olarak bildirildiğinde değeri 0 olacaktır.

Astar. Diğer programlama dilleri gibi 1C de dizeleri işlemek için gerekli tüm işlevleri uygular. Değerler bu türden Unicode'da sunulmuştur. Dize türü değişkenlerin uzunluğu sınırlı değildir.

Tarihi. Bu türdeki değerler, tarihin yanı sıra saati de içerir. Zaman; saat, dakika ve saniyeyi ifade eder. Başlatmadan hemen sonra değişken türü“Tarih”e “01 Ocak 0001 00 saat 00 dakika 00 saniye” değeri (tarih) atanacaktır. Bu bazen tahrişe neden olur, ancak zamanla buna alışırsınız.

Boolean. Bu tür değişkenlerin yalnızca iki değer alabileceği açıktır: Doğru, Yanlış.

Tanımsız. "Tanımsız" türündeki değerler, başka hiçbir veri türüne ait olmayan boş bir değer belirtmeniz gereken durumlarda kullanılır. Örneğin, daha sonra bir yerde kullanılacak bir değişken bildirmeniz gerekir. Buna 0 veya "" gibi bir değer atayabilirsiniz (yani boş bir dize), ancak bunu yaparak hemen onun için uygun türü (bir sayı veya bir dize) ayarlamış oluruz. Peki ya bu türlerden birinin kurulması daha sonra sorun yaratabilirse? Bu gibi durumlarda “tanımsız” türünden bir değer kullanabilirsiniz. Ayrıca, yerleşik dilin birçok işlevinin başarısız yürütme durumunda sonuç olarak bu türden bir değer döndürdüğünü de belirtmekte fayda var. İşlevlerinizi açıklarken aynı kurala uymanız önerilir.

Hükümsüz. Null'un genel anlamı neredeyse "tanımsız" ile aynıdır. Bu türdeki değerler veritabanındaki eksik bir değeri belirtmek için kullanılır. Çoğu zaman bu türden değerleri bir sorgu dili kullanarak alabilirsiniz. Örneğin, tablo birleştirmelerini kullanan bir sorgu. Diyelim ki tablolardan biri koşulu karşılayan bir değere sahip değil. Bu durumda eksik değer Null türünde bir değerle değiştirilecektir.

Yalnızca sorgularla çalışırken değil, Null tipi bir değerle karşılaşmak da mümkündür. Örneğin Null türündeki değerler, nesne tarafından kullanılmayan nitelikler tarafından kabul edilir. Sahip olduğumuzu hayal edelim hiyerarşik dizin“miktar” özelliği ile. Bu niteliği oluştururken “Kullan” özelliği “Element için” olarak ayarlandı. "Grup" türündeki bir dizin öğesi için bu özniteliğe erişmeye çalışırsanız değeri Null olacaktır.

Tip. Bu tür mevcut türleri tanımlamak için kullanılır. Biraz kafa karıştırıcı mı geliyor? Tamam, bir örnekle açıklamaya çalışacağım. İki değişkenin türlerini karşılaştırma göreviyle karşı karşıya olduğunuzu hayal edin. Kodda şöyle görünecektir:

Değişken1 = 123; //Sayı atadığımız için değişkenin tipi “sayı” olacaktır.
Değişken2 = "dizge"; //Burada bir string atadık, yani değişkenin tipi string olacak.

Artık değişken1'in sayısal olduğundan %100 emin olmanız gerekir. Burası “Tip” tipinin (kulağa komik geliyor) ve birkaç yardımcı fonksiyonun kullanışlı olduğu yerdir. Şimdilik ayrıntılara girmeyeceğim. Sadece bir göz atın ve aşağıdaki örneği anlamaya çalışın:

If (TipDeğeri(Değişken1) = Tür("Sayı")) Sonra

Report("Değişken1 sayısaldır!");

Aksi takdirde

Report("Değişken1 sayısal DEĞİLDİR:()");

endIf;

Bu küçük kod parçasında ilk olarak TypeValue() fonksiyonunu kullanarak değişkenin tipini alıyorum. Bu işlev Türünü almak istediğiniz değeri parametre olarak alır. Bizim durumumuzda “Değişken1”. Daha sonra "Sayı" türünü karakterize eden "Tip" türünde bir değer almam gerekiyor. Bu amaçla yerleşik dil “Type()” fonksiyonunu sağlar. Yalnızca tek bir argüman alır; tür adının dize temsili. “Number” tipi ile karşılaştırma yapmamız gerektiğinden fonksiyonun parametresi “Number” olacaktır.

Bu makalenin yazılmasındaki yardımlarından dolayı Igor Antonov'a teşekkür ederiz.

Bu makale “1C geliştirmede ilk adımlar” başlıklı makale serisinin devamı niteliğindedir. İlkel veri türleri ve bunlarla çalışırken en yaygın işlevler hakkında konuşacağız. Materyali okuduktan sonra şunları öğreneceksiniz:

  • Hangi veri türleri ilkeldir?
  • Dizelerle nasıl çalışabilirsiniz ve hangi özellikler dikkate alınmalıdır?
  • Sayısal ifadelerle çalışmanın incelikleri nelerdir?
  • Belirli bir değere sahip bir tarih nasıl tanımlanır? Boş bir tarih nasıl ayarlanır?
  • Tür dönüştürme nasıl çalışır?
  • Boş ve Tanımsız – bunlar nelerdir ve farklar nelerdir?
  • Bir nesnenin/değişkenin ne tür olduğu nasıl belirlenir?

Uygulanabilirlik

Makale 1C platformunun 8.3.4.496 sürümü için yazılmıştır, dolayısıyla bilgiler aynı zamanda şimdiki versiyonu platformlar. Ancak 8.3.6.1977 sürümünde dizelerle çalışmaya yönelik yeni işlevlerin eklendiğini belirtmekte fayda var. Bu nedenle makaledeki adımları tekrarladığınızda, Sözdizimi Asistanının ilgili bölümünde ekran görüntümüzde gösterilmeyen bazı işlevler görürseniz şaşırmayın. Ayrıca platform 8.3.10'a eklenen yeni StringWithNumber() yöntemini öğrenmenizi de öneririz.

İlkel veri türleri ve bazı işlevleri

Aşağıdaki ilkel veri türleri ayırt edilir:

Dize sabitleri

İlkel veri türü Astar(dize sabiti) çeşitli karakterlerden oluşur. Astar her zaman tırnak işaretleri içine alınır. Bir dize sabiti örneği:

Mesaj.Text = “Boş veriler var”;

Onlar. özelliğe “Boş veriler var” satırı atanır Metin nesne İleti. Tırnak işaretleri ile çevrelenen her şey bir dize olarak kabul edilir.

Dize herhangi bir karakterden oluşabilir. Dizeler çok satırlı olabilir. Bu durumda her yeni satırın tırnak içinde tanımlanması gerekir. Örneğin:

Metin = "Geçersiz bilgiler dolduruldu"
“Belgeyi yayınlamak imkansız”;

Noktalı virgül yalnızca son satırın sonuna yerleştirilir.

Başka bir yol daha var - metnin tamamını yalnızca bir tırnak işaretiyle çerçevelemek, ancak her biri Yeni hat dikey bir şeritle başlamalıdır.

Bu sözdizimi en sık kullanılan tipik konfigürasyonlar. Özellikle sorgu dilinde. Örneğin:

İstek.Text =
"SEÇMEK
| Çalışanlar.Adı AS Çalışan,
| Çalışanlar.Doğum Tarihi AS TarihDoğum
|DAN
| Dizin.Çalışanlar NASIL Çalışanlar
|NEREDE
| Çalışanlar DEĞİL Bu bir Gruptur”;

Ekleme işleminin dizeler için tanımlandığına dikkat edilmelidir. Bu bir aritmetik işlem değil, birleştirme işlemi olarak adlandırılıyor.

Onlar. örneğin iki satırı, satırlar arasında “+” ekleme işaretiyle birleştirmeniz gerekir:

Metin = “Detaylar yanlış doldurulmuş” + “Belgeyi yayınlamak mümkün değil”;

Böylece çizgiler birleştirilir. Birleştirme işlemi elbette daha fazla dizeye uygulanabilir. Dizeler için diğer işlemlere (çıkarma, çarpma, bölme) izin verilmez.

Bir dize içindeki bir kelimenin tırnak içine alınması gerekiyorsa, dize içindeki tırnak işareti çift tırnak işaretiyle tanımlanmalıdır. Örneğin:

Metin = ““Genel modül1” modülünde hata”;

İÇİNDE bu örnekteİlk alıntı dizeyi açar. Yan yana olan ikinci ve üçüncü tırnak işaretleri tırnak işaretini gösterir.

Ve sonunda üç tırnak işareti vardır: En sondaki tırnak işareti satırı kapatır, önceki iki tırnak işareti ise tırnak işaretini gösterir.

Dizeler üzerinde çeşitli dize dönüştürme işlemleri mümkündür; soldaki ilk birkaç karakteri tanımlamak, en sağdaki birkaç karakteri tanımlamak, bir dize içinde bir alt dizeyi aramak vb.

Tüm bu işlevler konfigürasyonun herhangi bir yerinde mevcuttur.

Sözdizimi asistanında bunlar bölümdedir Yerleşik dilin genel açıklamasıYerleşik işlevlerString türündeki değerlerle çalışma işlevleri.

Oldukça fazla sayıda fonksiyon vardır ve bunlar genellikle string sabitlerle çalışmak için yeterlidir.

String fonksiyonlarını kullanarak bir problemi çözme örneğine bakalım.

Görev:

Bir fonksiyonun geliştirilmesi gerekiyor. İşleve parametre olarak rastgele bir dize iletilir. Satırdaki karakterler sayı da olabilir.

Diğer karakterlerden boşluklarla ayrılmış bir rakam dizisi (bir veya daha fazla) pozitif bir tam sayı oluşturur.

Örneğin “72 ABC 6AP 31 54f -22” satırı iki tam sayı içeriyor pozitif sayılar: 72 ve 31. Boşluk dışında anlamlı olmayan diğer karakterler (sekme, satırbaşı gibi) kullanılmaz. Fonksiyon pozitif tam sayıların sayısını döndürmelidir.

Yönetilen bir uygulama modülünde bulunmalıdır. Sistem başlatıldığında çağrıldığından emin olmak gerekir. Bir değişken kullanarak bir dize tanımlayın.

Öyleyse yönetilen uygulama modülünü açalım ve yapılandırıcı panelindeki seçim alanındaki listeden seçim yapalım Modül standart işleyici SistemBaşlangıcında().

İşleyicinin içinde bir değişken tanımlarız Astar, Örneğin:

Satır = “72 ABC 6AP 31 54f -22”;

Miktar = TamsayıSayılarının Sayısı(String);

Tam sayıların sayısı hakkında bir mesaj gönderelim:

Report("Satır " + Sayı + " tamsayıları içeriyor");

Bu durumda değişken Miktarörtülü olarak türe dönüştürülecek Dize sabiti. Daha sonra üç dize üzerinde birleştirme işlemi gerçekleştirilecek ve mesaj iletilecektir.

Fonksiyonun başlangıcını ve sonunu (yani şablonu) tanımlayalım Tamsayı Sayısı(Dize).

Şimdi bunlardan birine bakalım olası seçeneklerözellik geliştirme Tamsayı Sayısı(Dize). Aynı zamanda dizelerle çalışmak üzere tasarlanmış bazı yerleşik işlevlerle de tanışacağız.

Öncelikle fonksiyonu tanımalısınız. Sembol Kodu. Bu işlev, iletilen dizede belirtilen sayının bulunduğu konumda bulunan karakterin kodunu alır.

Sözdizimi:

KarakterKodu(,)

Seçenekler:

(gerekli)

(isteğe bağlı) – bu, kodunu almak istediğiniz satırdaki karakterin numarasıdır. Bir satırdaki karakterlerin numaralandırması 1'den başlar.

Geri dönüş değeri:
İletilen karakterin kodu. Kod, Unicode kodlamasına göre döndürülür.

Lütfen parametrenin Varsayılan değer 1'dir.

Bir dize tek bir karakterden de oluşabilir. Böylece kod 0 ve kod 9'u belirlemek mümkündür ve diğer tüm rakamların kodları bilindiği gibi aralarındaki aralıktadır.

Karşılık gelen değişkenleri ve değerlerini tanımlayalım:

Kod0 = KarakterKodu(“0”);
Kod9 = KarakterKodu(“9”);

Sorunu çözmek için aşağıdaki şemayı seçiyoruz:

  1. Satırın başında veya sonunda herhangi bir miktarda boşluk varsa, onlardan kurtulacağız özel fonksiyon. Daha sonra iç mekanlar arasındaki karakter gruplarıyla ilgileneceğiz. Grup yalnızca rakamlardan oluşuyorsa bu bir tam sayıdır. Birinci boşluğun konumunu belirlemek için kullanılabilecek özel bir fonksiyon bulunmaktadır.
  2. İlk boşluğun konumunu aldıktan sonra, karakter grubunu (alt dize) boşluğun soluna getirmek için başka bir işlevi kullanabilirsiniz.
  3. Grubu oluşturan karakterleri inceleyelim ve tam sayı olup olmadığını belirleyelim. Tanımlanan tamsayılar özel bir değişkende toplanacaktır.
  4. Şimdi boşluğun sağındaki tüm karakterleri başka bir fonksiyon kullanarak seçerek başlangıç ​​satırını kısaltalım. Bu alan yalnızca bir tane değil, arka arkaya dizilmiş bir dizi boşluk olabilir, bu nedenle geri kalan satırda, en soldaki tüm boşluklardan (arka arkaya) kurtulmak ve 2. noktaya dönmek için özel bir işlev kullanın. çizgide hiç boşluk kalmaması koşuluna ulaşana kadar 2. noktadan 4. noktaya adım atıyoruz. Bu durumda kısaltılmış dize, ayrıştırılan son karakter grubunu oluşturacaktır.

Şimdi sorunu çözmek için ihtiyacımız olan fonksiyonlara bakalım.

Kısalt LP
Sözdizimi: AbbrLP()
Seçenekler: (gerekli).
İlkinin solundaki boşlukları (önemsiz karakterler) kırpar anlamlı sembol bir satırda ve satırdaki son önemli karakterin sağında görünür.

Bulmak
Sözdizimi: Bul(,)
Seçenekler: (gerekli), (gerekli).
Bulunan bir alt dizenin ilk karakterinin konumunu döndürür.
Bir dizedeki karakterlerin numaralandırması 1'den başlar. Eğer dize belirtilen alt dizeyi içermiyorsa, bu durumda 0 döndürülür. Bizim durumumuzda, alt dize olarak bir boşluk (“ ”) kullanacağız.

bir aslan
Söz dizimi: Lev(,)
Seçenekler: (gerekli), (gerekli).
Bir dizenin ilk sol karakterlerini seçer. Bu fonksiyonu kullanarak analiz için karakter gruplarını belirleyeceğiz (soldan ilk boşluğa).

StrLength
Sözdizimi: StrLength()
Seçenekler: (gerekli).
Dizedeki karakter sayısını alır. Bunu bir dizenin uzunluğunu belirlemek için kullanacağız.
İşlev Sembol Kodu Tam sayı olan karakter gruplarını tanımlamak için kullanacağımız daha önce anlatılmıştı.

Sağ
Sözdizimi: Sağ(,)
Seçenekler: (gerekli), (gerekli).
Bir dizedeki en sağdaki karakterleri seçer. Bu fonksiyonu kullanarak stringin henüz işlenmemiş kısmını seçeceğiz.

KısaltL
Sözdizimi: Kısaltma()
Seçenekler: (gerekli).
Dizedeki ilk önemli karakterin solundaki boşlukları (anlamlı olmayan karakterler) kırpar. Bu fonksiyonu dizenin geri kalanının sol tarafındaki olası boşlukları kaldırmak için kullanırız.

Aşağıda yorum içeren işlev için olası bir algoritma verilmiştir.

Sayısal İfadeler

Modüllerin değişkenleri ve veritabanı nesnelerinin detayları sayısal olabilir.
Numaranın rakam sınırı vardır. Sayısal ayrıntılar için tam sayı bölümünün uzunluğu 32 karakteri aşamaz.

Kesirli kısmın hassasiyeti 10 haneyi geçemez. Bir değişken bildirildiğinde ve ona atandığında Sayısal değer, o zaman bit derinliği hiçbir yere kaydedilmez. Ancak değişkenler için de sınırlamalar vardır.

Sözdizimi yardımcısı, bir sayı için izin verilen maksimum bit derinliğinin 38 karakter olduğunu söylüyor. Böyle bir sınırlama herhangi bir ekonomik sorunun çözümüne engel teşkil etmez. Bu sayılar kullanılarak herhangi bir parasal değer tanımlanabilir.

Bununla birlikte, bazı matematik problemlerini çözmek için hala büyük miktarları tanımlamanız gerekiyorsa, o zaman programlama teorisinde, sayıları mevcut kısıtlamalara dayalı olarak herhangi bir boyutta tanımlamanıza izin veren algoritmalar vardır.

Sayılara uygulanabilecek işlemler:

  • sıradan Aritmetik işlemler(-, +, *, /). Çarpma ve bölme, toplama ve çıkarmaya göre önceliklidir. Parantezlerin en yüksek önceliği vardır. Ayrıca öncelikleri parantezlerden hemen sonra gelen tekli operatörler + ve - vardır;
  • “bölmenin geri kalanı” işlemi (%). Örneğin %125=2;
  • sayılar için kullanılabilecek matematiksel işlevler (trigonometrik işlevler, üs alma, karekök, belirli bir basamak değerine yuvarlama, sayının tam sayı kısmını seçme)

Sayısal değerlerin doğruluğundan bahsedecek olursak veritabanı detayları konusunda doğal sınırlamalar vardır.

Ancak değişkenler söz konusu olduğunda burada bir tuhaflık var. Aslında değişkenler üzerinde çok fazla işlem yapabilirsiniz. büyük sayılar ancak tamsayı kısmı uzunluğu 32 karakteri aşmayan değerler bilgi tabanında saklanacaktır.

Boole değerleri

Boolean veri türüne gelince, çeşitli yollarla elde edilebilen yalnızca True ve False olmak üzere iki değer vardır.

Örneğin sayılar veya tarihler arasında karşılaştırma işlemlerini kullanabilirsiniz. Sonuç olarak, gelecekte en sık koşullu ifadelerde ve döngü operatörlerinde kullanılacak olan belirli bir Boolean değeri elde edilecektir.

Tarih türünün değişmez değerleri

Bir tarihi tanımlamanın iki yolu vardır. Bunlardan biri bir değişmez kelime kullanıyor. Kelimenin tam anlamıyla tek tırnak içinde yazılır.

Önce yıl, sonra ay, sonra da gün yazılır.

Gerekirse saati de belirtebilirsiniz çünkü 1C:Enterprise 8 sisteminde herhangi bir tarih hem tarihi hem de saati içerir. Örneğin:

DocumentDate = '20140315121020';

Zaman belirtilmezse varsayılan olarak sıfır olur. Tarih açıklamasında herhangi bir ayırıcıyı kullanabilirsiniz. Örneğin:

BelgeTarihi = '2014.03.15';

Tarihi belirlemenin ikinci yolu global bağlam işlevini kullanmaktır. Tarihi(). Bu durumda parametrelerle aynı şeyi bu fonksiyona aktarırız: virgülle ayrılmış yıl, ay, gün.

Saati de belirtebilirsiniz. Bunu belirtmezseniz, varsayılan olarak günün başlangıcına döner.

1C:Enterprise 8 sisteminde boş bir tarih takvimin başlangıcıdır. Kayıt seçenekleri:

BoşTarih = '00010101';
BoşTarih = Tarih(1,1,1);

Her iki giriş de aynı sonucu verecektir ve bu tarih boş kabul edilecektir.

İşlev kolaylığı Tarihi() Mesele şu ki, ona belirli değerleri değil, bazı değişkenleri aktarabiliyoruz. Yani bazen farklı değişkenleri toplayarak bir tarih oluşturuyoruz.

Ekleme işlemi tarihe uygulanır. Ekleme işlemi tarihe belirtilen sayıda saniye ekler.

İlkel veri türü dönüşümleri

Birden çok değişkenin toplandığı bir atama ifadesinde (örneğin, Değişken = A + B + C), ilkel veri türlerinin dönüştürülmesi mümkündür. Veri türü dönüşümü, ilk veri türünün değeri üzerinden gerçekleştirilir.

Bu nedenle, eğer ilk veri türü bir dize ise, sistem ifadenin tamamını bir dize haline getirmeye çalışacaktır. İlk veri türü bir sayı ise sistem sayısal bir veri türü elde etmeye çalışacaktır.

Ve böylece, dize + sayı = dize. Bazen, eğer dizeden sayısal bir değer çıkarılabilirse, bir dizeye bir sayı eklenebilir (örneğin, 123 + “456”).

Mantıksal veri türü için aşağıdaki ifadeler geçerlidir:

Doğru VE 1 = Doğru;
Doğru VE 0 = Yanlış.

Sıfırdan büyük herhangi bir sayı Doğruya, 0 Yanlışa dönüştürülür.

Daha önce de belirtildiği gibi tarih sayıya eklenebilir. Boolean veri türüne tarihler de eklenebilir.

Bu durumda True 1'e, False ise 0'a dönüştürülür.

Operatörlerdeki tür dönüşümüne ek olarak, uygun işlevler kullanılarak açık tür dönüşümü de mümkündür: String(), Number(), Date(), Boolean().

İLE Astar herhangi bir veri türü dönüştürülür.

Sayı bir String'den veya bir Boolean'dan elde edilebilir. Boolean şunu dönüştürür: Doğruyu 1'e, Yanlışı 0'a.

Bir tarih değeri içeriyorsa, bir dizeyi Date'e aktarabilirsiniz. Örneğin, Tarih(“20140315”). Daha önce de belirtildiği gibi konuma göre dönüştürmek mümkündür:

Tarihi(,).

Number'ı ve Boolean değerinin kendisini Boolean'a dönüştürebilirsiniz.

Bu işlevler program kodunda açık tür dönüşümü gerçekleştirmek için kullanılabilir.

Number, String, Date ve Boolean ilkel veri türleri veritabanı alanları olarak işlev görebilir.

Boş ve Tanımsız değerler

NULL bir değişmez değerdir. Genellikle iki veya daha fazla tablo birleştirildiğinde veritabanı sorgularında kullanılır.

NULL değeriyle doldurulan ikinci tablodaki eksik kayıtlardır. Onlar. bu bir nevi kayıp değerdir.

Gelecekte, ortaya çıkan sonucu işlerken, NULL sıfır değil, karşılık gelen veri türü olduğundan bu dikkate alınmalıdır.

Bir değerin işlenebilmesi için NULL'un çıktısı alınabilen veya aritmetik işlemlerde kullanılabilen bazı normal veri türlerine dönüştürülmesi gerekir.

Yerleşik dilde NULL türünde bir değer de elde edilebilir. Bir değişken tanımlayabilir ve ona aynı NULL değerini atayabilirsiniz. Ancak böyle bir atama program kodunda neredeyse hiç kullanılmaz.

Onlar. NULL gerçekten sorgularla çalışırken elde edilen veri türüdür. Sorgu dilindeki NULL değerinin özel bir şekilde ele alınması gerekir.

Yani A=NULL karşılaştırması sorgu düzeyinde çalışmayacaktır; özel işlevlerin kullanılması gerekecektir. Ancak yerleşik dilde NULL değeriyle karşılaştırma doğru şekilde yapılacaktır.

Tanımsız veri türü, bazı niteliklerin boş olmayan bir değeridir.

Örneğin, bir dizin özelliğinin veri türü olarak başka bir dizine bağlantısı varsa, bu durumda bu özelliğin boş değeri Tanımsız'a eşit olmayacaktır.

Bu tip (Tanımsız) öncelikle belli bir değişkenimiz varsa ve başlatılmamışsa (veri tipi tanımlanmamışsa) ortaya çıkar.

İkinci örnek: Eylemin gerçekleştirilememesi durumunda, birçok yerleşik dil işlevi tarafından Tanımsız veri türü döndürülür.

Örneğin, bir dizinde böyle bir öğe adı yoksa, bir dizin öğesini ada göre aramak. Yöntem Ada Göre Bul değeri döndürecek Tanımsız.

burada Tanımsız dır-dir anahtar kelime, kırmızıyla vurgulanır. Bu aynı zamanda yazmak için bir harftir Tanımsız tırnak, virgül, parantez vb. kullanmanıza gerek yok.

Bir belge listesi varsa ve bu liste boşsa (bu nedenle içinde satır yoksa), o zaman geçerli satır değeri alacaktır. Tanımsız.

Bilgi tabanında bileşik veri türüne sahip bir öznitelik varsa, bu özniteliğin boş değeri şuna eşit olacaktır: Tanımsız.

Ancak veri türü bileşik değilse, boş değer bu türün boş değerine karşılık gelecektir (bir tarih için bu, ilk yılın ilk ayının ilk gününün ilk saatinin ilk saniyesidir).

NULL ve UnDefinition hem veri türleri hem de bu türlerdeki değerlerdir ve tek ve tektir. NULL için NULL değeridir, Tanımsız için Tanımsız'dır.

Veri türü Tür

Bu veri türünün ana kullanımı, belirli bir değişkenin veya veritabanı özelliğinin değerini belirli bir türle karşılaştırmaktır.

Onlar. Algoritmada belirli bir nesnenin ne tür olduğunu anlamanız gerekir.

Dikkat çekici bir şekilde, bu veri tipinin bir değişmez değeri yoktur. NULL veya UnDefinition olarak yazamayız ancak iki fonksiyon kullanarak bu türün değerini elde edebiliriz. Tip Ve TürDeğer.

Bir nesnenin türünü elde etmek için (bir değişken, bir veritabanı özelliği veya bir form özelliği olabilir), fonksiyon kullanılır. TürDeğer.

Bu fonksiyon, veri tipini almak istediğiniz nesneye iletilir.

Bu işlev, dönüş değeri olarak türün türünü döndürür.

Gelecekte her türlü ilgiyle karşılaştırılmalıdır. Örneğin:

TypeValue(Element) = Type (“DirectoryLink.Nomenclature”) ise O zaman
Report("Bu bir üründür");
endIf;

Sonuç olarak, kapsanan tüm materyali özetleyelim.

Yerleşik 1C dilinin temel yapılarına baktık, değişkenlerin ve operatörlerin nasıl kullanılacağını öğrendik, prosedür ve fonksiyonların neden ve nasıl kullanılacağını çözdük. Bu noktaya kadar temelde tüm program kodlarımızın kendi kendine yeterli olduğunu unutmayın; her şeyi sıfırdan kendimiz yazdık ve bazı yapılandırma nesnelerini veya yerleşik dili minimum düzeyde kullandık.

Bir sonraki makalede bu nesneleri daha ayrıntılı olarak inceleyeceğiz, o yüzden bizi izlemeye devam edin! ;)