Параметры в запросе 1с 7
Написал несколько лет назад когда преподавал курс программирования в 7.7 для слушателей.
По ссылкам - сама обработка и базовая конфигурация сданными применительно к которым и используется запрос в примере.
Помимо этого в конфигурации несколько отчетов в которых можно посмотреть базовые приемы программирования и некоторые фишки
для дальнейшего изучения:
Краткое пояснение механизма работы запроса
(в моем представлении)
Идея запроса заключается в том что он как бы собирает данные не последовательно, как при переборе, а параллельно. То есть запрос это некое сито, размер и форма которого определены переменными и условиями. А результат выполнения запроса - это те "крупинки" информации проходящие сквозь сито, и пригодные для дальнейшего использовния. В итоге мы получаем некий первичный набор данных, образно представленный на рисунке Рис. 3823 . "Промежуточная таблица". Ни пользователь ни программист эту таблицу не видит, так как Работа запроса еще не окончена - из промежуточной таблицы путем "сворачивания" (смотрите метод Свернуть() для таблицы значений) получется необходимая информация - результат выполнения запроса.
А далее уже начинаем обход результата выполнения запроса, который в зависимости от настроек запроса может иметь итоговые значения или не иметь. Надо заметить что итоговые значения можно всегда получить дважы: при входе в нижестоящую группировку и при выходе из нее. Это к вопросу о том - а как получить в отчете сумму по группе вверху группы: то есть сначала идет группа и сумма, а потом элементы группы (см. Рис. 3822 - сводная стоимость заказов сотрудника).
Аналогично дело обстоит и с общими значения всего запроса - по окончания обхода всех группировок мы возвращаемся в начало результата выполнения запроса и тем самым можем еще раз получить результирующие значения - в "подвал" отчета.
Ну и окончании мы можем получить нечто подобное представленное на Рис. 3822 . Шаблон таблицы и заполненная таблица с данными. Где изображен вид шаблона таблицы отчета в конфигураторе , и заполненная таблица которая получается в результате работы отчета в режиме предприятие.
Надеюсь этот краткий экскурс Вам поможет в освоении запроса, так как по опыту преподавания - это самая сложная область при изучении работы см базовыми объектами.
Форум
При наличии в системе 1С:Предприятие компоненты «Бухгалтерский учет» система автоматически реализует специальный механизм работы с бухгалтерскими итогами. Данный механизм обеспечивает хранение, динамический пересчет бухгалтерских итогов и их извлечение средствами встроенного языка.
Изменение бухгалтерских итогов может производиться только проводками бухгалтерских операций.
Хранение итогов поддерживается системой с детализацией до месяца. В итогах хранятся остатки и обороты по счетам с детализацией по субконто и обороты между счетами (без детализации по субконто).
Обращение к бухгалтерским итогам выполняется при помощи агрегатного объекта типа «БухгалтерскиеИтоги». Объект может работать в трех режимах:
- работа с основными итогами,
- работа с временными итогами,
- работа в режиме запроса.
Объект типа «БухгалтерскиеИтоги» при создании функцией «СоздатьОбъект()» работает в первом режиме. Переключение в другие режимы производится функциями «Рассчитать()» и «ВыполнитьЗапрос()».
Функции «ИспользоватьПланСчетов()» и «ИспользоватьРазделитель Учета()» позволяют назначить план счетов и разделитель учета по которым будут выдаваться итоги.
В пункте меню «Управление бухгалтерскими итогами» в системе «1С:Предприятие» устанавливается последний рассчитанный период. В режиме работы с основными итогами осуществляется доступ только к итогам по рассчитанный месяц включительно.
Функции работы с итогами:
Параметры: – счет, = 1 – сумма, 2 – валютная сумма, 3 – количество, – значение типа “Справочник.Валюты”, – значение первого субконто счета, – значение второго субконто счета и т.д.
Для получения остатков и оборотов по счетам, имеющим субсчета, используются аналогичные функции: СНДР(), СКДР(), СКДР(), СККР().
Чтобы получить итоги на любую дату нужно выполнять временный расчет (временный, потому что он хранится только во время существования переменной типа «БухгалтерскиеИтоги») с помощью функции
В параметре можно задать в виде строки список счетов, разделенных запятой или точкой с запятой, по которым будет делаться расчет. Если параметр = 1, то расчет будет делаться только по счетам, иначе по счетам и субконто.
Для получения большего количества итогов (обороты и остатки по разным видам группировок) используется режим запроса.
Перед выполнением запроса устанавливаются различные фильтры:
Затем выполняется сам запрос функцией ВыполнитьЗапрос( ,,,, ,,,), которая возвращает 1, если запрос выполнился успешно.
Параметр принимает следующие значения: 1 – остатки и обороты по счетам, 2 – обороты между счетами, 3 – и то и другое.
Заголовок текста запроса включает в себя дополнительные системные фильтры, которые влияют на выборку данных:
- Период с … по … — уточняют период, за который выбирать объекты, привязанные к дате;
- Обрабатывать — уточняют, как поступать с объектами, помеченными на удаление;
- ОбрабатыватьДокументы — уточняют, как поступать с непроведенными документами;
- ОбрабатыватьОперации — уточняют, как поступать с операциями с выключенными проводками;
Ограничение периода выборки данных
Для документов, регистров и журнала расчетов можно ограничить период выборки данных. Это делается с помощью конструкции вида:
[Период] с НачальныйМоментВремени [По КонечныйМоментВремени];
В качестве параметров НачальныйМоментВремени и КонечныйМоментВремени можно указывать: дату, документ или позицию документа.
Если в качестве параметров указывается дата, то данные выбираются с 0:00 начальной даты до 23:59 конечной даты. Если вторая часть конструкции опущена, то данные выбираются до даты ТА (рабочей даты, если компонента «Оперативный учет» не установлена).
Если конструкция Период с . по . совсем отсутствует, то данные выбираются за дату ТА (рабочую дату, если компонента «Оперативный учет» не установлена).
Дату можно указать напрямую в тексте запроса в формате ‘дд.мм.гг’:
Либо объявить и инициализировать переменные модуля, а в тексте запроса просто указать их имена:
Транслятор сам подставит значения переменных в текст запроса.
Ограничение выборки помеченных на удаление объектов
Для справочников, документов, счетов и операций доступна ограничение на выборку помеченных на удаление данных. Это делается с помощью конструкции вида:
Оператор описывает, какими объектами должен манипулировать запрос:
- всеми объектами (по умолчанию);
- объектами, помеченными на удаление;
- объектами, не помеченными на удаление;
Если конструкция опущена, в запросе обрабатываются все объекты.
Ограничение выборки документов
Для документов имеется возможность ограничения выборки по признаку проведения. Это делается с помощью конструкции вида:
Оператор описывает, какими документами должен манипулировать запрос:
- всеми документами;
- проведенными документами (пол умолчанию);
- непроведенными документами;
Если конструкция опущена, в запросе будут обрабатываться только проведенные документы.
Ограничение выборки операций
Для операций имеется возможность ограничения выборки по признаку включения проводок. Это делается с помощью конструкции вида:
Оператор описывает, какими документами должен манипулировать запрос:
- операциями со всеми проводками;
- операциями с включенными проводками (по умолчанию);
- операциями с выключенными проводками;
Если конструкция опущена, в запросе будут обрабатываться только операциями с включенными проводками.
На платформе 1С 7.7 есть возможность получения данных ИБ в табличном виде, готовом для использования в отчетах или обработках. Такая возможность реализована с помощью программного объекта агрегатного типа Запрос.
Передавая ранее созданному объекту текст запроса, на выходе вы получаете необходимую выборку данных.
В тексте запроса Вы можете использовать простейшие агрегатные функции (вроде Количество, Сумма и т.п.), а также собственные функции, описанные в глобальном модуле. Эти функции обязательно должны быть экспортными.
С помощью запросов можно извлекать информацию из таблиц объектов следующего типа:
- Справочник
- Документ
- Операция
- Счет
- Регистр
- ЖурналРасчетов
В общем случае синтаксис запроса включает следующие блоки (приведены в рекомендованной последовательности):
Особенность языка запросов на платформе 1С 7.7. заключается в том, что вы можете использовать эти области в любой последовательности. Однако, область переменных должна располагаться всегда в начале, т.к. транслятор запроса однопроходный и выдаст ошибку при попытке использования переменной до ее описания. Я же рекомендую придерживаться одной общепринятой схемы построения текстов запросов. Так будет удобнее читать запросы Вам и вашим последователям.
Заголовок
Заголовок является необязательной частью запроса и включает в себя дополнительные системные фильтры, которые влияют на выборку данных:
-
— уточняют период, за который выбирать объекты, привязанные к дате; — уточняют, как поступать с объектами, помеченными на удаление; — уточняют, как поступать с непроведенными документами; — уточняют, как поступать с операциями с выключенными проводками;
Область переменных
В обязательной области переменных описываются внутренние переменные запроса. Описание переменной запроса включает в себя имя переменной и путь к данным:
Кроме того, переменные могут использоваться в других местах запроса: группировках, условиях и агрегатных функциях. В качестве имен переменных нельзя использовать зарезервированные ключевые слова языка запросов:
Без | Год | Групп |
Группировка | День | Документ |
И | Или | Квартал |
Когда | Месяц | Неделя |
НомерСтроки | Обрабатывать | ОбрабатыватьДокументы |
Период | ПериодЖурнала | ОбрабатыватьОперации |
По | С | СтрокаДокумента |
Упорядочить | Условие | Функция |
Область группировок
Необязательная область группировок на языке запросов выполняют несколько важных ролей:
- построение иерархической последовательности обхода выборки данных;
- рассчет промежуточных итогов агрегатных функций;
- упорядочивание данных;
Область условий
Необязательная область условий используется для наложения фильтров на данные БД чтобы сократить размер итоговой выборки. В условиях поддерживаются операции сравнения, а также вхождения в массив.
Область функций
Используется для описания агрегатных функций рассчета итогов по группировкам запроса
Язык запросов предназначен для описания запросов к документам, справочникам, регистрам, журналам расчетов, планам счетов, бухгалтерским операциям и проводкам. Текст описания запроса передается методу Выполнить (см. Главу «Работа с Запросами») в качестве параметра. В результате выполнения этого метода генерируется временный выходной набор данных, который в дальнейшем используется для заполнения формы отчета.
Формат текста описания запроса
Текст описания запроса на языке запросов состоит из последовательности операторов. Концом оператора является символ ";". Операторы могут записываться в любом порядке, однако, следует помнить, что интерпретатор языка запросов однопроходный, следовательно, сначала следует описать переменную, и только потом ее использовать в операторах Группировка , Функция или Условие .
| // Задаем интервал запроса
|Период с ДатаНач по ДатаКон;
| // Определяем внутренние переменные
|Группировка Сотр без групп;
|Функция Сум = Сумма(Рез);
|Функция Дней = Сумма(Дни);
Соглашения и обозначения
В синтаксических диаграммах языка запросов используются следующие символы:
В квадратных скобках заключаются необязательные синтаксические элементы.
В квадратных скобках со знаком " + " заключаются обязательные синтаксические элементы, которые могут использоваться один или более раз.
В квадратных скобках со знаком " * " заключаются необязательные синтаксические элементы, которые могут использоваться один или более раз.
Круглые скобки заключают в себе список параметров.
Вертикальной линией разделяются синтаксические элементы, среди которых нужно выбирать один и только один.
Зарезервированные слова языка запросов
Ключевые слова — это слова, которые используются языком запросов для обозначения встроенных операторов.
Приведенные далее ключевые слова являются зарезервированными и не могут использоваться в качестве имен внутренних переменных описания запросов. Каждое ключевое слово имеет как минимум два представления — русское и английское. Английское представление является традиционным для языков программирования. Ключевые слова в русском и английском представлении могут свободно смешиваться в одном исходном тексте. Регистр букв ключевых слов не имеет значения. Ниже приведен полный список зарезервированных слов языка запросов в обоих представлениях.
Читайте также: