Основные объекты: Запросы. Часть 3. Выполнение запроса в системе 1С программным способом
В настоящем разделе скажем несколько слов о выполнении запроса программным способом. Для этого в программе 1С используется специальный объект Запрос.
Упражнение. Посмотрите, что говорится об объекте Запрос, его свойствах и методах в Синтакс-Помощнике.
Рассмотрим подробнее шаблон кода запроса, который нам рекомендует система 1С (Сервис – Шаблоны текста – Прочие – Запрос):
Запрос = Новый Запрос;
Запрос.Текст = "<?"", ТекстЗапроса>";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
КонецЦикла;
В качестве примера возьмем код из книги: Митичкин С. А. Разработка в системе "1С:Предприятие 8.0" (М.: ООО “1С-Паблишинг”, 2003):
Запрос = Новый Запрос;
Запрос.Текст = ("ВЫБРАТЬ * ИЗ Справочник.Сотрудники
В первом операторе шаблона создается новый объект Запрос с именем Запрос. у объекта Запрос имеется свойство Текст, которое содержит исходный текст выполняемого запроса. Текст запроса вводится во втором операторе. Иногда первые два оператора объединяются. Например:
Запрос = Новый Запрос ("ВЫБРАТЬ * ИЗ Справочник.Сотрудники
В следующем операторе (Результат = Запрос.Выполнить()) производится выполнение запроса. Возвращаемое значение Результат имеет специальный тип РезультатЗапроса. Затем оператор Выборка = Результат.Выбрать() позволяет сформировать выборку записей из результата запроса. Тип возвращаемого здесь значения: ВыборкаИзРезультатаЗапроса. Эти два оператора тоже можно объединить вместе:
Выборка = Запрос.Выполнить().Выбрать();
Наконец, для получения итогов используется цикл, в котором используется метод Следующий() объекта типа ВыборкаИзРезультатаЗапроса. Применение этого метода позволяет получить следующую запись из результата запроса и одновременно возвращает значение типа Булево (Истина, если запись выбрана, и Ложь, если запись отсутствует).
Теперь мы можем создать нашу первую программу с запросом.
Откроем в конфигураторе закладку Модуль формы отчета “НашПервыйЗапрос” и введем туда следующий код:
Процедура КнопкаСформироватьНажатие(Кнопка)
Процедура КнопкаСформироватьНажатие по умолчанию связана с кнопкой сформировать на форме отчета “НашПервыйЗапрос”.
Обратите внимание, что мы ввели текст нашего первого запроса сформированного в предыдущем разделе (в тексте процедуры КнопкаСформироватьНажатие этот текст выделен красным цветом):
ВЫБРАТЬ
Для переноса строки в свойстве Запрос.Текст используется символ “|”.
Теперь запустим программу 1С в пользовательском режиме, откроем отчет “НашПервыйЗапрос” и нажмем на кнопку “Сформировать”. Полученный результат является вполне корректным:
Первый программный запрос создан успешно.
Однако нужно пойти дальше. При нажатии на кнопку “Сформировать” постоянно будет появляться результат запроса, введенного в конфигураторе. Для того, чтобы при нажатии указанной кнопки появлялись и результаты других запросов, необходимо научиться задавать текст запроса из пользовательского режима. Попробуем реализовать эту возможность.
Вначале не будем изменять текст приведенного выше запроса, но несколько изменим текст процедуры КнопкаСформироватьНажатие, выделив текст запроса в отдельную строковую переменную Текст1 (изменения кода процедуры выделены красным цветом):
Процедура КнопкаСформироватьНажатие(Кнопка)
Убедимся, что в пользовательском режиме ничего не изменилось и нажатие кнопки “Сформировать” вызывает тот же результат.
Чтобы “научить” программу воспринимать текст запроса из поля текстового документа ТекстЗапроса, еще немного унифицируем процедуру КнопкаСформироватьНажатие (изменения кода процедуры выделены красным цветом):
Процедура КнопкаСформироватьНажатие(Кнопка)
Воспользуемся, например, свойством ВыделенныйТекст объекта ПолеТекстовогоДокумента. Теперь программа будет считывать выделенный текст из поля текстового документа ТекстЗапроса. Кроме того, мы несколько унифицировали реквизиты элемента Выборка в операторе вывода результата запроса, чтобы не зависеть от наименований этих реквизитов (вместо Выборка.Код и
Выборка.Наименование мы записываем Выборка[0] и Выборка[1]).Проверим механизм в работе. Снова откроем программу 1С в пользовательском режиме и скопируем в поле текстового документа ТекстЗапроса отчета “НашПервыйЗапрос” следующий текст (обратите внимание, что здесь отсутствует символ “|”, указывающий на перенос строки):
ВЫБРАТЬ Номенклатура.Код, Номенклатура.Наименование
Выделим указанный текст и нажмем на кнопку “Сформировать”. Полученный результат снова является корректным:
Наконец, “научим” программу самостоятельно выделять текст запроса из поля текстового документа ТекстЗапроса (изменения кода процедуры снова выделены красным цветом):
Процедура КнопкаСформироватьНажатие(Кнопка)
Теперь будет автоматически выделяться текст от первого знака первой строки до последнего знака последней строки.
Снова скопируем указанный выше запрос в поле текстового документа ТекстЗапроса отчета “НашПервыйЗапрос” в пользовательском режиме и нажмем на кнопку “Сформировать”. Убедимся, что весь текст в поле текстового документа выделился и полученный результат запроса не изменился.