При изучении программирования в системе 1С:Предприятие 8 по книге "Язык запросов", многие начинающие разработчики сталкиваются с вопросом: как не просто написать текст запроса, а увидеть результат его выполнения в коде? В отличие от консоли запросов, где данные выводятся в готовую таблицу, работа во встроенном языке требует понимания программных механизмов обхода результатов. В этой статье мы подробно разберем, как использовать демонстрационную обработку РаботаСЗапросами, где искать код примеров и как с помощью инструментов платформы проанализировать полученные данные.
Прежде всего, нам необходимо убедиться, что мы работаем в правильном режиме. Если вы уже открыли конфигурацию в Конфигураторе и нашли модуль обработки РаботаСЗапросами, следующим шагом должен стать запуск системы в пользовательском режиме. Рассмотрим этот процесс пошагово:
F5 или кнопку "Начать отладку" в верхней панели Конфигуратора. Это запустит режим 1С:Предприятие.РаботаСЗапросами. Как правило, она представляет собой форму со списком кнопок или выпадающим списком, где каждый пункт соответствует конкретному листингу (примеру) из книги.Важно понимать, что когда мы нажимаем кнопку в этой обработке, выполняется программный код, написанный в ее модуле. Результат часто выводится в Окно сообщений, которое находится в нижней части экрана. Если после нажатия кнопки ничего не произошло, убедитесь, что панель сообщений не скрыта.
Проанализируем типичную структуру кода, которую мы видим во второй главе книги. Встроенный язык 1С использует объект Запрос для взаимодействия с базой данных. Разберем пример стандартного фрагмента кода, который вы встретите в обработке:
// Создаем объект Запрос
Запрос = Новый Запрос;
// Указываем текст запроса, который мы составили в конструкторе
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";
// Выполняем запрос и получаем результат
РезультатЗапроса = Запрос.Выполнить();
// Начинаем выборку данных для обхода
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
// Обходим результат в цикле и выводим в окно сообщений
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Наименование + " - " + ВыборкаДетальныеЗаписи.Артикул);
КонецЦикла;
Здесь метод Выполнить() возвращает объект РезультатЗапроса. Чтобы увидеть данные "глазами", программа использует цикл Пока ... Цикл, где метод Следующий() перемещает указатель на новую строку результата. Функция Сообщить() как раз и является тем инструментом, который выводит результат на экран пользователя в режиме 1С:Предприятие.
Если вы хотите проверить результат запроса "на лету", не дописывая код вывода в сообщения, нам поможет механизм отладки. Это наиболее профессиональный способ проверки корректности работы программы. Выясним, как это сделать:
РаботаСЗапросами.РезультатЗапроса = Запрос.Выполнить();.F9 на этой строке (появится красный кружок слева).F10 (Шагнуть "через"), чтобы строка выполнилась. Теперь переменная РезультатЗапроса заполнена данными.Shift + F9 (Вычислить выражение) и введем имя переменной РезультатЗапроса.В открывшемся окне вы можете увидеть тип объекта. Чтобы посмотреть сами данные в табличном виде, в окне "Вычислить выражение" напишем:
РезультатЗапроса.Выгрузить()
После нажатия кнопки "Рассчитать" появится кнопка с лупой. Нажав на нее, вы увидите таблицу со всеми данными, которые вернул ваш запрос. Это избавляет от необходимости писать циклы только ради проверки результата.
Иногда при нажатии кнопки в обработке ничего не происходит и сообщения не выводятся. Рассмотрим наиболее вероятные причины этой ситуации:
Справочник.Номенклатура или Документ.Продажи не вернут ничего, если вы сами не создали хотя бы одну запись в этих справочниках или документах в режиме предприятия.ГДЕ). Если в коде стоит Запрос.УстановитьПараметр("Склад", ВыбранныйСклад), а переменная ВыбранныйСклад пустая, запрос может не найти подходящих записей.-debug, иначе точки останова не сработают.Важно различать эти два инструмента. Консоль запросов — это внешняя или встроенная обработка для быстрой отладки текста (SQL-подобного кода). Она сама умеет "рисовать" таблицу. Когда же мы работаем во встроенном языке (в модулях), мы пишем алгоритм обработки данных. Здесь запрос — это лишь источник данных, который передает "эстафету" объектам типа ВыборкаИзРезультатаЗапроса или ТаблицаЗначений. Изучение второй главы книги как раз направлено на то, чтобы вы научились не только получать данные, но и правильно использовать их в программной логике конфигурации.