- 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
ВЫБРАТЬ
Товары.Ссылка КАК Товар,
Товары.Код КАК Код,
Товары.Цена КАК Цена
ИЗ
Справочник.Товары КАК Товары
ГДЕ
Товары.Цена >= &МинЦена
И НЕ Товары.ПометкаУдаления
УПОРЯДОЧИТЬ ПО
Цена УБЫВ&МинЦена — parametr; КАК sahəyə və cədvələ ləqəb verir; УБЫВ azalan çeşidləmədir.| 1C | İngilis sintaksisi / SQL |
|---|---|
ВЫБРАТЬ, РАЗЛИЧНЫЕ, ПЕРВЫЕ 10 | SELECT, DISTINCT, TOP 10 |
ИЗ, КАК, ГДЕ | FROM, AS, WHERE |
СГРУППИРОВАТЬ ПО, ИМЕЮЩИЕ | GROUP BY, HAVING |
УПОРЯДОЧИТЬ ПО … УБЫВ | ORDER BY … DESC |
ЛЕВОЕ / ВНУТРЕННЕЕ / ПОЛНОЕ СОЕДИНЕНИЕ … ПО | LEFT / INNER / FULL JOIN … ON |
ОБЪЕДИНИТЬ ВСЕ | UNION ALL |
И, ИЛИ, НЕ, В, МЕЖДУ, ПОДОБНО, ЕСТЬ NULL | AND, 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.
ВЫБРАТЬ
Оплаты.Ссылка КАК Документ,
ВЫБОР
КОГДА Оплаты.ВидОплаты = ЗНАЧЕНИЕ(Перечисление.ВидыОплаты.Наличные)
ТОГДА "Наличные"
ИНАЧЕ "Безналичные"
КОНЕЦ КАК Способ
ИЗ
Документ.Оплата КАК Оплаты
ГДЕ
Оплаты.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) — kontragenti doldurulmamış sənədləri kənarlaşdırır.Kodda `Запрос` obyekti
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Наименование КАК Наименование,
| Товары.Цена КАК Цена
|ИЗ
| Справочник.Товары КАК Товары
|ГДЕ
| Товары.Цена >= &МинЦена
|УПОРЯДОЧИТЬ ПО
| Цена УБЫВ";
Запрос.УстановитьПараметр("МинЦена", 5);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Сообщить("Ничего не найдено");
КонецЕсли;
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование + " - " + Выборка.Цена);
КонецЦикла;
Таблица = Результат.Выгрузить(); // ТаблицаЗначенийНовый Запрос = 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
ВЫБРАТЬ
Товары.Ссылка КАК Товар,
ЕСТЬNULL(Продажи.Количество, 0) КАК Продано
ИЗ
Справочник.Товары КАК Товары
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
РасходТовары.Товар КАК Товар,
СУММА(РасходТовары.Количество) КАК Количество
ИЗ
Документ.РасходТовара.Товары КАК РасходТовары
ГДЕ
РасходТовары.Ссылка.Проведен
И РасходТовары.Ссылка.Дата МЕЖДУ &Начало И &Конец
СГРУППИРОВАТЬ ПО
РасходТовары.Товар) КАК Продажи
ПО Товары.Ссылка = Продажи.Товар
УПОРЯДОЧИТЬ ПО
Продано УБЫВЛЕВОЕ СОЕДИНЕНИЕ 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ı.
Запрос.Текст =
"ВЫБРАТЬ
| РасходТовары.Ссылка.Склад КАК Склад,
| РасходТовары.Товар КАК Товар,
| РасходТовары.Сумма КАК Сумма
|ИЗ
| Документ.РасходТовара.Товары КАК РасходТовары
|ИТОГИ
| СУММА(Сумма)
|ПО
| Склад";
ВыборкаСклад = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаСклад.Следующий() Цикл
Сообщить(СтрШаблон("%1: %2", ВыборкаСклад.Склад, ВыборкаСклад.Сумма));
ВыборкаСтрок = ВыборкаСклад.Выбрать();
Пока ВыборкаСтрок.Следующий() Цикл
Сообщить(СтрШаблон(" %1: %2", ВыборкаСтрок.Товар, ВыборкаСтрок.Сумма));
КонецЦикла;
КонецЦикла;- 1Konstruktoru aç
Modulda sağ klik →
Конструктор запроса…. Kod da lazımdırsa,Конструктор запроса с обработкой результата…seç — o,Запросobyekti və dövrü də yazacaq. - 2Cə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. - 3Konsolda 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
&ParametrvəУстановитьПараметр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.