1с проверить текст запроса
Здравствуйте.
На форме есть флажок, который должен регулировать вывод всех документов либо только проведённых.
Поскольку в моём мире текст запроса - это вроде бы строка, то я попытался её формировать динамически:
Заранее спасибо.) __________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
Отображение/скрытие GroupBox-а в зависимости от флажка
Есть форма на ней есть GroupBox и преключатель какой код надо написать в VBA чтоб когда флажок.
Разные данные в отчете в зависимости от присутствия флажка
Всем привет. Допустим, если я в форме на элементе флажок не ставлю галочку у меня в отчете в.
Выбор данных в поле в зависимости от установленного флажка
Добрый день! Столкнулась с такой задачей: Есть 2 справочника: Сырье и Материалы. Хочу сделать.
Ладно, выяснили, что 7.7
Сегодня никого из семёрочников нет на вахте?(
maxwad, а если добавить символ перевода строки?У тебя переменная Да вот как раз не уверен, что это считается комментарием.) Там сначала ковычки идут, а потом слэши, видимо, это принятый синтаксис. Например, если убрать мою переменную и вывести переменную ТекстЗапроса, то выведет не
"|Период с ВыбНачПериода по ВыбКонПериода;
|Док = Документ.ТТН.ТекущийДокумент;
.
а именно
"// |Период с ВыбНачПериода по ВыбКонПериода;
|Док = Документ.ТТН.ТекущийДокумент;
. Ну чтобы удостовериться правильности, то просто выведите перед формированием текст запроса.
Есть такая обработка "КонсольЗапросов.ert". Вставил ваш код и увидел, что нужно
вместо:
Я его и вывел, что и описано в моём предыдущем посте.
А по поводу "вместо" скажу, что не это вопрос данной темы. Вопрос в том, как запрос динамически сформировать, а не в том, что вместо чего писать.)
maxwad, Вы попробовали заменить? ОбрабатыватьДокументы Проведенные не отрабатывает, выводит вам ВСЕ документы. Напишите "БезИтогов" и будет вам счастье, и будет вам "запрос динамически сформировать".
Вам помощь тут даешь, а вы уперлись в неправильное написание и еще возмущаетесь. Если моя помощь не помогла, тогда так и пишите, попробовал, ничего не изменилась
Добавлено через 20 минут
Хотя, прошу прощение, БезИтогов здесь совсем не причем
Вот бывает же иногда. Вроде простейшая проблема. А не видно решения.)
Добавлено через 2 часа 28 минут
Решение найдено. На всякий случай для истории оставляю, как надо было сделать:
Всем спасибо, прошу прощение за надоедливость. Логично же. И 7ка и 8ка будет ругаться на этот символ. Это символ переноса строки, в запросе его не должно быть. Вот ваш запрос через сообщить:
Из него видим, что вся верхняя строка идет в комментарии и не обрабатывает ваше условие.
Я бы писал так:
А что значит, логично?) Символ присутствует в переменной ТекстЗапроса, но Запрос же выполняется, если его не редактировать переменными. Так что ничего тут не логично.)
К тому же я выше написал рабочий вариант, там нет уже строки с комментарием.
ТекстЗапроса = ТекстЗапроса + ПровДок;
Но в этом случае условие отбора будет в конце. Разве такой запрос будет работать? У каждой опции есть своё место в запросе, разве нет?)
(у меня сейчас нет 1С под рукой, чтобы проверить, выполнится ли он)
Войдите как ученик, чтобы получить доступ к материалам школы
Язык запросов 1С 8.3 для начинающих программистов: операторы МЕЖДУ и В
Автор уроков и преподаватель школы: Владимир Милькин
Логический оператор МЕЖДУ
Оператор МЕЖДУ позволяет проверить, входит ли значение выражения, указанного слева от него, в диапазон , указанный справа ( вместе с границами диапазона , то есть включительно).
Таким образом, вместо
можно написать более лаконичное
А результат будет один и тот же:
Если же необходимо наоборот выбрать всю еду, калорийность которой не входит в диапазон [200;300], то подойдёт следующая форма отрицания (появилась частица НЕ):
Оператор МЕЖДУ можно применять не только к числовым диапазонам. С датами он также хорошо работает:
Логический оператор В
Проверка совпадения с одним из перечисленных
Оператор В позволяет проверить, совпадает ли значение выражения, указанного слева от него, с одним из значений , описанных справа .
Таким образом, вместо
можно написать более лаконичное
А результат будет один и тот же:
Если же необходимо наоборот выбрать всю еду, цвет которой не совпадает ни с одним значением из списка, то подойдёт следующая форма отрицания (появилась частица НЕ):
Проверка совпадения значения с одним из результата запроса
Пусть нам требуется выбрать из базы только те цвета, которые присутствуют в описании еды. Таким образом, в отобранном списке не должен присутствовать, например, чёрный цвет, так как еды чёрного цвета в нашей базе нет. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Один из вариантов как это можно сделать - использовать логический оператор В, справа от которого будет находиться подзапрос, выбирающий названия цветов из всех записей справочника Еда:
В качестве отступления упомяну, что из внутреннего запроса есть возможность обращаться к полям внешнего запроса.
Опять же, для этой формы оператора В, также доступно использование частицы НЕ перед ним.
Проверка принадлежности по иерархии для справочников
Для справочников проверка может осуществляться и на принадлежность по иерархии.
Для начала давайте рассмотрим пример иерархического справочника. Откройте справочник "Города" в нашей базе:
Обратите внимание, что его элементы отличаются от других справочников (Еда, Цвета, Вкусы) наличием жёлтых папок. Это группы справочника .
Группы отличаются от обычных элементов тем, что могут включать в себя другие группы и элементы. Подобно тому как папки включают в себя другие папки и файлы.
Чтобы просмотреть содержимое группы, сделайте на ней двойной щелчок мышкой:
Чтобы выйти на уровень выше, снова сделайте двойной щелчок по группе:
Таким образом иерархический справочник может содержать как обычные элементы (например, Рио-де-Жанейро, Салвадор), так и группы (например, Бразилия, Индия). Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
У каждого элемента (будь то группа или обычный элемент) может быть родитель. Например, родителем элемента Рио-де-Жанейро является группа Бразилия:
И это верно, потому что Рио-де-Жанейро входит в состав группы Бразилия в иерархии справочника:
Теперь давайте напишем такой запрос, который будет запрашивать выбранную группу-страну и все элементы-города, входящие в неё.
Обратите внимание на то, что в тексте запроса перед именем ГруппаСтрана стоит амперсанд (&). Имена с амперсандом автоматически распознаются системой как параметры , значение которых должно быть задано перед выполнением запроса.
После того, как мы вставим этот запрос в консоль и нажмем кнопку "Выполнить" для обновления, у нас появится возможность задать этот параметр:
Выберите в качестве его значения группу "Россия" (кнопка Выбрать):
Если теперь мы нажмём кнопку "Выполнить", то результат запроса будет следующим:
В результат запроса попала сама группа (Россия) и все элементы, которые входят в её состав (Пермь, Красноярск и Воронеж).
Если вместо России, выбрать "Бразилия", то результат будет таким:
Таким образом результатом оператора В ИЕРАРХИИ будет ИСТИНА, если значение выражения слева является ссылкой на элемент справочника и входит во множество значений справа (Бразилия) или иерархически принадлежит какой-нибудь группе, содержащейся в этом множестве (Сан-Паулу, Рио-де-Жанейро, Салвадор).
В качестве множества значений, на совпадение с которыми выполняется проверка, может фигурировать и результат запроса. В этом случае справа от оператора В необходимо указать описание запроса:
Для оператора В ИЕРАРХИИ также доступно использование частицы НЕ перед ним.
Запросы предназначены для извлечения и обработки информации из базы данных для предоставления пользователю в требуемом виде. Под обработкой здесь подразумевается группировка полей, сортировка строк, расчет итогов и т.д. Изменять данные с помощью запросов в 1С нельзя!
Схема работы с запросом
Общая схема работы с запросом состоит из нескольких последовательных этапов:
- Создание объекта Запрос и установка текста запроса;
- Установка параметров запроса;
- Выполнение запроса и получение результата;
- Обход результата запроса и обработка полученных данных.
1. Объект Запрос имеет свойство Текст, которому необходимо присвоить текст запроса.
3. После присвоения текста и установки параметров запрос необходимо выполнить и получить результат выполнения. Выполнение производится методом Выполнить () , который возвращает объект РезультатЗапроса. Из результата запроса можно:
- получить выборку с помощью метода Выбрать (< ТипОбхода >, < Группировки >, < ГруппировкиДляЗначенийГруппировок >) ;
- выгрузить значения в таблицу значений или дерево значений с помощью метода Выгрузить (< ТипОбхода >) .
// Получение выборки
РезультатЗапроса = Запрос . Выполнить ();
Выборка = РезультатЗапроса . Выбрать ();// Получение таблицы значений
РезультатЗапроса = Запрос . Выполнить ();
Таблица = РезультатЗапроса . Выгрузить ();
4. Обойти выборку результата запроса можно с помощью цикла:
Пока Выборка . Следующий () Цикл
Сообщить ( Выборка . Курс );
КонецЦикла;
Полный пример работы с запросом может выглядеть так:
Состав текста запроса
Текст запроса состоит из нескольких секций:
Обязательной является только первая секция.
Временные таблицы и пакетные запросы
Часто можно столкнуться с ситуацией, когда в качестве источника запроса нужно использовать не таблицы базы данных, а результат выполнения другого запроса. Эту задачу можно решить с помощью вложенных запросов или временных таблиц. Применение временных таблиц позволяет упростить текст сложного запроса, разделив его на составные части, а также, в некоторых случаях, ускорить выполнение запроса и уменьшить количество блокировок. Для работы с временными таблицами используется объект МенеджерВременныхТаблиц. Создание временной таблицы производится при помощи ключевого слова ПОМЕСТИТЬ, за которым следует наименование временной таблицы.
Виртуальные таблицы
Существуют следующие виртуальные таблицы (в скобках указаны возможные параметры):
При работе с виртуальными таблицами следует накладывать отборы в параметрах виртуальных таблиц, а не в условии ГДЕ. От этого сильно зависит время выполнения запроса.
Конструктор запроса
Для ускорения ввода текстов запросов платформа имеет специальные инструменты: Конструктор запроса и Конструктор запроса с обработкой результата. Для вызова конструкторов необходимо щелкнуть правой кнопкой мыши и выбрать требуемый пункт:
Также конструкторы можно вызвать из главного меню Текст.
При помощи конструктора запроса программист может интерактивно сконструировать текст запроса. Для этого мышкой выбираются нужные таблицы и поля, устанавливаются связи, группировки, итоги и т.д. Данный подход позволяет экономить время и избавиться от возможных ошибок. В результате своей работы конструктор запроса формирует текст запроса.
Конструктор запроса с обработкой результата кроме формирования текста запроса создает готовый фрагмент кода для получения и обработки данных.
Объект СхемаЗапроса
Платформа позволяет программно создавать и редактировать текст запроса при помощи объекта СхемаЗапроса. Объект имеет единственное свойство ПакетЗапросов, в котором объекта хранятся свойства всех запросов, редактируемых в данный момент. Объект СхемаЗапроса поддерживает следующие методы:
Рассмотрим пример работы с объектом СхемаЗапроса. Для программного формирования текста запроса
ВЫБРАТЬ
Валюты.Ссылка КАК Валюта,
Валюты.Код
ИЗ
Справочник.Валюты КАК Валюты
ГДЕ
НЕ Валюты.ПометкаУдаленияУПОРЯДОЧИТЬ ПО
Валюты.Код
Код на встроенном языке может выглядеть так:
Остались вопросы?
Спросите в комментариях к статье.
Читайте также: