Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Выполнение перерасчета записей регистра расчета



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

Теперь необходимо создать специальную процедуру, которая будет определять, требуется ли перерасчет данных регистра расчета и, если такая необходимость есть, выполнять перерасчет.

Поскольку единственным способом получения итоговой информации о начислениях сотрудникам в учебной конфигурации является отчет НачисленияСотрудникам, для вызова этой процедуры необходимо создать основную форму этого отчета и добавить кнопку Перерасчитать в командную панель ДействияФормы (рис. 267).

Рис. 267. Командная панель формы отчета НачисленияСотрудникам

В обработчик события нажатия кнопки Перерасчитать вставьте текст вызова процедуры перерасчета, очистки табличного поля и вывода нового результата:

Процедура ДействияФормыПерерасчитать(Кнопка)

ПерерасчитатьНачисления(ПланыВидовРасчета.ОсновныеНачисления.Оклад);

ПерерасчитатьНачисления(ПланыВидовРасчета.ОсновныеНачисления.Премия);

ЭлементыФормы.Результат.Очистить();

ОтчетОбъект.СкомпоноватьРезультат(ЭлементыФормы.Результат, ДанныеРасшифровки);

КонецПроцедуры

Саму процедуру перерасчета поместите в общем модуле ПроведениеРасчетов:

Процедура ПерерасчитатьНачисления(ТребуемыйВидРасчета) Экспорт

// Здесь следует выбрать из набора записей перерасчета

// записи в следующей последовательности:

// записи документа1 для сотрудников из списка,

// записи документа2 для сотрудников из списка,

// и т. д.

Запрос = Новый Запрос(

" ВЫБРАТЬ

| НачисленияПерерасчет.ОбъектПерерасчета,

| НачисленияПерерасчет.Сотрудник

|ИЗ

| РегистрРасчета.Начисления.Перерасчет КАК НачисленияПерерасчет

|

|ГДЕ

| НачисленияПерерасчет.ВидРасчета = & ТребуемыйВидРасчета

|

|ИТОГИ ПО

| НачисленияПерерасчет.ОбъектПерерасчета" );

 

Запрос.УстановитьПараметр(" ТребуемыйВидРасчета", ТребуемыйВидРасчета);

СписокСотрудников = Новый СписокЗначений;

 

// Перебрать группировку по регистратору.

ВыборкаПоРегистратору = Запрос.Выполнить().Выбрать

(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаПоРегистратору.Следующий() Цикл

Регистратор = ВыборкаПоРегистратору.ОбъектПерерасчета;

// Перебрать группировку по сотрудникам

// для выбранного регистратора

// и создать список сотрудников.

ВыборкаПоСотрудникам = ВыборкаПоРегистратору.Выбрать();

СписокСотрудников.Очистить();

Пока ВыборкаПоСотрудникам.Следующий() Цикл

СписокСотрудников.Добавить(ВыборкаПоСотрудникам.Сотрудник);

КонецЦикла;

// Получить набор записей регистра расчета

// для выбранного регистратора.

НаборЗаписей = РегистрыРасчета.Начисления.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Регистратор.Значение = Регистратор;

НаборЗаписей.Прочитать();

РасчитатьНачисления(НаборЗаписей, ТребуемыйВидРасчета, СписокСотрудников);

НаборЗаписей.Записать(, Истина);

// Очистить перерасчитанные записи в перерасчете.

НаборЗаписейПерерасчета =

РегистрыРасчета.Начисления.Перерасчеты.Перерасчет.СоздатьНаборЗаписей();

НаборЗаписейПерерасчета.Отбор.ОбъектПерерасчета.Значение = Регистратор;

НаборЗаписейПерерасчета.Записать();

КонецЦикла;

 

КонецПроцедуры

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

Запустите 1С: Предприятие и проверьте, как выполняется перерасчет записей регистра расчета.

Отмените проведение всех документов Начисления сотрудникам и проведите документ Начисления сотрудникам №1 и затем №2. Сформируйте отчет Начисления сотрудникам (рис. 268).

Теперь откройте документ Начисления сотрудникам №1, измените оклад Гусакова на 10000 и проведите документ. В отчете НачисленияСотрудникам нажмите кнопку " Перерасчитать ". Будет выполнен перерасчет начисления премии Гусакову и Деловому (рис. 269).

Результат работы отчета будет содержать новые значения премии Гусакова (рис. 270).

Рис. 268. Отчет Начисления сотрудникам

Рис. 269. Окно служебных сообщений

Рис. 270. Отчет Начисления сотрудникам

И, наконец, проведите документ Начисления сотрудникам №3 и нажмите кнопку " Перерасчитать" в отчете НачисленияСотрудникам. Снова будет произведен перерасчет оклада и премии Гусакова (рис. 271).

Рис. 271. Окно служебных сообщений

А данные отчета будут содержать актуальные значения начисления оклада и премии (рис. 272).

Рис. 272. Отчет Начисления сотрудникам


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-05-03; Просмотров: 1833; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.011 с.)
Главная | Случайная страница | Обратная связь