Знание скд что это
Отчетность в 1С: Система Компоновки Данных (СКД), идея и архитектура
Одна из самых важных областей бизнес-софта – это отчетность. От того, насколько легко настроить под меняющиеся потребности бизнеса (и законодательства) существующий отчет или сделать новый, может зависеть (причем не в переносном смысле!) судьба бизнеса, будь то отчет для налоговой инспекции или диаграмма зависимости спроса на товары от сезона и других факторов. Мощная и гибкая система отчетности, позволяющая легко извлечь из системы нужные данные, представить их в доступном для понимания виде, позволяющая конечному пользователю перенастроить стандартный отчет так, чтобы увидеть данные в новом свете – это идеал, к которому должна стремиться каждая бизнес-система.
В платформе «1С:Предприятие» за построение отчётов отвечает механизм под названием «Система компоновки данных» (сокращенно СКД). В этой статье мы постараемся дать краткое описание идеи и архитектуры механизма СКД и его возможностей.
СКД – это механизм, основанный на декларативном описании отчетов. СКД предназначен для построения отчетов и для вывода информации, имеющей сложную структуру. Кстати, помимо разработки отчетов механизм СКД также используется в «1С:Предприятии» в динамическом списке, средстве показа списочной информации с богатой функциональностью (показ плоских и иерархических списков, условное оформление строк, группировки и т.п.).
Немного истории
В самой первой версии платформы «1С:Предприятие 8», версии 8.0, отчеты делались так:
Одной из идей, легших в основу СКД, была гибкость и настраиваемость отчетов, причем доступная как разработчику, так и конечному пользователю. В идеале хотелось бы дать доступ конечному пользователю к тому же набору инструментов для дизайна отчета, что и разработчику. Логично было бы сделать единый набор инструментов, доступный всем. Ну а раз инструменты предполагают участие конечного пользователя – значит, нужно использование программирования в них убрать до минимума (лучше всего – устранить совсем), и по максимуму использовать визуальные настройки.
Постановка задачи
Задача перед командой разработки стояла такая – сделать систему создания отчетов, основанную не на алгоритмическом (т.е. через написание кода), а на декларативном подходе к созданию отчетов. И мы считаем, что задачу успешно решили. По нашему опыту, около 80% требуемой отчетности может быть реализована с помощью СКД без единой строчки кода (за исключением написания формул вычисляемых полей), по большей части — через визуальные настройки.
Разработка первой версии СКД заняла около 5 человеко-лет.
Два языка
В создании отчетов задействованы два языка. Один – язык запросов, используемый для выборки данных. Второй – язык выражений компоновки данных, предназначен для записи выражений, используемых в различных частях системы, например, в настройках компоновки данных, для описания выражений пользовательских полей.
Язык запросов
Язык запросов основан на SQL и легко осваивается знающими SQL. Пример запроса:
Легко видеть аналоги стандартных для SQL-запроса секций — SELECT, FROM, GROUP BY, ORDER BY.
При этом язык запросов содержит значительное количество расширений, ориентированных на отражение специфики финансово-экономических задач и на максимальное сокращение усилий по разработке прикладных решений:
Есть также специальные расширения языка запросов для СКД. Расширение осуществляется при помощи специальных синтаксических инструкций, заключаемых в фигурные скобки и помещаемых непосредственно в текст запроса. С помощью расширений разработчик определяет, какие операции конечный пользователь сможет проводить, настраивая отчет.
Знание скд что это
Войдите как ученик, чтобы получить доступ к материалам школы
Система компоновки данных 1С 8.3 для начинающих: первый отчёт на СКД
Автор уроков и преподаватель школы: Владимир Милькин
Готовим рабочее место
На вашем рабочем столе должен появиться вот такой ярлык:
Для всех уроков из этого цикла мы будем использовать подготовленную мной базу данных «Гастроном». Она полностью совпадает с базой, которую мы использовали в четвёртом и пятом модулях школы при изучении запросов. Поэтому я рассчитываю, что вы знакомы с её справочниками и документами.
Наконец, рабочее место настроено и сейчас мы вместе создадим наш первый отчёт при помощи системы компоновки данных. Он будет очень простым, чтобы продемонстрировать общие возможности системы компоновки данных (сокращенно СКД).
Ставим цель
Отчёт должен быть внешним. Это значит, что он будет создан и настроен в конфигураторе, а затем сохранен в виде отдельного (внешнего) файла на компьютере.
Чтобы сформировать такой отчет в 1С пользователю нужно будет запустить базу в режиме пользователя, открыть этот файл и нажать кнопку «Сформировать».
Создаём отчёт
Запускаем конфигуратор для базы «Гастроном»:
Из главного меню выбираем пункт «Файл»->»Новый. «:
Выбираем «Внешний отчет»:
Создаём схему компоновки данных внутри отчёта
Открылось окно создания внешнего отчёта. В качестве имени вводим: «Урок1«, а затем жмём кнопку «Открыть схему компоновки данных«:
Запустился конструктор создания схемы. Соглашаемся с именем по умолчанию «ОсновнаяСхемаКомпоновкиДанных» и жмём кнопку «Готово«:
Открылось основное рабочее окно, с множеством закладок и полей, в котором мы и будем настраивать нашу схему компоновки данных.
Сейчас мы находимся на закладке «Наборы данных«. На ней и останемся.
Пишем запрос через конструктор
Система компоновки данных (сокращенно СКД) требует от нас данные, которые она будет выводить пользователю.
Добавился набор данных с именем «НаборДанных1«, но мы видим, что поле «Запрос» в нижней части окна пока пустое:
В этом запросе мы выбрали три поля («Наименование«, «Пол» и «ЛюбимыйЦвет«) из таблицы «Справочник.Клиенты«.
Но не торопитесь писать этот текст в поле «Запрос» вручную.
Сейчас мы создадим тот же самый запрос визуально, только при помощи мышки. Этот способ называется «Конструктор запроса«.
Чтобы вызвать этот конструктор нажмём кнопку «Конструктор запроса. » в верхней правой части поля «Запрос»:
В открывшемся окне перетащим таблицу «Клиенты» из первого столбца во второй, чтобы указать, что именно из этой таблицы мы будем запрашивать данные:
Получилось вот так:
Далее раскроем таблицу «Клиенты» во втором столбце по знаку «Плюс«, чтобы увидеть все её поля и перетащим поле «Наименование» из второго столбца в третий, чтобы указать, что из этой таблицы нам нужно запрашивать поле «Наименование»:
Получилось вот так:
Поступим точно так же с полями «Пол» и «ЛюбимыйЦвет«. Результат будет таким:
Нажмём кнопку «ОК», чтобы выйти из конструктора запроса и увидим, что текст запроса автоматически добавился в поле «Запрос».
Более того на основании текста запроса 1С сама вытащила имена полей (область выше запроса), которые будут использоваться схемой компоновки данных:
Теперь, когда мы составили запрос, СКД знает каким образом получать данные для отчёта.
Настраиваем представление данных
Чтобы сотворить такое чудо перейдём на вкладку «Настройки» и нажмём кнопку конструктора настроек (волшебная палочка):
В открывшемся окне укажем тип отчёта «Список» и нажмём «Далее«:
В следующем окне выберем (путём перетаскивания) поля, которые нужно будет отобразить в списке (перетащим все из доступных нам: «ЛюбимыйЦвет«, «Наименование» и «Пол«):
Получим вот такой результат и нажмём кнопку «ОК«:
Конструктор настроек закрылся и появился пункт «Детальные записи«:
Отчёт готов, давайте же его проверим. Для этого вначале сохраним отчет в виде внешнего файла.
Сохраняем отчёт в виде файла
Откроем пункт главного меню «Файл«->»Сохранить«:
Я сохраню его на рабочий стол под именем «Урок1«:
Проверяем отчёт в режиме пользователя
Наконец, закроем конфигуратор и зайдём в нашу базу в режиме пользователя:
Имя пользователя «Администратор», пароля нет:
Через меню выберем пункт «Файл«->»Открыть. «:
И укажем файл отчёта (я сохранял его на рабочий стол под именем «Урок1.erf»:
Открылась форма отчёта, нажмём кнопку «Сформировать«:
Готово! Вот она наша печатная форма со списком клиентов, их любимым цветом и полом:
Печатную форму можно легко распечатать. Для этого достаточно выбрать в меню пункт «Файл«->»Печать. «:
Вот так просто, без программирования нам удалось создать полноценный отчёт, который пользователи смогут открывать в своих базах, формировать и распечатывать.
Войдите на сайт как ученик
Авторизуйтесь, чтобы получить доступ ко всем материалам школы
Прибегайте к изучению эталонного варианта только после самостоятельного выполнения всех шагов.
Войдите как ученик, чтобы получить доступ к материалам школы
СКД: 5 советов, как сделать лучше
Оглавление
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. Добавление своего поля отбора
Так выглядит настройка, когда два поля отбора, и когда единое поле отбора (так удобнее). Подробнее можно посмотреть в этом видео.
Когда надо наложить отбор на одно и то же поле в объединении запросов. Если в этом случае наложить отбор на поле Склад, это приведет к тому, что в запросе по РН Продажи ничего не будет выбрано.
рис. 18. Поле склад в объединении запросов
рис. 19. Результат наложения отбора по полю Склад при такой настройке
Поэтому, когда выполняется объединение запросов и требуется накладывать не во всех запросах объединения, обычно в этом случае отключается отбор по полю (в данном случае Склад) и используется добавленное поле (в нашем случае СкладОтбор). И все работает.
Отбор по полю СкладОтбор больше не выпиливает продажи, а только фильтрует остатки по складу.
Естественно, таких проблем не будет, когда схема создана без использования флага автозаполнение и все поля расставлены вручную.
рис. 20. Добавление своего поля отбора. Результат при такой настройке
Рекомендуем освоить создание схемы без Автозаполнения — сразу придет понимание, как это работает.
Знание скд что это
Войдите как ученик, чтобы получить доступ к материалам школы
Система компоновки данных 1С 8.3 для начинающих: считаем итоги (ресурсы)
Автор уроков и преподаватель школы: Владимир Милькин
Ставим цель
Целью этого урока будет:
- Написать отчёт, который выводит список продуктов (справочник Еда), их калорийность и вкус. Сделать группировку продуктов по их цвету. Познакомиться с возможностью подведения итогов (ресурсы) и вычисляемыми полями.
Создаём новый отчёт
Как и на предыдущих уроках открываем базу «Гастроном» в конфигураторе и создаём новый отчёт через меню «Файл«->»Новый. «:
В форме настройки отчёта пишем имя «Урок3» и нажимаем кнопку «Открыть схему компоновки данных«:
Оставляем имя схемы по умолчанию и нажимаем кнопку «Готово«:
Добавляем запрос через конструктор
Вместо того, чтобы писать текст запроса вручную, вновь запускаем конструктор запроса:
На вкладке «Таблицы» перетягиваем таблицу «Еда» из первой колонки во вторую:
Выбираем из таблицы «Еда» поля, которые будем запрашивать. Для этого перетаскиваем поля «Наименование«, «Вкус«, «Цвет» и «Калорийность» из второй колонки в третью:
Получилось вот так:
Формируем настройки представления отчёта
Переходим на закладку «Настройки» и нажимаем на волшебную палочку, чтобы вызвать конструктор настроек:
Выбираем вид отчета «Список. » и нажимаем кнопку «Далее«:
Перетаскиваем из левой колонки в правую поля, которые будут отображаться в списке и нажимаем «Далее«:
А вот и результат работы конструктора. Иерархия нашего отчёта:
Сохраним отчёт (кнопка дискета) и не закрывая конфигуратора тут же откроем его в режиме пользователя. Получилось вот так:
Меняем порядок колонок
Но давайте поменяем порядок колонок (стрелки вверх-вниз), чтобы он был таким как на рисунке ниже:
Сохраним отчёт и вновь откроем в режиме пользователя:
Отлично, так гораздо лучше.
Подводим итог (сумму) по калорийности
Было бы неплохо выводить итог калорийности продуктов по группам. Чтобы видеть сумму калорийности всех продуктов, скажем, белого или жёлтого цвета. Или узнать общую калорийность вообще всех продуктов в базе.
Для этого существует механизм вычисления ресурсов.
Переходим на вкладку «Ресурсы» и перетаскиваем поле «Калорийность» (мы же по нему собираемся итог подводить) из левой колонки в правую.
При этом в поле выражение выбираем из выпадающего списка «Сумма(Калорийность)«, так как итогом будет являться сумма всех входящих в итог элементов:
Сохраняем и формируем отчёт:
У нас появились итоги по каждой из групп и по отчёту в целом.
Подводим итог (среднее) по калорийности
Теперь давайте сделаем так, чтобы в ещё одной колонке выводилась средняя калорийность продуктов по группам и в целом по отчёту.
Чтобы завести такое «виртуальное» поле воспользуемся механизмом вычисляемых полей.
Переходим на закладку «Вычисляемые поля» и нажимаем зелёный плюсик:
В колонке «Путь к данным» пишем имя нового поля (слитно, без пробелов). Пусть оно будет называться «СредняяКалорийность«, а в колонке «Выражение» пишем имя уже существующего поля, на основании которого будет рассчитываться новое поле. Пишем туда «Калорийность«. Колонка «Заголовок» заполнится автоматически.
Поступим вторым способом. Для этого переходим на закладку «Настройки«, выбираем «Отчет» (ведь мы хотим добавить поле в целом к отчёту), выбираем внизу закладку «Выбранные поля» и перетаскиваем поле «СредняяКалорийность» из левой колонки в правую:
Получилось вот так:
Сохраняем и формируем отчет:
Поле появилось и мы видим, что его значениями являются значения поля «Калорийность». Отлично!
Для этого вновь воспользуемся уже знакомым нам механизмом ресурсов (подведение итогов). Переходим на закладку «Ресурсы» и перетаскиваем поле «СредняяКалорийность» из левой колонки в правую:
При этом в колонке «Выражение» выбираем «Среднее(СредняяКалорийность)«:
Сохраняем и формируем отчёт:
Видим, что по группам, то есть по каждому цвету, и по отчёту в целом совершенно верно посчиталось среднее значение. Но присутствуют лишние записи по отдельным продуктам (не по группам), которые хотелось бы убрать из отчёта.
Знаете почему они появились (значения не по группам)? Потому что, когда мы добавляли поле «СредняяКалорийность» в настройки отчёта, на втором шаге мы выделили весь отчёт в целом и это новое поле попало в элемент «Детальные записи«.
Исправим ошибку. Для этого вернёмся на закладку «Настройки«, выберем «Детальные записи» сначала сверху (шаг 2), а затем «Детальные записи» снизу (шаг 3), перейдём на закладку «Выбранные поля» и увидим в её правой колонке элемент «Авто«.
Элемент «Авто» раскрылся в следующие поля:
А вот и наше поле «СредняяКалорийность«, которое попало сюда из пункта «Отчет«, когда мы его туда перетаскивали. Просто снимем галку рядом с этим полем, чтобы убрать его вывода:
Сохраним и сформируем отчёт:
Подводим итог (количество) по вкусам
Ну и напоследок, чтобы закрепить умение подводить итоги, сделаем вывод количества различных вкусов для продуктов каждого цвета.
Ну, например, для белого цвета, это значение будет равно 2 (всего два вкуса «Кислый» и «Сладкий»), а для жёлтого 3 («Сладкий», «Солёный» и «Кислый»).
Переходим на закладку «Ресурсы» и перетаскиваем поле «Вкус» из левой колонки в правую:
В качестве выражения выбираем «Количество(Различные Вкус)«:
Сохраняем и формируем отчёт:
Войдите на сайт как ученик
Авторизуйтесь, чтобы получить доступ ко всем материалам школы
Прибегайте к изучению эталонного варианта только после самостоятельного выполнения всех шагов.
Войдите как ученик, чтобы получить доступ к материалам школы