Урок 9. Отчёты и обработки, СКД
Отчёты и обработки — то, ради чего чаще всего зовут программиста 1С: «нужен отчёт по продажам с разбивкой по менеджерам», «нужно поднять цены на 10 %». В этом уроке — оба вида на учебной конфигурации «Склад».
Отчёт и обработка
- Отчёт показывает данные: собирает их и выводит таблицей или диаграммой. Сам он данные не меняет.
- Обработка выполняет действие: загружает файл, меняет цены, создаёт документы, исправляет ошибки в данных.
Оба бывают в конфигурации (ветки «Отчеты» и «Обработки» в дереве) и внешними — отдельными файлами: .erf для отчёта и .epf для обработки. Внешние открываются в базе без изменения конфигурации, поэтому ими удобно дополнять типовые программы.
Система компоновки данных
Система компоновки данных (СКД) — механизм платформы, на котором построено большинство отчётов в типовых конфигурациях. Разработчик описывает, *какие данные* нужны (обычно запросом), а платформа сама:
- делает форму отчёта с кнопкой Сформировать;
- считает итоги, группирует строки, строит диаграммы;
- даёт пользователю настройки: отборы, группировки, порядок, оформление — и сохраняет их как варианты отчёта.
Описание отчёта называется схемой компоновки данных. Код для простого отчёта на СКД не нужен вовсе.
Отчёт «Остатки товаров» на СКД
- В конфигураторе добавьте отчёт: ветка «Отчеты» → Добавить, имя
ОстаткиТоваров. На закладке Подсистемы отметьте «Склад». - На закладке Основные нажмите Открыть схему компоновки данных и согласитесь создать новую схему.
- На закладке Наборы данных схемы добавьте набор данных — запрос и откройте Конструктор запроса…. Выберите таблицу
РегистрНакопления.ОстаткиТоваров.Остаткии поляСклад,Товар,КоличествоОстаток, нажмите «ОК». Текст запроса появится в наборе данных. - На закладке Ресурсы добавьте
КоличествоОстаток— это поле, по которому считаются итоги (сумма). - На закладке Настройки опишите, как выглядит отчёт: добавьте группировку по полю
Склад, внутри неё — детальные записи, а среди выбранных полей отметьтеТовариКоличествоОстаток. То же можно сделать конструктором настроек. - Нажмите
F5. В разделе «Склад» появится отчёт «Остатки товаров»: откройте его и нажмите Сформировать.
Получится таблица: склады, под каждым — его товары с количеством, у склада — итог.
Обратите внимание: в тексте запроса не было ни даты, ни склада. СКД сама добавит параметры виртуальной таблицы и поля для отборов — дату остатков и склад можно будет задать в настройках отчёта.
Что из чего состоит
| Часть схемы | Что задаёт |
|---|---|
| Наборы данных | откуда данные: запрос, объект или объединение нескольких наборов |
| Вычисляемые поля | новые поля из выражений, например Цена * Количество |
| Ресурсы | что суммировать (или считать максимум, среднее) в итогах |
| Параметры | значения, которые пользователь задаёт перед формированием: дата, период |
| Настройки | вид отчёта по умолчанию: группировки, выбранные поля, отборы, сортировка, оформление |
В режиме 1С:Предприятие пользователь меняет те же настройки сам — кнопкой настроек в форме отчёта — и может сохранить их как свой вариант. Поэтому отчёт на СКД обычно делают один, а не десять похожих.
Обработка «Поднять цены»
Обработка — это форма с кнопками и код. Сделайте её так же, как обработку «Практика» из урока Встроенный язык, но в конфигурации: ветка «Обработки» → Добавить, имя ПоднятьЦены, форма, команда ПоднятьЦены с обработчиком на клиенте. Код модуля формы:
&НаСервереБезКонтекста
Процедура ПоднятьЦеныНаСервере(Процент)
Выборка = Справочники.Товары.Выбрать();
Пока Выборка.Следующий() Цикл
ТоварОбъект = Выборка.ПолучитьОбъект();
ТоварОбъект.Цена = Окр(ТоварОбъект.Цена * (100 + Процент) / 100, 2);
ТоварОбъект.Записать();
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПоднятьЦены(Команда)
ПоднятьЦеныНаСервере(10);
Сообщить("Цены подняты на 10 %");
КонецПроцедурыКнопка вызывает серверную процедуру, та перебирает товары и записывает каждый с новой ценой.
Обработка, которая меняет много данных, выполняет изменения сразу и без отмены. Перед запуском в рабочей базе сделайте копию — справка Как сделать резервную копию базы, — а сначала проверьте обработку на копии.
Внешний отчёт или обработка
Чтобы не менять конфигурацию, тот же отчёт или обработку делают внешними: в конфигураторе Файл → Новый… → Внешний отчет или Внешняя обработка, а готовый файл открывают в базе через Файл → Открыть…. В типовых конфигурациях внешние файлы ещё и подключают в специальный список дополнительных отчётов и обработок — тогда они появляются в разделах программы, и пользователям не нужно искать файл.
Внешняя обработка выполняет любой код с правами того, кто её открыл: может изменить или удалить данные. Открывайте только файлы, которым доверяете, — от своего программиста или поставщика конфигурации.
Коротко
- Отчёт показывает данные, обработка меняет их или выполняет действие; оба бывают внешними (
.erf,.epf). - СКД — отчёт без кода: наборы данных (запрос), ресурсы, параметры, настройки.
- Пользователь сам меняет группировки и отборы отчёта на СКД и сохраняет варианты.
- Обработка — форма, команды и код; изменения данных делаются на сервере.
- Перед запуском обработки, которая меняет данные, — копия базы.