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