584 документа
← К списку

В 1C:EDT

страница

В 1C:EDT

Создайте основную форму для отчета НачисленияСотрудникам.

Затем в правом верхнем окне редактора формы перейдите на закладку Команды – Команды формы и добавьте команду формы Перерассчитать(рис. 19.22).

Рис. 19.22. Добавление команды формы

Теперь нужно установить Действие для этой команды. Для этого нажмите кнопку открытия в строке Действие.

На запрос о типе обработчика команды ответьте, что вы хотите создать обработчик, выполняющийся на клиенте.

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

Листинг 19.8. Текст обработчика команды «Перерассчитать»

&НаКлиенте

Процедура Перерассчитать(Команда)

 

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

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

 

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

Саму процедуру перерасчета поместите в общем модуле ПроведениеРасчетов (листинг 19.9).

Листинг 19.9. Процедура перерасчета начислений

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

 

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

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

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

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

"ВЫБРАТЬ

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

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

|ИЗ

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

|ГДЕ

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

|ИТОГИ ПО

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

 

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

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

 

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

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

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

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

 

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

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

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

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

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

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

 

КонецЦикла;

 

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

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

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

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

 

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

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

 

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

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

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

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

КонецЦикла;

 

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

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

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

После того как расчет записей выполнен, вы записываете набор записей без формирования записей перерасчета и очищаете записи перерасчета по тому объекту перерасчета, который только что обработали.

Теперь снова откройте форму отчета НачисленияСотрудникам.

Итак, вы указали для команды Перерассчитать действие, то есть процедуру для ее выполнения. Но, чтобы можно было воспользоваться этой командой, нужно добавить в форму кнопку и связать ее с этой командой (в строке ИмяКоманды).

Проще всего это сделать перетаскиванием команды из окна Команды формы в окно элементов формы.

Перетащите мышью команду Перерассчитать в группу элементов формы ОсновнаяКоманднаяПанель.

При этом в форме появится кнопка Перерассчитать, а связь кнопки с командой будет установлена автоматически (рис. 19.23).

Рис. 19.23. Добавление кнопки в форму