При переходе с конфигурации «1С:Зарплата и управление персоналом» версии 2.5 на современную редакцию 3.1 пользователи и разработчики часто сталкиваются с изменением привычного интерфейса и методологии работы. Одним из наиболее ощутимых изменений становится отсутствие популярного ранее инструмента «Произвольные отчеты» (который в старой версии находился в меню «Сервис»). Этот инструмент фактически представлял собой встроенную консоль запросов и построитель отчетов, позволяя быстро извлекать любые данные из информационной базы без изменения конфигурации.
В этой статье мы подробно разберем, почему разработчики фирмы «1С» отказались от этого механизма в новой редакции, какими встроенными альтернативами его можно заменить, как правильно подключить внешнюю консоль запросов в ЗУП 3.1 и как решить частую проблему с отображением временных таблиц в результатах запроса.
Переход платформы «1С:Предприятие» на управляемые формы и активное внедрение Библиотеки стандартных подсистем (БСП) полностью изменили архитектуру отчетности. В ЗУП 2.5 многие отчеты строились на базе устаревшего класса ПостроительОтчета. В ЗУП 3.1 абсолютно все отчеты базируются на мощном и гибком механизме — Системе компоновки данных (СКД).
Поскольку СКД сама по себе предоставляет пользователю колоссальные возможности по группировке, фильтрации, добавлению полей и таблиц прямо в пользовательском режиме, разработчики посчитали выделенный инструмент «Произвольные отчеты» избыточным для рядовых пользователей. Однако для сложных задач и быстрого анализа данных разработчикам и аналитикам по-прежнему необходим инструмент прямого выполнения запросов.
Прежде чем прибегать к внешним обработкам, проанализируем возможности изменения существующих отчетов. Поскольку все отчеты в ЗУП 3.1 построены на СКД, вам не обязательно писать новый запрос с нуля. Вы можете взять любой схожий по смыслу типовой отчет и оперативно перенастроить его под свои нужды.
Разберем по шагам, как это сделать:
Существует мнение, что встроенный в БСП УниверсальныйОтчет умеет работать только с одним конкретным регистром, справочником или документом. Однако в современных версиях ЗУП 3.1 у него есть скрытый потенциал, о котором мало кто знает. Выясним, как получить доступ к редактированию его схемы:
Если запустить ЗУП 3.1 в режиме «Толстого клиента», открыть «Универсальный отчет» и перейти в меню «Все действия» — «Варианты отчета», вы обнаружите там недокументированную возможность «Редактировать схему». Это позволяет продвинутому специалисту прямо на лету переписать XML-схему компоновки данных, связать несколько таблиц или регистров и сохранить результат в пользовательском режиме без внесения изменений в конфигурацию.
Кроме того, в ЗУП 3.1 встроен специальный Механизм представлений (виртуальных таблиц БСП). Многие расчетные данные (такие как кадровые срезы, плановый ФОТ, фактически отработанное время) не хранятся в регистрах в чистом виде, а рассчитываются динамически. Обращаясь к этим представлениям через СКД универсального отчета, вы автоматически задействуете сложные пакетные запросы, которые система разворачивает самостоятельно.
Если вам необходим классический инструмент для написания произвольных SQL-подобных запросов к базе данных, оптимальным решением будет использование внешней консоли запросов или консоли отчетов для управляемых форм. Их можно скачать с официального портала ИТС или воспользоваться популярным комплексом «Инструменты разработчика».
Чтобы пользователям не приходилось каждый раз открывать консоль через меню «Файл» — «Открыть», интегрируем ее непосредственно в интерфейс программы. Разберем этот процесс по шагам:
.epf).Рассмотрим частую проблему, с которой сталкиваются начинающие разработчики при работе с внешними консолями запросов в ЗУП 3.1. При написании сложных пакетных запросов консоль успешно отображает промежуточные временные таблицы (ВТ), но вкладка с основным результатом запроса остается пустой.
Проанализируем ситуацию и выясним причину такого поведения платформы. Начиная с версии платформы 1С:Предприятие 8.3.8, для получения данных из временных таблиц внешние консоли используют системный метод ВыполнитьПакетСПромежуточнымиДанными(). Если ваш запрос заканчивается созданием временной таблицы, но не содержит итоговой выборки, консоль не сможет определить, какой именно результат нужно вывести на главный экран.
Посмотрим на пример неправильно составленного пакета запросов:
ВЫБРАТЬ
Сотрудники.Ссылка КАК Сотрудник,
Сотрудники.Код КАК Код
ПОМЕСТИТЬ ВТ_Сотрудники
ИЗ
Справочник.Сотрудники КАК Сотрудники
ГДЕ
НЕ Сотрудники.ПометкаУдаления;
В данном случае данные помещаются во временную таблицу ВТ_Сотрудники, и на этом пакет завершается. Консоль запросов покажет вам эту таблицу на вкладке временных таблиц, но финальный результат будет пуст.
Чтобы исправить эту ситуацию, всегда завершайте пакет явным не-временным запросом, который извлекает данные из вашей финальной временной таблицы. Посмотрим на правильный пример:
ВЫБРАТЬ
Сотрудники.Ссылка КАК Сотрудник,
Сотрудники.Код КАК Код
ПОМЕСТИТЬ ВТ_Сотрудники
ИЗ
Справочник.Сотрудники КАК Сотрудники
ГДЕ
НЕ Сотрудники.ПометкаУдаления;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Сотрудники.Сотрудник КАК Сотрудник,
ВТ_Сотрудники.Код КАК Код
ИЗ
ВТ_Сотрудники КАК ВТ_Сотрудники;
Добавление конструкции ВЫБРАТЬ ... ИЗ ВТ_Сотрудники в самом конце пакета гарантирует, что консоль запросов корректно определит основной результат выборки и выведет его на вкладку результатов выполнения запроса.