В режиме "Конфигуратор"
страницаВ режиме «Конфигуратор»
Для этого в окне редактирования объекта конфигурации Отчет НачисленияСотрудникам перейдем на закладку Формы, нажмем кнопку открытия
и создадим основную форму отчета.
Затем в правом верхнем окне редактора форм перейдем на закладку Команды и на закладке Команды формы создадим команду формы Перерассчитать (рис. 18.25).

Рис. 18.25. Добавление команды формы
Теперь нужно установить Действие для этой команды.
Для этого нажмем кнопку открытия
в строке Действие.
На запрос конфигуратора о типе обработчика команды ответим, что мы хотим создать обработчик, выполняющийся на клиенте.
В модуле формы будет создан шаблон клиентской процедуры Перерассчитать(), в которую мы поместим вызов процедуры ПерерассчитатьНачисления() из общего модуля ПроведениеРасчетов (листинг 18.8).
Листинг 18.8. Текст обработчика команды «Перерассчитать»
&НаКлиенте
Процедура Перерассчитать(Команда)
ПроведениеРасчетов.ПерерассчитатьНачисления(ПредопределенноеЗначение("ПланВидовРасчета.ОсновныеНачисления.Оклад"));
ПроведениеРасчетов.ПерерассчитатьНачисления(ПредопределенноеЗначение("ПланВидовРасчета.ОсновныеНачисления.Премия"));
КонецПроцедуры
Саму процедуру перерасчета поместим в общем модуле ПроведениеРасчетов (листинг 18.9).
Листинг 18.9. Процедура перерасчета начислений
Процедура ПерерассчитатьНачисления(ТребуемыйВидРасчета) Экспорт
// Здесь следует выбрать из набора записей перерасчета записи в следующей последовательности:
// записи документа1 для сотрудников из списка,
// записи документа2 для сотрудников из списка и т. д.
Запрос = Новый Запрос(
"ВЫБРАТЬ
| НачисленияПерерасчет.ОбъектПерерасчета,
| НачисленияПерерасчет.Сотрудник
|ИЗ
| РегистрРасчета.Начисления.Перерасчет КАК НачисленияПерерасчет
|ГДЕ
| НачисленияПерерасчет.ВидРасчета = &ТребуемыйВидРасчета
|ИТОГИ ПО
| НачисленияПерерасчет.ОбъектПерерасчета");
Запрос.УстановитьПараметр("ТребуемыйВидРасчета", ТребуемыйВидРасчета);
СписокСотрудников = Новый СписокЗначений;
// Перебрать группировку по регистратору.
ВыборкаПоРегистратору = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоРегистратору.Следующий() Цикл
Регистратор = ВыборкаПоРегистратору.ОбъектПерерасчета;
// Перебрать группировку по сотрудникам для выбранного регистратора
// и создать список сотрудников.
ВыборкаПоСотрудникам = ВыборкаПоРегистратору.Выбрать();
СписокСотрудников.Очистить();
Пока ВыборкаПоСотрудникам.Следующий() Цикл
СписокСотрудников.Добавить(ВыборкаПоСотрудникам.Сотрудник);
КонецЦикла;
// Получить набор записей регистра расчета для выбранного регистратора.
НаборЗаписей = РегистрыРасчета.Начисления.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Значение = Регистратор;
НаборЗаписей.Прочитать();
РассчитатьНачисления(НаборЗаписей, ТребуемыйВидРасчета, СписокСотрудников);
НаборЗаписей.Записать( , Истина);
// Очистить перерассчитанные записи в перерасчете.
НаборЗаписейПерерасчета = РегистрыРасчета.Начисления.Перерасчеты.Перерасчет.СоздатьНаборЗаписей();
НаборЗаписейПерерасчета.Отбор.ОбъектПерерасчета.Значение = Регистратор;
НаборЗаписейПерерасчета.Записать();
КонецЦикла;
КонецПроцедуры
В самом начале процедуры мы запросом выбираем данные о записях перерасчетов, содержащие переданный вид расчета и сгруппированные по объекту перерасчета.
Далее при обходе результата запроса мы формируем для каждого объекта перерасчета список сотрудников, читаем соответствующие записи регистра расчета и вызываем процедуру РассчитатьНачисления(), которая использовалась нами при расчете записей документа НачисленияСотрудникам.
После того как расчет записей выполнен, мы записываем набор записей без формирования записей перерасчета и очищаем записи перерасчета по тому объекту перерасчета, который только что обработали.
Вернемся в форму отчета НачислениеСотрудникам.
Итак, мы указали для команды Перерассчитать действие, то есть процедуру для ее выполнения. Но чтобы можно было воспользоваться этой командой, нужно создать в форме кнопку и связать ее с этой командой (в строке ИмяКоманды).
Проще всего это сделать перетаскиванием команды из окна Команды формы в окно элементов формы.
Перетащим мышью команду Перерассчитать в группу элементов формы КоманднаяПанель.
При этом в форме появится кнопка Перерассчитать, а связь кнопки с командой будет установлена автоматически (рис. 18.26).

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