İçeriğe geç
Educora
İleri20 dk11 / 14

Register sanal tabloları, geçici tablolar ve performans

`Остатки`, `Обороты`, `ОстаткиИОбороты` ve `СрезПоследних` sanal tablolarını parametrelerle kullan, `ПОМЕСТИТЬ` ile geçici tablolar oluştur ve hızlı sorgu yazmanın kurallarını öğren.

Kendini test et
Bu derste öğreneceklerin
  • Bir register'ın doğru sanal tablosunu seçmek ve parametrelerini doldurmak
  • Bir koşulun sanal tablo parametresinde mi yoksa ГДЕ'de mi olması gerektiğine karar vermek
  • Toplu sorgularda geçici tablolar kullanmak ve sorguları iyileştirmek

Müdür üç şey istiyor: 1 Eylül'deki stok bakiyeleri, aylara göre satışlar ve bugünkü fiyat listesi. Her biri bir register'ın sanal tablosuna yapılan tek bir sorguyla alınır. Sanal tablo tabanda fiziksel olarak saklanmaz; platform onu register'ın toplamlarından ve hareketlerinden, verdiğin parametrelerle hesaplar.

Sanal tablolar ve parametreleri

Sanal tabloParametrelerKaynak alanları (kaynak Количество)
Остатки(Период, Условие)КоличествоОстаток
Обороты(НачалоПериода, КонецПериода, Периодичность, Условие)КоличествоОборот, КоличествоПриход, КоличествоРасход
ОстаткиИОбороты(НачалоПериода, КонецПериода, Периодичность, МетодДополнения, Условие)КоличествоНачальныйОстаток, КоличествоПриход, КоличествоРасход, КоличествоКонечныйОстаток
СрезПоследних / СрезПервых(Период, Условие)periyodik bilgi register'ının kaynakları
Приход/Расход alanları yalnızca bakiye register'larında bulunur. Muhasebe register'larında ayrıca ОборотыДтКт (DrCrTurnovers) vardır.
1C Query
// Остатки на дату по одному складу
ВЫБРАТЬ
    Остатки.Товар КАК Товар,
    Остатки.КоличествоОстаток КАК Остаток
ИЗ
    РегистрНакопления.ОстаткиТоваров.Остатки(&НаДату, Склад = &Склад) КАК Остатки
ГДЕ
    Остатки.КоличествоОстаток > 0
Dönem boş bırakılırsa (Остатки()) güncel bakiyeler alınır; bu en hızlı seçenektir.
1C Query
// Продажи по месяцам (регистр оборотов Продажи)
ВЫБРАТЬ
    Продажи.Период КАК Период,
    Продажи.Товар КАК Товар,
    Продажи.КоличествоОборот КАК Количество,
    Продажи.СуммаОборот КАК Сумма
ИЗ
    РегистрНакопления.Продажи.Обороты(&Начало, &Конец, Месяц, ) КАК Продажи
УПОРЯДОЧИТЬ ПО
    Период,
    Сумма УБЫВ
Bir periyodiklik (День, Месяц, Год, Регистратор…) verildiğinde bir Период alanı oluşur.
1C Query
// Цены на дату (периодический регистр сведений)
ВЫБРАТЬ
    Цены.Товар КАК Товар,
    Цены.Цена КАК Цена
ИЗ
    РегистрСведений.ЦеныТоваров.СрезПоследних(&НаДату, ) КАК Цены

Koşul: parametrede mi, WHERE'de mi?

Sanal tablonun Условие (koşul) parametresi kayıtları hesaplamadan önce, ГДЕ ise hazır sonucu sonra süzer. Bir boyut koşulu (Склад = &Склад) için sonuç aynıdır ama parametre çok daha hızlıdır, çünkü platform gereksiz depoların bakiyelerini hiç hesaplamaz. Bir kaynak koşulu (КоличествоОстаток > 0) ise yalnızca ГДЕ'de olabilir; kaynak ancak hesaplamadan sonra bilinir.

Geçici tablolar ve toplu sorgular

ПОМЕСТИТЬ (INTO), bir sorgu sonucunu geçici bir tabloya yazar; sonraki sorgular onu sıradan bir tablo gibi okur. Tek metinde ; ile ayrılmış birkaç sorgu bir toplu sorgu (batch) oluşturur. Büyük geçici tablolar için ИНДЕКСИРОВАТЬ ПО (INDEX BY) ekle. Geçici tablo birkaç ayrı Запрос nesnesi arasında gerekiyorsa МенеджерВременныхТаблиц (TempTablesManager) kullanılır.

1C Query
ВЫБРАТЬ
    Строки.Товар КАК Товар,
    СУММА(Строки.Количество) КАК Нужно
ПОМЕСТИТЬ ВТТовары
ИЗ
    Документ.РасходТовара.Товары КАК Строки
ГДЕ
    Строки.Ссылка = &Ссылка
СГРУППИРОВАТЬ ПО
    Строки.Товар
ИНДЕКСИРОВАТЬ ПО
    Товар
;
ВЫБРАТЬ
    ВТТовары.Товар КАК Товар,
    ВТТовары.Нужно КАК Нужно,
    ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК Есть
ИЗ
    ВТТовары КАК ВТТовары
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
                , Товар В (ВЫБРАТЬ Т.Товар ИЗ ВТТовары КАК Т)) КАК Остатки
        ПО ВТТовары.Товар = Остатки.Товар
ГДЕ
    ЕСТЬNULL(Остатки.КоличествоОстаток, 0) < ВТТовары.Нужно
Toplu sorgu: önce belgenin ürünleri geçici bir tabloya alınır, sonra yalnızca bu ürünlerin bakiyeleri okunur ve eksik olanlar seçilir.

Bir toplu sorguyu Выполнить() ile çalıştırdığında son sorgunun sonucunu alırsın. Her sorgunun sonucu gerekiyorsa ВыполнитьПакет() (ExecuteBatch) çağır; sonuçların bir dizisini döndürür.

Hızlı sorgu kuralları

  • Döngü içinde sorgu çalıştırma. Gereken her şeyi tek bir toplu sorguda al.
  • Boyut koşullarını sanal tablonun parametresine yaz.
  • ВЫБРАТЬ * yazma; yalnızca gereken alanları seç.
  • Uzun nokta zincirlerinden kaçın; bileşik türleri ВЫРАЗИТЬ ile daralt.
  • Birleştirme koşullarında ИЛИ yerine çoğu zaman ОБЪЕДИНИТЬ ВСЕ daha hızlıdır.
  • Yavaşlığın yerini tahmin etme, ölç: Отладка › Замер производительности (Performans ölçümü) her satırın süresini gösterir.

Önemli noktalar

  • Остатки tarihteki bakiye, Обороты dönem cirosu, ОстаткиИОбороты ikisi birden, СрезПоследних tarihteki son değerdir.
  • Tarih parametresi o anı dahil etmez; gerektiğinde Новый Граница(…, ВидГраницы.Включая) kullan.
  • Boyut koşulları parametreye, kaynak koşulları ГДЕ'ye yazılır.
  • ПОМЕСТИТЬ geçici tablo oluşturur; ; sorguları bir toplu sorguda birleştirir.
  • Hız: döngüde sorgu yok, yalnızca gerekli alanlar, kısa nokta zincirleri, önce ölçüm.

Kendini test et

10 soru. Her doğru cevap XP kazandırır.

1 / 10
Açılış bakiyesi, giriş, çıkış ve kapanış bakiyesini tek tabloda hangi sanal tablo verir?