Как использовать в отчете данные нескольких таблиц 1с
Приветствую, мои маленькие любители длинных запросов … и отчетов 1C на СКД.
Сегодня мы на готовом примере рассмотрим следующую задачу: использовать несколько схем данных в одном отчете СКД.
Стоить заметить, что данная реализация не является единственно возможной и не претендует на «истину в последней инстанции». Выбор конкретного способа определяется нюансами конкретной задачи.
Синтетический пример будет реализован в демо-конфигурации Управление торговлей, редакция 11.
- Для начала создадим внешний отчет и добавим его реквизит ИмяМакета, тип Строка. В данном реквизите мы будем хранить имя текущего активного макета. Оно нам потребуется при формировании отчета.
- Добавим форму отчета. Она необходима для выбора активного макета. Данную форму можно (и нужно) скопировать из состава БСП, ОбщиеФормы — ФормаОтчета. Так мы получим все возможности типовых отчетов СКД с минимальным затратами (хотя и потребуются некоторые доработки), но автоматически генерируемая форма также подойдет.
- Добавим 2 макета, тип СхемаКомпоновкиДанных.
Первый макет СхемаПроизводственныйКалендарь, куда выберем данные из регистра ДанныеПроизводственногоКалендаря с отбором по параметру &Дата.
Второй макет СхемаФизЛица, куда выберем данные из справочника ФизическиеЛица с отбором по полу
Как видим, ни параметры, ни поля, ни данные в этих макетах не совпадают. Укажем использование обоих параметров «Всегда» и добавим их для наглядности в пользовательские настройки.
Стоит заметить, что мы не указываем основную схему в отчете.
Заготовка отчета готова. Теперь перейдем непосредственно к коду выбора, смены и формирования макета
Для начала необходимо в процедуре формы ПриСозданииНаСервере нарисовать кнопку, заполнить список макетов и выбрать один из макетов в качестве «начального».
Вот так это выглядит на форме:
Затем пропишем обработчик для команды «ВыбратьМакет».
Думаю, из построчного комментария к листингу кода все предельно понятно. Самый интересный момент, это «подмена» пользовательских настроек настройками по умолчанию из схемы. Для этого используется объект ИсточникДоступныхНастроекКомпоновкиДанных. В результате инициализации компоновщика настроек будут заменены все пользовательские настройки, а именно отборы, группировки, выбранные поля и т.д.
Как видим, пользовательские отборы при смене макета так же изменились.
Остается лишь подменить стандартную процедуру формирования отчета. Для этого открываем модуль объекта и формируем СКД программно в процедуре ПриКомпоновкеРезультата.
Таким образом, мы получили два несвязанных макета СКД в одном внешнем отчете, между которыми пользователь может произвольно переключаться.
Возникла задачи создать отчёт по взаиморасчётам с контрагентами в валюте взаиморасчётов с выводом таблицы курсов валют на текущую дату. Отчёт, разумеется, должен быть реализован с помощью системы компоновки данных.
Ниже приведён алгоритм создания подобного отчёта.
1. Создать новый отчёт, открыть основную схему компоновки данных.
2. Добавить 2 набора данных типа "запрос". В первом наборе данных будем получать данные по взаиморасчётам, во втором - курсы валют.
Важно! Псевдонимы полей запросов не должны повторяться.
3. На вкладке "Настройки" создать новую группировку без заполнения значения "Поле".
4. Настроить список полей для вывода первой таблицы (Курсы валют).
5. Повторить пп.3 и 4 для второй таблицы (Взаиморасчёты).
6. Сохранить отчёт.
В результате сформированный отчёт будет иметь подобный вид:
Пример отчёта для конфигураций Управление торговлей 10.3 и Управление производственным предприятием 1.3
Надо вывести в отчет на СКД 2 таблицы, которые содержат различные данные, объединяемые одним полем. Количество строк в каждой таблице может быть произвольным. Если выводить с помощью обычного соединения таблиц, то мы получим перемножение строк. Чтобы его избежать обычно используются циклы. Но в данной статье мы разберемся как это сделать только средствами СКД.
Разбираться будем на упрощенном примере. Исходные таблицы и нужный результат на рисунке
Для начала создадим в СКД 3 таблицы:
1) Контрагенты+Номер. В этой таблице будет дополнительная колонка "Номер", по которой будет в дальнейшем объединение всех таблиц. В моем примере я создам эту таблицу вручную, в реальной жизни можно использовать создание нумерации запросом, с нужной глубиной.
2) Контрагенты+Договоры. Здесь и в следующей таблице нумерация также сделана упрощенно. В реальных запросах нумерацию справочников можно выполнить во временной таблице. Например, как описано в этой статье
Настраиваем схему вывода с помощью детальных записей. В вашем запросе это могут быть любые нужные группировки.
И получаем результат
Вложил пример отчета с описанной выше схемой СКД.
И вот, нужный нам результат
Специальные предложения
(3) а какая разница сколько полей?) Добавить в ресурс и написать Массив(Различные Договор) даже для 30 полей быстрее написания такого запроса)))
(5) Можете прислать пример этого отчета на СКД на моих данных из статьи? Например, в личку скинуть. Я не очень понимаю, как это должно выглядеть в схеме.
(9) Вариант хороший, но есть одна тонкость. Поля в разных колонках могут не совпасть, если есть пустые значения. Например, есть
договор 1, 100 руб.
договор 2, 0 руб.
договор 3, 150 руб.
Если выводить через массив или ТЗ, то СКД выведет примерно так:
Договоры | Суммы
договор 1 | 100 руб.
договор 2 | 150 руб.
договор 3 |
Поэтому я и написал, что когда полей много, то с выводом приходится заморачиваться. Либо я чего-то не знаю))
(11) Это все решаемые частности)) К тому же прямо противоречат названию темы, все таки это связанные поля))
Прилепил скд с двумя полями.
(12) Это не противоречит теме. В рамках каждой таблицы это связанные данные. Но между двумя таблицами связь по 1-2 полям.
Прошу прощения, но на мой взгляд заголовок и описание статьи не соответствуют ее содержанию. По сути вся соль решения заключается в правильной подготовке данных запросом, СКД здесь никоим образом не участвует, а используется лишь для вывода данных. Тот же прием применим как для обычной консоли запросов, таки и для формирования печатной формы - меняется лишь способ вывода результата запроса.
Кажется, что стоило больше заострить внимание на нумерации данных в запросе и привести более "жизненный" пример, а не нумеровать записи "вручную".
(4) Нумерация хорошо описана в других статьях. В том числе в приведенной по ссылке. Смысл разжевывать то, что уже разжевано?
А пример позволяет, не углубляясь в детали, понять суть.
Да, СКД имеет опосредованное отношение, если смотреть со стороны запроса. А если смотреть со стороны задачи (нужно сделать отчет на СКД), то отношение к СКД будет прямое. Заголовок сделан так, чтобы люди, которым надо нарисовать такой отчет, смогли найти эту статью.
(6) Что ж, идея, лежащая в основе статьи, теперь мне понятно лучше, спасибо. Не считаю в таком случае, что она "тянет" на целую статью, но тут Вы в праве со мной не согласиться.
Просмотры 8317
Загрузки 0
Рейтинг 13
Создание 06.06.19 11:21
Обновление 06.06.19 11:21
№ Публикации 1072903
Конфигурация Не имеет значения
Операционная система Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Да
См. также
Редактирование текстов интерфейса … Промо
Редактирование текстов интерфейса … (перевод интерфейса конфигурации на другой язык английский – немецкий – китайский – японский и многие другие). У вас есть стандартная конфигурация, в которой надо перевести интерфейс на другой язык, легко! А вот со справкой придется немного помучаться. Просьба не путать с данными, которые хранятся в реквизитах объектов.
1 стартмани
26.06.2012 41220 Iaskeliainen 39
Настройка колонок для вывода в отчет
Иногда возникает задача вывести в отчет по запросу не все колонки, а только определенные.
1 стартмани
12.07.2020 4804 user847462 2
Сохранение настроек колонок
Сохранение настроек колонок табличных полей. Получение имени формы из модуля формы. Для обычных форм.
1 стартмани
10.07.2020 1904 Arc 1
Управление состоянием для шаблона MVC и работы с данными объекта
Пользователи хотят интуитивно понятный и отзывчивый интерфейс, программистам нужен ни менее богатый программный интерфейс, бизнесу нужно быстрое и дешевое решение, которое бы гарантировало корректные данные и отсутствие мусора. В статье представлено решение для декларативного описания зависимостей данных и работы формы.
1 стартмани
18.03.2020 4527 kalyaka 35
Приятная глазу цветовая схема 1С 8.х Промо
Несколько цветовых схем для встроенного языка 1С, которые минимизирует нагрузку на глаза, за счет чего повышается производительность!
1 стартмани
26.03.2012 74653 NDM 127
Как в 1С создать паутинку "как на Инфостарте"
Добрый день, уважаемы коллеги! В этой статье я расскажу, как в 1С создать отчет - "паутинку" на примере отчета по компетенциям сотрудника (разрабатывала на платформе 1С:Предприятие 8.3 (8.3.13.1865).
1 стартмани
15.01.2020 10129 user660153_aleks.pisanets 19
Генерация управляемой формы на основе обычной (proof of concept)
В статье рассматривается техническая возможность автоматизированной генерации управляемой формы на основе обычной.
1 стартмани
06.11.2019 10608 user700211_a.straltsou 28
"Живые" картинки со Snap.SVG
1 стартмани
24.10.2019 15664 blackhole321 7
Еще один способ программной модификации управляемых форм
Пример программной модификации управляемой формы для случая когда вызов метода СобытияФорм.ПриСозданииНаСервере разработчиком конфигурации не предусмотрен.
1 стартмани
03.09.2019 5261 infosoft-v 15
Изменяющееся контекстное меню в 1С 8.3
В одной практической задаче мне пришлось разрабатывать контекстное меню таблицы управляемой формы, которое должно было меняться в зависимости от данных, находящихся в этой таблице. Ниже приведен мой способ решения этой задачи.
1 стартмани
06.08.2019 24974 signum2009 16
Совместное использование 1С:Сервер взаимодействия и Документооборот 8 КОРП, редакция 2.1.13 - Уведомления для рабочего стола
С версии ДО 2.1.13 в программу встроена подсистема Обсуждения. Данная подсистема позволяет производить уведомление пользователей без необходимости открытия программы.
1 стартмани
Легкий "тюнинг" УТ 10.3
Вариант программной реализации изменения форм типовых объектов для конфигурации Управление торговлей 10.3.
1 стартмани
15.03.2019 5329 pm74 6
Раскрашенный log-файл без HTML и СМС (используем Форматированный документ в личных целях)
Иногда пользователям отдается на откуп загрузка каких то данных, результат загрузки которых желательно раскрасить если и не всеми цветами радуги, то хотя бы светофором. Один из вариантов – это использовать Форматированную строку. Следите за руками:
1 стартмани
08.02.2019 3485 kembrik 2
HTML в новой версии 8.3.14 на примере 3-х JavaScript библиотек: AmCharts, HighCharts, DHTMLX
Тестируем возможности HTML в новой версии 8.3.14 платформы на примере 3-х JavaScript библиотек: AmCharts, HighCharts, DHTMLX.
1 стартмани
29.01.2019 32579 Synoecium 46
Своя индикация длительной операции во внешней обработке
Описан способ организации собственной индикации длительной операции для внешних обработок для БСП версии 2.4 и выше
1 стартмани
05.11.2018 9506 vadim1011985 18
Поиск по дереву значений рекурсией, методом НайтиСтроки(), с помощью СКД. Вывод результата поиска в отдельную таблицу. Активация строки в дереве значений при выборе в таблице
В данной статье рассматриваются три способа поиска по дереву значений, отображённому на форме (ДанныеФормыДерево), с дальнейшим выводом результата в таблицу и возможностью перехода к строкам дерева при выборе в таблице. В статье приведены пошаговые примеры реализации всех трех способов.
1 стартмани
29.10.2018 17618 Vyacheslav_Kochnev 5
Основы компьютерной графики (Часть 2)
Статья является продолжением публикации "Основы компьютерной графики". Во второй части будут рассмотрены следующие темы: 1. Преобразования в трехмерном пространстве. 2. Ортографическая проекция трехмерного изображения на экран. 3. Определение, какой поверхностью (лицевой/задней) проецируется грань на экран. 4. Перспективная проекция.
1 стартмани
03.08.2018 6438 HAMMER_59 13
Основы компьютерной графики
Статья предназначена для тех, кто совсем не знаком с компьютерной графикой. В статье даны следующие преобразования: перемещение, поворот, масштабирование, проекцирование, переход между различными системами координат. Пример работы с графикой реализован во внешней 1С обработке.
1 стартмани
30.07.2018 8278 HAMMER_59 39
Управление состоянием формы через конечный автомат
Взаимодействие пользователя с интерфейсом приводит к изменению состояния формы и её элементов. Элементы отражают текущее состояние формы через свойства: видимости, доступности, оформления, текста заголовка и т.д. Даже при небольшом количестве элементов количество возможных состояний формы может быть достаточно большим. Необходимость учета всех состояний формы порождает сложные алгоритмы настройки элементов. В статье рассматривается алгоритмическое решение перехода к состоянию формы с использованием функционального подхода на основе декларативного описания
1 стартмани
19.06.2018 16772 kalyaka 41
Мухи отдельно, котлеты отдельно. Еще раз про HTML и JavaScript
Это еще одна статья про документ HTML и JavaScript. Уклон сделан на организацию хранения HTML документа и скриптов а так же на подключение скриптов к документу.
1 стартмани
08.06.2018 13870 infosoft-v 21
Гиперссылка в табличной части управляемых форм
Задача: Управляемые формы. В табличной части документа добавить ссылочный реквизит с гиперссылкой. Если реквизит пустой, то отображать произвольное слово с возможностью выполнить свою процедуру, иначе открытие формы ссылки этого реквизита.
1 стартмани
23.05.2018 21796 pyrkin_vanya 3
Условное оформление горизонтальных итогов без использования макетов
Способ условного оформления горизонтальных итогов без использования макетов и программной постобработки результата компоновки.
1 стартмани
14.03.2018 21946 nreisende 18
Шаблон MVC для управляемого интерфейса
Мы воспринимаем как что-то само собой разумеющееся интуитивно понятный интерфейс, мгновенно реагирующий на наши клики, подстраивающийся под уже сделанный нами выбор. А между тем за этой возможностью - решение серьезных алгоритмических задач. В общем случае решения этих задач уже найдены, но проблема их конкретного применения остается как для выбранного окружения (веб-браузер, экран мобильного телефона, компьютер), так и возможностей языка программирования. В следующей статье представлено одно из таких применений общего решения на основе шаблона MVC для 1С в сочетании с возможностями управляемых форм и декларативного описания интерфейса.
1 стартмани
14.03.2018 21418 kalyaka 37
Варианты отображений свертываемых групп
Как пользователю только одним внешним видом сказать "Тут есть нужные данные. Только нажми". Используем разные варианты свертываемых групп.
1 стартмани
19.12.2017 22860 Kim1C 12
Отображение файла на управляемой форме
Отображение локальных файлов и файлов справочника "НоменклатураПрисоединенныеФайлы" на управляемой форме с помощью поля HTML документа.
1 стартмани
01.11.2017 15376 Vyacheslav_Kochnev 30
Размеры управляемой формы
Как рассчитать ширину и высоту управляемой формы или отдельного элемента, чтобы адаптировать интерфейс программно при их изменении.
1 стартмани
08.10.2017 31049 json 9
Добавление отчета на панель
15.01.2014 28032 dobrynin.i.s 11
Условное оформление таблицы управляемой формы
Динамический список – замечательный элемент управления, который предоставляет пользователю широкий спектр настроек, от всевозможных отборов до условного оформления. Но что делать, если в поставленной задаче использовать список невозможно, а заказчик отказывается принимать проект без возможности настройки условного оформления. В статье будет рассмотрено одно из возможных решений для таблицы формы.
1 стартмани
17.05.2013 41632 akomar 6
Программная настройка рабочего стола или Как на лету добавить скрыть, подменить формы.
Долгожданная возможность программно управлять составом форм рабочего стола! Публикация написана новичком для новичков, гуру 1С просьба не судить строго.
1 стартмани
07.11.2012 36503 NittenRenegade 12
Расширение управляемой формы для отчета. Несколько действий с параметром "Отбор".
Статья о том как открывать формы отчетов с параметром "Отбор" (платформа, на которой проводилось тестирование- 8.2.16).
1 стартмани
03.10.2012 19504 olches 11
Картинки для 1С
Подборка картинок для 1С.
1 стартмани
03.09.2012 28953 pyrkin_vanya 17
Вывод изображений в системе компоновки данных и отчётах
Как выводить изображения в СКД, отчетах ? Как хранить картинки, чтобы они не занимала много места?
1 стартмани
19.03.2012 4710 igorvs66 1
Сохранение/восстановление настроек динамического списка
Один из пороков программ - забывчивость. Пользователь настраивал настраивал под себя интерфейс, закрыл форму, открыл и вуаля. настраивай все заново. Так можно и монитор сломать. Проблему усугубляет отсутствие стандартного механизма сохранения/восстановления настроек динамических списков. Под катом решение проблемы.
1 стартмани
29.07.2011 39090 Stepa86 31
Подмена рабочего стола
Несколько слов о рабочем столе в 1С 8.2, о том, что нельзя открыть произвольную форму при переключении подсистемы, а так же простой способ "обмануть" это ограничение (с примером).
1 стартмани
13.03.2011 35219 zfilin 31
1С 8.1: Интерфейс: Работа с формами
Статья будет полезна как начинающим разработчикам, так и опытным, не уделяющим должного внимания дизайну интерфейса.
1 стартмани
10.02.2011 16904 jan27 29
Методика добавления нового интерфейса для типовой конфигурации 1С:Бухгалтерия предприятия ред. 2.0
Целью данной инструкции является описать методику действий разработчика при добавлении нового интерфейса пользователя для типовой конфигурации 1С:Бухгалтерия предприятия 2.0.
1 стартмани
30.12.2010 49310 tomvlad 5
Оповещения пользователям об изменении конфигурации
Как сообщить всем пользователям, что добавлен новый, очень нужный и полезный механизм в 1С: Предприятие 8.1 или 8.2? В этой статье я расскажу как это сделать с минимальным исправлением конфигурации поставщика.
1 стартмани
20.08.2010 19997 opx 24
Стандартная "Настройка периода" в отчетах на базе СКД
При написании собственных отчетов на базе СКД, я столкнулся с тем, что выбор периода делается достаточно неудобно. Куда удобнее, когда есть стандартная "Настройка периода", реализованная в типовых отчетах. Реализовать это очень просто и быстро.
1 стартмани
31.12.2009 12643 yuraskas 8
Вывод дополнительной информации - ИНН и адреса контрагента - в список значений при вводе по строке
Когда в информационной базе много контрагентов, пользователи при заполнении реквизитов форм документов активно используют понравившуюся им функцию «ввод по строке» Это ускоряет ввод большого объема информации за счет эффективного использования клавиатуры и уменьшения нагрузки на базу. Бывают случаи, когда существует очень много контрагентов с одинаковыми наименованиями, то просто невозможно быстро выбрать нужного из списка, так как код в скобках не несет смысловой нагрузки. Хотя возможен ввод по ИНН, но он не получил широкого распространения из-за сравнительно большой длины ИНН и психологического неприятия ввода рутинных операций. По этой причине представляется интересным решение, позволяющее выводить дополнительно в списке информацию об ИНН контрагента и его адресе. Пример программной реализации обработчика для конфигурации Управление торговлей 8.1 релиз 10.3.8.9, продемонстрирован в присоединенном к данной статье файле.
До данной версии использовать внешние таблицы в запросе СКД можно было только путем передачи внешнего источника данных, поля которого необходимо было описывать в схеме СКД вручную.
Теперь можно полностью создать стандартный отчет на СКД, отладить его, а при необходимости добавить в него какие-то внешние, дополнительно обработанные данные.
Относительно несложно например взять типовой 1С отчет и через объединение с внешней таблицей (а может даже и не одной) вывести в отчет дополнительные поля, не анализируя и не пытаясь изменить (иногда с риском нарушения работоспособности) изначальный текст запроса.
Т.е. польза данного нововведения в первую очередь в менее трудозатратной доработке какого-либо уже существующего решения, либо более быстрой разработе сложных отчетов, в случае если не все данных удается получить стандартным запросом.
Таблицы в Систему компоновки данных можно передавать через Менеджер временных таблиц, как и в обычный запрос. Пример: мы ходим получить данные сотрудника в виде строки (или как-то еще обработать), чтобы потом в отчете по сотрудникам вывести эти данные в отдельный столбец. Тогда в процедуре модуля ПриКомпоновкеРезультата пишем что-то типа:
// добавили колонку под наши новые данные
НашаТаблица. Колонки . Добавить( "КадровыеДанныеСтрокой", Новый ОписаниеТипов( "Строка", , Новый КвалификаторыСтроки( 100 ))) ;
// здесь обрабатываем НашаТаблица
// .
// .
// и далее передаем в Менеджер временных таблиц через новый запрос
Все!
Теперь в тексте запроса СКД доступна выборка из нашей таблицы, например добавление к данным регистра ВидыЗанятости:
ВЫБРАТЬ
ВидыЗанятостиСотрудников.Сотрудник КАК Сотрудник,
НашаТаблица.КадровыеДанныеСтрокой,
ВидыЗанятостиСотрудников.ВидЗанятости КАК ВидЗанятости
ИЗ
РегистрСведений.ВидыЗанятостиСотрудников КАК ВидыЗанятостиСотрудников
ЛЕВОЕ СОЕДИНЕНИЕ НашаТаблица КАК НашаТаблица
ПО НашаТаблица.Сотрудник = ВидыЗанятостиСотрудников.Сотрудник
В данной статье мы рассмотрим практически все возможности и множество нюансов, которые относятся к параметрам в Системе Компоновки Данных 1С (в сокращении — СКД). Параметры в запросе СКД, фигурные скобочки в запросе СКД — оно же Расширение языка запросов для СКД, особенности настройки страницы “Параметры” СКД, вывод параметров на форму, программная установка параметров, мягкие и жесткие параметры.
Параметры могут использоваться практически в любом месте запроса и выполнять самые различные функции.
Параметры обозначаются знаком & после которого следует имя параметра.
Параметр может быть полем запроса, частью произвольного выражения поля запроса, условием для виртуальной таблицы, частью выражения в отборе запроса и так далее:
При построении запроса конструктором на вкладке “Условия” если не стоит галочка “Произвольное”, то конструктор считает что в правом значении параметр и он записывается без символа &.
Таким образом этот блок настраивается в конструкторе.
Если значение параметра не задано, то построение СКД будет невозможно и будет выдана ошибка, поэтому такие параметры называют “обязательными” или “жесткими”.
Выбрать.
Этот блок располагается в запросе типа выборка данных пакета запросов СКД в первом запросе объединения между перечнем полей и “ИЗ” и заключается в фигурные скобки.
В этом блоке мы перечисляем поля, которые пользователь может выбирать для вывода, группировки и упорядочивания. Конструкция «.*» в параметре “Марка.*” позволяет выбирать для вывода, группировки и упорядочивания дочерние поля значения, например, Марка.Код. Слово “КАК” позволяет задать псевдоним, например, “Ссылка КАК Машина”. Поля в этом блоке попадают в перечень полей набора, даже если отключено автозаполнение. Если автозаполнение включено, то упомянутые поля попадают в соответствии с тем, как они настроены расширением кода, то есть если ссылочное поле без конструкции “.*” дочерние поля доступны не будут, если указан псевдоним — именно он попадет в перечень полей набора.
Таким образом этот блок настраивается в конструкторе.
При автоматическом заполнении полей набора данных, для не включенных в блок расширения “ВЫБРАТЬ”, добавляются все поля списка выборки и их дочерние поля. Они становятся доступными для выбора, упорядочивания, группировки, отбора. Также добавляются поля, которые упомянуты в параметре “Условия” виртуальных таблиц как доступные для отбора.
Отбор, установленный в пользовательских настройках, будет действовать не только на основной запрос, но и на все запросы в пакете. Но это не всегда соответствует логике отчета, к примеру, если помимо отобранной номенклатуры и сумм по ней нужно выводить общую сумму продаж для сравнения. В таких случаях нам нужны специфические отборы в каждом запросе пакета.
Блок расширения “ГДЕ” может быть расположен после или вместо обычного блока “ГДЕ” в любом запросе, подзапросе, запросах объединения и заключается в фигурные скобки. Для присвоения отбору псевдонима используется конструкция “КАК”. Псевдоним нужно использовать чтобы отбор производился конструкцией расширения языка запросов, но не происходил автоматически по наименованию поля.
Если автозаполнение полей набора отключено, поля из этого блока попадают в перечень полей набора доступными только для отбора, использование дочерних полей зависит от наличия конструкции “.*”.
Если автозаполнение включено, и это поле включено в блок расширения “ВЫБРАТЬ” тогда настройки обоих блоков объединяются. Если не включено в “ВЫБРАТЬ” то поля попадают доступными для вывода, группировки, отбора и упорядочивания.
В случае если нужно дополнительно установить какое то ограничение полю, то можно вручную установить галочку в соответствующее поле перечня полей набора данных СКД.
Параметры в блоке «ГДЕ» не обязательны для заполнения, поэтому эти параметры называют “необязательными” или “мягкими”.
Также в блоке “ГДЕ” вместо параметра может быть произвольное выражение с использованием конструкции ВЫБОР или параметров со страницы “Параметры” СКД. Правда в последнем случае вид сравнения необходимо указывать конкретно.
Нужно с осторожностью использовать вид сравнения МЕЖДУ поскольку:
Если параметры НачалоПериода и КонецПериода не будут заданы, то система получит документы за весь период.
Если параметры НачалоПериода и КонецПериода будут заданы, то система получит документы за указанный период.
Если какой-то один из параметров не будет задан, то система выдаст ошибку.
Один из вариантов решения это разбить МЕЖДУ на два условия чтобы система не выдавала ошибку в случае одного незаполненного параметра.
Это же замечание относится к любым выражением с использованием нескольких параметров.
Параметры виртуальных таблиц.
В параметрах виртуальных таблиц в отличие от предыдущих блоков, каждый параметр заключается в фигурные скобки. В полях относящихся к периоду название параметра ставится с &. Пример &ДатаНачала. В поле “Условие” параметры оформляются аналогично блоку “ГДЕ”.
Поведение параметров из поля “Условие” при снятии или установке галочки “Автозаполнение” также аналогично блоку «ГДЕ».
Параметры из полей периода попадают на страницу “Параметры” СКД. Если автозаполнение включено и в поле периода параметр не вписан, параметры с именем поля периода будут автоматически созданы на странице “Параметры” СКД.
Таким образом, эти параметры заполняются в конструкторе запроса. Для открытия формы “Параметры виртуальной таблицы” нужно выбрать виртуальную таблицу в списке таблиц и нажать выделенную синим кнопку. Также тут у таблиц есть булевый реквизит “Обязательная” и числовой реквизит “Номер группы”. Если признак обязательности таблицы не установлен, то она будет добавляться в результирующий запрос только в случае, когда хотя бы одно поле из нее задействовано в компоновке. Номер группы заполняется для необязательных таблиц и обозначает группу таблиц, которые будут добавлены в результирующий запрос только, когда из этой группы таблиц задействовано хотя бы одно поле.
В параметрах виртуальных таблиц возможно совместное использование “жестких” параметров запросов и “мягких” параметров компоновки данных.
В этом примере если в настройках установлено значение параметра &НачалоПериода, то будет использоваться его значение. В противном случае в качестве значения параметра виртуальной таблицы будет использоваться значение “жесткого” параметра “&Начало”.
Если автозаполнение включено и в поля периода не вписаны “мягкие” параметры компоновки данных то параметры с именем поля периода будут автоматически созданы на странице “Параметры” СКД и текст запроса:
будет соответствовать следующему:
В этом случае “мягкие” параметры также будут иметь приоритет над “жесткими”.
Обзорный вид страницы.
На эту страницу автоматически добавляются все параметры из запроса. Можно добавлять свой параметр в для использования его в вычисляемых полях например.
Строка параметра имеет следующие реквизиты:
Имя — это имя параметра, с помощью которого к его значению можно обращаться в тексте запроса, в вычисляемых полях и других местах где доступны выражения.
Заголовок — название, выводимое пользователю.
Тип — определяет тип параметра. Иногда при выборе дат периода, пользователю не нужно указывать время. Тогда нажав на “…” можно указать состав даты — Дата.
Таким же образом можно указать формат числа для численного параметра и длину строки для строкового.
А для того чтобы введенные значения интерпретировались в отчете как начало и конец дня следует в запросе использовать функции НачалоПериода() и КонецПериода() .
Доступные значения — определяет перечень доступных значений. Представляет собой список значений со стандартными полями — значение и представление, где значение типа параметра. Для ссылочного типа доступны для выбора только предопределенные данные.
Доступен список значений — определяет доступность параметру принимать значение “список значения”.
Значение — предустановленное значение параметра. Типа параметра. Для ссылочного типа доступны для выбора только предопределенные данные.
Выражение — выражение, значение которого примет параметр. Что примечательно здесь могут использоваться как функции встроенного языка запросов, так и функции встроенного языка программирования и даже функции из общих модулей. К примеру, параметру ТекДата присваивается значение функции встроенного языка программирования ТекущаяДата().
Также в примере к реквизиту “Тип” можно было в выражениях использовать функции встроенного языка запросов, особенность применения этих функций в данном месте такова, что строковые параметры функций надо брать в кавычки.
и в запросе можно было бы писать проще поскольку в параметрах уже будет содержаться начало и конец периода:
Иногда, для повышения удобства пользователю для выбора периода лучше дать не два поля с типом Дата, а одно поле с типом Стандартный Период. Тогда, к примеру, создаем три параметра: “Период” с типом СтандартныйПериод, “ПериодНачало” и “ПериодОкончание” с типом Дата. Первый параметр без ограничения доступности. Вторые с ним. В выражение “ПериодНачало” пишем “&Период.ДатаНачала”, в “ПериодОкончания” — “&Период.ДатаОкончания”.
Даты начала и конца стандартного периода также содержат и время. ДатаНачала имеет время 00:00:00, а ДатаОкончания 23:59:59. Получится что пользователь выберет стандартный период в “Период” а разработчик будет использовать корректные “ПериодНачало” и “ПериодОкончание”.
Параметр функциональной опции — используется в механизме функциональных опций.
Включать в доступные поля — включает параметр в доступные поля для выбора в настройках.
Ограничение доступности — ограничивает возможность изменения значения параметра пользователем.
Запрещать незаполненные значения — если установлено и значение параметра не заполнено — отчет не сформируется и выдаст ошибку.
Использование — устанавливает использование параметра. Если установлено Авто и параметр используется в запросе или выражениях, а пользователь перед формированием не установит галочку около параметра — отчет при формировании выдаст ошибку. Пользователь может установить эту галочку непосредственно, или она установится автоматически при изменении значения параметра. Если установлено Всегда, то этой проверки на то, что пользователь заполнил этот параметр — не будет.
Параметры редактирования — содержит настройки редактирования как у поля формы.
В настройках варианта мы можем установить галочку “Отображать недоступные параметры”, это можно использовать если для разных вариантов мы хотим использовать разный набор параметров.
У параметров в табличной части мы можем установить значение по умолчанию для варианта, включить использование по умолчанию установив галочку слева. Нажав на кнопку, расположенную справа внизу, мы открываем окно пользовательских настроек параметра.
В пользовательских настройках мы можем включить параметр в пользовательские настройки. Установим режим редактирования обычный. Тогда он будет доступен в форме, вызываемой кнопкой “Настройки…”.
Если Режим редактирования установить Быстрый доступ, то параметр появится на форме.
Если у параметра “Период” представление заполнить строкой “ПеРиОд”, то вместо название будет показано содержания поля представление.
Если у отчета СКД нет формы, то платформа создаст автоматическую, на которой будут табличный документ результата, кнопки управления и быстрые пользовательские настройки.
Можно создать свою форму для отчета и вывести на нее табличное поле со всеми пользовательскими настройками. Вот так:
Для этого в созданной форме в конфигураторе вытаскиваем на форму Пользовательские настройки из Компоновщика отчета.
В некоторых случаях параметр не прост, и для его расчета нужен некий алгоритм с циклом или ветвлениями. К примеру если отчет формируем в понедельник то в отчете сравниваются продажи по дням позапрошлой и прошлой недели, а в остальные дни недели сравниваются продажи по дням прошлой и текущей недели. Получается у нас от значения дня недели текущего дня зависит сразу четыре параметра: &НачалоПрошлойНедели, &КонецПрошлойНедели, &НачалоТекущейНедели и &КонецТекущейНедели. А еще нам надо дать возможность пользователю формировать отчет как будто он сформирован вчера или неделю назад. В таком случае мы создаем реквизит формы ТекДата типа Дата. Выводим его на форму. В событии ПриИзменении() пишем.
Таким образом можно программно менять параметры из формы.
Параметры это ключевой инструмент для управления отчетом. Использование параметров дает возможность решить множество прикладных задач, таких как калькуляция на основе информации в базе и значений введенных интерактивно для конкретной калькуляции и многих других. В данной статье рассмотрены практически все относящиеся к параметрам механизмы и особенности. Рамках статьи не рассмотрен блок “Характеристики” Расширения языка запросов для СКД поскольку он не касается параметров. Не рассмотрена настройка параметра “Параметр функциональной опции” поскольку ее описание лучше включить в статью по функциональным опциям.
Читайте также: