Найти в Дзене
Образовательный материал

Образовательный материал

полезные материалы для студентов и новичков в программировании
подборка · 1 материал
3 месяца назад
Язык запросов 1С для начинающих: структура, JOIN и типичные ошибки производительности Запросы в 1С — это фундамент любой отчётности и обработки данных. Несмотря на внешнее сходство с SQL, у языка запросов 1С есть своя специфика. Разберём базовые принципы и ловушки, в которые попадают новички. 🔹 Структура запроса Минимальный рабочий запрос выглядит так: ВЫБРАТЬ Номенклатура.Наименование, Номенклатура.Артикул ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.ЭтоГруппа = ЛОЖЬ Ключевое отличие от SQL: в 1С мы работаем с объектами метаданных (Справочник, Документ, Регистр), а не с таблицами БД напрямую. 🔹 Соединения: ЛЕВОЕ, ПРАВОЕ, ВНУТРЕННЕЕ - ЛЕВОЕ → берём все записи из левой таблицы, даже если в правой нет совпадений (подставляем ПУСТО). - ВНУТРЕННЕЕ → только строки, где есть совпадение в обеих таблицах. - ПРАВОЕ → аналогично ЛЕВОМУ, но приоритет у правой таблицы. Пример: список товаров + остатки на складах 1c ВЫБРАТЬ Товары.Наименование, ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК Остаток ИЗ Справочник.Номенклатура КАК Товары ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки КАК Остатки ПО Товары.Ссылка = Остатки.Номенклатура 🔹 Ошибка №1: Запросы внутри цикла Самая частая причина «тормозов»: 1c ❌ ПЛОХО Для каждого Элемента Из Выборка Цикл Запрос = Новый Запрос("ВЫБРАТЬ ... ГДЕ Ссылка = &Ссылка"); Запрос.УстановитьПараметр("Ссылка", Элемент.Ссылка); Результат = Запрос.Выполнить(); КонецЦикла; Каждая итерация = новый запрос к СУБД. При 1000 элементах это 1000 обращений к диску. ✅ Правильно один запрос с условием `В (&СписокСсылок)` или объединение через `ОБЪЕДИНИТЬ ВСЕ`. 🔹 Ошибка №2: Игнорирование индексов 1С автоматически создаёт индексы по основным полям (Ссылка, Код, Наименование). Но если вы фильтруете по реквизиту без индекса (`ГДЕ ДополнительныйРеквизит = ...`), платформа выполнит полное сканирование таблицы. Проверить индексы можно в конфигураторе: свойства объекта → закладка «Индексы». Добавляйте индексы только на часто фильтруемые поля — избыток индексов замедляет запись. 🔹 Виртуальные таблицы регистров Регистры накопления и сведений хранят данные в виде движений. Для отчётов используются виртуальные таблицы: - `Остатки` → текущие остатки на момент запроса - `Обороты` → суммы прихода/расхода за период - `СрезПоследних` → последние записи по измерениям Пример остатков на дату: 1c ВЫБРАТЬ Остатки.Номенклатура, Остатки.КоличествоОстаток ИЗ РегистрНакопления.ТоварыНаСкладе.Остатки(&НаДату, ) КАК Остатки Параметр `&НаДату` критически важен: без него платформа вернёт остатки на текущий момент, что исказит исторические отчёты. ✅ Итог Язык запросов 1С оптимизирован под работу с бизнес-логикой, а не с сырыми таблицами. Понимание принципов соединения, работы с индексами и виртуальными таблицами позволяет писать отчёты, которые выполняются за секунды, а не минуты. Регулярная практика чтения планов выполнения запросов (через `Консоль запросов`) ускоряет отладку в разы. #1С #программирование #бизнес #студенты #автоматизация #удаленнаяработа