Целевая аудитория обработки – программисты и продвинутые пользователи , занимающиеся анализом данных. Обработка предназначена:
Обработка состоит из трех основных форм-форм редакторов:
Все три формы тесно интегрированы друг с другом, могут использоваться как вместе так и независимо. При этом реализована концепция «выборки всего из всего» - например результат исполнения запроса и схемы компоновки данных можно скомпоновать в одном или нескольких объектах, получить некую сводную информацию, которую использовать в новом запросе и т.д.
Термин «объекты» взят по аналогии с названием внешнего источника данных в схеме компоновки данных. Но кроме получения набора данных, объект – это просто некий произвольный фрагмент исполняемого кода.
Эта форма представляет собой один из вариантов реализации консоли запросов, предназначение которой – написание запроса, его исполнение и анализ полученных данных.
Внешний вид формы запросов
Но в отличие от стандартной и многих других обработок добавлены некие интерфейсные возможности, повышающие удобство работы:
В тексте запроса доступны три варианта алиасов:
Зачем все это? Предположим на закладке результата у вас данные запроса, который выполняется 10 минут или более.
Предположим возникла необходимость сгруппировать данные по каким-либо полям. Чтоб это сделать вам нужно немного подправить текст запроса, но потом еще ожидать 10 или более минут пока он выполнится. Чтобы избежать ненужного ожидания вы можете на новой вкладке обратиться к полученным результатам как к временной таблице. Для этого вкладке, содержащей результат, необходимо присвоить алиас.
Другая ситация - у вас на двух разных вкладках есть запросы, которые необходимо объединить в новый запрос. Обычно вы копировали текст одного запроса, объединяли с текстом другого. Потом заново настраивали параметы. Присвоив алиасы обоим запросам, можно значительно ускорить описанные выше действия - особенно это актуально когда параметров много или они содержат большие списки значений.
Итак, у формы запросов есть три вида алиасов: #Алиас, #Алиас_Текст, #Алиас_Результат (вместо слова "Алиас" вы присваиваете любой идентификатор в свойствах вкладки). Их отличия в следующем:
Для примера создадим новый запрос:
ВЫБРАТЬ * ИЗ Справочник.Валюты
Установим запросу алиас «ВыборкаВалют». Создадим новый запрос, в котором напишем:
ВЫБРАТЬ * ИЗ #ВыборкаВалют
При его выполнении на самом деле будет исполнен следующий текст:
ВЫБРАТЬ * ПОМЕСТИТЬ CлучайноеИмяВременнойТаблицы ИЗ Справочник.Валюты ; ВЫБРАТЬ * ИЗ CлучайноеИмяВременнойТаблицы ; УНИЧТОЖИТЬ CлучайноеИмяВременнойТаблицы
При записи
ВЫБРАТЬ * ИЗ (#ВыборкаВалют_Текст) КАК ВыбратьВалюту
Будет исполнен запрос (обратите внимание, что в этом случае #Алиас_текст берется в скобки ):
ВЫБРАТЬ * ИЗ (ВЫБРАТЬ * ИЗ Справочник.Валюты) КАК ВыбратьВалюту
Кроме того возможно связать запрос и объект через параметр запроса. Для этого надо в тексте запроса поместить внешнюю таблицу – параметр во временную таблицу:
ВЫБРАТЬ * ПОМЕСТИТЬ ВременнаяТаблица ИЗ &Объект КАК Объект
И использовать ее далее обычным образом.
На закладке параметров надо у параметра «Объект» установить флажок «Выражение» и вписать в значение параметра алиас объекта в виде #АлиасОбъекта (возможна запись #АлиасОбъекта_ТаблицаЗначений). Объект должен возвращать в результате таблицу значений.
Переключение на форму СКД осуществляется с помощью кнопки «Схемы компоновки данных» на панели формы запросов и объектов.
Использование схем компоновки данных предполагает наличие базовых знаний по этому вопросу.
В левой части находится список редактируемых схем с подчиненными наборами данных, в правой части – стандартные настройки компоновщика настроек текущей схемы компоновки данных.
Внешний вид формы запросов
Отличительные особенности редактора СКД следующие:
Форма объектов предназначена для:
Интерфейсно форма объектов схожа с формой запросов – каждый объект или фрагмент кода редактируется на новой закладке. Но имеется ряд существенных отличий. При написании кода можно пользоваться параметрами. Они обозначаются также как и в тексте запроса – значком «&». Смысл их в том, чтобы не писать код для вычисления этих параметров, а просто выбрать на форме на закладке «параметры».
Например, нам необходимо выбрать все элементы справочника номенклатуры, подчиненные группе «Стулья офисные». На закладке кода можно написать :
Выборка = Справочники.Номенклатура.Выбрать (&Стулья);
Пока Выборка.Следующий() Цикл
……
КонецЦикла;
На закладке параметров появится параметр «Стулья», значение которого надо будет выбрать интерактивно.
Кроме того у объектов имеются еще две закладки – Таблица значений и Табличное поле. Они могут являться как источниками данных фрагмента кода, так его приемниками. Для наглядности после выполнения фрагмента кода можно переключаться либо на таблицу значений, либо на табличное поле (переключатель в верхней части закладки кода).
Можно заполнить таблицу значений вручную (в действиях с колонками имеется редактор колонок), либо перенести данные из табличного поля, в которое они предварительно загружены, например , из файла и т.д.
Доступ к таблице значений и табличному полю возможен через алиасы #ТаблицаЗначений и #ТабличноеПоле соответственно. Можно обратиться к таблице значений/табличному полю другого объекта (#АлиасДругогоОбъекта_ТаблицаЗначений, #АлиасДругогоОбъекта_ТабличноеПоле).
Фрагмент кода на закладке кода выполняется в контексте функции , которая возвращает значение в переменной Результат.
ВНИМАНИЕ! Если вы используете объект качестве источника данных для СКД, то в его коде обязательно должно присутствовать присвоение возвращаемого набора данных переменной Результат .
Например, если таблица значений заполнена данными :
У такого объекта должен быть обязательно установлен алиас – в СКД это будет имя объекта, содержащего данные. Если объект возвращает в переменной Результат некое значение , то его алиас можно использовать в коде другого объекта. Так как во фрагменте кода нельзя использовать выражение «возврат » вместо него можно воспользоваться алиасом #выход. Таблица значений и Табличное поле по умолчанию не сохраняются после закрытия формы. Чтобы их сохранить, надо включить флажок «Сохранять на диске»
Часто возникает необходимость отладки запроса, построителя отчета/запроса, схемы компоновки данных с уже заполненными на какой-то момент параметрами и настройками. Или если текст запроса создается динамически. Для этого необходимо в один из глобальных модулей поместить следующий код:
Функция ОтладкаККД(Объект,НастройкиСКД = Неопределено, ВнешниеДанные = Неопределено) Экспорт //Если задействовано дополнительное меню Форма = ПолучитьФормуЗарегистрированнойВнешнейОбработки("Консоль компоновки данных",,"ФормаНастройки"); //Если не задействовано дополнительное меню //Форма = ВнешниеОбработки.ПолучитьФорму(" -Путь к обработке консоли- КонсольКомпоновкиДанных.epf","ФормаНастройки"); Если Форма = Неопределено Тогда Возврат Ложь; КонецЕсли; Форма.ОбъектДляОтладки = Объект; Форма.НастройкиСКДДляОтладки = НастройкиСКД; Форма.ВнешниеДанные = ВнешниеДанные; Форма.Открыть(); Возврат Истина; КонецФункции
И далее в конфигураторе перед выполнением отлаживаемого запроса (СКД, построителя отчета) устанавливаем точку останова. В момент ее срабатывания пишем в редакторе выражений (Shift-F9): ОтладкаККД(Запрос) и нажимаем "Рассчитать". После продолжения отладки (F5) в базе откроется одна из форм консоли компоновки данных с данными (текст, отборы, настройки ) выбранного объекта отладки. Кроме этого, можно разместить вызов отладки консоли в любой форме, где она требуется. Для СКД при необходимости можно в параметрах вызываемой функции указать используемые настройки и внешние данные
Для использования этой возможности в конфигурации должны присутствовать объекты метаданных, необходимые для организации дополнительного меню. Также во внешние формы дополнительного меню должна быть подгружен внешний отчет Универсальная форма СКД.erf. При выборе такого пункта меню схема компоновки данных передается универсальной форме СКД вместе со списком объектов для получения внешних данных (если они есть). Потом эта форма открывается у пользователя для выполнения.
Кроме того если есть метаданные, необходимые для работы дополнительного меню, становится доступными обмен элементами консоли компоновки данных в рамках одной базы. Т.е. пользователь А может выбрать пункт меню над списком элементов Файл/передача -> Передать запрос (объект / СКД), выбрать пользователя Б. Пользователь Б, открыв консоль в этой же базе, выбирает пункт Файл/передача -> Получить запрос(объект / СКД). И переданный элемент СКД окажется у него в консоли компоновки со всеми настройками.
Можно ограничить возможности пользователей для работы в консоли, если у них нет достаточной квалификации, но требуются какие-то особые выборки данных. Для этого нужно создать "Категорию метанастроек" с ИД = "ОграниченияКонсолиКомпоновкиДанных", в табличной части которой будут пользователи из справочника пользователей (в поле объект). Если пользователь есть в таблице настройки, ему запрещено редактирование кода (разрешен только просмотр), если при этом показатель в этой строке = 0 тогда запрещено и редактирование запросов. Если показатель больше 0 - редактирование СКД.
Саму внешнюю обработку,а также видеоурок для лучшего понимания возможностей консоли, можно скачать здесь