Имя: Пароль:
1C
1С v8
Приказ Т1
, ,
0 Staler1
 
27.03.18
08:26
Здравствуйте, в приказе у сотрудника не отображается часовая надбавка к тарифной ставке. Самое интересное то что у одних показывает у других нет.
Отладчиком просматривается что данные отображаются в локальных переменных, и потом массив не заносит в тз.
фото:
у кого не отоброжается
http://pixs.ru/showimage/1jpg_1440339_29764731.jpg
http://pixs.ru/showimage/2jpg_2280919_29764735.jpg

здесь все норм
http://pixs.ru/showimage/3jpg_9428602_29764744.jpg
http://pixs.ru/showimage/4jpg_9899961_29764749.jpg

сам код соотвественно:
Функция ПолучитьТаблицуНадбавок(Док)
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("ИдентификаторСтрокиВидаРасчета");
    ТЗ.Колонки.Добавить("НадбавкаНаименование");
    ТЗ.Колонки.Добавить("ПроцентНадбавки");
    ТЗ.Колонки.Добавить("Сумма");
    ТЗ.Колонки.Добавить("Номер");
    
    //
    ДолжностьПоШтатномуРасписанию = Док.ДолжностьПоШтатномуРасписанию;
    ДатаСобытия = Док.Дата;
    ДанныеПозиции = УправлениеШтатнымРасписанием.ДанныеПозицииШтатногоРасписания(ДолжностьПоШтатномуРасписанию, ДатаСобытия);
    ПроцентРК =  (ДанныеПозиции.РайонныйКоэффициент - 1)*100;
    
    ПредставлениеСН = СотрудникиФормыРасширенный.ПредставлениеПроцентаСевернойНадбавки(Док.ФизическоеЛицо);
    Если   ПредставлениеСН = "Процент северной надбавки не задан." Тогда
        ПроцентСН = 0;
    Иначе    
        ПроцентСН =  ДанныеПозиции.ПроцентСевернойНадбавки;
    КонецЕсли;
    
    ПроцентНВ =  ДанныеПозиции.ПроцентНадбавкиЗаВредность;
    МассивНачислений = ДанныеПозиции.Начисления;
    УВЧ = Новый Структура();
    УВЧ.Вставить("ГрафикРаботыСотрудников", "Основной");
    УВЧ.Вставить("Год", "2017");
    
    Оклад = Оклад(Док);
    Надбавка = Надбавка(Док);
    СдельнаяЧасовая = СдельнаяЧасовая(Док);
    ПроцВредности = ВернутьПроцентВредности(Док);

    ТарСтавка = ЧасоваяТарифнаяСтавка(Док);
    НайдСтрЧНТС = НадбавкаЧасоваяТарифнаяСтавка(Док);

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

           КонецЕсли;
             
            
            
            
            
            
            
            
           Если СокрЛП(СтрокаМассива.Начисление.Код) = "НДБ" Тогда
              
                //Процент = ""   ;
                СтрокаМассива.Размер = Надбавка;
                СтрокаТЗ = ТЗ.Добавить();
                СтрокаТЗ.НадбавкаНаименование =  СтрокаМассива.Начисление.Наименование;
                СтрокаТЗ.ИдентификаторСтрокиВидаРасчета = СтрокаМассива.ИдентификаторСтрокиВидаРасчета;
                СтрокаТЗ.ПроцентНадбавки = "--";
                СтрокаТЗ.Сумма = СтрокаМассива.Размер;
                СтрокаТЗ.Номер = 2;

            КонецЕсли;
            
            Если СокрЛП(СтрокаМассива.Начисление.Код) = "СН" Тогда
                //ПолучитьПроцентСН
                ПредставлениеСН = СотрудникиФормыРасширенный.ПредставлениеПроцентаСевернойНадбавки(Док.ФизическоеЛицо);
                Если   ПредставлениеСН = "Процент северной надбавки не задан." Тогда
                    ПроцентСН = 0;
                Иначе    
                    ПроцентСН =  ДанныеПозиции.ПроцентСевернойНадбавки;    
                КонецЕсли;
                //
                Если ПроцентСН = 0 Тогда
                Продолжить;
                КонецЕсли;    
                СтрокаТЗ = ТЗ.Добавить();
                СтрокаТЗ.НадбавкаНаименование =  СтрокаМассива.Начисление.Наименование;
                СтрокаТЗ.ПроцентНадбавки =  Строка(ПроцентСН)+"%";
                СтрокаТЗ.Сумма = СтрокаМассива.Размер;
                СтрокаТЗ.Номер = 3;
                
                
            КонецЕсли;


            Если СокрЛП(СтрокаМассива.Начисление.Код) = "РК" Тогда
                //ПолучитьПроцентРК
                СтрокаТЗ = ТЗ.Добавить();
                СтрокаТЗ.НадбавкаНаименование =  СтрокаМассива.Начисление.Наименование;
                СтрокаТЗ.ИдентификаторСтрокиВидаРасчета = СтрокаМассива.ИдентификаторСтрокиВидаРасчета;
                СтрокаТЗ.ПроцентНадбавки = Строка(ПроцентРК)+"%";
                СтрокаТЗ.Сумма = СтрокаМассива.Размер;
                СтрокаТЗ.Номер = 4;
                
            КонецЕсли;  
            Если СокрЛП(СтрокаМассива.Начисление.Код) = "НВР" Тогда
                //ПолучитьПроцентНВР
                СтрокаТЗ = ТЗ.Добавить();
                СтрокаТЗ.НадбавкаНаименование =  СтрокаМассива.Начисление.Наименование;
                СтрокаТЗ.ИдентификаторСтрокиВидаРасчета = СтрокаМассива.ИдентификаторСтрокиВидаРасчета;
                СтрокаТЗ.ПроцентНадбавки =  Строка(ПроцВредности)+"%";
                СтрокаТЗ.Сумма =  ПроцВредности;
                СтрокаТЗ.Номер = 5;

                
            КонецЕсли;  
            Если СокрЛП(СтрокаМассива.Начисление.Код) = "ПРМ" Тогда
                Продолжить;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;    
    ТЗ.Сортировать("Номер Возр");
    
        
    ПСНП = КадровыйУчетРасширенный.ПроцентСевернойНадбавки(док.Сотрудник.ФизическоеЛицо, ДатаСобытия);
    ПСН = ?(ПСНП = 0, 1, (100+ПСНП)/100);
    
    ПроцВредностиП =  ?(ПроцВредности = 0, 1, ПроцВредности/100);
    
    Если НайдСтрЧНТС <> 0
        ИЛИ ЕстьСделка ИЛИ ТарСтавка <> 0
        Тогда
        СтрРк = ТЗ.Найти("Районный коэффициент");
        Если СтрРк <> Неопределено Тогда
            СтрРк.Сумма = (ТарСтавка + НайдСтрЧНТС)*0.3;    
        КонецЕсли;
        
        СтрСН = ТЗ.Найти("Северная надбавка");
        Если СтрСН <> Неопределено Тогда
            СтрСН.ПроцентНадбавки =  Строка(ПСНП)+"%";
            СтрСН.Сумма = (ТарСтавка + НайдСтрЧНТС)*ПСНП/100;    
        КонецЕсли;
        
        СтрНВР = ТЗ.Найти("Надбавка за вредные условия труда");
        Если СтрНВР <> Неопределено Тогда
            СтрНВР.Сумма = (ТарСтавка + НайдСтрЧНТС)*(0.3+ПСН)*ПроцВредностиП;    
        КонецЕсли;

    КонецЕсли;
    
    
    Если Оклад <> 0  Тогда
        СтрРк = ТЗ.Найти("Районный коэффициент");
        Если СтрРк <> Неопределено Тогда
            СтрРк.Сумма = (Оклад + Надбавка)*0.3;    
        КонецЕсли;
        
        СтрСН = ТЗ.Найти("Северная надбавка");
        Если СтрСН <> Неопределено Тогда
            СтрСН.Сумма = (Оклад + Надбавка)*ПСНП/100;    
        КонецЕсли;
        
        СтрНВР = ТЗ.Найти("Надбавка за вредные условия труда");
        Если СтрНВР <> Неопределено Тогда
            СтрНВР.Сумма = (Оклад + Надбавка)*(0.3+ПСН)*ПроцВредностиП;    
        КонецЕсли;

    КонецЕсли;
    
    Если СдельнаяЧасовая <> 0  Тогда
        СтрРк = ТЗ.Найти("Районный коэффициент");
        Если СтрРк <> Неопределено Тогда
            СтрРк.Сумма = (СдельнаяЧасовая )*0.3;    
        КонецЕсли;
        
        СтрСН = ТЗ.Найти("Северная надбавка");
        Если СтрСН <> Неопределено Тогда
            СтрСН.Сумма = (СдельнаяЧасовая )*ПСНП/100;    
        КонецЕсли;
        
        СтрНВР = ТЗ.Найти("Надбавка за вредные условия труда");
        Если СтрНВР <> Неопределено Тогда
            СтрНВР.Сумма = (СдельнаяЧасовая )*(0.3+ПСН)*ПроцВредностиП;    
        КонецЕсли;

    КонецЕсли;


    
    Возврат ТЗ;
    
