СКД 1С расшифровывается как Система Компоновки Данных. СКД 1С – это новый способ написания отчетов в 1С, который позволяет пользователю полностью настраивать отчет самостоятельно.
Минус СКД 1С в том, что его настройки достаточно сложны и не все пользователи усваивают их быстро.
Написание отчетов СКД требует умение работать с запросами в 1С, что мы обсуждали в .
Какова технология создания отчета СКД 1С:
Пользователю остается возможность изменить множество настроек по своему желанию.
Какова технология создания отчета по предыдущим технологиям:
Как Вы видите, СКД 1С имеет значительное преимущество как для пользователя, так и для программиста:
Во всех новых конфигурациях 1С все отчеты будут использованы только на СКД 1С.
Давайте посмотрим как создать отчет на СКД 1С самому с нуля.
Создаем отчет СКД 1С
В конфигураторе нажмите кнопку нового файла (меню Файл/Новый).
Выберите тип файла Новый отчет.
Будет создан новый отчет. Введем наименование – без пробелов для конфигурации, синоним для пользователя.
Создадим основную схему СКД 1С.
Создаем запрос для отчета СКД 1С
Источников данных для СКД 1С может быть множество. Чтобы использовать, например, два отдельных запроса – добавьте сначала «Набор данных – объединение», а потом несколько запросов.
В нашем примере мы будем использовать простой запрос.
Набросаем запрос для получения данных.
Работа с конструктором запроса ничем не отличается от обычной, мы обсуждали это в .
В результате формирования запроса, СКД 1С создаст список доступных к использованию полей и заполнит им по умолчанию наименования.
Если наименование неудобное, здесь его можно изменить.
Обратите внимание, что мы использовали в запросе параметр &ДатаНачала. В СКД 1С есть параметр (дата) по умолчанию с названием &Период и Вы можете использовать его.
Причем указывать его в запросе прямо не надо – он будет использован автоматически. Однако есть тонкость – он применяется ко всем таблицам, включая левые соединения и прочее, что может рождать ошибки.
Например, Вы получаете остатки на начало месяца, а левым соединением получаете данные на сегодня. При использовании Период будет применен ко всем таблицам одинаково и запрос будет работать неверно.
Настройки СКД 1С
На закладке Ресурсы укажем те поля, которые будут суммироваться для итогов (т.е. цифры). У полей можно указать функцию суммирования. По умолчанию это Сумма (т.е. суммировать цифры из всех строк и получить итого), а можно использовать Среднее, Количество, Максимум и т.п.
На закладке Параметры запретим ненужные нам, и включим нужные. Здесь же можно задать человеческое название параметра.
Основная настройка производится на закладке Настройки:
Откроем его в режиме Предприятие. Обратите внимание, что мы не занимались никаким программированием, рисованием форм и прочего. Чтобы задать параметр нажмите кнопку Настройки.
Пользователь видит почти такую же форму настроек, как и программист.
Вуаля. Отчет работает.
Настройки СКД 1С
Все настройки отчета СКД 1С производится с помощью нажатия на кнопку Настройки. По крайней мере в шаблоне по умолчанию. Существует возможность создать самому форму отчета СКД 1С и тогда настройки могут быть вынесены в другие формы, нарисованные программистом самостоятельно.
Перетащим Склад из Колонки в Строки.
Перетащим Номенклатуру на Склад.
Нажмите ОК и сформируйте отчет. Ура – мы только что изменили работу отчета в режиме Программирование без программирования.
Нажмите правой кнопкой на Строки (а можно на любое из полей) и выберите Новая группировка.
Раскроем поле Склад и выберем одно из его полей, например Вид склада.
Подумав, мы вспомнили, что хотелось бы, чтобы в одной колонке выводилось сразу несколько полей. Нажмите на только что созданное поле два раза левой кнопкой мыши. Здесь можно добавить поля.
Если Вы добавите новую группировку, но поле не выберете, это означает «Все поля» (отображается как «Детальные записи»). Это выглядит так.
Схватите левой кнопкой мыши нашу группировку (Склад/Номенклатура) и перетащите ее на новую группировку (Вид склада).
Результат наших настроек.
Кроме настроек, о действии которых легко догадаться по их названию (Отбор, Сортировка и т.п.) есть закладке «Другие настройки». Она позволяет разрешить или запретить такие вещи как отображение итогов, расположение группировок в колонках и т.п.
Обратите внимание, что настройки могут быть заданы для всего отчета (выбран Отчет) или для конкретной строки полей (выберите строку, например Номенклатура, и выберите Настройки:Нонменклатура).
Расширение языка запросов для системы компоновки данных
Расширение языка запросов для системы компоновки данных осуществляется при помощи специальных синтаксических инструкций, заключаемых в фигурные скобки и помещаемых непосредственно в текст запроса.
В этом предложении описываются поля, которые пользователь сможет выбирать для вывода. После данного ключевого слова через запятую перечисляются псевдонимы полей из основного списка выборки запроса, которые будут доступными для настройки.
Например:
{ВЫБРАТЬ Номенклатура, Склад}
После псевдонима поля может находиться комбинация символов «.*», что обозначает возможность использования дочерних полей от данного поля.
Например, запись Номенклатура.* обозначает возможность использования дочерних полей поля «Номенклатура» (например, поля «Номенклатура.Код»). Элемент ВЫБРАТЬ может присутствовать только в первом запросе объединения.
Описываются поля, на которые пользователь сможет накладывать отбор. В данном предложении используются поля таблиц. Использование псевдонимов полей списка выборки недопустимо. Каждая часть объединения может содержать собственный элемент ГДЕ.
{ГДЕ Номенклатура.*, Склад }
Необходимо получить продажи за период + вывести всю номенклатуру, независимо от того были ли продажи или нет. То есть, необходимо выбрать данные из таблицы оборотов регистра Продажи, данные из справочника номенклатура. Опустим вопрос зачем нам нужна вся номенклатура.
Для решения задачи можно составить запрос соединяющий левым соединением номенклатуру и таблицу оборотов Продажи, в результате, для номенклатуры, которая не продавалась в выбранном периоде мы получим значения полей Контрагент , Договор , Количество , Сумма = Null. Такой запрос:
ВЫБРАТЬ СпрНоменклатура.Ссылка КАК Номенклатура, ПродажиОбороты.Контрагент, ПродажиОбороты.ДоговорКонтрагента, ПродажиОбороты.КоличествоОборот КАК Количество, ПродажиОбороты.СтоимостьОборот КАК Стоимость ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты ПО СпрНоменклатура.Ссылка = ПродажиОбороты.НоменклатураВот результат:
Контрагент | Договор | Номенклатура | Количество | Сумма |
null | null | _Тест1 | null | null |
ООО "Рога и копыта" | Договор1 | Тапочки | 10 | 1200 |
ОАО "Газпром" | Клевый договор | Сапоги | 5 | 13000 |
null | null | Галоши | null | null |
null | null | Сланцы | null | null |
В данном примере не было продаж номенклатуры: "Галоши" и "Сланцы"
И все бы ничего, если мы сгруппируем выборку по контрагенту то вся не продаваемая номенклатура попадет в отдельную группировку, где Контрагент = Null, но клиент хочет иметь в отчете произвольный отбор по полю контрагент(естественно имеется ввиду контрагент из регистра Продажи). Как быть? Ведь по сути нам нужно фильтровать только таблицу Продажи . Если мы используем автозаполнение в конструкторе СКД, то в доступные поля отбора попадет поле Контрагент , все вроде бы хорошо, но при исполнении отчета с отбором по контрагенту мы потеряем все записи из соединения с номенклатурой. Например, установим отбор: Контрагент = ООО "Рога и копыта" . Результат будет выглядеть так:
Совсем не то что нам нужно, правда?
Для решения задачи можно конечно добавить параметр в запрос, например в параметры виртуальной таблицы ПродажиОбороты , но при этом теряется гибкость настройки вида сравнения.
Решение есть: для этого в конструкторе запросов на вкладке Компоновка данных => Таблицы добавим поле-условие в условия виртуальной таблицы ПродажиОбороты и сменим ему псевдоним на КонтрагентОтбор
Для того чтобы не путать пользователя с полями отбора, отключим поле-условие Контрагент и сменим заголовок для поля КонтрагентОтбор
В результате выполнения данной схемы с включенным отбором по полю контрагент результирующий запрос примет вид:
ВЫБРАТЬ СпрНоменклатура.Ссылка КАК Номенклатура, ПродажиОбороты.Контрагент КАК Контрагент, ПродажиОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента, ПродажиОбороты.КоличествоОборот КАК >Количество, ПродажиОбороты.СтоимостьОборот КАК Стоимость, ПРЕДСТАВЛЕНИЕССЫЛКИ(ПродажиОбороты.ДоговорКонтрагента) КАК ДоговорКонтрагентаПредставление, ПРЕДСТАВЛЕНИЕССЫЛКИ(ПродажиОбороты.Контрагент) КАК КонтрагентПредставление, СпрНоменклатура.Представление КАК НоменклатураПредставление ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&П , , , Контрагент = &П3 ) КАК ПродажиОбороты ПО СпрНоменклатура.Ссылка = ПродажиОбороты.НоменклатураИ соответственно результат:
Контрагент | Договор | Номенклатура | Количество | Сумма |
null | null | _Тест1 | null | null |
ООО "Рога и копыта" | Договор1 | Тапочки | 10 | 1200 |
null | null | Сапоги | null | null |
null | null | Галоши | null | null |
null | null | Сланцы | null | null |
Тест1 - это группа в справочнике Номенклатура, в которой все лежит
К публикации прикреплена схема XML-схема отчета, использовавшегося в публикации. Схему создавал в Комплексной автоматизации, но думаю, все будет прекрасно работать и в УПП и в УТ 10
Данный пример показывает каким образом создать свои настройки отборов в СКД и отключить автосоздаваемые, если вы конструируете схему с включенным флагом Автозаполнение .
Если же вы имеете достаточно опыта, чтобы создавать схемы без использования Автозаполнения - то данный совет не имеет смысла.
Войдите на сайт как ученик
Система компоновки данных 1С 8.3 для начинающих: первый отчёт на СКД
Если вы не читали введение к этому модулю - пожалуйста, прочтите его: .
Для выполнения уроков вам понадобится 1С 8.3 (не ниже 8.3.13.1644 ) .
Если у вас уже есть установленная 1С версии 8.3 - используйте её. Если нет - скачайте и установите учебную версию, которую фирма 1С выпускает специально для образовательных целей: .
На вашем рабочем столе должен появиться вот такой ярлык:
Для всех уроков из этого цикла мы будем использовать подготовленную мной базу данных "Гастроном". Она полностью совпадает с базой, которую мы использовали в и модулях школы при изучении запросов. Поэтому я рассчитываю, что вы знакомы с её справочниками и документами.
Если вы её удалили - скачайте заново по следующей , распакуйте и в список баз.
Наконец, рабочее место настроено и сейчас мы вместе создадим наш первый отчёт при помощи системы компоновки данных. Он будет очень простым, чтобы продемонстрировать общие возможности системы компоновки данных (сокращенно СКД ).
Цель этого урока
- создать отчёт, который в режиме пользователя выводит список клиентов со следующими полями:
Отчёт должен быть внешним. Это значит, что он будет создан и настроен в конфигураторе, а затем сохранен в виде отдельного (внешнего) файла на компьютере.
Чтобы сформировать такой отчет в 1С пользователю нужно будет запустить базу в режиме пользователя, открыть этот файл и нажать кнопку "Сформировать".
Поехали!
Запускаем конфигуратор для базы "Гастроном":
Из главного меню выбираем пункт "Файл"->"Новый...":
Выбираем "Внешний отчет":
Открылось окно создания внешнего отчёта. В качестве имени вводим: "Урок1 ", а затем жмём кнопку "Открыть схему компоновки данных ":
Запустился конструктор создания схемы. Соглашаемся с именем по умолчанию "ОсновнаяСхемаКомпоновкиДанных " и жмём кнопку "Готово ":
Открылось основное рабочее окно, с множеством закладок и полей, в котором мы и будем настраивать нашу схему компоновки данных.
Не нужно пугаться - возможностей здесь действительно много, но далеко не все из них нам нужны. Особенно на первом уроке.
Сейчас мы находимся на закладке "Наборы данных ". На ней и останемся.
Система компоновки данных (сокращенно СКД) требует от нас данные, которые она будет выводить пользователю.
Самый простой способ - написать запрос к базе. В школы мы научились писать и понимать запросы - поэтому я рассчитываю, что вы обладаете соответствующими навыками.
Нажимаем на зелёный плюсик и в раскрывшемся списке выбираем пункт "Добавить набор данных - запрос ":
Наша задача написать в это поле текст запроса. Вы ещё не забыли как это делается?
Я вам подскажу:
В этом запросе мы выбрали три поля ("Наименование ", "Пол " и "ЛюбимыйЦвет ") из таблицы "Справочник.Клиенты ".
Но не торопитесь писать этот текст в поле "Запрос" вручную.
Сейчас мы создадим тот же самый запрос визуально, только при помощи мышки. Этот способ называется "Конструктор запроса ".
Чтобы вызвать этот конструктор нажмём кнопку "Конструктор запроса... " в верхней правой части поля "Запрос":
В открывшемся окне перетащим таблицу "Клиенты " из первого столбца во второй, чтобы указать, что именно из этой таблицы мы будем запрашивать данные:
Получилось вот так:
Далее раскроем таблицу "Клиенты " во втором столбце по знаку "Плюс ", чтобы увидеть все её поля и перетащим поле "Наименование " из второго столбца в третий, чтобы указать, что из этой таблицы нам нужно запрашивать поле "Наименование":
Получилось вот так:
Поступим точно так же с полями "Пол " и "ЛюбимыйЦвет ". Результат будет таким:
Нажмём кнопку "ОК", чтобы выйти из конструктора запроса и увидим, что текст запроса автоматически добавился в поле "Запрос".
Более того на основании текста запроса 1С сама вытащила имена полей (область выше запроса), которые будут использоваться схемой компоновки данных:
Теперь, когда мы составили запрос, СКД знает каким образом получать данные для отчёта.
Осталось как-то визуализировать эти данные для пользователя в виде печатной формы. И вот тут СКД может творить чудеса!
Чтобы сотворить такое чудо перейдём на вкладку "Настройки " и нажмём кнопку конструктора настроек (волшебная палочка ):
В открывшемся окне укажем тип отчёта "Список" и нажмём "Далее ":
В следующем окне выберем (путём перетаскивания) поля, которые нужно будет отобразить в списке (перетащим все из доступных нам: "ЛюбимыйЦвет ", "Наименование " и "Пол "):
Получим вот такой результат и нажмём кнопку "ОК ":
Конструктор настроек закрылся и появился пункт "Детальные записи ":
Отчёт готов, давайте же его проверим. Для этого вначале сохраним отчет в виде внешнего файла.
Откроем пункт главного меню "Файл "->"Сохранить ":
Я сохраню его на рабочий стол под именем "Урок1 ":
Наконец, закроем конфигуратор и зайдём в нашу базу в режиме пользователя:
Имя пользователя "Администратор", пароля нет:
Через меню выберем пункт "Файл "->"Открыть ...":
И укажем файл отчёта (я сохранял его на рабочий стол под именем "Урок1.erf":
Открылась форма отчёта, нажмём кнопку "Сформировать ":
Готово! Вот она наша печатная форма со списком клиентов, их любимым цветом и полом:
Печатную форму можно легко распечатать. Для этого достаточно выбрать в меню пункт "Файл "->"Печать... ":
Вот так просто, без программирования нам удалось создать полноценный отчёт, который пользователи смогут открывать в своих базах, формировать и распечатывать.
учеников - отвечаю по почте, но прежде загляните в .
Войдите на сайт как ученик
Войдите как ученик, чтобы получить доступ к материалам школы
Были времена, сидел без работы, разработал курс по СКД, думал преподавать его в онлайн-режмие через инет. Сейчас времени не стало, преподавать его возможности нет. Увидел ваш проект, думаю, вам может это пригодиться
С уважением, Дмитрий Салихов.
В данном курсе присутствует как теоретическая, так и практическая сторона основ (и не только их) работы с компоновкой. По сути, в небольшом методическом пособии Дмитрия, собрано почти все, с чем сталкиваются программисты при использовании СКД.
Курс состоит из методического пособия в формате pdf на 63 листах. Главы пособия оформлены подобно статьям на данном ресурсе. Т.е. теореитеческая часть, подкрепленная скриншотами.
Также к курсу прилагается выгрузка тестовой базы (формат.dt) и внешние отчеты, примеры которых рассмотрены в методическом пособии.
Как я уже говорил, в курсе рассмотрено все то, что обязан знать программист, использующий СКД. Рассмотрены примеры от простого отчета без программирования, до программной работы с расшифровкой и т.д.