Получить часть 1с скд
Войдите как ученик, чтобы получить доступ к материалам школы
Система компоновки данных 1С 8.3 для начинающих: первый отчёт на СКД
Автор уроков и преподаватель школы: Владимир Милькин
Если вы не читали введение к этому модулю - пожалуйста, прочтите его: ссылка.
Готовим рабочее место
Для выполнения уроков вам понадобится 1С 8.3 (не ниже 8.3.13.1644) .
Если у вас уже есть установленная 1С версии 8.3 - используйте её. Если нет - скачайте и установите учебную версию, которую фирма 1С выпускает специально для образовательных целей: ссылка на инструкцию по скачиванию и установке 1С.
На вашем рабочем столе должен появиться вот такой ярлык:
Для всех уроков из этого цикла мы будем использовать подготовленную мной базу данных "Гастроном". Она полностью совпадает с базой, которую мы использовали в четвёртом и пятом модулях школы при изучении запросов. Поэтому я рассчитываю, что вы знакомы с её справочниками и документами.
Если вы её удалили - скачайте заново по следующей ссылке, распакуйте и подключите в список баз.
Наконец, рабочее место настроено и сейчас мы вместе создадим наш первый отчёт при помощи системы компоновки данных. Он будет очень простым, чтобы продемонстрировать общие возможности системы компоновки данных (сокращенно СКД).
Ставим цель
Цель этого урока - создать отчёт, который в режиме пользователя выводит список клиентов со следующими полями:
- Имя
- Пол
- Любимый цвет клиента.
Отчёт должен быть внешним. Это значит, что он будет создан и настроен в конфигураторе, а затем сохранен в виде отдельного (внешнего) файла на компьютере.
Чтобы сформировать такой отчет в 1С пользователю нужно будет запустить базу в режиме пользователя, открыть этот файл и нажать кнопку "Сформировать".
Создаём отчёт
Запускаем конфигуратор для базы "Гастроном":
Из главного меню выбираем пункт "Файл"->"Новый. ":
Выбираем "Внешний отчет":
Создаём схему компоновки данных внутри отчёта
Открылось окно создания внешнего отчёта. В качестве имени вводим: "Урок1", а затем жмём кнопку "Открыть схему компоновки данных":
Запустился конструктор создания схемы. Соглашаемся с именем по умолчанию "ОсновнаяСхемаКомпоновкиДанных" и жмём кнопку "Готово":
Открылось основное рабочее окно, с множеством закладок и полей, в котором мы и будем настраивать нашу схему компоновки данных.
Не нужно пугаться - возможностей здесь действительно много, но далеко не все из них нам нужны. Особенно на первом уроке.
Сейчас мы находимся на закладке "Наборы данных". На ней и останемся.
Пишем запрос через конструктор
Система компоновки данных (сокращенно СКД) требует от нас данные, которые она будет выводить пользователю.
Самый простой способ - написать запрос к базе. В предыдущих модулях школы мы научились писать и понимать запросы - поэтому я рассчитываю, что вы обладаете соответствующими навыками.
Нажимаем на зелёный плюсик и в раскрывшемся списке выбираем пункт "Добавить набор данных - запрос":
Добавился набор данных с именем "НаборДанных1", но мы видим, что поле "Запрос" в нижней части окна пока пустое:
Наша задача написать в это поле текст запроса. Вы ещё не забыли как это делается?
В этом запросе мы выбрали три поля ("Наименование", "Пол" и "ЛюбимыйЦвет") из таблицы "Справочник.Клиенты".
Но не торопитесь писать этот текст в поле "Запрос" вручную.
Сейчас мы создадим тот же самый запрос визуально, только при помощи мышки. Этот способ называется "Конструктор запроса".
Чтобы вызвать этот конструктор нажмём кнопку "Конструктор запроса. " в верхней правой части поля "Запрос":
В открывшемся окне перетащим таблицу "Клиенты" из первого столбца во второй, чтобы указать, что именно из этой таблицы мы будем запрашивать данные:
Получилось вот так:
Далее раскроем таблицу "Клиенты" во втором столбце по знаку "Плюс", чтобы увидеть все её поля и перетащим поле "Наименование" из второго столбца в третий, чтобы указать, что из этой таблицы нам нужно запрашивать поле "Наименование":
Получилось вот так:
Поступим точно так же с полями "Пол" и "ЛюбимыйЦвет". Результат будет таким:
Нажмём кнопку "ОК", чтобы выйти из конструктора запроса и увидим, что текст запроса автоматически добавился в поле "Запрос".
Более того на основании текста запроса 1С сама вытащила имена полей (область выше запроса), которые будут использоваться схемой компоновки данных:
Теперь, когда мы составили запрос, СКД знает каким образом получать данные для отчёта.
Настраиваем представление данных
Осталось как-то визуализировать эти данные для пользователя в виде печатной формы. И вот тут СКД может творить чудеса!
Чтобы сотворить такое чудо перейдём на вкладку "Настройки" и нажмём кнопку конструктора настроек (волшебная палочка):
В открывшемся окне укажем тип отчёта "Список" и нажмём "Далее":
В следующем окне выберем (путём перетаскивания) поля, которые нужно будет отобразить в списке (перетащим все из доступных нам: "ЛюбимыйЦвет", "Наименование" и "Пол"):
Получим вот такой результат и нажмём кнопку "ОК":
Конструктор настроек закрылся и появился пункт "Детальные записи":
Отчёт готов, давайте же его проверим. Для этого вначале сохраним отчет в виде внешнего файла.
Сохраняем отчёт в виде файла
Откроем пункт главного меню "Файл"->"Сохранить":
Я сохраню его на рабочий стол под именем "Урок1":
Проверяем отчёт в режиме пользователя
Наконец, закроем конфигуратор и зайдём в нашу базу в режиме пользователя:
Имя пользователя "Администратор", пароля нет:
Через меню выберем пункт "Файл"->"Открыть. ":
И укажем файл отчёта (я сохранял его на рабочий стол под именем "Урок1.erf":
Открылась форма отчёта, нажмём кнопку "Сформировать":
Готово! Вот она наша печатная форма со списком клиентов, их любимым цветом и полом:
Печатную форму можно легко распечатать. Для этого достаточно выбрать в меню пункт "Файл"->"Печать. ":
Вот так просто, без программирования нам удалось создать полноценный отчёт, который пользователи смогут открывать в своих базах, формировать и распечатывать.
То ли ещё будет, наберитесь терпения
Войдите на сайт как ученик
Для учеников
Прибегайте к изучению эталонного варианта только после самостоятельного выполнения всех шагов.
На вопросы учеников — отвечаю по почте, но прежде загляните в ЧАВО (ссылка) .
Главная особенность СКД в 1С при работе с «наборами данных запрос» заключается в том, что запрос выполняемый платформой может отличаться от запроса, который вы написали в наборе данных.
В процессе чтения статьи вы уже сталкивались с таким поведением системы компоновки данных в разделе «Расширение языка запросов 1С для СКД». Это (наличие управляющих конструкций расширения в запросе) один из факторов, влияющих на результирующий запрос. Где можно «поймать» этот запрос вы могли заметить в разделе «Обманываем СКД» - в процедуре «ПриКомпоновкеРезультата» в отладчике при программном формировании отчета в объекте МакетКомпоновкиДанных можно обратиться к свойству «НаборыДанных», в наборе (если это набор данных запрос) смотрим свойство «Запрос».
В этом разделе разберем если не все, то большинство ситуаций срабатывания механизма замены (модификации) запроса. Среди них будут как ожидаемые, так и неожиданные примеры .
Вспомогательные данные
При выполнении запроса для вывода в отчет в запрос дополнительно включаются - данные о представлении агрегатных объектов, при наличии группировок - данные для сортировки и сама сортировка.
Для детальных записей это выглядит так:
При наличии группировок так:
Использовать группировки запроса если возможно
Начиная с определенного релиза платформы 1С (по-моему, с 8.3.14) в СКД появилась для «наборов данных запрос» опция «Использовать группировки запроса если возможно»:
В отчете с группировкой по номенклатуре и ресурсами «Количество» и «Сумма» получаем:
Слева запрос без опции, справа с установленной опцией. Как видно с установленной опцией свертка данных производится на стороне СУБД.
Что означает «если возможно»? Если рассмотрим такой текст запроса:
То на него указанная опция не действует. Видимо к регистрам накопления «невозможно» применить эту опцию:
В следующих примерах, если в результирующем запросе вы не видите полей специфичных для этой опции, значит она отключена.
Необязательное условие
Этот пример мы уже рассматривали в предыдущем разделе про расширение языка запросов. Повторим еще раз и рассмотрим чуть больше примеров:
Исходный текст запроса:
Если не задан ни один параметр:
Если задан один параметр:
Если заданы оба параметра:
Здесь важно заметить, что условия могут применяться отдельно только если они перечисленные через «,» и при использовании обоих условий они соединяются с помощью оператора «И». Если условия должны соединяться по-другому, то в этом случае общее выражение заключается в одни фигурные скобки:
Только в этом случае отчет будет работать, если не заданы оба параметры или если оба параметры заданы. Если задан только один параметр, будет выдаваться ошибка (потому что в итоговый запрос будут включены оба параметра):
Необязательная таблица
Такой пример мы тоже уже разбирали. Исходный запрос:
Если выбрано поле остатка:
Если поле остатка не выбрано:
Теперь рассмотрим запрос чуть сложнее:
В нем мы получаем данные по продажам, из связанной накладной получаем статью расходов, из статьи получаем формулу расчета. Реквизиты «Статья» и «ФормулаРасчета» могут не включаться в отчет. Допустим, нам не нужна статья, но нужна формула расчета. Какой итоговый запрос мы получим в этом случае:
Реквизит «Статья» исключен из запроса и некорректно исключена связанная с ним таблица по накладным. До сих пор мы рассматривали элементы расширения языка запросов. Посмотрим, как выглядят они в конструкторе запросов. Необязательные таблицы можно увидеть на закладке «Компоновка данных - Таблицы»:
Здесь кроме колонки «Обязательная» есть колонка «Номер группы». Поскольку наши таблицы включены в разные группы, то и в запросе они исключаются/включаются независимо.
Если какая-то таблица включается в запрос и при этом в запрос должны включаться таблицы, от которых она зависит, то такие таблицы должны включаться в одну группу. Поэтому для таблицы «СтатьиДоходовРасходов» установим номер группы равный 1.
Посмотрим, какие получатся исходный и результирующий запросы:
Странно конечно получается, если мы запрос создаем в конструкторе запросов (до этого в первом исходном запросе я расставил скобки «<>» руками):
Таблицы расположены в разных группах, но как бы одна внутри другой:
При этом если исключить статью в отчете, но оставить формулу расчета, результирующий запрос получается верный, несмотря на то, что группы у таблиц разные:
Видимо здесь имеет значение еще и порядок соединений в исходном запросе. Но все-таки надежней будет размещать таблицы в одной группе.
Серия статей по СКД
Предыдущая статья .., Следующая статья ...
Автор курсов образовательного проекта Profession Store. Павел Шемякин
Рассмотрим такой пакетный запрос, в котором по каждому виду цен нам нужно вывести количество позиций номенклатуры, для которых этот вид цен задан:
При выполнении отчета с группировкой по виду цен получаем запрос (первая часть пакета):
В итоге получаем правильный результирующий запрос:
Подобная ситуация может получиться в отчетах, получающих развернутое сальдо и в других запросах, в которых важен набор полей в предложении «СГРУППИРОВАТЬ ПО».
Применение отборов
С помощью расширения языка запросов 1С для СКД можно управлять местом применения отборов. Также нужно знать, что в случае отсутствия элементов расширения языка запросов, система компоновки данных по умолчанию размещает отбор:
Рассматривать будем на таком исходном запросе.
В параметрах виртуальных таблиц при отборе по измерениям:
В секции «ГДЕ» при использовании отборов по ресурсам:
В секции «ИМЕЮЩИЕ» при отборе по полю запроса, вычисляемого с помощью агрегатной функции (в исходный запрос добавлена группировка по номенклатуре и контрагенту):
В документации на диске ИТС написано, что в случае левого соединения двух таблиц, отбор, накладываемый по измерению, отсутствующему в первой (левой) таблице применяется в секции «ГДЕ». Однако в релизе платформе 8.3.15 такое поведение не подтверждается:
При наличии опции «Автозаполнение» система компоновки данных всегда пытается добавить отбор в параметр виртуальной таблицы, если с помощью расширения языка запросов этот отбор не установлен:
Если отключить опцию автозаполнения, то отбор будет установлен только там, где было указано:
При этом отбор в секции «ИМЕЮЩИЕ» автоматически не добавляется. И добавить его с помощью расширения языка запросов невозможно .
Временные таблицы
Если в запросе пакета используются временные таблицы и данные из этих таблицы не используются в конечном запросе, то такие временные таблицы из пакета исключаются. Причем независимо от опции «Автозаполнение». Эту особенность СКД можно использовать для оптимизации текста запроса, который выполняет платформа 1С. Рассмотрим такой текс запроса:
Было бы хорошо, если первый запрос пакета исключался в случае, когда пользователь захочет выбирать все заказы. Для этого необходимо, чтобы условие в «ГДЕ» стало необязательным. Второй запрос пакета перепишем так:
и посмотрим, что получилось после выполнения:
Это весь запрос. Временная таблица исключена, исключено условие. Но теперь не понятно как быть, если условие по остаткам нужно вернуть в запрос. Как видно СКД добавила алиас «Поле2» и данное поле добавляется в набор доступных полей. Если пользователь сделает отбор по этому полю, то условие вернется в запрос вместе со временной таблицей, но будет это выглядеть совсем не так как нам необходимо:
Чтобы получить нужный результат добавить параметр «ТолькоОстатки» в запрос:
Важно чтобы параметр и условие с подзапросом были в общих скобках «()» и обязательно без алиаса. Добавление алиаса по всей видимости превращает условие в одно из полей и если в настройках нет обращения к нему, то условие из запроса исчезает. Итак, в режиме пользователя мы включаем использование параметра или выключаем. При этом само значение параметра всегда должно быть равно «Истина»:
Если параметр включен, то получаем:
Если параметр выключен, то просто запрос по заказам. Можно сделать то же самое несколько по-другому. Таблицу с остатками добавить через левое соединение как необязательную. И добавлять или не добавлять отбор по полю остатка:
При этом управление отбором для пользователя можно сделать средствами СКД без дополнительных усилий:
В настройках это выглядит как:
Ну и результирующий запрос, в случае если отбор установлен:
Серия статей по СКД
Предыдущая статья .., Следующая статья .
Автор курсов образовательного проекта Profession Store. Павел Шемякин
Система компоновки данных представляет собой механизм, основанный на декларативном описании отчетов. Он предназначен для построения отчетов, а также вывода информации, имеющей сложную структуру и содержащий произвольный набор таблиц и диаграмм.
Устройство системы компоновки данных
- создание отчета без программирования;
- использование автоматически генерируемых форм просмотра и настройки отчета;
- разбиение исполнения отчета на этапы;
- исполнение отдельных этапов построения отчета на различных компьютерах;
- независимое использование отдельных частей системы компоновки данных;
- программное управление процессом выполнения отчета.
Основные элементы системы компоновки данных представлены на следующей схеме:
Схема компоновки данных
Схема компоновки данных описывает суть данных, которые предоставляются отчету (откуда получать данные и как можно управлять компоновкой данных). Представляет собой базу, на основе которой могут быть сформированы всевозможные отчеты. Схема компоновки данных может содержать:
- текст запроса с инструкциями системы компоновки данных;
- описание нескольких наборов данных;
- подробное описание доступных полей;
- описание связей между несколькими наборами данных;
- описание параметров получения данных;
- описание макетов полей и группировок;
- и др.
Настройки компоновки данных
Настройки компоновки данных описывают все, что может настроить разработчик или пользователь в некоторой установленной схеме компоновки данных. Настройки компоновки данных могут содержать:
- отбор;
- упорядочивание;
- условное оформление;
- структуру отчета (составные части будущего отчета);
- параметры получения данных;
- параметры вывода данных;
- и др.
Макет компоновки данных
Макет компоновки данных представляет собой уже готовое описание того, как должен быть сформирован отчет. В нем соединяется схема компоновки и настройки компоновки. Фактически макет компоновки данных представляет собой результат применения конкретных настроек к схеме компоновки и является готовым заданием процессору компоновки на формирование отчета нужной структуры с учетом конкретных настроек.
Элемент результата компоновки данных
Результат компоновки данных представляется набором элементов результата компоновки данных. Как самостоятельная логическая сущность результат компоновки данных не существует, существуют только его элементы. Элементы результата компоновки данных можно вывести в табличный документ для представления их пользователю, или в другие виды документов. Также имеется возможность программного вывода элементов результата компоновки в объекты вида Дерево значений или Таблица значений.
Работа с системой компоновки данных в конфигурации
Система компоновки данных интегрирована в объект конфигурации Отчет. Это позволяет создавать отчеты без программирования.
У объекта конфигурации Отчет реализовано свойство «Основная схема компоновки данных»:
При нажатии кнопки открытия для этого свойства, вызывается конструктор макета, который позволяет создать макет отчета, содержащий схему компоновки данных:
После нажатия кнопки «Готово» будет открыт конструктор схемы компоновки данных.
Конструктор схемы компоновки данных позволяет описать исходные данные, которые будет использовать отчет: наборы данных, связи между наборами данных, вычисляемые поля, ресурсы и т. д.
Также конструктор схемы компоновки данных предоставляет возможность описать настройки компоновки данных, которые будут использоваться по умолчанию (в том случае, если пользователь не задаст собственные настройки). Настройки компоновки данных могут быть созданы с помощью специального конструктора настроек компоновки данных, или вручную:
После выполнения этих действий отчет готов. В режиме 1С:Предприятие система автоматически, на основании схемы компоновки данных, содержащейся в отчете, может создать форму отчета и форму настроек отчета.
Таким образом пользователь просто запускает отчет и получает результат в соответствии с теми настройками, которые описал разработчик:
При необходимости пользователь может открыть форму настроек отчета и отредактировать их, изменить структуру отчета и т. д. аналогично тому, как это делает разработчик в режиме конфигуратора.
Консоль системы компоновки данных
Внешний отчет «Консоль системы компоновки данных» предназначен для специалистов, желающих подробнее узнать об устройстве системы компоновки данных. Консоль позволяет выполнять отдельные шаги компоновки данных с просмотром промежуточных результатов в виде XML. Подробнее…
Войдите как ученик, чтобы получить доступ к материалам школы
Система компоновки данных 1С 8.3 для начинающих: представление отчёта в виде таблицы
Автор уроков и преподаватель школы: Владимир Милькин
На всех прошлых уроках мы выводили данные в отчет в виде списка. Сегодня разберёмся со вторым типом отчета: "Таблица".
Ставим цель
- Написать отчёт, который выводит информацию о заказе еды клиентами в виде таблицы.
- В строках таблицы должна выводиться еда, в колонках - клиенты, а на пересечении количество данной еды заказанной данным клиентом.
- Информацию будем брать из документов "ЗаказКлиента".
Создаём новый отчёт
Открываем базу "Гастроном" в конфигураторе и через меню "Файл"->"Новый. " создаём новый отчёт:
Вид документа - "Внешний отчет":
В новой форме отчёта указываем имя "Урок8" и нажимаем кнопку "Открыть схему компоновки данных":
Имя схемы компоновки данных оставляем по умолчанию:
Составляем запрос
Добавляем новый набор данных - запрос:
Выделяем новый набор данных и вызываем конструктор запроса:
Будем выбирать из табличных частей документа "ЗаказКлиента" следующие поля:
Получился следующий текст запроса:
Сначала пробуем список
Перейдём на закладку "Настройки" и нажмём волшебную палочку, чтобы вызвать конструктор:
Вначале попробуем по старинке выбрать тип отчета "Список. ":
Укажем поля, которые будут отображаться в отчете:
Сохраним наш отчёт в конфигураторе и сформируем в режиме пользователя:
Получился привычный нам список с тремя колонками: Клиент, Еда и Количество.
Выводим в виде таблицы
Ах как замечательно было бы представить эти же самые данные в виде таблицы, в строках которой перечислена еда, в колонках - клиенты, а на пересечении количество данной еды, которое заказал данный клиент:
Сделать это действительно легко. Для этого вернёмся на закладку "Настройки" и вновь вызовем конструктор настроек через волшебную палочку:
На этот раз в качестве типа отчета выберем "Таблица..":
Из полей, которые будут отображаться в отчёте уберём "Клиент" и "Еда", так как эти поля по нашей задумке уйдут в столбцы и строки соответственно:
Оставим только количество, которое будет отображаться на пересечении строк и столбцов:
Здесь нужно указать конструктору какие поля будут отображаться в строках, а какие в столбцах. Для нас очевидно (см. рисунок выше), что строки - это еда, а колонки - клиенты:
Получилось вот так:
Итоговая структура отчёта будет такой:
Сохраняем наш отчёт в конфигураторе и формируем в режиме пользователя:
Вроде бы неплохо. Еда отображаться в строках, а клиенты - в столбцах. Но показатели количества, которые мы ожидали увидеть на пересечении строк и столбцов почему-то оказались все слепёшены в одном столбце.
А причина в том, что строки и столбцы у нас сгруппированы, а показатели нет! Поэтому и такой разлад.
Чтобы сгруппировать количество нужно подвести по нему итоги (вычислить ресурсы). Это мы уже делать умеем.
Забыли подвести итоги
Переходим на закладку "Ресурсы" и перетаскиваем поле "Количество" из левой колонки в правую:
Выражение "Сумма(Про. " оставляем без изменения:
Снова сохраняем отчет и формируем в режиме пользователя:
То, что надо! Мы хорошо поработали. А на следующем уроке - мы модифицируем этот отчёт (вернее его копию) и представим эти же данные в виде диаграммы.
Войдите на сайт как ученик
Для учеников
Прибегайте к изучению эталонного варианта только после самостоятельного выполнения всех шагов.
На вопросы учеников — отвечаю по почте, но прежде загляните в ЧАВО (ссылка) .
Читайте также: