Имя: Пароль:
1C
1С v8
Перерасчеты и расчет зарплаты
0 wwwqwert2014
 
23.08.14
12:24
Как мне правильно получить число дней, зная ДанныеГрафик.ЗначениеФактическийПериодДействия в часах? Можно, конечно, делить на 8, но вдруг не 8 часов работал человек?
я таким образом выъодил из ситуации, не знаю, насколько это правильно:
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    СтруктураПоиска = Новый Структура("НомерСтроки");
    Для Каждого Строка Из НаборЗаписей Цикл
        СтруктураПоиска.НомерСтроки = Строка.НомерСтроки;
        
        ВыборкаДетальныеЗаписи.Сбросить();
        Если ВыборкаДетальныеЗаписи.НайтиСледующий(СтруктураПоиска) Тогда
            Если Строка.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад тогда
                Строка.Результат = Строка.Ставка * ВыборкаДетальныеЗаписи.ЗначениеФактическийПериодДействия;
                Строка.РезультатДни = ВыборкаДетальныеЗаписи.ЗначениеФактическийПериодДействия / 8;//СКОЛЬКО ОТРАБОТАНО ДНЕЙ - НЕ НРАВИТСЯ
                Строка.РезультатЧасы = ВыборкаДетальныеЗаписи.ЗначениеФактическийПериодДействия;
            Иначе
                
                Если ВыборкаДетальныеЗаписи.РезультатДниБаза <> 0 Тогда
                    Строка.Результат = Строка.РезультатБаза / ВыборкаДетальныеЗаписи.РезультатДниБаза * ВыборкаДетальныеЗаписи.ЗначениеФактическийПериодДействия / 8;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
        
        
    КонецЦикла;
Просто в зависимых видах расчета иногда расчет результата идет исходи из отработанных часов, а иногда из отработанных дней
1 wwwqwert2014
 
23.08.14
12:25
И еще такой вопрос. Как бы мне правильно настроить перерасчеты?
Я создал обработку "Перерасчет зарплаты" и в динамическом списке вывел все документы, которые необходимо перерассчитать и потом просто их перепровел. Вот мне интересно, насколько я правильно это сделал.
Вот код процедуры перерасчета



&НаСервереБезКонтекста
Процедура ПерерасчитатьНаСервере(СсылкаНаОбъект)
    // Вставить содержимое обработчика.

    СсылкаНаОбъект.ПолучитьОбъект().Записать(РежимЗаписиДокумента.Проведение);
    
    
    
КонецПроцедуры

&НаКлиенте
Процедура Перерасчитать(Команда)
    Пока Элементы.ТаблицаПерерасчета.ТекущаяСтрока <> Неопределено Цикл
        
        Строка = Элементы.ТаблицаПерерасчета.ТекущиеДанные;
        
        ОбъектПерерасчета = Строка.ОбъектПерерасчета;
        ПерерасчитатьНаСервере(ОбъектПерерасчета);

        
        
        Элементы.ТаблицаПерерасчета.ТекущаяСтрока = Элементы.ТаблицаПерерасчета.ТекущаяСтрока + 1;
    КонецЦикла;

    
КонецПроцедуры
2 floody
 
23.08.14
12:57
Проще получить ответ на такой вопрос на форуме Чистова, там люди как раз подобным занимаются.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший