Начинающие разработчики часто сталкиваются с трудностями при изучении книги Е.Ю. Хрусталевой «Язык запросов "1С:Предприятие 8"». Типичная ситуация: вы копируете пример из листинга (например, вывод наименований товаров), вставляете его в Консоль запросов, но система выдает ошибку "Ожидается выражение ВЫБРАТЬ" или "Ошибка при вызове метода контекста (НайтиПараметры)". В этой статье мы подробно разберем, почему так происходит, и научимся правильно разделять текст запроса и программный код.
Проанализируем ситуацию. В системе 1С существует два принципиально разных уровня работы с данными. Первый — это Встроенный язык 1С (объектно-ориентированный код), а второй — собственно Язык запросов (декларативный SQL-подобный язык). Ошибка возникает из-за того, что в Консоль запросов пытаются вставить фрагмент кода на Встроенном языке.
Рассмотрим листинг, который часто вызывает затруднения:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
Наименование
ИЗ
Справочник.Товары";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаЗапроса = РезультатЗапроса.Выбрать();
Пока ВыборкаЗапроса.Следующий() Цикл
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ВыборкаЗапроса.Наименование;
Сообщение.Сообщить();
КонецЦикла;
Выясним причину неудачи. Когда вы используете инструмент Консоль запросов, вы работаете в среде, которая уже "знает", как создать объект Запрос и как его выполнить. Консоль ожидает от вас только текст запроса. Поэтому, если вы копируете туда весь код, платформа видит строку Запрос = Новый Запрос; и не понимает её, так как на уровне языка запросов ожидаются только инструкции ВЫБРАТЬ, ИЗ, ГДЕ и так далее.
Разберем по шагам, что именно нужно вставлять в Консоль запросов из примеров книги. Из всего программного кода нам нужен только тот фрагмент, который находится внутри кавычек в свойстве Запрос.Текст.
Для корректной работы в консоли ваш текст должен выглядеть так:
ВЫБРАТЬ
Наименование
ИЗ
Справочник.Товары
Обратите внимание на важные моменты форматирования при переносе кода из конфигуратора в консоль:
|. В консоли её быть не должно.Запрос.Выполнить(), ВыборкаЗапроса.Следующий() и создание объекта СообщениеПользователю — это инструкции для процессора встроенного языка, консоль их не воспринимает.Рассмотрим ситуацию, если вам нужно проверить именно весь листинг целиком, включая вывод сообщений. Программный код, использующий объект Запрос, нельзя просто запустить в консоли. Его нужно поместить в контекст исполнения 1С. Самый безопасный и удобный способ для новичка — создание внешней обработки.
Выполним следующие действия:
Пример структуры кода во внешней обработке:
&НаСервере
Процедура ВыполнитьЗапросНаСервере()
// Создаем объект запроса
Запрос = Новый Запрос;
// Присваиваем текст запроса (здесь уже нужны кавычки и правильный синтаксис 1С)
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Наименование КАК Наименование
|ИЗ
| Справочник.Товары КАК Товары";
// Выполняем и обходим результат
РезультатЗапроса = Запрос.Выполнить();
ВыборкаЗапроса = РезультатЗапроса.Выбрать();
Пока ВыборкаЗапроса.Следующий() Цикл
// Выводим данные пользователю
Сообщить(ВыборкаЗапроса.Наименование);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура КомандаВыполнить(Команда)
ВыполнитьЗапросНаСервере();
КонецПроцедуры
Проанализируем, как профессионалы избегают ошибок при написании текстов запросов. Писать Запрос.Текст = "..." вручную — долго и чревато опечатками. Для этого существует Конструктор запроса.
Чтобы вызвать его, нажмите правой кнопкой мыши внутри кавычек, где должен быть текст запроса, и выберите пункт "Конструктор запроса". Система позволит вам визуально выбрать таблицы (например, Справочник.Товары) и поля (Наименование). После нажатия кнопки "ОК" платформа сама сформирует правильный код с соблюдением всех правил синтаксиса встроенного языка.
Также стоит помнить о двуязычности. Хотя в книге Хрусталевой используется русский синтаксис (ВЫБРАТЬ, ИЗ), платформа прекрасно понимает и английский (SELECT, FROM). Это полезно знать, если вы ранее имели опыт работы с SQL.
Посмотрим на будущее развитие ваших навыков. В примере из книги мы выбираем данные из справочника напрямую. Однако в реальных задачах 1С чаще всего используются Виртуальные таблицы. Рассмотрим пример: если вам нужны остатки товаров, не стоит пытаться вычислить их самостоятельно, обращаясь к записям регистра. Нужно использовать таблицу Остатки.
Ключевое правило: фильтры для виртуальных таблиц всегда передавайте в их параметры (в скобках после имени таблицы), а не в секцию ГДЕ. Это критично для скорости работы системы в реальных базах данных.
Резюмируем: Литература по 1С дает правильные примеры кода, но важно понимать контекст их применения. Консоль запросов — для текста запроса, Конфигуратор (модули или внешние обработки) — для программного кода, управляющего этим запросом. Понимая эту разницу, вы легко пройдете обучение по любым методическим пособиям.