Программы. Игры. Браузеры. Windows. Архиваторы
  • Главная
  • Кодеки и плееры
  • 1с 8.3 запрос группировка. Группировка в запросе. Оператор проверки строки на подобие шаблону

1с 8.3 запрос группировка. Группировка в запросе. Оператор проверки строки на подобие шаблону

Язык запросов является одним из основополагающих механизмов 1С 8.3 для разработчиков. При помощи запросов можно быстро получить любые данные, хранящиеся в базе. Его синтаксис очень похож на SQL, но есть и отличия.

Основные достоинства языка запросов 1С 8.3 (8.2) перед SQL:

  • разыменование ссылочных полей (обращение черед одну или несколько точек к реквизитам объектов);
  • работа с итогами очень удобная;
  • возможность создавать виртуальные таблицы;
  • запрос можно писать как на английском, так и на русском языках;
  • возможность блокировать данные для исключения взаимных блокировок.

Недостатки языка запросов в 1С:

  • в отличие от SQL, в 1С запросы не позволяют изменять данные;
  • отсутствие хранимых процедур;
  • невозможность преобразования строки в число.

Рассмотрим наш мини учебник по основным конструкциям языка запросов 1С.

В связи с тем, что запросы в 1С позволяют лишь получать данные, любой запрос должен начинаться со слова «ВЫБРАТЬ». После этой команды указываются поля, данные из которых нужно получить. Если указать «*», то будут выбраны все доступные поля. Место, откуда будут выбираться данные (документы, регистры, справочники и прочее) указывается после слова «ИЗ».

В рассмотренном ниже примере выбираются наименования всей номенклатуры из справочника «Номенклатура». После слова «КАК» указываются псевдонимы (имена) для таблиц и полей.

ВЫБРАТЬ
Номенклатура.Наименование КАК НаименованиеНоменклатуры
ИЗ
Справочник.Номенклатура КАК Номенклатура

Рядом с командой «ВЫБРАТЬ» можно указать ключевые слова:

  • РАЗЛИЧНЫЕ . Запрос будет отбирать только отличающиеся хотя бы по одному полю строки (без дублей).
  • ПЕРВЫЕ n , где n – количество строк с начала результата, которые необходимо отобрать. Чаще всего такая конструкция используется совместно с сортировкой (УПОРЯДОЧИТЬ ПО). Например, когда нужно отобрать определенное количество последних по дате документов.
  • РАЗРЕШЕННЫЕ . Данная конструкция позволяет выбирать из базы только те записи, которые доступны текущему пользователю. Баз использования этого ключевого слова пользователю будет выведено сообщение об ошибке при попытке обращения запроса к тем записям, доступа к которым у него нет.

Эти ключевые слова могут использоваться как все вместе, так и по отдельности.

ДЛЯ ИЗМЕНЕНИЯ

Это предложение блокирует данные для исключения взаимных конфликтов. Заблокированные данные не будут считываться из другого соединения до окончания транзакции. В данном предложении можно указывать конкретные таблицы, которые нужно заблокировать. В противном случае будут заблокированы все. Конструкция актуальна лишь для режима автоматических блокировок.

Чаще всего предложение «ДЛЯ ИЗМЕНЕНИЯ» используется при получении остатков. Ведь при одновременной работе нескольких пользователей в программе, пока один получает остатки, другой может их изменить. В таком случае полученный остаток будет уже не верен. Если же заблокировать данные этим предложением, то пока первый сотрудник не получит корректный остаток и не совершит с ним все необходимые манипуляции, второй сотрудник будет вынужден ждать.

ВЫБРАТЬ
Взаиморасчеты.Сотрудник,
Взаиморасчеты.СуммаВзаиморасчетовОстаток
ИЗ
РегистрНакопления.ВзаиморасчетыССотрудниками.Остатки КАК Взаиморасчеты
ДЛЯ ИЗМЕНЕНИЯ

ГДЕ (WHERE)

Конструкция необходима для наложения какого-либо отбора на выгружаемые данные. В некоторых случая получения данных из регистров разумнее прописывать условия отборов в параметрах виртуальных таблиц. При использовании «ГДЕ», сначала получаются все записи, и только потом применяется отбор, что значительно замедляет выполнение запроса.

Ниже приведен пример запроса получения контактных лиц с определенной должностью. Параметр отбора имеет формат: &ИмяПараметра (имя параметра произвольное).

ВЫБОР (CASE)

Конструкция позволяет указывать условия непосредственно в теле запроса.

В приведенном ниже примере «ДополнительноеПоле» будет содержать текст в зависимости от того проведен документ или нет:

ВЫБРАТЬ
ПоступлениеТиУ.Ссылка,
ВЫБОР
КОГДА ПоступлениеТиУ.Проведен
ТОГДА «Документ проведен!»
ИНАЧЕ «Документ не проведен…»
КОНЕЦ КАК ДополнительноеПоле
ИЗ
Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТиУ

СОЕДИНЕНИЕ (JOIN)

Соединения связывают две таблицы по определенному условию связи.

ЛЕВОЕ/ПРАВОЕ СОЕДИНЕНИЕ

Суть ЛЕВОГО соединения заключается в том, что полностью берется первая указанная таблица и к ней по условию связи привязывается вторая. Если записей, соответствующих первой таблице во второй не нашлось, то в качестве их значений подставляется NULL. Проще говоря, главной является первая указанная таблица и к её данным уже подставляются данные второй таблицы (если они есть).

Например, необходимо получить номенклатурные позиции из документов «Поступление товаров и услуг» и цены из регистра сведений «Цены номенклатуры». В данном случае, если цена у какой-либо позиции не найдена, вместо нее подставиться NULL. Из документа все позиции будут выбраны вне зависимости от того, есть ли на них цена или нет.

ВЫБРАТЬ
ПоступлениеТиУ.Номенклатура,
Цены.Цена
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТиУ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК Цены
ПО ПоступлениеТиУ.Номенклатура = Цены.Номенклатура

В ПРАВОМ все в точности да наоборот.

ПОЛНОЕ СОЕДИНЕНИЕ

Данный вид соединения отличается от предыдущих тем, что в результате будут возвращены все записи как первой таблицы, так и второй. Если по заданному условию связи в первой или второй таблице не найдено записей, вместо них будет возвращено значение NULL.

При использовании в предыдущем примере полного соединения будут выбраны все позиции номенклатуры из документа «Поступление товаров и услуг» и все последние цены из регистра «Цены номенклатуры». Значения не найденных записей, как в первой, так и во второй таблице будут равняться NULL.

ВНУТРЕННЕЕ СОЕДИНЕНИЕ

Отличием ВНУТРЕННЕГО соединения от ПОЛНОГО является то, что если хотя бы в одной из таблиц не найдена запись, то запрос не выведет ее вообще. В результате будут выбраны только те номенклатурные позиции из документа «Поступление товаров и услуг», для которых в регистре сведений «Цены номенклатуры» есть записи, если в предыдущем примере заменить «ПОЛНОЕ» на «ВНУТРЕННЕЕ».

СГРУППИРОВАТЬ ПО (GROUP BY)

Группировка в запросах 1С позволяет сворачивать строки таблицы (группировочные поля) по определенному общему признаку (группируемым полям). Группировочные поля могут выводиться только с применением агрегатных функций.

Результатом следующего запроса будет список видов номенклатуры с максимальными ценами по ним.

ВЫБРАТЬ
,
МАКСИМУМ(Цены.Цена) КАК Цена
ИЗ

СГРУППИРОВАТЬ ПО
Цены.Номенклатура.ВидНоменклатуры

ИТОГИ

В отличие от группировки при использовании итогов выводятся все записи и уже к ним добавляются итоговые строки. Группировка выводит лишь обобщенные записи.

Итоги можно подводить по всей таблице целиком (с использованием ключевого слова «ОБЩИЕ»), по нескольким полям, по полям с иерархической структурой (ключевые слова «ИЕРАРХИЯ», «ТОЛЬКО ИЕРАРХИЯ»). При подведении итогов не обязательно использовать агрегатные функции.

Рассмотрим пример, аналогичный примеру выше с использованием группировки. В данном случае результат запроса вернет не только сгруппированные поля, но и детальные записи.

ВЫБРАТЬ
Цены.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
Цены.Цена КАК Цена
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК Цены
ИТОГИ
МАКСИМУМ(Цена)
ПО
ВидНоменклатуры

ИМЕЮЩИЕ (HAVING)

Данный оператор схож с оператором «ГДЕ», но используется только для агрегатных функций. Остальные поля, кроме используемых этим оператором, должны быть сгруппированы. Оператор «ГДЕ» не применим для агрегатных функций.

В рассмотренном ниже примере отбираются максимальные цены номенклатуры, если они превышают 1000, сгруппированные по виду номенклатуры.

ВЫБРАТЬ

