|
Почему в лекции 1 "Основы организации бухгалтерской подсистемы" курса "Разработка прикладных решений для платформы 1С:Предприятие 8.2 в режиме "Управляемое приложение"" совершенно нет информации о том что нужно на вкладке данные в табличной части создать табличную часть "ВидыСубконто" и также нет информации о том какие нужно добавить реквизиты и какие у этих реквизитов должен быть тип? Считаю лекцию 1 в данном вопросе недоработанной. |
Разработка расчетной подсистемы
Создадим общий модуль, назовем его РасчетЗарплаты, включим в его свойствах параметр Привилегированный – это позволит, в том случае, если расчет зарплаты выполняется пользователем, права которого ограничены, при обращении к данным, доступа к которым пользователь не имеет, обойти ограничения пользователя.
Создадим в общем модуле процедуру следующего вида:
Процедура РассчитатьЗарплату(Регистратор) Экспорт КонецПроцедуры
Мы будем вызывать эту процедуру из процедуры обработки проведения документа. Мы будем передавать в процедуру параметр Регистратор – ссылку на документ, который сформировал движения в регистре. Отобрав записи регистра по переданному регистратору, в дальнейшем мы реализуем расчет записей.
Теперь займемся документом, который будет использоваться для начисления заработной платы.
Создадим новый документ, назовем его НачислениеЗарплаты, укажем, что он входит в подсистему РасчетЗаработнойПлаты, укажем, что он проводится по регистрам расчета ОсновныеНачисления и ДополнительныеНачисления. Запретим оперативное проведение документа.
На закладке Данные добавим табличную часть ОсновныеНачисления. Добавим в нее следующие реквизиты:
Сотрудник: Тип: СправочникСсылка.Сотрудники
ВидРасчета: Тип: ПланВидовРасчетаСсылка.ОсновныеНачисления
ИсходныеДанные: Тип: Число, длина 10, точность 2
График: Тип: СправочникСсылка.ГрафикиРаботы
ДатаНачалаПериодаДействия: Тип: Дата, состав даты – Дата
ДатаОкончанияПериодаДействия: Тип: Дата, состав даты – Дата
ДатаНачалаБазовогоПериода: Тип: Дата, состав даты – Дата
ДатаОкончанияБазовогоПериода: Тип: Дата, состав даты – Дата
Добавим табличную часть ДополнительныеНачисления, создадим в ней следующие реквизиты:
Сотрудник: Тип: СправочникСсылка.Сотрудники
ВидРасчета: Тип: ПланВидовРасчетаСсылка.ДополнительныеНачисления
ИсходныеДанные: Тип: Число, длина 10, точность 2
ДатаНачалаБазовогоПериода: Тип: Дата, состав даты – Дата
ДатаОкончанияБазовогоПериода: Тип: Дата, состав даты – Дата
Создадим форму документа, согласившись с параметрами, предложенными по умолчанию ( рис. 4.17).
Сформируем, используя конструктор движений документа, процедуру проведения. Мы модифицировали процедуру проведения документа, в частности, добавили команды для формирования, при необходимости, сторно-записей, после формирования движений дали команду их записи, и, далее, вызвали процедуру из общего модуля для расчета заработной платы с указанием ссылки на документ в качестве параметра.
Процедура обработки проведения нашего документа содержит такой код:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
// регистр ОсновныеНачисления
Движения.ОсновныеНачисления.Записывать = Истина;
Для Каждого ТекСтрокаОсновныеНачисления Из ОсновныеНачисления Цикл
Движение = Движения.ОсновныеНачисления.Добавить();
Движение.Сторно = Ложь;
Движение.ВидРасчета = ТекСтрокаОсновныеНачисления.ВидРасчета;
Движение.ПериодДействияНачало
= ТекСтрокаОсновныеНачисления.ДатаНачалаПериодаДействия;
Движение.ПериодДействияКонец
= ТекСтрокаОсновныеНачисления.ДатаОкончанияПериодаДействия;
Движение.ПериодРегистрации = Дата;
Движение.БазовыйПериодНачало
= ТекСтрокаОсновныеНачисления.ДатаНачалаБазовогоПериода;
Движение.БазовыйПериодКонец
= ТекСтрокаОсновныеНачисления.ДатаОкончанияБазовогоПериода;
Движение.Сотрудник = ТекСтрокаОсновныеНачисления.Сотрудник;
Движение.ИсходныеДанные = ТекСтрокаОсновныеНачисления.ИсходныеДанные;
Движение.График = ТекСтрокаОсновныеНачисления.График;
КонецЦикла;
// регистр ДополнительныеНачисления
Движения.ДополнительныеНачисления.Записывать = Истина;
Для Каждого ТекСтрокаДополнительныеНачисления Из ДополнительныеНачисления Цикл
Движение = Движения.ДополнительныеНачисления.Добавить();
Движение.Сторно = Ложь;
Движение.ВидРасчета = ТекСтрокаДополнительныеНачисления.ВидРасчета;
Движение.ПериодРегистрации = Дата;
Движение.БазовыйПериодНачало
= ТекСтрокаДополнительныеНачисления.ДатаНачалаБазовогоПериода;
Движение.БазовыйПериодКонец
= ТекСтрокаДополнительныеНачисления.ДатаОкончанияБазовогоПериода;
Движение.Сотрудник = ТекСтрокаДополнительныеНачисления.Сотрудник;
Движение.ИсходныеДанные = ТекСтрокаДополнительныеНачисления.ИсходныеДанные;
КонецЦикла;
// Сторно-записи
Дополнения=Движения.ОсновныеНачисления.ПолучитьДополнение();
Для Каждого Дополнение из Дополнения Цикл
Движение=Движения.ОсновныеНачисления.Добавить();
Движение.Сторно=Истина;
Движение.Сотрудник=Дополнение.Сотрудник;
Движение.ВидРасчета=Дополнение.ВидРасчета;
Движение.БазовыйПериодНачало=Дополнение.БазовыйПериодНачало;
Движение.БазовыйПериодКонец=Дополнение.БазовыйПериодКонец;
Движение.График=Дополнение.График;
Движение.ИсходныеДанные=Дополнение.ИсходныеДанные;
Движение.ПериодРегистрации=Дополнение.ПериодРегистрацииСторно;
Движение.ПериодДействияНачало=Дополнение.ПериодДействияНачалоСторно;
Движение.ПериодДействияКонец=Дополнение.ПериодДействияКонецСторно;
КонецЦикла;
Движения.Записать();
РасчетЗарплаты.РассчитатьЗарплату(Ссылка);
КонецПроцедуры
Формирование движений по регистрам расчета в циклах перебора табличных частей документа выполняются вполне стандартно.
Обратите внимание на команду:
Дополнения=Движения.ОсновныеНачисления.ПолучитьДополнение();
Метод набора записей регистра расчета ПолучитьДополнение() позволяет получить дополнительные данные, с помощью которых можно выполнить сторнирование записей предыдущих периодов при вводе в текущем периоде записей, влияющих на записи предыдущих периодов.
Например, в октябре 2011 года сотруднику был задан вид расчета Оклад, а в ноябре 2011 выяснилось, что часть оклада начислена неправомерно – лишь в ноябре стало известно, что несколько дней в предыдущем месяце сотрудник прогулял. В ноябре ему вводится вид расчета Прогул, в котором указаны пропущенные дни – Прогул является вытесняющим видом расчета для Оклада. За эти дни ему не должен начисляться оклад, но записи предыдущего месяца менять нельзя, например, с них уже начислены налоги. При вводе данных о прогуле система, на основе механизма вытеснения, может "предложить" сформировать сторно-запись, которая отразит в текущем периоде данные (вычет, в конечном счете), которые приведут, в итоге, к правильным взаиморасчетам организации и сотрудника. Например, если в предыдущем периоде ему было переплачено 1500 рублей, то, в соответствии с идеологией сторнирования, в текущем периоде у него вычтут те же 1500 рублей, не затрагивая, при этом, записи, сформированные в предыдущем периоде.
После того, как записи, и, при необходимости, сторно-записи сформированы, записываем их и вызываем процедуру РассчитатьЗарплату() из общего модуля РасчетЗарплаты.
Расчетом записей мы займемся в следующей лекции.
Выводы
В этой лекции мы рассмотрели создание основных объектов, на которых базируется подсистема расчета заработной платы. Это – планы видов расчеты, которые содержат списки начислений и удержаний и описание их взаимосвязей. Это – регистры расчета, которые позволяют реализовывать сложные расчеты, в том числе – с учетом взаимосвязи и взаимовлияния различных видов расчетов друг на друга.
Наша следующая лекция продолжает тему решения расчетных задач.
