Смекни!
smekni.com

Описание функционирования организации (стр. 12 из 12)

В модуле документа начисления уже присутствует процедура обработки проведения документа, сформированная конструктором движений (см. Рис. 16). Необходимо в текст обработчика добавить вызов процедуры из общего модуля.

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

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

Перейти в режим приложения и проверить работу процедур расчетов.

3.9.3 Сторнирование записей. Расчет больничного.

Теперь можно рассмотреть правила расчета денег по больничному листу. Некоторые виды расчетов формируются «с опозданием» после проведения основных расчетов. Например, расчет больничного листа может осуществляться спустя один или несколько периодов после проведения расчета по окладу (Рис. 1). А на период расчета по окладу соответствующих ведений просто не было. Тут механизм вытеснения не работает, так как период регистрации больше, чем период действия. Например, за октябрь сотруднику был начислен оклад, а больничный поступил в расчет в ноябре. Период фактического действия больничного «покрыт» окладом, что неправильно, так как получается, что сотрудник получит и оклад, а потом еще и больничный. В таком случае необходимо сформировать сторно-запись (корректирующую запись), которая за фактический период больничного скорректирует оклад (выведет со знаком «-»). Сторно-запись также формируется в регистре расчета, указывается период регистрации, период действия сторно-записи, размер перерасчета.


Рис. 17 Использование сторно-записи

Технология формирования сторно-записей следующая:

  1. В модуле документа Начисления сформировать процедуру, которая проверяет, не конфликтует ли фактический период записей регистра расчета по данному документу с фактическими периодами более ранних записей.
  2. Для конкурирующих записей создать сторно-записей и также разместить их в регистр расчета.
  3. Скорректировать процедуру в общем модуле по расчету оклада для расчета сторнированных записей.

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

Набор=РегистрыРасчета.ЗП_Расчет .СоздатьНаборЗаписей(); Создать набор записей регистра расчета
Набор.Отбор.Регистратор.Значение=Ссылка; Установить отбор записей, относящихся к текущему документу.
Набор.Прочитать(); Считать записи по установленному отбору
ТаблСторно=Набор.ПолучитьДополнение(); Метод ПолучитьДополнение() позволит проанализировать конфликты по фактическому периоду формируемого набора записей с записями по более раннему периоду регистрации. Возвращает таблицу значений, включающую все сведения для формирования сторно-записей
Для каждого СтрокаСторно из ТаблСторно Цикл Движение=Движения.ЗП_Расчет. Добавить(); Движение.Регистратор=Ссылка; Движение.ВидРасчета=Строка Сторно.ВидРасчета; Движение.ПериодРегистрации= СтрокаСторно.ПериодРегистрацииСторно; Движение.ПериодДействияНачало= СтрокаСторно.ПериодДействияНачалоСторно; Движение.ПериодДействияКонец= СтрокаСторно.ПериодДействияКонецСторно; Движение.ГрафикРаботы= СтрокаСторно.ГрафикРаботы;Движение.Сотрудник=СтрокаСторно .Сотрудник; Движение.ИсходныеДанные= СтрокаСторно.ИсходныеДанные; Движение.Сторно=Истина; КонецЦикла; Цикл для формирования сторно-записей в регистре расчета. Из таблицы значений ТаблСторно переносятся все параметры сторно в регистр.
Движения.ЗП_Расчет.Записать();

Расчеты по сторно (корректировка) рассчитываются также, как и обычные записи. В общем модуле необходимо сделать следующую корректировку в блоке расчета оклада:

Если ВыборкаРезультата.НайтиСледующий(СтруктураНомер) тогда

Если ВыборкаРезультата.ПоНорме=0 тогда

Сообщить("Нет рабочих дней");

ЗаписьРегистра.Результат=0

Иначе

М=(ЗаписьРегистра.ИсходныеДанные/ВыборкаРезультата.ПоНорме)*ВыборкаРезультата.ПоФакту;

ЗаписьРегистра.Результат=М*?(ЗаписьРегистра.Сторно,-1,1);

КонецЕсли

Тем самым, при формировании результата учитывается наличие признака Сторно=1 (истина). Если такой признак есть, то результат записывается со знаком «-».

Самостоятельно. В общем модуле сформировать блок расчета оплаты по больничному листу. Больничный оплачивается как 80% от оклада.

Формирование отчета по начислениям сотрудникам

Для просмотра результата расчетов есть смысл сформировать отчет (листки) по начислениям сотрудникам.

Создать новый отчет. Имя – Начисления сотрудникам. Вызвать конструктор макета отчета.

Исходный регистр – регистр ЗП_расчет. Выбрать следующие поля: Сотрудник, Вид расчета, ПериодДействияНачало, ПериодДействияКонец, Регистратор, Результат.

На вкладке Итоги установить: группировочное поле – Сотрудник, итоговое поле - Результат, выражение – Сумма.

Завершить создание приложения, перейти в режим приложения, посмотреть формирование отчета. Вид отчета представлен на Рис. 18.

Рис. 18 Примерный вид отчета «Начисления сотрудникам»


[1] Если значению ресурса соответствует сумма с НДС, то удалить выражение, и двойным щелчком по соответствующему реквизиту документа (окошко Реквизиты документа) выводим требуемое значение

[2] Обратить внимание на зеленый (+) около каждой записи, характеризующий вид движения.

[3] Любопытно то, что 1С:Предприятие предлагает не только классический, англоязычный, но и русскоязычный вариант SQL