Опубликован: 06.12.2011 | Доступ: свободный | Студентов: 3553 / 744 | Оценка: 4.50 / 4.39 | Длительность: 03:42:00
Лекция 5:

Разработка расчетной подсистемы: расчет показателей, перерасчеты

< Лекция 4 || Лекция 5: 12345 || Лекция 6 >

Отчет по основным начислениям

Создадим отчет, который позволяет представить в графическом виде начисления, отраженные в регистре расчета ОсновныеНачисления. В частности, нам хотелось бы визуализировать механизмы вытеснения.

Создадим новый отчет, назовем его ОсновныеНачисления, включим в подсистему РасчетЗаработнойПлаты. Не будем пользоваться схемой компоновки данных, построим отчет программно.

Создадим форму отчета, добавим в набор реквизитов формы новый реквизит, назовем его ДиаграммаНачислений, установим тип – ДиаграммаГанта, перетащим на закладку Элементы. Диаграмма Ганта – это популярный инструмент для визуализации различных планов работ и прочих подобных процессов, протекающих во времени. Ее еще называют ленточной диаграммой.

Добавим новую команду формы, назовем ее СформироватьОтчет, создадим ее обработчик и так же перетащим на закладку Элементы, рис. 5.6.

Отчет ОсновныеНачисления

увеличить изображение
Рис. 5.6. Отчет ОсновныеНачисления

Теперь перейдем в модуль формы и создадим там следующий код:

&НаКлиенте
Процедура СформироватьОтчет(Команда)
   СформироватьНаСервере(ДиаграммаНачислений)
КонецПроцедуры
&НаСервереБезКонтекста
Процедура СформироватьНаСервере(Диаграмма)
    Запрос = Новый Запрос;
  Запрос.Текст = 
    "ВЫБРАТЬ
    |  ОснФакт.Сотрудник,
    |  ОснФакт.ВидРасчета,
    |  ОснФакт.Регистратор,
    |  ОснФакт.ПериодДействияНачало,
    |  ОснФакт.ПериодДействияКонец
    |ИЗ
    |  РегистрРасчета.ОсновныеНачисления.ФактическийПериодДействия 
         |  КАК ОснФакт";
     Результат = Запрос.Выполнить();
   ВыборкаДЗ = Результат.Выбрать();
  Диаграмма.Обновление = Ложь;
  Диаграмма.Очистить();
    Пока ВыборкаДЗ.Следующий() Цикл
    Точка = Диаграмма.УстановитьТочку(ВыборкаДЗ.Сотрудник);
    Серия = Диаграмма.УстановитьСерию(ВыборкаДЗ.ВидРасчета);
    Значение = Диаграмма.ПолучитьЗначение(Точка, Серия);
    Интервал = Значение.Добавить();
    Интервал.Начало = ВыборкаДЗ.ПериодДействияНачало;
    Интервал.Конец =  ВыборкаДЗ.ПериодДействияКонец;
    Интервал.Расшифровка=ВыборкаДЗ.Регистратор;
  КонецЦикла;
  Диаграмма.Обновление = Истина;
КонецПроцедуры

Здесь мы вызываем из клиентской процедуры обработчика команды СформироватьОтчет серверную внеконтектсную процедуру СформироватьНаСервере, передавая ей диаграмму, которую нужно заполнить.

В серверной процедуре мы, с помощью запроса, получаем сведения о сотруднике, виде расчета, о начале и конце периода действия вида расчета и о регистраторе, сделавшем соответствующую запись в регистре. Данные мы получаем из виртуальной таблицы ФактическийПериодДействия регистра расчета ОсновныеНачисления.

Далее, мы запрещаем обновление диаграммы для того, чтобы в процессе ее формирования не нагружать систему ненужными вычислениями, и, в цикле перебора полученной из результатов запроса выборки формируем диаграмму.

С помощью методов УстановитьТочку и УстановитьСерию, мы, соответственно, получаем точки и серии диаграммы. Они могут иметь произвольный тип.

Далее, с помощью метода ПолучитьЗначение мы, на основе только что полученных точки и серии, формируем переменную Значение типа ЗначениеДиаграммыГанта, и, пользуясь его методом Добавить, добавляем новый интервал.

Интервал имеет свойства Начало и Конец, мы устанавливаем их в значения начала и конца периода действия из выборки, в параметр Расшифровка записываем ссылку на документ-регистратор – двойной щелчок по элементу диаграммы позволит открыть соответствующий этому элементу документ.

После выхода из цикла перебора выборки из результатов запроса мы разрешаем обновление диаграммы и пользователь видит ее.

Перейдем в режим 1С:Предприятие, добавим начисления для различных сотрудников и сформируем отчет ОсновныеНачисления, рис. 5.7.

Отчет ОсновныеНачисления

увеличить изображение
Рис. 5.7. Отчет ОсновныеНачисления

Поясним данные, визуализированные в отчете. Он отражает сведения по начислениям, хранящимся в регистре расчета ОсновныеНачисления за все периоды. В нашем случае это – три месяца – сентябрь, октябрь и ноябрь.

Точки в отчете – это сотрудники (слева), серии – это виды расчета (справа), интервалы – это то, что изображено на диаграмме.

Сотрудник Иванов И.И. получал Оклад лишь в сентябре, других начислений в регистре ОсновныеНачисления за ним не зафиксировано.

Васильев П.П. получал Оклад в Ноябре, причем, несколько дней в ноябре он прогулял – об этом говорит наличие среди его видов начислений вида Прогул. Обратите внимание на то, как ввод вида расчета Прогул "разрывает" Оклад. Это – демонстрация вытеснения Оклада Прогулом.

Петров П.П. получал в сентябре Оклад, в октябре – Оклад по дням, а в ноябре весь месяц провел в отпуске.

Александров А.А. демонстрирует нам наиболее сложную картину начислений. Оклад ему начислялся все три месяца. Кроме того, некоторый период он получал так же и Оклад по дням. Эти два вида расчета друг друга не вытесняют, поэтому Оклад и Оклад по дням отображаются на диаграмме параллельно, не прерывая друг друга. Несколько дней в ноябре пришлись на вид начисления Отпуск. Отпуск, как видно по диаграмме, вытесняет Оклад. Оклад уменьшен за счет Прогула, который отражен в том же периоде, что и оклад. Обратите внимание на то, что октябрьский Оклад соседствует с октябрьским же Прогулом, но Прогул не прерывает в данном случае оклад – период Оклада, совпадающий с периодом Прогула, окрашен в другой цвет. Все дело в том, что информация об октябрьском Прогуле была внесена в систему в ноябре, а так как мы реализовали механизм сторно-записей, часть октябрьского оклада была сторнирована – именно сторно-запись и отражается на линии октябрьского Оклада напротив Прогула.

Как видите, построенная диаграмма позволяет наглядно и удобно отобразить сложные взаимоотношения различных видов расчетов в регистре расчета. Диаграмма Ганта, которую мы использовали здесь, поддается разносторонней настройке, при необходимости ее можно дорабатывать.

Выводы

В этой лекции мы рассмотрели разработку механизмов расчета показателей в регистре расчета, методику создания справочных разделов, освоили основы работы с перерасчетами, а так же построили отчет, визуализирующий взаимоотношения начислений из плана видов расчета ОсновныеНачисления.

< Лекция 4 || Лекция 5: 12345 || Лекция 6 >
Константин Павлов
Константин Павлов

Почему в лекции 1 "Основы организации бухгалтерской подсистемы" курса "Разработка прикладных решений для платформы 1С:Предприятие 8.2 в режиме "Управляемое приложение"" совершенно нет информации о том что нужно на вкладке данные в табличной части создать табличную часть "ВидыСубконто" и также нет информации о том какие нужно добавить реквизиты и какие у этих реквизитов должен быть тип? Считаю лекцию 1 в данном вопросе недоработанной.

Надежда Федулкина
Надежда Федулкина