Имя: Пароль:
1C
1С v8
Планы видов расчета. Не работает вытестнение.
0 megabax
 
22.02.12
21:35
Добрый день.
В пустой конфе создал план видоврасчета, регистр расчета, включил период дейсвтия.
создал вид расчета Оклад и Невыход.
Оклад сдела вытясняемым от НЕвыход.
Создал документ с таким модулем проведения:

   Для Каждого ТекСтрокаНачисления Из Начисления Цикл
       Движение = Движения.Начисления.Добавить();
       Движение.Сторно = Ложь;
       Движение.ВидРасчета = ТекСтрокаНачисления.ВидРасчета;
       Движение.ПериодРегистрации = Период;
       Движение.Сотрудник = ТекСтрокаНачисления.Сотрудник;
       Движение.Параметр = ТекСтрокаНачисления.Параметр;
       Движение.БазовыйПериодНачало = ТекСтрокаНачисления.БазовыйПериодНачало;
       Движение.БазовыйПериодКонец = ТекСтрокаНачисления.БазовыйПериодКонец;
       Движение.ПериодДействияНачало= ТекСтрокаНачисления.ПериодДействияНачало;
       Движение.ПериодДействияКонец= ТекСтрокаНачисления.ПериодДействияКонец;
   КонецЦикла;
   Движения.Начисления.Записать();    
   Расчет.РассчитатьНачисления(Ссылка);
КонецПроцедуры

Процедура РассчитатьНачисления(Ссылка) экспорт
    НаборЗаписей=РегистрыРасчета.Начисления.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить(Ссылка);
    НаборЗаписей.Прочитать();
   
    для каждого стр из НаборЗаписей цикл
        если стр.ВидРасчета=ПланыВидовРасчета.Начисления.Оклад тогда
           
            ТЗЧасовНорма=стр.ПолучитьДанныеГрафика(ВидПериодаРегистраРасчета.ПериодДействия);
            ТЗЧасовФакт=стр.ПолучитьДанныеГрафика(ВидПериодаРегистраРасчета.ФактическийПериодДействия);
           
            Норма=0;
            Если ТЗЧасовНорма.Количество()>0 тогда
                Норма=ТЗЧасовНорма[0].Часов;
            Конецесли;    
           
            Факт=0;
            Если ТЗЧасовФакт.Количество()>0 тогда
                Факт=ТЗЧасовФакт[0].Часов;
            Конецесли;    
           
            если Норма<>0 тогда
               стр.Результат=стр.Параметр*Факт/Норма;
            иначе
               сообщить("Не заполнен производсвенный календарь",СтатусСообщения.ОченьВажное);
            конецесли;
           
        иначеесли стр.ВидРасчета=ПланыВидовРасчета.Начисления.ПремияПроцентом тогда
            Ресурсы=Новый Массив;
            Ресурсы.Добавить("Начисления.Результат");
           
            Отбор=Новый Структура;
            Отбор.Вставить("Сотрудник","Начисления.Сотрудник");
           
            ТЗБазы=стр.ПолучитьБазу(Ресурсы, Отбор);
            База=0;
            Если ТЗБазы.Количество()>0 тогда
                База=ТЗБазы[0].Результат;
            Конецесли;
           
            стр.Результат=База*стр.Параметр/100;
           
        иначе
            //тут будут другие алгоритмы
        конецесли;
    конеццикла;
   
    НаборЗаписей.Записать();
конецпроцедуры

И почему то не работает вытеснение. Тоесть, заведение расчета "Невыхд" не уменьшает фактическое количества часов.
Подскажите плз, как лечить.
1 asady
 
22.02.12
23:12
(0) ты же берешь по регистратору
2 megabax
 
23.02.12
10:27
1, спасибо, попробую исправить
3 megabax
 
23.02.12
10:31
сделал вот так:

    для каждого стр из НаборЗаписей цикл
        если стр.ВидРасчета=ПланыВидовРасчета.Начисления.Оклад тогда
           
            Отбор=Новый Структура("Сотрудник",стр.Сотрудник);
           
            //ТЗЧасовНорма=стр.ПолучитьДанныеГрафика(ВидПериодаРегистраРасчета.ПериодДействия);
            //ТЗЧасовФакт=стр.ПолучитьДанныеГрафика(ВидПериодаРегистраРасчета.ФактическийПериодДействия);
            ТЗЧасовФакт=РегистрыРасчета.Начисления.ПолучитьДанныеГрафика(Отбор,ВидПериодаРегистраРасчета.ФактическийПериодДействия);
            ТЗЧасовНорма=РегистрыРасчета.Начисления.ПолучитьДанныеГрафика(Отбор,ВидПериодаРегистраРасчета.ПериодДействия);
           
            Норма=0;
            Если ТЗЧасовНорма.Количество()>0 тогда
                Норма=ТЗЧасовНорма[0].Часов;
            Конецесли;    
           

Пишет "Недопустимое значеие параметра
4 megabax
 
23.02.12
10:39
Еще я сдела вот такой запрос:

ВЫБРАТЬ
   НачисленияФактическийПериодДействия.ВидРасчета,
   НачисленияФактическийПериодДействия.ПериодДействияНачало,
   НачисленияФактическийПериодДействия.ПериодДействияКонец,
   НачисленияФактическийПериодДействия.Сотрудник,
   НачисленияФактическийПериодДействия.Результат,
   НачисленияФактическийПериодДействия.Параметр
ИЗ
   РегистрРасчета.Начисления.ФактическийПериодДействия КАК НачисленияФактическийПериодДействия


и получил такой вот результат:
Вид расчета    Дата начала периода действия    Дата окончания периода действия    Параметр    Результат    Сотрудник
Невыход    15.02.2012 0:00:00    16.02.2012 0:00:00            Ануфриев
Оклад            8 000,00    8 000,00    Петров
Оклад            10 000,00    10 000,00    Иванов
Оклад            10 000,00    10 000,00    Сидоров
Оклад    01.01.2012 0:00:00    31.01.2012 0:00:00    10 000,00    10 000,00    Ануфриев
Премия процентом            10,00    2 000,00    Сидоров
Премия процентом            15,00    1 500,00    Иванов

тоесть, где то системно не делается вытетеснние.
Почему?????
5 megabax
 
23.02.12
10:41
а, прошу прощения, не так поставил даты невыхода.
вопрос снят
6 megabax
 
23.02.12
10:43
кстати, то что я поставил отбор по регистратору, ни сколько не мешает правильному расчету фактического периода действия