Для элементов формы установите
следующие свойства:
ДатаНач: Идентификатор –
ДатаНач, Тип – Дата, опция Имеет
кнопку выбора установлена;
ДатаКон: Идентификатор –
ДатаКон, Тип – Дата, опция Имеет
кнопку выбора установлена;
Долж: Идентификатор
– Долж, опция Сделать недоступным
установлена, Тип – Справочник.Должности;
Подр: Идентификатор – Подр,
опция Сделать недоступным установлена,
Тип – Справочник.Сотрудники; Форма
– ФормаСпискаГрупп;
первая кнопка Х (для очистки элемента
Долж): Формула – Долж="",
Подсказка – Очистить должность;
вторая кнопка Х (для очистки элемента
Подр): Формула – Подр="",
Подсказка – Очистить подразделение;
переключатель по должностям:
Идентификатор – Групп, опция Первый
в группе установлена.
С помощью Конструктора макета
отчета или вручную создайте макет
следующего вида (рисунок 9.3.3):
Рисунок 9.3.3
Переменные Загл1 и Загл2
будут содержать значение должности и
подразделения или наоборот в зависимости
от переключателя Группировать.
Данную возможность необходимо реализовать
программно.
Создадим текст программного модуля:
Процедура Печать()
// формируем текст запроса
Запрос=СоздатьОбъект("Запрос");
ТекстЗапроса="
|Период с ДатаНач по ДатаКон;
|Должн=Регистр.ПриемСотрудников.Должность;
|Подраз=Регистр.ПриемСотрудников.Подразделение;
|Док=Регистр.ПриемСотрудников.ТекущийДокумент;
|Кол=Регистр.ПриемСотрудников.Количество;
|СуммОкл=Регистр.ПриемСотрудников.СуммаОклада;
|";
// в зависимости от выбора
устанавливаем группировки
ЕслиГрупп=1Тогда
ТекстЗапроса=ТекстЗапроса
+
"Группировка Должн Упорядочить
по Должн.Наименование;
|Группировка Подраз Упорядочить по
Подраз.Наименование;
|";
Иначе
ТекстЗапроса=ТекстЗапроса+
"Группировка Подраз Упорядочить
по Подраз.Наименование;
|Группировка Должн Упорядочить по
Должн.Наименование;
// в строке итогов запроса,
на которой стоит указатель после
выполнения
// запроса, проверяем количество найденных
значений
ЕслиЗапрос.Кол_во=0 Тогда
Предупреждение("За данный
период не принимались сотрудники");
Иначе
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Печать");
Таб.ВывестиСекцию("Шапка");
Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
ПокаЗапрос.Группировка(1)=1
Цикл
// определяем заголовки
секций, то есть
// в зависимости от
группировок
// выделяется должность или подразделение
ЕслиГрупп=1Тогда
Загл1=Запрос.Должн;
Иначе
Загл1=Запрос.Подраз;
КонецЕсли;
Таб.ВывестиСекцию("Строка_1");
ПокаЗапрос.Группировка(2)=1
Цикл
ЕслиГрупп=1Тогда
Загл2=Запрос.Подраз;
Иначе
Загл2=Запрос.Должн;
КонецЕсли;
Таб.ВывестиСекцию("Строка_2");
КонецЦикла;
КонецЦикла;
Таб.ВывестиСекцию("Подвал");
Таб.ТолькоПросмотр(1);
Таб.Показать("Печать","");
КонецЕсли;
КонецПроцедуры
// в качестве начальных значений
устанавливаем дату точки актуальности
итогов,
// так как по ней заполнялся регистр,
дату позже точки актуальности
// использовать нельзя
ДатаНач=ПолучитьДатуТА();
ДатаКон=ПолучитьДатуТА();
Групп=1;
Сохраните конфигурацию и
запустите 1С в режиме Предприятие.
Попробуйте получить отчеты различных
видов по различным периодам и группировкам.
Можно создать аналогичный отчет и по
оборотному регистру УвольнениеСотрудников.
Задания:
В конфигурациях, созданных на прошлых
занятиях, создайте указанные регистры
и отчеты по регистру остатков и первому
оборотному регистру через запросы (в
отчетах даты, периоды, измерения и
группировки вводятся с клавиатуры):
Вариант 1
создайте регистр остатков
НаличиеКартин (измерения – ФИО художника,
художественный стиль, ресурсы –
количество, стоимость) и отчет по нему;
создайте оборотный регистр ПриемКартин
(измерения – ФИО художника, художественный
стиль, ресурсы – количество, стоимость)
и отчет по нему;