Примеры работы с регистром расчета

Статья содержит примеры основных операций с регистром расчета в 1С:Предприятие 8.3. Рассмотрены процедуры записи, чтения, перерасчета, корректировки и удаления данных регистра расчета.

Запись в регистр расчета

// Запись одного движения в регистр расчета
Процедура ЗаписатьДвижениеРегистраРасчета()
    
    // Создаем объект движения
    Движение = РегистрыРасчета.НачислениеЗарплаты.СоздатьДвижение();
    
    // Устанавливаем основные параметры
    Движение.Период = ТекущаяДата();
    Движение.Регистратор = Документ.НачислениеЗарплаты.ТекущийДокумент();
    Движение.Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию("Иванов И.И.");
    Движение.ВидРасчета = ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Оклад");
    Движение.Сумма = 50000;
    Движение.Количество = 1;
    Движение.ДатаНачала = НачалоМесяца(ТекущаяДата());
    Движение.ДатаОкончания = КонецМесяца(ТекущаяДата());
    
    // Записываем движение
    Движение.Записать();
    
КонецПроцедуры

Чтение данных из регистра расчета

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

Перерасчет регистра расчета

// Выполнение перерасчета регистра
Процедура ВыполнитьПерерасчет()
    
    // Создаем менеджер расчета
    МенеджерРасчета = РасчетныеМенеджеры.НачислениеЗарплаты;
    
    // Устанавливаем параметры перерасчета
    Параметры = Новый Структура;
    Параметры.Вставить("ДатаНачала", НачалоМесяца(ТекущаяДата()));
    Параметры.Вставить("ДатаОкончания", КонецМесяца(ТекущаяДата()));
    Параметры.Вставить("Сотрудник", Справочники.Сотрудники.НайтиПоНаименованию("Иванов И.И."));
    
    // Выполняем перерасчет
    МенеджерРасчета.Пересчитать(Параметры);
    
КонецПроцедуры

Получение активных записей на дату

// Получение активных записей на конкретную дату
Процедура ПолучитьАктивныеНачисленияНаДату()
    
    ДатаПроверки = ТекущаяДата();
    
    Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    НачислениеЗарплаты.Сотрудник,
    |    НачислениеЗарплаты.ВидРасчета,
    |    НачислениеЗарплаты.Сумма
    |ИЗ
    |    РегистрРасчета.НачислениеЗарплаты КАК НачислениеЗарплаты
    |ГДЕ
    |    НачислениеЗарплаты.Активность
    |    И НачислениеЗарплаты.ДатаНачала = &ДатаПроверки";
    
    Запрос.УстановитьПараметр("ДатаПроверки", ДатаПроверки);
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        Сообщить("Активное начисление: " + Выборка.ВидРасчета + 
                " на сумму " + Выборка.Сумма);
    КонецЦикла;
    
КонецПроцедуры

Удаление записей регистра по регистратору

// Удаление движений регистра по документу-регистратору
Процедура УдалитьДвиженияПоДокументу()
    
    Док = Документы.НачислениеЗарплаты.НайтиПоНомеру("00001");
    
    // Создаем набор записей для удаления
    НаборЗаписей = РегистрыРасчета.НачислениеЗарплаты.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить(Док);
    НаборЗаписей.Прочитать();
    
    // Удаляем все найденные записи
    НаборЗаписей.Очистить();
    НаборЗаписей.Записать();
    
КонецПроцедуры

Корректировка записей регистра расчета

// Корректировка существующих записей
Процедура КорректироватьНачисления()
    
    // Находим записи для корректировки
    НаборЗаписей = РегистрыРасчета.НачислениеЗарплаты.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Сотрудник.Установить(Справочники.Сотрудники.НайтиПоНаименованию("Иванов И.И."));
    НаборЗаписей.Отбор.Период.Установить(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата()));
    НаборЗаписей.Прочитать();
    
    // Корректируем записи
    Для Каждого Запись Из НаборЗаписей Цикл
        Если Запись.ВидРасчета = ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Оклад") Тогда
            Запись.Сумма = Запись.Сумма * 1.1; // Увеличиваем оклад на 10%
        КонецЕсли;
    КонецЦикла;
    
    // Записываем изменения
    НаборЗаписей.Записать();
    
КонецПроцедуры

Пример использования временных таблиц для сложных расчетов

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

Эти примеры демонстрируют основные операции с регистрами расчета в 1С:Предприятие 8.3. В зависимости от конкретной конфигурации и требований задачи, код может потребовать адаптации.

Поделиться с друзьями
Smirnov code
Добавить комментарий