Содержание:
1. Зачем нужен конструктор запросов?
3. Обзор вкладок конструктора запросов в 1С
4. Конструктор запроса с обработкой результата
1. Зачем нужен конструктор запросов?
1С, как любая современная среда разработки, содержит функционал, помогающий разработчикам экономить время. Одним из таких инструментов являются различные конструкторы. Конструкторы представляют из себя рабочее место, в котором человек, не имеющий навыков программирования при помощи некой последовательности шагов, отвечая на разные вопросы, может сформировать довольно сложный код. Иногда эти шаги довольно просты, а ответы интуитивно понятны, что позволяет начинающим разработчикам делать первые шаги, не вникая в устройство платформы.
В этой статье пойдет речь об одном из самых популярных конструкторов, хотя популярность эта никак не связана с простотой его использования – это конструктор запросов в 1С. Сразу отмечу, что даже хорошо изучив функционал конструктора запросов, использовать его «на полную катушку» Вы сможете только уверенно, только владея языком запросов. Использовать конструктор для первого знакомства с языком запросов в 1С – не лучшее решение, так как Вы можете «что-то там ему накликать», конструктор при этом может «что-то там Вам выдать» и эта мнимая легкость будет таить в себе непонимание, а еще хуже неправильное понимание механизмов языка.
Итак, предполагаем, что простейшие запросы Вы самостоятельно и осмысленно создаете. Открываем в вашей конфигурации 1С 8.3 конструктор запроса.
2. Как создать запрос?
Сделать это очень просто – кликните правой кнопкой мыши в любой части любого модуля в конфигураторе 1С. Выделю – в любой части кликнуть можно, однако результат будет различный.
Частый вопрос «Как создать запрос?» на самом деле имеет очень простой ответ. Неважно, где вы кликните – конструктор запросов будет открыт. Вот только если кликнуть в чистом поле, то конструктор начнет создавать новый запрос, и диалоговое окно предупредит, что запрос можно создать.
Рис. 1 Как создать запрос
Если Вы совершенно случайно попадете в существующий запрос, то конструктор просто откроет его.
Рис. 2 Конструктор запросов открывает существующий запрос
Это, кстати, первое применение конструктора запросов, которое используют не только начинающие разработчики – проверка правильности написания запроса.
Если Вы любите писать запросы руками, то таким образом можно быстро проверить синтаксис запроса. Если открылся конструктором, значит, как минимум синтаксических ошибок в запросе нет. Понятно, что логическую ошибку Вы так не отловите, но забытую запятую или скобку – запросто.
Если запрос не открылся, это еще не значит, что он с ошибками. Иногда разработчики вставляют куски текста в параметры, чем и меняют его логику по ходу исполнения кода (особенно в типовых конфигурациях любят так делать). В этом случае платформа примет запрос за сломанный – открыть его можно будет, только получив финальный текст, например, в отладчике.
Все же, вернемся к вопросу создания запроса при помощи конструктора. Предположим, что мы создаем новую обработку, для которой нужно получить поля табличной части «Товары» документа «Реализация товаров и услуг».
Создаем обработку, открываем модуль объекта, кликаем правой кнопкой мыши и вызываем конструктор запроса. По кнопке «Запрос» откроется окно запроса с текстом. Текста мы никакого не наблюдаем, это означаем что конструктор добавил новый запрос. Позже в это окошко еще заглянем.
Рис. 3 Как добавить новый запрос?
3. Обзор вкладок конструктора запросов в 1С
Начнем обзор конструктора запросов в порядке «популярности» закладок.
На первом месте бесспорно первая закладка – без нее запрос просто не сформируется.
В ней указываем таблицы из которых берем данные. Слева – все таблицы базы, включая временные и виртуальные (это отдельная тема для изучения). Посередине – таблицы которые мы выбрали в запрос, справа – выбранные поля выбранных таблиц.
Рис. 4 Таблицы и поля в конструкторе запросов
При нажатии кнопки «Запрос» мы теперь видим, какой текст запроса сформирует конструктор запросов.
Рис. 5 Текст в окне запроса
Тут не могу не упомянуть еще о двух функциях конструктора запросов в 1С, используемых разработчиками любого уровня.
Первая – отсюда удобно скопировать запрос: в другую обработку, в консоль запросов или консоль компоновки для последующего анализа, или просто чтобы сохранить на флешке.
Вторая функция – обратная: через это окно удобно вставить запрос (или кусок запроса) из консоли или из другой обработки, либо просто дописать текст руками (иногда так реально быстрее и надежнее). Тут есть нюанс – нужно отжать карандашик, фон окна станет белым и доступным для редактирования запроса.
Рис. 6 Редактирование запроса
По окончании ввода – заново нажимаем карандашик, система проверит синтаксические ошибки, если ошибок нет, разрешит сохранение запроса.
После нажатия на кнопку ОК, конструктор запросов встраивает запрос в модуль с учетом всех правил синтаксиса запросов.
Рис. 7 Конструктор запросов встраивает запрос в модуль
Обратите внимание, что, во-первых, система 1С 8.3 и конструктор запросов проигнорировали бестолковый комментарий в тексте запроса, а во-вторых нарисовала какие-то странные черточки после каждой строки. Именно они и создают неудобство при копировании текста запроса в теле модуля, особенно если запрос большой.
Черточки эти, кстати, не обязательны, просто запрос – всегда строка, а черточки помогают представить строку в читаемом виде. Попробуйте провести эксперимент: создайте новый запрос, выбрав всё из табличной части, и запишите одной строкой. Затем откройте его конструктором запросов и сразу обратно закройте. Конструктор сильно изменит Вашу строку, но смысл запроса не поменяется.
Рис. 8 Изменение текста запроса конструктором
Это полезное свойство конструктора тоже можно использовать в работе.
4. Конструктор запроса с обработкой результата
Рассмотрим еще один вид конструктора запросов.
Кликаем правой кнопкой, только выбираем теперь пункт «Конструктор запроса с обработкой результата». Создаем новый запрос, выберем тип «Обход результата», вставляем текст, как было описано выше, проверяем получившийся запрос и нажимаем «ОК».
Рис. 9 Конструктор запроса с обработкой результата
Система добавила код: помимо самого запроса, появилось его описание, сформировалась удобная заготовка для обхода выборки и добавились красочные комментарии.
Комментарии эти, кстати, тоже непростые.
Рис. 10 Комментарии к запросу в окне запросе
Проходим в запрос по кнопке с обработкой результата запроса и обсудим еще одну закладку конструктора.
Закладку «Условия» я предлагаю поставить ее на второе место в рейтинге популярности. При обращении к реальным таблицам базы данных редко удается обойтись без неё. Без отбора наш запрос собирал бы все табличные части товаров во всех документах реализации. Мы наложили отбор по ссылке на конкретный документ при помощи параметра, который как-то надо в запрос передать. Для этого используется специальный код.
Рис. 11 Условия в конструкторе запроса
Нажимаем «ОК» и видим, что система сама объявила параметр «Ссылка», дописав код после текста запроса. Это происходит благодаря крайним комментариям, по которым платформа определяет границы запроса и изменяет не только запрос, но и необходимый код. Использовать данный функционал следует осмысленно и аккуратно. Например, если Вами уже написан некий алгоритм в этих границах, то система его просто затрёт.
Рис. 12 Конструктор запроса с обработкой результатов и исправление кода
На третье место по популярности поставим закладку «Дополнительно», а если точнее – функционал Временных таблиц.
Рис. 13 Закладка «Дополнительно» в конструкторе запросов
Создавая временную таблицу, мы создаем в памяти собственную таблицу с данными, например, как сейчас – мы получили список табличной части определенного документа с количеством и суммой. Никакой лишней информации в списке нет, и я могу использовать его в запросе для своих нужд. После создания временной таблицы, нужно будет создать новый запрос пакета, т.к. этот запрос, грубо говоря, свою миссию выполнил.
Рис. 14 Временная таблица в конструкторе запросов
Теперь, вернувшись на закладку «Таблицы и поля», можем найти нашу собственную таблицу. Данные в запрос теперь пойдут уже из нее.
Рис. 15 Новая таблица в конструкторе запросов
Запрос приобрёл такой вид:
Рис. 16 Конструктор запроса с обработкой результата – появление временной таблицы
Очевидно, что в данном запросе появление временной таблицы ничего не изменило ни с точки зрения производительности, ни с точки зрения удобства. Однако в более сложных запросах этот механизм необходим. Отмечу, что временная таблица не сохраняется в базу, срок ее жизни – время работы запроса. При использовании Менеджера временных таблиц он определяется сроком жизни Менеджера временных таблиц. В этом случае таблицы могут один раз сформироваться различными запросами в различных процедурах и далее используются в алгоритме столько, сколько потребуется. В типовых конфигурациях на больших базах это существенно сокращает нагрузку на систему.
Мы познакомились с механизмом работы конструктора запросов в 1С при построении простейших запросов. Такие запросы получают данные из одной таблицы. Далее рассмотрим, как получить данные сразу из нескольких таблиц и какие закладки для этого потребуются.
Пожалуй, достаточно информации для одной статьи, следующие не менее важные функции конструктора, обсудим во второй части.
Специалист компании «Кодерлайн»
Дмитрий Доронов