|
Работа в 1С 28
Процедура Сформировать() // при отметке элемента из списка с пометками Группировка // в переменную ТипГрупп кладется: // 1 – если отмечен Группировать по должностям, // 2 – если отмечен Группировать по подразделениям, // 3 (то есть сумма значений списка Группировка) – если отмечены оба ТипГрупп=0; Для к=1 По Группировка.РазмерСписка() Цикл Если Группировка.Пометка(к)=1 Тогда
КонецЕсли; КонецЦикла; Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = " |ФИО = Справочник.Сотрудники.ТекущийЭлемент; |"; // если группируем по должностям, создаем переменную Долж и группировку по Долж Если (ТипГрупп=1) ИЛИ (ТипГрупп=3) Тогда ТекстЗапроса=ТекстЗапроса+"Долж = Справочник.Сотрудники.Должности; |Группировка Долж Упорядочить по Долж.Наименование; |";
Иначе Признак=1; КонецЕсли; // Если группируем только по должностям или вообще не группируем, // указываем Без Групп (в справочнике Сотрудники группы являются подразделениями) // и в зависимости от переключателя Порядок устанавливаем значение упорядочения Если (ТипГрупп<=1) Тогда
|"; Иначе
КонецЕсли; // задаем функцию подсчета количества человек ТекстЗапроса=ТекстЗапроса+"Функция Кол_во=Счётчик(); |"; // формируем условие и заголовок // Если выбран тип работников Все (ТипСтатуса=1), то условия не накладываем Если ТипСтатуса=1 Тогда Заголовок="Список всех сотрудников, когда–либо работавших на предприятии"; // Если выбран тип – Работающие (ТипСтатуса=2), то накладываем условия // на всех неуволенных работников на указанную дату или период // (в зависимости от ТипПериода) ИначеЕсли ТипСтатуса=2 Тогда Если ТипПериода=1 Тогда
Иначе
КонецЕсли; // Если выбран тип – Уволенные (ТипСтатуса=3), то накладываем условия // на всех работников, уволенных на указанную дату или период // (в зависимости от ТипПериода) ИначеЕсли ТипСтатуса=3 Тогда Если ТипПериода=1 Тогда
Иначе
КонецЕсли; // Если выбран тип – Принятые на работу (ТипСтатуса=4), то накладываем условия // на всех работников, принятых на указанную дату или период // (в зависимости от ТипПериода) ИначеЕсли ТипСтатуса=4 Тогда Если ТипПериода=1 Тогда
Иначе
КонецЕсли; КонецЕсли; // выдаем текст запроса в окно сообщений для проверки // (в реальной программе это не делается) Сообщить(ТекстЗапроса); Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Сообщить("Ошибка в тексте запроса"); Возврат; КонецЕсли; Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); Таб.ВывестиСекцию("Шапка"); Таб.Опции(0,0,Таб.ВысотаТаблицы(),0); // если две группировки Если Признак=0 Тогда Пока Запрос.Группировка("Долж")=1 Цикл
КонецЦикла; Иначе // если меньше двух группировок Нум=0; Пока Запрос.Группировка("ФИО")=1 Цикл
КонецЦикла; КонецЕсли; Таб.ВывестиСекцию("Подвал"); Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать",""); КонецПроцедуры Заполним ячейки отчета следующими данными (рисунок 7.4.9): Рисунок 7.4.9 Сохраните конфигурацию и запустите 1С в режиме Предприятие. Сформируем отчет по всем работникам, отсортированным по ФИО, без группировок (рисунок 7.4.10): Рисунок 7.4.10 В окне сообщений виден соответствующий запрос: ФИО = Справочник.Сотрудники.ТекущийЭлемент; Группировка ФИО Упорядочить по ФИО.Наименование Без Групп; Функция Кол_во=Счётчик(); Сформируем отчет по всем работникам, отсортированным по дате, сгруппированный по должностям и подразделениям (рисунок 7.4.11): Рисунок 7.4.11 В окне сообщений виден соответствующий запрос: ФИО = Справочник.Сотрудники.ТекущийЭлемент; Долж = Справочник.Сотрудники.Должности; Группировка Долж Упорядочить по Долж.Наименование; Группировка ФИО Упорядочить по ФИО.ДатаПриема; Функция Кол_во=Счётчик(); Сформируем отчет по принятым на работу сотрудникам, отсортированным по дате, сгруппированный по подразделениям, за определенный период (рисунок 7.4.12): Рисунок 7.4.12 В окне сообщений виден соответствующий запрос: ФИО = Справочник.Сотрудники.ТекущийЭлемент; Группировка ФИО Упорядочить по ФИО.ДатаПриема; Функция Кол_во=Счётчик(); Условие ((ФИО.ДатаПриема>='01.12.06') И (ФИО.ДатаПриема<='29.12.06')); Обратите внимание: для того чтобы указать диапазон дат, был использован оператор запроса Условие, а не Период С … По …, так как последний оператор применим только к документам, журналам и регистрам. Кроме того, справочник Сотрудники уже имеет группы, которые являются подразделениями предприятия. Следовательно, группировку по ФИО можно использовать только как группировку самого нижнего уровня. Создадим еще один отчет по доходам сотрудников за определенный год. Для получения результатов необходимо сформировать хотя бы две ведомости на зарплату. Создадим новый отчет ОДоходах и на его форме (рисунок 7.4.13) разместим следующие элементы диалога: Рисунок 7.4.13 Зададим им следующие параметры:
Затем создадим текст программного модуля: Процедура Сформировать()
КонецПроцедуры Процедура ВыборТипа()
КонецПроцедуры |
Loading
|