Məzmuna keç
Educora
İrəli20 dəq10 / 14

Sorğu dili: seçim, birləşmələr, qruplaşdırma və yekunlar

1C sorğu dilində məlumat seç: `ВЫБРАТЬ … ИЗ … ГДЕ`, parametrlər, `ЛЕВОЕ` və `ВНУТРЕННЕЕ СОЕДИНЕНИЕ`, `СГРУППИРОВАТЬ ПО`, `ИТОГИ`; kodda `Запрос` obyekti ilə işlə və sorğu konstruktorundan istifadə et.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • Seçim, şərt, çeşidləmə və parametrlərlə sorğu yazmaq
  • Cədvəlləri birləşdirmək, qruplaşdırmaq və yekunlar almaq
  • Sorğunu kodda icra edib nəticəni seçmə və ya cədvəl kimi emal etmək

SQL bilirsənsə, 1C sorğu dili sənə tanış görünəcək — sadəcə açar sözlər rusca yazılır. Amma iki mühüm fərq var: sorğular yalnız oxuyur (məlumatı obyektlər və qeyd dəstləri dəyişir), cədvəllər isə VBİS cədvəlləri deyil, metadata obyektləridir: Справочник.Товары, Документ.РасходТовара.Товары, РегистрНакопления.ОстаткиТоваров.

İlk sorğu

1C Query
ВЫБРАТЬ
    Товары.Ссылка КАК Товар,
    Товары.Код КАК Код,
    Товары.Цена КАК Цена
ИЗ
    Справочник.Товары КАК Товары
ГДЕ
    Товары.Цена >= &МинЦена
    И НЕ Товары.ПометкаУдаления
УПОРЯДОЧИТЬ ПО
    Цена УБЫВ
&МинЦена — parametr; КАК sahəyə və cədvələ ləqəb verir; УБЫВ azalan çeşidləmədir.
1Cİngilis sintaksisi / SQL
ВЫБРАТЬ, РАЗЛИЧНЫЕ, ПЕРВЫЕ 10SELECT, DISTINCT, TOP 10
ИЗ, КАК, ГДЕFROM, AS, WHERE
СГРУППИРОВАТЬ ПО, ИМЕЮЩИЕGROUP BY, HAVING
УПОРЯДОЧИТЬ ПО … УБЫВORDER BY … DESC
ЛЕВОЕ / ВНУТРЕННЕЕ / ПОЛНОЕ СОЕДИНЕНИЕ … ПОLEFT / INNER / FULL JOIN … ON
ОБЪЕДИНИТЬ ВСЕUNION ALL
И, ИЛИ, НЕ, В, МЕЖДУ, ПОДОБНО, ЕСТЬ NULLAND, OR, NOT, IN, BETWEEN, LIKE, IS NULL
СУММА, КОЛИЧЕСТВО, МАКСИМУМ, МИНИМУМ, СРЕДНЕЕSUM, COUNT, MAX, MIN, AVG

Sorğuda istinad sahəsindən nöqtə ilə keçmək olar: РасходТовары.Ссылка.Дата sənədin tarixini, Товары.Ссылка.Родитель.Наименование isə qrupun adını verir. Platforma bunun üçün arxa planda gizli birləşmə yaradır.

Sorğuda şərtə görə qiymət seçmək üçün ВЫБОР КОГДА … ТОГДА … ИНАЧЕ … КОНЕЦ (CASE WHEN) konstruksiyası, sadalamanın, əvvəlcədən təyin olunmuş elementin və ya boş istinadın qiymətini göstərmək üçün isə ЗНАЧЕНИЕ() funksiyası istifadə olunur. Beləliklə, sadalamanın qiymətini parametrsiz birbaşa mətndə yazmaq olar.

1C Query
ВЫБРАТЬ
    Оплаты.Ссылка КАК Документ,
    ВЫБОР
        КОГДА Оплаты.ВидОплаты = ЗНАЧЕНИЕ(Перечисление.ВидыОплаты.Наличные)
            ТОГДА "Наличные"
        ИНАЧЕ "Безналичные"
    КОНЕЦ КАК Способ
ИЗ
    Документ.Оплата КАК Оплаты
ГДЕ
    Оплаты.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) — kontragenti doldurulmamış sənədləri kənarlaşdırır.

Kodda `Запрос` obyekti

1C
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    Товары.Наименование КАК Наименование,
|    Товары.Цена КАК Цена
|ИЗ
|    Справочник.Товары КАК Товары
|ГДЕ
|    Товары.Цена >= &МинЦена
|УПОРЯДОЧИТЬ ПО
|    Цена УБЫВ";
Запрос.УстановитьПараметр("МинЦена", 5);

Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
    Сообщить("Ничего не найдено");
КонецЕсли;

Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Наименование + " - " + Выборка.Цена);
КонецЦикла;

Таблица = Результат.Выгрузить();  // ТаблицаЗначений
İngilis sintaksisində: Новый Запрос = New Query, УстановитьПараметр = SetParameter, Выполнить = Execute, Выбрать = Select, Следующий = Next, Выгрузить = Unload.

Выбрать() nəticəni sətir-sətir oxuyan seçmə qaytarır — böyük nəticələr üçün qənaətlidir. Выгрузить() isə hamısını yaddaşa ТаблицаЗначений kimi yükləyir — sonra onu çeşidləmək, qruplaşdırmaq və ya formaya ötürmək rahatdır. Qiymətləri heç vaxt sətir birləşdirməsi ilə sorğu mətninə «yapışdırma» — həmişə &Parametr və УстановитьПараметр istifadə et.

Birləşmələr və qruplaşdırma

1C Query
ВЫБРАТЬ
    Товары.Ссылка КАК Товар,
    ЕСТЬNULL(Продажи.Количество, 0) КАК Продано
ИЗ
    Справочник.Товары КАК Товары
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            РасходТовары.Товар КАК Товар,
            СУММА(РасходТовары.Количество) КАК Количество
        ИЗ
            Документ.РасходТовара.Товары КАК РасходТовары
        ГДЕ
            РасходТовары.Ссылка.Проведен
            И РасходТовары.Ссылка.Дата МЕЖДУ &Начало И &Конец
        СГРУППИРОВАТЬ ПО
            РасходТовары.Товар) КАК Продажи
        ПО Товары.Ссылка = Продажи.Товар
УПОРЯДОЧИТЬ ПО
    Продано УБЫВ
Bütün mallar, hətta heç satılmayanlar da: ЛЕВОЕ СОЕДИНЕНИЕ sol cədvəlin bütün sətirlərini saxlayır, ЕСТЬNULL isə NULL-u 0 ilə əvəz edir.
BirləşməNəticədə hansı sətirlər qalır
ВНУТРЕННЕЕ СОЕДИНЕНИЕyalnız hər iki cədvəldə cütü olanlar
ЛЕВОЕ СОЕДИНЕНИЕsoldakıların hamısı; cütü yoxdursa, sağ sahələr NULL
ПОЛНОЕ СОЕДИНЕНИЕhər iki cədvəlin bütün sətirləri

СГРУППИРОВАТЬ ПО sətirləri qruplaşdırır, СУММА, КОЛИЧЕСТВО, МАКСИМУМ kimi aqreqat funksiyalar isə qrup üzrə hesablayır. Qrupa şərt qoymaq üçün ГДЕ deyil, ИМЕЮЩИЕ yazılır: ИМЕЮЩИЕ СУММА(РасходТовары.Сумма) > 1000. ГДЕ sətirləri qruplaşdırmadan əvvəl, ИМЕЮЩИЕ isə sonra süzür.

Yekunlar: `ИТОГИ`

ИТОГИ (TOTALS) SQL-də olmayan 1C imkanıdır: nəticəyə qruplar üzrə yekun sətirləri əlavə edir. Nəticəni isə ОбходРезультатаЗапроса.ПоГруппировкам ilə iç-içə seçmələrlə keçmək olar: əvvəl anbarın yekunu, sonra onun malları.

1C
Запрос.Текст =
"ВЫБРАТЬ
|    РасходТовары.Ссылка.Склад КАК Склад,
|    РасходТовары.Товар КАК Товар,
|    РасходТовары.Сумма КАК Сумма
|ИЗ
|    Документ.РасходТовара.Товары КАК РасходТовары
|ИТОГИ
|    СУММА(Сумма)
|ПО
|    Склад";

ВыборкаСклад = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаСклад.Следующий() Цикл
    Сообщить(СтрШаблон("%1: %2", ВыборкаСклад.Склад, ВыборкаСклад.Сумма));
    ВыборкаСтрок = ВыборкаСклад.Выбрать();
    Пока ВыборкаСтрок.Следующий() Цикл
        Сообщить(СтрШаблон("    %1: %2", ВыборкаСтрок.Товар, ВыборкаСтрок.Сумма));
    КонецЦикла;
КонецЦикла;
  1. 1
    Konstruktoru aç

    Modulda sağ klik → Конструктор запроса…. Kod da lazımdırsa, Конструктор запроса с обработкой результата… seç — o, Запрос obyekti və dövrü də yazacaq.

  2. 2
    Cədvəl və sahələri seç

    Таблицы и поля vərəqində cədvəlləri və sahələri siçanla çək, Связи vərəqində birləşmələri, Условия-da şərtləri, Группировка və Порядок-da qalanını qur.

  3. 3
    Konsolda yoxla

    Mürəkkəb sorğunu kodla işə salmazdan əvvəl Müəssisə rejimində sorğu konsolunda (Консоль запросов emalı) sına: parametrləri daxil et və nəticəni dərhal gör.

Əsas fikirlər

  • Sorğular yalnız oxuyur; mənbələr metadata obyektləridir (Справочник.X, Документ.X.Товары).
  • Qiymətləri &Parametr və УстановитьПараметр ilə ötür.
  • ЛЕВОЕ СОЕДИНЕНИЕ + ЕСТЬNULL — cütü olmayan sətirləri də saxlamağın standart yoludur.
  • ГДЕ qruplaşdırmadan əvvəl, ИМЕЮЩИЕ sonra süzür; ИТОГИ qrup yekunları əlavə edir.
  • Выбрать() — sətir-sətir seçmə, Выгрузить() — ТаблицаЗначений.

Özünü yoxla

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

1 / 10
Sorğuya kənardan qiymət necə ötürülür?