Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Приказ Т1

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

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

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

НайдСтрЧНТС = НадбавкаЧасоваяТарифнаяСтавка(Док);
Здесь он находит, что в принципе в док-е приема на работу есть такая строка.
Есть ли такой вид начисления в позиции штатного расписания?
   Staler1
 
10 - 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)
   Staler1
 
13 - 29.03.18 - 07:17
(12)Я сделал в обход массива который не заносил данные в ТЗ. Спасибо за советы как устранить проблему!! =)

Список тем форума
Рекламное место пустует  Рекламное место пустует
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Э. Йодан
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует