Имя: Пароль:
1C
1С v8
Документ начисления зарплаты в ЕРП
☑
0 lirt82
 
22.10.26
✎
10:42
В документ НачислениеЗарплаты, добавил команду загрузить из эксель, описал обработчик, таб. часть Начисления заполняется  данными из экселя, но показатели(налоги) пустые и следовательно колонка Результат пустая, не могу найти процедуру обработчик которая вызывает заполнение и расчет показателей. Кто сталкивался подскажите процедуру?
1 paramedic
 
22.10.26
✎
10:45
А посмотреть обработчик поля Начисление ПриИзменении?
2 lirt82
 
22.10.26
✎
14:49
(1) смотрю
кто может сюда скинуть пример кода по заполнению документа "НачислениеЗарплаты" в ЗУП-е, ЕРП из внешнего источника?
3 lirt82
 
22.10.26
✎
14:52
вот мой код, при выполнении таб часть заполняется то показатели пустые как и колонка Результат
&НаСервере
Функция ВыполнитьЗагрузкуИзФайлаExcelНаСервере(Адрес, ТекстОшибки) Экспорт
    
    Данные = ПолучитьИзВременногоХранилища(Адрес);
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла(РасширениеExcelФайла);
    Данные.Записать(ИмяВременногоФайла);
    
    Объект.Начисления.Очистить();
    
    Документ = Новый ТабличныйДокумент;
    Документ.Прочитать(ИмяВременногоФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
    
    ПЗ = Новый ПостроительЗапроса;
    ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(Документ.Область(4, 2, Документ.ВысотаТаблицы, 40));
    ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
    ПЗ.ЗаполнитьНастройки();
    ПЗ.Выполнить();
    ТаблицаЗначений = ПЗ.Результат.Выгрузить();
    
    //+ в первом цикле сформируем массив ссылок сотрудников полученных от физ. лиц
    ТекстОшибки = "";
    ТЗСотрудникиИСуммы = Новый ТаблицаЗначений;
    ТЗСотрудникиИСуммы.Колонки.Добавить("Сотрудник");
    ТЗСотрудникиИСуммы.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(13, 2)));
    
    МассивСотрудников = Новый Массив;
    
    Для Каждого ТС Из ТаблицаЗначений Цикл
        
        ФИО = СокрЛП(ТС.Ф_И_О_);
        ФизическоеЛицо = Справочники.ФизическиеЛица.НайтиПоНаименованию(ФИО);
        Если Не ФизическоеЛицо.Пустая() Тогда
            НашлиСотрудника = КадровыйУчетРасширенный.ОсновнойСотрудникФизЛица(ФизическоеЛицо, Объект.Организация, Объект.Дата);
            Если НашлиСотрудника <> Неопределено Тогда
                Если ЗначениеЗаполнено(ТС.ПерерИтого) Тогда
                    МассивСотрудников.Добавить(НашлиСотрудника);
                    Стр = ТЗСотрудникиИСуммы.Добавить();
                    Стр.Сотрудник = НашлиСотрудника;
                    Стр.Сумма = Окр(ТС.ПерерИтого, 0);
                КонецЕсли;
            Иначе
                ТекстОшибки = ТекстОшибки + НСтр("ru = 'Не найден сотрудник %1.'") + Символы.ПС;
                ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ФИО);
            КонецЕсли;
        Иначе
            ТекстОшибки = ТекстОшибки + НСтр("ru = 'Не удалось найти физическое лицо %1.'") + Символы.ПС;
            ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ФИО);
        КонецЕсли;
        
    КонецЦикла;
    //- в первом цикле сформируем массив ссылок сотрудников полученных от физ. лиц
    
    //+ во втором цикле заполним таб. часть документа            
    Ном = 0;
    
    Если МассивСотрудников.Количество() > 0 Тогда
        КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина,
        ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(МассивСотрудников),
        "Организация, Подразделение, ГрафикРаботы, ДатаУвольнения", Объект.Дата);
        
        ПоказательПремия = Справочники.ПоказателиРасчетаЗарплаты.НайтиПоРеквизиту("Идентификатор", "Премия");
        НачислениеПремия = ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Премия за месяц");
        
        Для Каждого ДанныеСотрудника Из КадровыеДанныеСотрудников Цикл    
            
            Если ЗначениеЗаполнено(ДанныеСотрудника.ДатаУвольнения) Тогда
                ТекстОшибки = ТекстОшибки + НСтр("ru = 'Сотрудник %1 уволен.'") + Символы.ПС;
                ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Строка(ДанныеСотрудника.Сотрудник));
                Ном = Ном + 1;
            КонецЕсли;
            Если ДанныеСотрудника.Подразделение = Объект.Подразделение Тогда  
                НС = Объект.Начисления.Добавить();
                НС.Сотрудник = ДанныеСотрудника.Сотрудник;
                НС.Подразделение = ДанныеСотрудника.Подразделение;
                НС.ГрафикРаботы = ДанныеСотрудника.ГрафикРаботы;
                НС.ПериодДействия = Объект.МесяцНачисления;
                НС.ДатаНачала = Объект.МесяцНачисления;
                НС.ДатаОкончания = КонецМесяца(Объект.МесяцНачисления);
                НС.ПериодРегистрацииВремени = Объект.МесяцНачисления;
                НС.Начисление = НачислениеПремия;
                НС.Показатель1 = ПоказательПремия;
                НС.Значение1 = ТЗСотрудникиИСуммы.Найти(ДанныеСотрудника.Сотрудник, "Сотрудник").Сумма;
            КонецЕсли;
            
        КонецЦикла;
    КонецЕсли;
    
    Если Ном > 0 Тогда
        ТекстОшибки = ТекстОшибки + НСтр("ru = 'Загрузка завершена. Найдено %1 уволенных сотрудников (требуют проверки).'");
    Иначе
        ТекстОшибки = ТекстОшибки + НСтр("ru = 'Загрузка завершена.'");
    КонецЕсли;
    ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Ном);
    
    Попытка
        УдалитьФайлы(ИмяВременногоФайла);
    Исключение
    КонецПопытки;
    
    ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.Начисления, "ПериодДействия", "ПериодДействияСтрокой");
    //ПересчитатьСотрудниковНаСервере();
    //СотрудникиДокумента = Объект.Начисления.Выгрузить(, "Сотрудник").ВыгрузитьКолонку("Сотрудник");
    //ПерезаполнитьДанныеФормыНаСервере(СотрудникиДокумента, Ложь);
    
    Возврат ТекстОшибки;
    
КонецФункции
4 lirt82
 
22.10.26
✎
15:03
вот так получается
5 Gucci76
 
22.10.26
✎
15:53
(0) А почему премия грузится в начисление зарплаты? Может ее в премию грузить?
6 paramedic
 
22.10.26
✎
16:08
1. Вы недозаполняете необходимые ТЧ.
2. В коде даже комментарий есть:
// Заполнение и расчет начислений.
7 Gucci76
 
22.10.26
✎
16:53
(6) Зачем для загрузки премии использовать самый сложный документ расчета? В премии, разовом начислении тоже не одна ТЧ.
На Бухэксперт уже есть обработка загрузки во многие документы (кроме начисления ЗП :-) ).
8 paramedic
 
22.10.26
✎
16:55
(7) Откуда мы знаем, что ТС грузит только премии? Может премии как пример показаны?
9 Gucci76
 
22.10.26
✎
16:59
(8) Вот я и спрашиваю ТС ))))
10 Гена
 
гуру
22.10.26
✎
17:04
(5) +
За загрузку в док Начисления зп данных кроме поля результата - сразу расстрел. Только сначала напоить чайком... всенеп'геменно... это а'гхиважно!
11 Amra
 
22.10.26
✎
17:28
(10) Согласен. Удаляет гланды через .опу.
(0) Выкинуть весь код в топку. Переделать показатель премии как задаваемый через документ данные для начисления зп, и грузить туда. Гоооораздо проше и правильнее
12 Вадя
 
22.10.26
✎
18:18
Данные для расчета зарплаты - это же архискучно !!!
13 Вадя
 
22.10.26
✎
18:21
Нужно сочинить свои документы - Начисления по KPI или на крайний случай какой-нибудь навороченный Сдельный наряд для каждого подразделения со своей спецификой и грузить в них данные из екселек. Это всем понравится !!!
14 Amra
 
22.10.26
✎
19:07
(13) Да-да, а потом угробить базу при обновлении, при таких познаниях ЗУПа)) Это по нашему, модно и современно)
15 El_Duke
 
гуру
22.10.26
✎
22:07
Мне вообще непонятно в чем смысл внедрения блока зарплаты если расчет по прежнему производится на коленке в экселе ...
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан