Читайте дальше...
Запись в регистр расчета
// Запись одного движения в регистр расчета
Процедура ЗаписатьДвижениеРегистраРасчета()
// Создаем объект движения
Движение = РегистрыРасчета.НачислениеЗарплаты.СоздатьДвижение();
// Устанавливаем основные параметры
Движение.Период = ТекущаяДата();
Движение.Регистратор = Документ.НачислениеЗарплаты.ТекущийДокумент();
Движение.Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию("Иванов И.И.");
Движение.ВидРасчета = ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Оклад");
Движение.Сумма = 50000;
Движение.Количество = 1;
Движение.ДатаНачала = НачалоМесяца(ТекущаяДата());
Движение.ДатаОкончания = КонецМесяца(ТекущаяДата());
// Записываем движение
Движение.Записать();
КонецПроцедуры
Чтение данных из регистра расчета
// Получение данных из регистра расчета
Процедура ПолучитьНачисленияСотрудника()
// Создаем запрос
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| НачислениеЗарплаты.Сотрудник,
| НачислениеЗарплаты.ВидРасчета,
| НачислениеЗарплаты.Сумма,
| НачислениеЗарплаты.ДатаНачала,
| НачислениеЗарплаты.ДатаОкончания
|ИЗ
| РегистрРасчета.НачислениеЗарплаты КАК НачислениеЗарплаты
|ГДЕ
| НачислениеЗарплаты.Сотрудник = &Сотрудник
| И НачислениеЗарплаты.Активность
| И НачислениеЗарплаты.Период МЕЖДУ &НачалоПериода И &КонецПериода";
// Устанавливаем параметры
Запрос.УстановитьПараметр("Сотрудник", Справочники.Сотрудники.НайтиПоНаименованию("Иванов И.И."));
Запрос.УстановитьПараметр("НачалоПериода", НачалоГода(ТекущаяДата()));
Запрос.УстановитьПараметр("КонецПериода", КонецГода(ТекущаяДата()));
// Выполняем запрос
Результат = Запрос.Выполнить();
// Обрабатываем результат
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить("Сотрудник: " + Выборка.Сотрудник +
", Вид расчета: " + Выборка.ВидРасчета +
", Сумма: " + Выборка.Сумма);
КонецЦикла;
КонецПроцедуры
Перерасчет регистра расчета
// Выполнение перерасчета регистра
Процедура ВыполнитьПерерасчет()
// Создаем менеджер расчета
МенеджерРасчета = РасчетныеМенеджеры.НачислениеЗарплаты;
// Устанавливаем параметры перерасчета
Параметры = Новый Структура;
Параметры.Вставить("ДатаНачала", НачалоМесяца(ТекущаяДата()));
Параметры.Вставить("ДатаОкончания", КонецМесяца(ТекущаяДата()));
Параметры.Вставить("Сотрудник", Справочники.Сотрудники.НайтиПоНаименованию("Иванов И.И."));
// Выполняем перерасчет
МенеджерРасчета.Пересчитать(Параметры);
КонецПроцедуры
Получение активных записей на дату
// Получение активных записей на конкретную дату
Процедура ПолучитьАктивныеНачисленияНаДату()
ДатаПроверки = ТекущаяДата();
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| НачислениеЗарплаты.Сотрудник,
| НачислениеЗарплаты.ВидРасчета,
| НачислениеЗарплаты.Сумма
|ИЗ
| РегистрРасчета.НачислениеЗарплаты КАК НачислениеЗарплаты
|ГДЕ
| НачислениеЗарплаты.Активность
| И НачислениеЗарплаты.ДатаНачала = &ДатаПроверки";
Запрос.УстановитьПараметр("ДатаПроверки", ДатаПроверки);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить("Активное начисление: " + Выборка.ВидРасчета +
" на сумму " + Выборка.Сумма);
КонецЦикла;
КонецПроцедуры
Удаление записей регистра по регистратору
// Удаление движений регистра по документу-регистратору
Процедура УдалитьДвиженияПоДокументу()
Док = Документы.НачислениеЗарплаты.НайтиПоНомеру("00001");
// Создаем набор записей для удаления
НаборЗаписей = РегистрыРасчета.НачислениеЗарплаты.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Док);
НаборЗаписей.Прочитать();
// Удаляем все найденные записи
НаборЗаписей.Очистить();
НаборЗаписей.Записать();
КонецПроцедуры
Корректировка записей регистра расчета
// Корректировка существующих записей
Процедура КорректироватьНачисления()
// Находим записи для корректировки
НаборЗаписей = РегистрыРасчета.НачислениеЗарплаты.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Сотрудник.Установить(Справочники.Сотрудники.НайтиПоНаименованию("Иванов И.И."));
НаборЗаписей.Отбор.Период.Установить(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата()));
НаборЗаписей.Прочитать();
// Корректируем записи
Для Каждого Запись Из НаборЗаписей Цикл
Если Запись.ВидРасчета = ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Оклад") Тогда
Запись.Сумма = Запись.Сумма * 1.1; // Увеличиваем оклад на 10%
КонецЕсли;
КонецЦикла;
// Записываем изменения
НаборЗаписей.Записать();
КонецПроцедуры
Пример использования временных таблиц для сложных расчетов
// Использование временных таблиц для промежуточных расчетов
Процедура ВыполнитьСложныйРасчет()
// Создаем временную таблицу
ВременнаяТаблица = Новый ТаблицаЗначений;
ВременнаяТаблица.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
ВременнаяТаблица.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
// Заполняем временную таблицу данными из регистра
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| НачислениеЗарплаты.Сотрудник,
| СУММА(НачислениеЗарплаты.Сумма) КАК Сумма
|ИЗ
| РегистрРасчета.НачислениеЗарплаты КАК НачислениеЗарплаты
|ГДЕ
| НачислениеЗарплаты.Период МЕЖДУ &НачалоПериода И &КонецПериода
|СГРУППИРОВАТЬ ПО
| НачислениеЗарплаты.Сотрудник";
Запрос.УстановитьПараметр("НачалоПериода", НачалоКвартала(ТекущаяДата()));
Запрос.УстановитьПараметр("КонецПериода", КонецКвартала(ТекущаяДата()));
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = ВременнаяТаблица.Добавить();
НоваяСтрока.Сотрудник = Выборка.Сотрудник;
НоваяСтрока.Сумма = Выборка.Сумма;
КонецЦикла;
// Дальнейшая обработка данных во временной таблице
// ...
КонецПроцедуры
Эти примеры демонстрируют основные операции с регистрами расчета в 1С:Предприятие 8.3. В зависимости от конкретной конфигурации и требований задачи, код может потребовать адаптации.








