Оглавление
- Расшифровка строковых полей
- Чем соединение наборов данных лучше соединения таблиц в запросе
- Функция ВычислитьВыражение не всесильна. Иногда надо просто правильно посчитать итоги
- Макеты можно использовать не только для оформления
- Для чего стоит использовать расширения языка запросов при включенном Автозаполнении
1. Расшифровка строковых полей
В отчете есть поле ссылочного типа (Номенклатура, Клиент, Приходная накладная). А мы выводим его дочернее поле. Например, для номенклатуры — полное наименование, для Клиента — публичное наименование. Красота! Только карточку номенклатуры или клиента уже не открыть (но иногда очень хочется) — в данных расшифровки нет ссылки.
рис. 1. В отчет выведено дочернее поле тип строка
Как же сохранить расшифровку? Есть три варианта — с помощью условного оформления, с помощью выражения представления, и последний способ — создать свой макет поля.
Вариант с использованием условного оформления наиболее практичный, так как позволяет решить задачу без конфигурирования, и более гибкий. Итак, там, где выводилось поле Клиент.Публичное наименование выводим поле Клиент и создаем элемент условного оформления: оформляемое поле Клиент, условие не ставим, оформление в параметре Текст — выбираем поле компоновки данных Клиент.Публичное наименование.
рис. 2. Настройка условного оформления для отображения дочернего поля
Следующий вариант — с заходом в конфигуратор. В схеме для поля Партнер вписываем выражение представления. Все, теперь в любом месте отчета будет выводиться публичное наименование, а не рабочее.
рис. 3. Настройка свойства Выражение представления
Решение с помощью макета поля — создаем макет поля Партнер. Указываем ячейку поля. В ячейке указываем параметр и параметр расшифровки. Соответственно, параметр — это выводимый текст, для него указываем поле Партнер.НаименованиеПолное, а в параметре расшифровки указываем поле, которое содержит ссылку, т.к. ссылка нужна для открытия карточки элемента. И не забываем указать основное действие — Открыть значение.
рис. 4. Настройка макета поля
Все три способа продемонстрированы в этом видео
2. Чем соединение наборов данных лучше соединения таблиц в запросе
Здесь мы видим результаты расчета итогов, когда в запросе одну таблицу присоединяем к другой, и когда таблицы расположены в разных наборах данных, которые соединяем. При соединение таблиц в запросе можем получить ситуацию, когда данные «задваиваются». При соединении наборов данных в СКД такого не произойдет.
рис. 5. Различия в результатах при соединении таблиц и соединении наборов данных СКД
А вот что пишут на ИТС: Несмотря на то, что запись встречается в группировке несколько раз, при расчете итога каждая запись будет учтена только один раз. Как это работает в динамике можно посмотреть в этом видео.
3. Функция ВычислитьВыражение не всесильна. Иногда надо просто правильно посчитать итоги
Начиная с платформы 8.2.14 появились несколько функций языка выражений СКД, в том числе функции Вычислить, ВычислитьВыражение. С помощью них можно выполнить много интересных расчетов, но не всегда их использование оправдано.
Есть структура отчета Контрагент, в нее вложенные детальные записи с полем период, есть ресурс Сумма. Наша задача в группировке по контрагенту и в общих итогах показать сумму на последнюю дату.
рис. 6. Постановка задачи
Решение в лоб — получить последнюю запись, используя функцию ВычислитьВыражение() и параметры «Последняя» — «Последняя».
Но не все так просто. Написав такое в вычисляемых полях, а в ресурсах Сумма по этому полю, получим интересный результат.
рис. 7. Решение с помощью ВычислитьВыражение. Промежуточный результат
На уровне группировки Контрагент появляются неведомые значения.
Исправляем выражение в ресурсе — помещаем детальные записи в массив, берем максимум — Максимум (ВычислитьВыражениеСГруппировкойМассив («СуммаПоследняя»)).
В этом случае в группировке Контрагент последняя сумма отображается правильно.
рис. 8. Решение с помощью ВычислитьВыражение. Итоги в группировках верные
Идем дальше. А что в общих итогах? В общих итогах вовсе не сумма. Поэтому все, что далось непосильным трудом, имеет ограниченное применение. Как это решалось можно посмотреть в этом видео.
рис. 9. Решение с помощью ВычислитьВыражение. Общие итоги неверные
Как эта задача решается с помощью расчета итогов в СКД?
Это достигается посредством введения в набор данных поля-двойника для Суммы — в него можно вывести те же данные, что и в поле Сумма. Добавляем поле СуммаНачальныйОстаток, настраиваем роли полей: указываем, что Контрагент — это измерение, Период — поле периода, а поля Сумма, СуммаНачальныйОстаток входят в группу Сумма: одно поле является начальным остатком, другое конечным.
В выражении ресурсов для поля Сумма — просто Сумма(Сумма).
рис. 10. Настройка ролей для расчета остатков
И вот результат — для ресурса Сумма в группировках точно такие же значения, что и для ресурса Сумма последняя, и в общих итогах все правильно.
рис. 11. Результат решения с помощью расчета остатков
Более детально можно посмотреть в этом видео.
4. Макеты можно использовать не только для оформления
Каждый, кто хотя бы один раз что-то создавал в конструкторе СКД на вкладке Макеты, знает, что макеты бывают четырех видов. И что, как правило, создание собственного макета приводит к потере гибкости. Но сегодня не про это.
Можно создать макет Поля и это никак не будет влиять на внешний вид результата. НО для поля можно задать Параметр расшифровки, и в СКД значение расшифровки может содержать не одно значение, а целую коллекцию — чем мы можем воспользоваться при расшифровке ячеек каким-либо другим отчетом.
рис. 12. Настройка полей расшифровки макета поля
После всех действий в данных расшифровки появится не одно, а несколько полей. В режиме 1С:Предприятие при попытке расшифровать поле это будет выглядеть так:
рис. 13. Результат работы расшифровки
5. Для чего стоит использовать расширения языка запросов при включенном Автозаполнении
Что такое расширение языка запросов? Это такие синтаксические конструкции в тексте запроса, заключенные в фигурные скобки, которые определяют поведение для компоновщика макета компоновки данных. В конструкторе запроса они доступны на вкладке Компоновка данных.
рис. 14. Что такое расширение языка запросов
Зачем, когда используем флаг автозаполнение?
Есть минимум два сценария, когда это оправдано. Первый — когда требуется установить необязательный отбор по дате документа. Что значит необязательный? Это значит, что мы предлагаем пользователю установить параметры, но если пользователь откажется их использовать, ошибки не будет.
рис. 15. Необязательный отбор по дате документа
Второй пример — добавление единого поля отбора в схему. Когда у нас два несвязанных набора данных, то и поля имеют разные пути. Соответственно, для отбора по полю придется накладывать отбор на поля разных наборов данных. Добавляя в два набора данных поле с одинаковым наименованием, мы создаем единое поле несвязанных наборов данных, которое используется только для отбора.
Поля несвязанных наборов данных не могут называться одинаково — мы выкручиваемся, но отбор накладывать становится неудобно.
рис. 16. Добавление своего поля отбора
Так выглядит настройка, когда два поля отбора, и когда единое поле отбора (так удобнее). Подробнее можно посмотреть в этом видео.
рис. 17. Преимущество настройки - единое поле отбора
Когда надо наложить отбор на одно и то же поле в объединении запросов. Если в этом случае наложить отбор на поле Склад, это приведет к тому, что в запросе по РН Продажи ничего не будет выбрано.
рис. 18. Поле склад в объединении запросов
рис. 19. Результат наложения отбора по полю Склад при такой настройке
Поэтому, когда выполняется объединение запросов и требуется накладывать не во всех запросах объединения, обычно в этом случае отключается отбор по полю (в данном случае Склад) и используется добавленное поле (в нашем случае СкладОтбор). И все работает.
Отбор по полю СкладОтбор больше не выпиливает продажи, а только фильтрует остатки по складу.
Естественно, таких проблем не будет, когда схема создана без использования флага автозаполнение и все поля расставлены вручную.
рис. 20. Добавление своего поля отбора. Результат при такой настройке
Рекомендуем освоить создание схемы без Автозаполнения — сразу придет понимание, как это работает.