Расшифровка строковых полей
В отчете есть поле ссылочного типа (Номенклатура, Клиент, Приходная накладная). А мы выводим его дочернее поле. Например, для номенклатуры — полное наименование, для Клиента — публичное наименование. Красота! Только карточку номенклатуры или клиента уже не открыть (но иногда очень хочется) — в данных расшифровки нет ссылки.
Как же сохранить расшифровку? Есть три варианта — с помощью условного оформления, с помощью выражения представления, и последний способ — создать свой макет поля.
Вариант с использованием условного оформления наиболее практичный, так как позволяет решить задачу без конфигурирования, и более гибкий. Итак, там, где выводилось поле Клиент.Публичное наименование выводим поле Клиент и создаем элемент условного оформления: оформляемое поле Клиент, условие не ставим, оформление в параметре Текст — выбираем поле компоновки данных Клиент.Публичное наименование.
Следующий вариант — с заходом в конфигуратор. В схеме для поля Партнер вписываем выражение представления. Все, теперь в любом месте отчета будет выводиться публичное наименование, а не рабочее.
Решение с помощью макета поля — создаем макет поля Партнер. Указываем ячейку поля. В ячейке указываем параметр и параметр расшифровки. Соответственно, параметр — это выводимый текст, для него указываем поле Партнер.НаименованиеПолное, а в параметре расшифровки указываем поле, которое содержит ссылку, т.к. ссылка нужна для открытия карточки элемента. И не забываем указать основное действие — Открыть значение.
Все три способа продемонстрированы в этом видео → https://youtu.be/BY996hZF968
Чем соединение наборов данных лучше соединения таблиц в запросе
Здесь мы видим результаты расчета итогов, когда в запросе одну таблицу присоединяем к другой, и когда таблицы расположены в разных наборах данных, которые соединяем. При соединение таблиц в запросе можем получить ситуацию, когда данные «задваиваются». При соединении наборов данных в СКД такого не произойдет.
А вот что пишут на ИТС: Несмотря на то, что запись встречается в группировке несколько раз, при расчете итога каждая запись будет учтена только один раз. Как это работает в динамике можно посмотреть в этом видео → https://youtu.be/FIbRuSR_0O8
Функция ВычислитьВыражение не всесильна. Иногда надо просто правильно посчитать итоги
Начиная с платформы 8.2.14 появились несколько функций языка выражений СКД, в том числе функции Вычислить, ВычислитьВыражение. С помощью них можно выполнить много интересных расчетов, но не всегда их использование оправдано.
Есть структура отчета Контрагент, в нее вложенные детальные записи с полем период, есть ресурс Сумма. Наша задача в группировке по контрагенту и в общих итогах показать сумму на последнюю дату.
Решение в лоб — получить последнюю запись, используя функцию ВычислитьВыражение() и параметры «Последняя» — «Последняя».
Но не все так просто. Написав такое в вычисляемых полях, а в ресурсах Сумма по этому полю, получим интересный результат.
На уровне группировки Контрагент появляются неведомые значения.
Исправляем выражение в ресурсе — помещаем детальные записи в массив, берем максимум — Максимум (ВычислитьВыражениеСГруппировкойМассив («СуммаПоследняя»)).
В этом случае в группировке Контрагент последняя сумма отображается правильно.
Идем дальше. А что в общих итогах? В общих итогах вовсе не сумма. Поэтому все, что далось непосильным трудом, имеет ограниченное применение. Как это решалось можно посмотреть в этом видео → https://youtu.be/cq4Bokc7RsA
Как эта задача решается с помощью расчета итогов в СКД?
Это достигается посредством введения в набор данных поля-двойника для Суммы — в него можно вывести те же данные, что и в поле Сумма. Добавляем поле СуммаНачальныйОстаток, настраиваем роли полей: указываем, что Контрагент — это измерение, Период — поле периода, а поля Сумма, СуммаНачальныйОстаток входят в группу Сумма: одно поле является начальным остатком, другое конечным.
В выражении ресурсов для поля Сумма — просто Сумма(Сумма).
И вот результат — для ресурса Сумма в группировках точно такие же значения, что и для ресурса Сумма последняя, и в общих итогах все правильно.
Более детально можно посмотреть в этом видео → https://youtu.be/FhQQi1OPvAI
Макеты можно использовать не только для оформления
Каждый, кто хотя бы один раз что-то создавал в конструкторе СКД на вкладке Макеты, знает, что макеты бывают четырех видов. И что, как правило, создание собственного макета приводит к потере гибкости. Но сегодня не про это.
Можно создать макет Поля и это никак не будет влиять на внешний вид результата. НО для поля можно задать Параметр расшифровки, и в СКД значение расшифровки может содержать не одно значение, а целую коллекцию — чем мы можем воспользоваться при расшифровке ячеек каким-либо другим отчетом.
После всех действий в данных расшифровки появится не одно, а несколько полей. В режиме 1С:Предприятие при попытке расшифровать поле это будет выглядеть так:
Для чего стоит использовать расширения языка запросов при включенном Автозаполнении
Что такое расширение языка запросов? Это такие синтаксические конструкции в тексте запроса, заключенные в фигурные скобки, которые определяют поведение для компоновщика макета компоновки данных. В конструкторе запроса они доступны на вкладке Компоновка данных.
Зачем, когда используем флаг автозаполнение?
Есть минимум два сценария, когда это оправдано. Первый — когда требуется установить необязательный отбор по дате документа. Что значит необязательный? Это значит, что мы предлагаем пользователю установить параметры, но если пользователь откажется их использовать, ошибки не будет.
Второй пример — добавление единого поля отбора в схему. Когда у нас два несвязанных набора данных, то и поля имеют разные пути. Соответственно, для отбора по полю придется накладывать отбор на поля разных наборов данных. Добавляя в два набора данных поле с одинаковым наименованием, мы создаем единое поле несвязанных наборов данных, которое используется только для отбора.
Поля несвязанных наборов данных не могут называться одинаково — мы выкручиваемся, но отбор накладывать становится неудобно.
Так выглядит настройка, когда два поля отбора, и когда единое поле отбора (так удобнее). Подробнее можно посмотреть в этом видео → https://youtu.be/vNuYJSBAZxI
Когда надо наложить отбор на одно и то же поле в объединении запросов. Если в этом случае наложить отбор на поле Склад, это приведет к тому, что в запросе по РН Продажи ничего не будет выбрано.
Поэтому, когда выполняется объединение запросов и требуется накладывать не во всех запросах объединения, обычно в этом случае отключается отбор по полю (в данном случае Склад) и используется добавленное поле (в нашем случае СкладОтбор). И все работает.
Отбор по полю СкладОтбор больше не выпиливает продажи, а только фильтрует остатки по складу.
Естественно, таких проблем не будет, когда схема создана без использования флага автозаполнение и все поля расставлены вручную.
Рекомендуем освоить создание схемы без Автозаполнения — сразу придет понимание, как это работает.