КонецФункции
1 ПегийЛунь
 
27.03.18
09:38
Такое ощущение, что это разные виды начислений (начисления) (у сотрудников).
(Т.к. должно отрабатывать
или здесь
Если СокрЛП(СтрокаМассива.Начисление.Код) = "ЧНТС"
или здесь
Если СокрЛП(СтрокаМассива.Начисление.Код) = "НДБ" Тогда)
2 ПегийЛунь
 
27.03.18
09:41
Если есть возможность, то надо поставить точку остановки на
Возврат ТЗ;
и посмотреть, что в той таблице.
3 Staler1
 
27.03.18
09:48
(2) если ставить точку остановы, то на сотруднике у которого не показывает в тз пусто,а у другого данные есть.
тз заполняются с помощью массива. в массив данные НайдСтрЧнтс не заносятся как будто мимо проходит...
4 Staler1
 
27.03.18
09:53
5 ПегийЛунь
 
27.03.18
10:44
МассивНачислений.Количество() ?
6 Staler1
 
27.03.18
10:56
(5) получается так, в массиве вот данные
http://pixs.ru/showimage/7jpg_8362484_29766067.jpg
7 ПегийЛунь
 
27.03.18
11:15
Теперь Вам понятно откуда он данные НЕ берет?
Раскручиваю назад:
В массиве всего 3 (три) строки.
Откуда он их взял?
А вот отсюда:
МассивНачислений = ДанныеПозиции.Начисления;

Что такое ДанныеПозиции?
А вот что
ДанныеПозиции = УправлениеШтатнымРасписанием.ДанныеПозицииШтатногоРасписания(ДолжностьПоШтатномуРасписанию, ДатаСобытия);

Вопрос: А что там у должности в штатном расписании?
Какие есть виды начислений?
8 Staler1
 
27.03.18
11:44
(7) В данныеПозиции о часовой надбавке не слова
http://pixs.ru/showimage/8jpg_2199400_29766467.jpg
в  должности по штатному расписанию только
чнтс отображается =)
9 ПегийЛунь
 
27.03.18
12:02
Гхм...
У меня к Вам просьба.
Зайдите в режиме предприятия и сравнение в ш_т_а_т_н_о_м р_а_с_п_и_с_а_н_и_и две позиции:
"Электромонтер по рем. и обсл. электрооборудования...."
и
"Водитель кат.С"
Какие там есть виды начислений?

НайдСтрЧНТС = НадбавкаЧасоваяТарифнаяСтавка(Док);
Здесь он находит, что в принципе в док-е приема на работу есть такая строка.
Есть ли такой вид начисления в позиции штатного расписания?
10 Staler1
 
27.03.18
12:08
(9) водитель кат. С /АТЦ/ :
Оплата по часовому тарифу -15.38
часовая надбавка к тарифной ставке - 26.41

электромонтер по рем. и обсл. э/оборудования, 6 разряд (категория) /Краново-ремонтная служба/
Оплата по часовому тарифу -16.94
часовая надбавка к тарифной ставке - 42.52

по начислениям всё...
11 ПегийЛунь
 
27.03.18
13:01
Не реально. По шагам всю процедуру.
Я бы поставил точки останова:
1) Если МассивНачислений.Количество()<>0 Тогда
Попадает ли вообще в цикл?
2) Если СокрЛП(СтрокаМассива.Начисление.Код) = "ЧНТС"     Тогда
добавляется ли вообще такая строка?
3) ТЗ.Сортировать("Номер Возр");
Что получается после цикла? Как выглядит ТЗ.
в скрине (4) нет вида начисления с кодом "ЧНТС", там надбавка за вредность (это другое)
12 ПегийЛунь
 
27.03.18
13:02
точнее не в (4) а в (6)
13 Staler1
 
29.03.18
07:17
(12)Я сделал в обход массива который не заносил данные в ТЗ. Спасибо за советы как устранить проблему!! =)