МАКСИМУМ(Цены.Цена) КАК Цена
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК Цены
СГРУППИРОВАТЬ ПО
Цены.Номенклатура.ВидНоменклатуры
ИМЕЮЩИЕ
МАКСИМУМ(Цены.Цена) > 1000

УПОРЯДОЧИТЬ ПО

Оператор «УПОРЯДОЧИТЬ ПО» сортирует результат запроса. Для того, чтобы гарантированно выводить записи в постоянном порядке, используется АВТОУПОРЯДОЧИВАНИЕ. Примитивные типы сортируются по обычным правилам. Ссылочные типы сортируются по GUID.

Пример получения списка сотрудников, отсортированного по наименованию:

ВЫБРАТЬ
Сотрудники.Наименование КАК Наименование
ИЗ
Справочник.Сотрудники КАК Сотрудники
УПОРЯДОЧИТЬ ПО
Наименование
АВТОУПОРЯДОЧИВАНИЕ

Прочие конструкции языка запросов 1С

  • ОБЪЕДИНИТЬ – результаты двух запросов в один.
  • ОБЪЕДИНИТЬ ВСЕ – аналог ОБЪЕДИНИТЬ, но без группировки одинаковых строк.
  • ПУСТАЯ ТАБЛИЦА – иногда используется при объединении запросов для указания пустой вложенной таблицы.
  • ПОМЕСТИТЬ – создает временную таблицу для оптимизации сложных запросов 1С. Такие запросы называются пакетными.

Функции языка запросов

  • ПОДСТРОКА обрезает строку с определенной позиции на указанное количество символов.
  • ГОД…СЕКУНДА позволяют получить выбранное значение числового типа. Входным параметром является дата.
  • НАЧАЛОПЕРИОДА и КОНЕЦПЕРИОДА используются при работе с датами. В качестве дополнительного параметра указывается тип периода (ДЕНЬ, МЕСЯЦ, ГОД и т. п.).
  • ДОБАВИТЬКДАТЕ позволяет прибавить или отнять от даты указанное время определенного типа (СЕКУНДА, МИНУТА, ДЕНЬ и т. п.).
  • РАЗНОСТЬДАТ определяет разницу между двумя датами с указанием типа выходного значения (ДЕНЬ, ГОД, МЕСЯЦ и т. п.).
  • ЕСТЬNULL заменяет отсутствующее значение на указанное выражение.
  • ПРЕДСТАВЛЕНИЕ и ПРЕДСТАВЛЕНИЕССЫЛКИ получают строковое представление указанного поля. Применяются для любых значений и только ссылочных соответственно.
  • ТИП, ТИПЗНАЧЕНИЯ используются для определения типа входного параметра.
  • ССЫЛКА является логическим оператором сравнения для типа значения реквизита.
  • ВЫРАЗИТЬ используется для преобразования значения к нужному типу.
  • ДАТАВРЕМЯ получает значение типа «Дата» из числовых значений (Год, Месяц, День, Час, Минута, Секунда).
  • ЗНАЧЕНИЕ в запросе 1С используется для указания предопределенных значений — справочников, перечислений, планов видов характеристик. Пример использования: «Где ЮрФизЛицо = Значение(Перечисление.ЮрФизЛица.ФизЛицо) «.

Конструктор запросов

Для создания запросов с 1С есть очень удобный встроенный механизм – конструктор запросов. Он содержит следующие основные вкладки:

  • «Таблицы и поля» — содержит поля, которые необходимо выбрать и их источники.
  • «Связи» — описывает условий для конструкции СОЕДИНЕНИЕ.
  • «Группировка» — содержит описание конструкций группировок и суммируемых полей по ним.
  • «Условия» — отвечает за отборы данных в запросе.
  • «Дополнительно» — дополнительные параметры запроса, такие как ключевые слова команды «ВЫБРАТЬ» и пр.
  • «Объединения/Псевдонимы» — указываются возможности объединения таблиц и задаются псевдонимы (конструкция «КАК»).
  • «Порядок» — отвечает за сортировку результата запросов.
  • «Итоги» — аналогична вкладке «Группировка», но применяется для конструкции «ИТОГИ».

Текст самого запроса можно просмотреть, нажав в левом нижнем углу на кнопку «Запрос». В данной форме его можно откорректировать вручную или скопировать.


Консоль запросов

Для быстрого просмотра результата запроса в режиме «Предприятие», либо отладки сложных запросов используется . В ней пишется текст запроса, устанавливаются параметры, и показывается его результат.

Скачать консоль запросов можно на диске ИТС, либо по .

В прошлом уроке была рассмотрена фильтрация результатов запроса. С помощью предложения ГДЕ задавали условия отбора из исходных таблиц, чтобы в запросе обрабатывались только те записи, для которых условие истинно. Причем условие отбора могло быть как простым, так и достаточно сложным логическим выражением. Цель такой обработки - максимально ограничить объем получаемых в результирующем наборе данных. Что дальше делать с тем множеством данных, которые ограничить не удалось, поскольку они по всем параметрам нужны?

1. Зачем группируют данные?

Возможность располагать всеми данными в системе, несомненно, - залог эффективного управления. Однако, как мы уже убедились, все данные всех таблиц базы данных пользователям не нужны. Да и нужные данные существуют не просто так, а для чего-то.

Но даже вполне корректно в этих целях отобранные данные анализировать сложно: их будет слишком много. Все данные контролировать тоже нереально, а управлять ими - просто невозможно. Недаром говорят, что суть управленческого учета сводится к проблеме определенного агрегирования (группирования) информации.

Первая причина группировки - уменьшить количество информации , сведя ее в однородные группы. Например, суммы продаж и покупок сводятся в группы, которыми служат бухгалтерские счета. Затем по этим уже сводным показателям формируются более крупные показатели - балансовые группы, различные отчетные показатели. Однако меньше, чем счетом, уже не оперируют.

План счетов меняли не так давно не в последнюю очередь затем, чтобы без дополнительного деления получать принятые в международной практике показатели. Модные сейчас различные системы ключевых индикаторов тоже являются агрегированными показателями, как правило, достаточно высокого уровня.

Вторая причина - нормирование показателей . Стандартные показатели (рентабельность, оборачиваемость и т. п.) можно измерять (например, в количественном выражении) и сравнивать с ними.

Третья причина - упрощение аналитических задач за счет снижения размерности. Если зафиксировать хотя бы одно измерение, сложность снизится на порядок. Например, выбрать марку и анализировать только предложения внутри ее, хотя практически на конкурентных рынках придется анализировать, по крайней мере, несколько марок.

Это не исчерпывающий список (есть еще и хорошее визуальное представление и др.). Но понятно, что группировать информацию важно и нужно, и делать это можно самыми разными способами

2. Что такое группировка?

Группировка - это процесс объединения в логическом порядке столбцов с повторяющимися значениями. На рис. 1 представлен фрагмент таблицы товаров, которая может быть сгруппирована по любому полю. Например, по цвету корпуса - рядом окажутся приборы в корпусах одного цвета, или страна-производитель - тогда мы получим другую группировку, где рядом окажутся товары одной страны. На рисунке голубым цветом выделены товары в серебристых корпусах; желтым - товары производства Тайваня. Разумеется, это различные группировки и они могут и не пересекаться. Нужного нам товара производства Тайваня может и не быть в серебристом корпусе.

3. Как осуществляется группировка?

Группировка данных - это понятный и технически достаточно простой процесс.

Исходные данные в запросе могут быть сгруппированы по одинаковым значениям полей, и к ним можно применить различные агрегатные функции. Группируются записи, которые содержат одинаковые значения группировочного поля. Допустим, поле Родитель - и будет сгруппирована вся посуда, алкоголь и т. д., поле Цвет - и сгруппировано все проданное по цветам и т. п.).

Если применить еще и агрегатную функцию, результат возвратит количество имеющихся аппаратов в серебристых корпусах, в черных корпусах и т. д. по всем встречающимся в группам, которые будут определяться цветом.

Для иллюстрации этого примера на рисунке 1 можно применить функцию КОЛИЧЕСТВО (Цветкорпуса) . Строки в результате запроса будут содержать результаты вычисления указанных агрегатных функций (СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ) , рассчитанные (сгруппированные) по данным исходных столбцов.

Агрегатные функции указывают в списке полей выборки в предложениях СГРУППИРОВАТЬ ПО , при этом обязательно нужно указать список полей, по которым необходимо проводить группировку. Если совсем не указать группировку, по умолчанию будет одно число (для текстовых полей - количество, для числовых - сумма всех записей).

4. Место в запросе предложения СГРУППИРОВАТЬ ПО

Чтобы создавать запросы, стоит знать, куда попадают визуально указанные вами параметры при трансляции их конструктором. Вот место предложения СГРУППИРОВАТЬ ПО среди других предложений запроса.

Как видите, оно следует после предложения ГДЕ и перед предложением УПОРЯДОЧИТЬ (если таковые имеются в запросе).

5. Пример создания запроса с группировкой с помощью конструктора запросов «1С:Предприятия 8.0»

С помощью запроса, создаваемого конструктором, мы хотим выбрать название проданных за определенный период товаров, выручку и прибыль по их продажам, сгруппировать их по товарным группам и получить сумму выручки и среднюю прибыль по каждой товарной группе.

Воспользуемся запросом, который мы уже создали. Ниже приведен его текст (блок в зеленой рамке), который мы уже написали, и изменять его не будем. Копию предыдущего запроса можно сделать в окне Сервис - Консоль Отчетов , пользуясь инструментами верхней панели, и вызвать на редактирование с помощью кнопки F2 .

Конструктор запросов вызывается с помощью кнопки на нижней панели инструментов окна редактирования запроса.

Еще раз вернемся к той части текста, которую мы уже создали. Мы выбрали поля с названием проданной номенклатуры, сумму продажи (назвали ее выручкой). Воспользовались возможностью получить сразу результат вычисления полей, содержащих выручку и себестоимость (назвали эту разность прибылью). Все это сделано с помощью закладок Таблицы и поля , Псевдонимы конструктора запросов «1С:Предприятия». Выбор полей сделан из таблиц справочника номенклатура и регистра накопления продажи компании.

На закладке Связи установлено соединение таблиц. Конечно, для данного запроса мы могли бы обойтись и одной таблицей, если предпочли бы иную группировку. Но поскольку задача предполагает разделить товары по группам, а сведения о принадлежности к группе (т. е. о поле Родитель ) находятся в таблице самого справочника, но не регистра накопления, приходится соединять таблицы. Период выборки мы задавали через передачу параметров виртуальной таблицы (это одна из важных особенностей конструктора по ограничению выборки, которую мы тоже рассматривали).

Теперь мы можем приступать к группировке. Для этого используются закладки Группировки и Итоги .

На закладке Группировки мы выбираем поле, по которому будем группировать, - по полю Родитель (рис. 2 ). Остальные поля (текст запроса в голубой рамке) с представлением элементов поставит конструктор. И ниже в Суммируемом поле (рис. 3 ) мы поставим агрегатные функции, значения которых нам нужны - сумму выручки по группе и среднюю прибыль по продажам.

Что здесь важно? То, что группировать можно только по полям, которые указаны в списке выборки. Это вполне логично: если значения поля не выбраны, они неизвестны, и нельзя осуществить группировку. Если же мы хотим наложить впоследствии условие на значение группировочного поля предложением ИМЕЮЩИЕ (например, посчитали среднюю оборачиваемость и выбрали только те группы, по которым этот показатель ниже нормы), обязательно должны быть группировки по таким полям. Это условие необходимо соблюдать, даже если не нужно видеть эти поля в итогах.

Это тоже понятно: сначала нужно сгруппировать и рассчитать, а только потом можно увидеть, отвечает ли результат каким-то условиям. Сообщения о таких ошибках вы получите при проверке запроса, но лучше сразу иметь это в виду.

Теперь перейдем к закладке Итоги . Здесь мы укажем группировочные поля, которые хотим видеть в итогах (рис. 4 ). В данном случае это тоже поле Родитель . Когда в качестве одного из источников данных указана таблица справочника, очень часто одной из группировок будет его иерархия.

Далее указываются агрегатные функции, значения которых нужно получить, - а мы хотим знать сумму выручки по группе и среднюю прибыль (рис. 5 ). Как параметры этой закладки преобразованы в текст запроса, видно в желтом блоке текста запроса.

На закладке Порядок мы указали сортировку по полю Выручка по убыванию. Обычно, когда нас интересуют какие-то показатели, более удачной бывает сортировка по числовым полям. Если этого не сделать, будет принята сортировка первой из объединенных таблиц (а это таблица справочника «Номенклатура»). Наименования товаров будут отсортированы по алфавиту.

Везде в итогах, группировках и сортировках, если мы квалифицировали столбцы (дали им псевдонимы - товар, выручка, прибыль), можно использовать квалифицированные имена. Теперь можно нажать кнопку ОК в конструкторе - будет выполнена синтаксическая проверка, и если все нормально, можно выполнить запрос.

Если мы хотим наложить условие на группы, нужно наложить условия на значения агрегатных функций группировочных полей с помощью предложения ИМЕЮЩИЕ (следует непосредственно за предложением СГРУППИРОВАТЬ ). Например, ИМЕЮЩИЕ СРЕДНЕЕ (Прибыль) > 500 - и в наборе не будет ни одной группы, в которой средняя по группе прибыль не достигла 500,01 грн.

На рисунке 6 представлено то, что у нас получилось в итоге (фрагмент получившейся таблицы, сделанной по данным демонстрационной версии конфигурации «Управление торговлей для Украины 8.0» ред. 2.1, чтобы можно было воспроизвести результаты).

Запрос такой сложности уже вполне подходит для работы. Более того, если добавить сюда еще одно поле - рентабельность товарных запасов (прибыль, разделенная на среднедневной остаток товаров за период), в таблицу будут включены основные показатели, с которыми работают менеджеры по управлению запасами. Для этого в запрос нужно добавить еще таблицу «ОстаткиТоваровКомпании», соединить таблицы и снова пройти все закладки.

ВЫБРАТЬ <поля1,поля2>

ИЗ<таблица1,таблица2>

ГДЕ<условия>

СГРУППИРОВАТЬ ПО <поля1,поля2>

УПОРЯДОЧИТЬ ПО <поля1, поля2>

ИТОГИ <фукция1,функция2>

ПО <поле1,поля2>

СпрНоменклатура.Предста-вление,

ПродажиКомпанииОбороты. СуммаПродажиОборот

КАК Выручка,

ПродажиКомпанииОборо-ты.СуммаПродажиОборот ПродажиКомпанииОбороты. СебестоимостьОборот КАК Прибыль

ИЗ Справочник. Номенклатура

КАК СпрНоменклатура

ВНУТРЕННЕЕ СОЕДИНЕНИЕРе-гистрНакопления.ПродажиКомпании.Обороты(&ДатаНа-чала, &ДатаКонца,)

КАК ПродажиКомпании Обороты

ПО ПродажиКомпанииОбо-роты.Номенклатура = СпрНоменклатура.

СГРУППИРОВАТЬ ПО

СпрНоменклатура.Родитель,

СпрНоменклатура.Представ-ление

УПОРЯДОЧИТЬ ПО

Редактор текста и модуля - это один из инструментов разработки. Он используется для редактирования текстовых документов и для редактирования программных модулей конфигурации.

Редактор текстов и модулей предоставляет пользователю все основные функции, необходимые при редактировании как простых текстов, так и текстов программных модулей. Конфигуратор 1С:Предприятия 8 использует этот редактор в двух режимах:

  • для редактирования текстовых документов;
  • для редактирования текстов модулей (как составную часть редактора формы).

Редактирование текстовых документов

В режиме редактирования текстовых документов редактор поддерживает все стандартные функции редактирования текста:

  • создание нового документа или открытие одного из существующих документов;
  • ввод и редактирование текста;
  • сохранение отредактированного текста;
  • печать текста.

В процессе редактирования текста можно переходить к конкретной строке документа, сдвигать блоки текста на позицию табуляции, выполнять поиск и замену и использовать закладки. Закладки могут быть размещены на любой строке текста:

В дальнейшем быстрый переход по закладкам возможен по сочетанию клавиш или команде меню:

Редактирование текстов модулей

Редактирование текстов модулей может выполняться в процессе создания формы объекта прикладного решения, непосредственно при разработке модулей объектов или всего приложения, и при редактировании внешнего текстового файла, содержащего текст модуля.

Помимо стандартных действий, присущих любому текстовому редактору, редактор текстов и модулей имеет ряд специфических особенностей:

Выделение цветом синтаксических конструкций

Для удобства редактирования текстов модулей редактор выделяет цветом элементы встроенного языка: ключевые слова, языковые константы, операторы, комментарии и пр.:

Разработчик может использовать цвета выделения, установленные по умолчанию, или настроить их самостоятельно. В общем случае система сама отслеживает необходимость включения режима выделения цветом. Однако в ситуации, когда система "не знает" о том, что редактируется текст модуля (например, если редактируется внешний текстовый файл, содержащий текст модуля), разработчик может включить режим выделения цветом вручную, используя меню конфигуратора:

Группировка

При просмотре модулей редактор позволяет объединять некоторые синтаксические конструкции языка в группы, сворачивать и разворачивать их. Использование группировки синтаксических конструкций позволяет лучше воспринимать различные части текста, а также переносить и копировать группы целиком:

Свернутый текст замещается специальным маркером, который позволяет просмотреть содержимое свернутой группы в виде подсказки:

Разработчику предоставляется возможность настраивать режим группировки, указывая, какие синтаксические конструкции могут группироваться, и каким должно быть исходное состояние группировки (свернутая или развернутая) при открытии документа. Таким образом, он может настроить, например, использование группировок "по максимуму":

Области

Разработчик может выделять произвольные области текста, группировать и сворачивать их подобно тому, как сворачиваются инструкции циклов, условий, процедур и функций.

Каждой области текста, которую выделяет разработчик, он может дать собственное имя. Это позволяет простым и понятным образом выделять части модуля, имеющие сходный смысл.

Области выделяются с помощью двух инструкций препроцессора: #Область и #КонецОбласти . Единственное назначение этих инструкций - обозначить группируемые и сворачиваемые строки модуля.

Области могут быть вложены друг в друга или в другие группируемые конструкции языка.

Операции с блоками

Редактор позволяет выполнять ряд операций над выделенными блоками текста модуля: автоматическое форматирование, изменение отступа, добавление/удаление комментариев и переносов строк.

Форматирование модуля

Хорошим стилем написания модулей считается использование синтаксического отступа для выделения управляющих конструкций встроенного языка. Редактор позволяет автоматически форматировать текст при его вводе, и кроме этого, выполнять автоматическое форматирование уже введенного текста.

Исходный текст:

Результат автоматического форматирования:

Увеличение/уменьшение отступа

Наряду с автоматическим форматированием всего выделенного текста, редактор поддерживает также операции сдвига выделенного блока вправо или влево на шаг табуляции.

Это облегчает ручное форматирование больших фрагментов кода.

Добавление/удаление комментариев

Также редактор содержит очень удобную для разработчика функцию автоматической (одним нажатием мыши) установки и снятия комментариев на выделенный текст. Такая возможность часто используется при отладке модулей:

Добавление/удаление переноса строки

Использование добавления и удаления переноса строки часто применяется при переносе текстов запроса между модулем и, например, консолью запросов.

Таким образом, отладив запрос в консоли запросов, разработчик может просто скопировать текст запроса из консоли, вставить его в модуль и одним движением добавить перенос строки ко всем строкам текста запроса:

Переход по процедурам и функциям

В ситуации, когда модуль содержит большое количество процедур и функций, удобно использовать режим поиска процедур, который поддерживается редактором. Процедуры и функции отображаются в отдельном окне в порядке их расположения в модуле, однако разработчик может отсортировать их по алфавиту. Пиктограммы слева от названия обозначают имеющиеся процедуры и функции, а имена в угловых скобках соответствуют предопределенным процедурам, которые в настоящий момент отсутствуют, но могут быть размещены в данном модуле.

Если установить курсор на той процедуре, которая еще отсутствует в модуле, и нажать Перейти, конструктор автоматически вставит в текст модуля заголовок предопределенной процедуры.

Переход к определению процедур и функций

Редактор позволяет автоматически переходить к определению процедуры или функции, использованной в тексте модуля. Для этого достаточно установить курсор на имени нужной функции в теле модуля и выполнить команду контекстного меню или нажать "горячую" клавишу. В окне редактора будет открыт текст искомой процедуры или функции:

Контекстная подсказка

Редактор предоставляет средство контекстного ввода выражений с использованием системных объектов, их свойств, методов и пр. В процессе ввода текста или при нажатии комбинации клавиш редактор выводит контекстный список, позволяющий выбрать нужное свойство, метод, функцию и т.д., что позволяет быстро и правильно набирать тексты модулей:

Контекстная подсказка также работает и для параметров некоторых методов, если эти параметры задаются строковыми литералами.

Копирование имен объектов и реквизитов

При написании текста модуля разработчик может просто перетаскивать мышью имена объектов или их реквизитов из дерева метаданных в нужное место модуля:

Проверка модуля

Редактируемый модуль может быть проверен на правильность использования синтаксических конструкций встроенного языка, корректность обращений к методам и свойствам объектов "через точку", а также на корректность некоторых параметров, имеющих тип "Строка":

При наличии ошибок в модуле, их список выдается в окне состояния. Щелкнув мышью на сообщении об ошибке, можно перейти к строке модуля, вызвавшей ошибку. При желании разработчик может включить автоматическое выполнение синтаксического контроля модуля при его закрытии или сохранении всей конфигурации.

Кроме этого конфигуратор поддерживает выполнение полной проверки всех модулей, содержащихся в прикладном решении.

В процессе работы с модулем разработчик имеет возможность получать контекстную подсказку по встроенному языку, используя синтакс-помощник. Для этого достаточно установить курсор на интересующий элемент языка и нажатием комбинации клавиш (или по контекстному меню) перейти к описанию этого элемента языка в синтакс-помощнике.

Ограничение доступа к модулю

Для большинства модулей прикладного решения можно установить пароль доступа, защищающий авторские права разработчика конфигурации. При попытке открыть защищенный модуль выводится диалог ввода пароля:

Использование шаблонов

При редактировании текстовых документов и модулей конфигуратор предоставляет разработчику возможность использовать механизм шаблонов для автоматической подстановки часто используемых фрагментов текста.

Данный механизм запроса служит для расчета показателей по выбранным группировочным полям.

Например, для решения задач: определить сумму всех продаж контрагента за период, максимальный или средний чек.

Быстрый переход

Основной синтаксис:

ВЫБРАТЬ <ГруппировочныеПоля>, <СУММА(<РасчетноеПоле>)>
ИЗ <Источник>
СГРУППИРОВАТЬ ПО
<ГруппировочныеПоля>

Получается, что в директиве СГРУППИРОВАТЬ ПО, дублируются все поля из ВЫБРАТЬ, кроме тех по которым производится расчет. При добавлении поля в конструкторе это производится автоматически, если руками отслеживаейте самостоятельно, иначе будет ошибка: «Поле не входит в группу».

Замечу, что примитивные значения (число,дата,строка) или реквизиты уже присутствующих в группировке ссылок добалвять не обязательно.

Также могут вообще отсутствовать агрегатные функции, тогда запрос будет работать как-будто используется ВЫБРАТЬ РАЗЛИЧНЫЕ.

//Данный запрос получит количество уникальных номенклатур проходивших по каждому складу в системе
ВЫБРАТЬ
ОстаткиТМЦ.Склад,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ОстаткиТМЦ.Номенклатура) КАК Номенклатура,
1,
ДАТАВРЕМЯ(2017,1,12),
ОстаткиТМЦ.Склад.Наименование
ИЗ
РегистрНакопления.ОстаткиТМЦ КАК ОстаткиТМЦ

СГРУППИРОВАТЬ ПО
ОстаткиТМЦ.Склад

Функции группировки (агрегатные)

  • СУММА (<Поле>)
  • КОЛИЧЕСТВО(<Поле>)
  • КОЛИЧЕСТВО (РАЗЛИЧНЫЕ <Поле>)
  • МАКСИМУМ (<Поле>)
  • МИНИМУМ (<Поле>)
  • СРЕДНЕЕ(<Поле>)

Другие возможности группировки

Допускается использование математических операторов над функциями группировки (+,*,/,-), а также конструкция ВЫБОР и поверх агрегата и внутри (в зависимости от потребностей)

ВЫБРАТЬ
,
СУММА(ОстаткиТМЦОбороты.СуммаОборот) КАК СуммаОборот,
СУММА(ОстаткиТМЦОбороты.КоличествоОборот) КАК КоличествоОборот,
ВЫБОР
КОГДА СУММА(ОстаткиТМЦОбороты.КоличествоОборот) = 0
ТОГДА 0
ИНАЧЕ СУММА(ОстаткиТМЦОбороты.СуммаОборот) / СУММА(ОстаткиТМЦОбороты.КоличествоОборот)
КОНЕЦ КАК СредняяЦена
ИЗ

СГРУППИРОВАТЬ ПО
ОстаткиТМЦОбороты.Номенклатура

Пример запроса без функций:
ВЫБРАТЬ
ОстаткиТМЦОбороты.Номенклатура
ИЗ
РегистрНакопления.ОстаткиТМЦ.Обороты КАК ОстаткиТМЦОбороты

СГРУППИРОВАТЬ ПО
ОстаткиТМЦОбороты.Номенклатура

Можно использовать агрегаты над соединяемыми таблицами, но рекомендуется поверх использовать функцию ЕстьNULL

ВЫБРАТЬ
СпрНоменклатура.Ссылка,
ЕСТЬNULL(СУММА(ОстаткиТМЦОбороты.СуммаОборот), 0) КАК Сумма
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТМЦ.Обороты КАК ОстаткиТМЦОбороты
ПО (ОстаткиТМЦОбороты.Номенклатура = СпрНоменклатура.Ссылка)

СГРУППИРОВАТЬ ПО

СпрНоменклатура.Ссылка

Группировка в конструкторе запроса

Производится на одноименной вкладке.

  • Из доступных полей выбираются групповые поля, а также суммируемые поля (для каждого них выбирается функция суммирования).
  • В середине есть кнопки добавления, либо возможно перетаскивание мышью
  • Конструктор обычно сам выбирает функцию (обязательно проверяйте его действия)

Лучшие статьи по теме