gifts2017

Объединение записей в наборе записей регистра сведений СостояниеРаботниковОрганизаций для "1С Зарплата и Управление персоналом"

Опубликовал megatrend - (megatrend) в раздел Программирование - Практика программирования

Если кадровая служба разбивает строки документа "Отпуска организаций" по рабочим периодам одного и того же сотрудника, то такие строки в регистре сведений СостояниеРаботниковОрганизаций необходимо склеивать (чтобы корректно рассчитать отпуск сотруднику). Предлагается процедура склейки таких записей.

Работник кадровой службы (для получения корректной печатной формы документа) может разбить строку отпуска работника на 2-3 записи (с разными рабочими периодами).

Расчётчику такое разбиение мешает корректно рассчитать документ Начисление отпуска. Предлагается исправление кода, которое избавляет расчётчика от неудобств.

В модуле набора записей регистра сведений СостояниеРаботниковОрганизаций  размещаем процедуру

Процедура ПередЗаписью(Отказ, Замещение)
   
    // склеим однородные записи, идущие друг за другом
    СписокУдаляемых1 = новый Массив();
   
    Для ИндексЗаписи1 = 0 По Количество() - 1 Цикл
        Если ИндексЗаписи1 = 0 Тогда
            Продолжить;
        КонецЕсли;
       
        // смотрим назад
       
        Сотрудник0 = ЭтотОбъект[ИндексЗаписи1 - 1].Сотрудник;
        Сотрудник1 = ЭтотОбъект[ИндексЗаписи1].Сотрудник;
       
        Период0 = ЭтотОбъект[ИндексЗаписи1 - 1].ПериодЗавершения;
        Период1 = ЭтотОбъект[ИндексЗаписи1].Период;
       
        ПериодНачала = ЭтотОбъект[ИндексЗаписи1 - 1].Период;
        ПериодЗавершения = ЭтотОбъект[ИндексЗаписи1].ПериодЗавершения;
       
        Состояние0 = ЭтотОбъект[ИндексЗаписи1 - 1].Состояние;
        Состояние1 = ЭтотОбъект[ИндексЗаписи1].Состояние;
       
        Если (Сотрудник0 = Сотрудник1) И (Состояние0 = Состояние1) Тогда
            // это сопрягающиеся периоды ?
            Если (Период0 = Период1) И (ПериодНачала < ПериодЗавершения) Тогда
                // удаляем раннюю строку, переносим начало поздней строки на начало ранней строки
                СписокУдаляемых1.Добавить(ИндексЗаписи1 - 1);
                ЭтотОбъект[ИндексЗаписи1].Период = ЭтотОбъект[ИндексЗаписи1 - 1].Период;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
   
    УдаляемыхСтрок1 = СписокУдаляемых1.Количество() - 1;
    Для ИндексЗаписи1 = 0 По УдаляемыхСтрок1 Цикл
        ИспИндекс1 = СписокУдаляемых1[УдаляемыхСтрок1 - ИндексЗаписи1];
        ЭтотОбъект.Удалить(ИспИндекс1);
    КонецЦикла;
   
КонецПроцедуры

Эта процедура склеивает записи по одному работнику, если эти записи граничат по датам. Записи в документе по этому работнику должны быть в хронологическом порядке (иначе объединения не будет).

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

Сшиваются только записи одного документа. Записи разных документов не сшиваются.

Скачать файлы

Наименование Файл Версия Размер
Процедура для вставки в модуль набора записей регистра сведений 47
.txt 2,79Kb
19.02.10
47
.txt 2,79Kb Скачать

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.