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