|
Документ начисления зарплаты в ЕРП | ☑ | ||
|---|---|---|---|---|
|
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
|
Мне вообще непонятно в чем смысл внедрения блока зарплаты если расчет по прежнему производится на коленке в экселе ...
|
|||
|
16
paramedic
23.10.26
✎
09:06
|
(15) Чтобы весь учет был в одном месте. В ЕРП, если хотите, чтобы зарплата могла использоваться в качестве базы распределения, учет ее должен быть в ЕРП.
|
|||
|
17
El_Duke
гуру
23.10.26
✎
09:18
|
(16) Ну и на здоровье
Зачем считать сначала в экселе и потом грузить в ЕРП ? Почему сразу в ЕРП не считать ? |
|||
|
18
ДиВаH2
24.10.26
✎
17:28
|
(16) А если учет ведется в зуп корп и зарплата нужна в качестве базы распределения в ерп, как быть? странно, что в ерп обычный блок зуп, вместо зуп корп.
|
|||
|
19
paramedic
26.10.26
✎
09:29
|
(17) Например, не умеют перенести свои хитроумные алгоритмы расчета в ЕРП.
(18) Тут засада. Не будет у вас базы Зарплата, если вы занесете только отражение з/пл. |
|||
|
20
Мультук
гуру
26.10.26
✎
10:20
|
(0)
Добавлю еще что: НашлиСотрудника = КадровыйУчетРасширенный.ОсновнойСотрудникФизЛица(ФизическоеЛицо, Объект.Организация, Объект.Дата); -- Рано или поздно появятся совместители. Ясен фиг, это сразу не заметят, а потом будет неприятно. P.S. Разбивать код на процедуры/функции нынче не модно ? |
|||
|
21
Amra
26.10.26
✎
10:26
|
(20) Проблемы могут быть уже сейчас... Если есть полные тезки вот тут ФизическоеЛицо = Справочники.ФизическиеЛица.НайтиПоНаименованию(ФИО);
|
|||
|
22
ДиВаH2
26.10.26
✎
16:33
|
(19) базу распределения можно куда-то занести в ерп? есть аналог документа упп "установка базы распределения"?
|
|||
|
23
paramedic
26.10.26
✎
17:19
|
(22) Нет. Варианты баз распределения определены на уровне конфигурации.
|
|||
|
24
Krendel
26.10.26
✎
18:04
|
(22) Можно, только синтетически
или документ ручного распределения и заполнением долей распределения или документ реклассификации |
|||
|
25
ДиВаH2
27.10.26
✎
16:20
|
(24) спасибо, посмотрю
|
|||
|
26
lirt82
28.10.26
✎
14:51
|
решение:
&НаКлиенте Процедура ЗагрузитьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт Если Результат Тогда СписокОшибок = ВыполнитьЗагрузкуИзФайлаExcelНаСервере(Адрес, Неопределено); ПродолжитьРасчетСтрокНаКлиенте(); Если ЗначениеЗаполнено(СписокОшибок) Тогда ОбщегоНазначенияКлиент.СообщитьПользователю(СписокОшибок); КонецЕсли; Иначе ТекстСообщения = НСтр("ru = 'Файл не был выбран!'"); ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПродолжитьРасчетСтрокНаКлиенте() ОписаниеТаблицыВидовРасчета = ОписаниеТаблицыНачислений(ЭтаФорма); ЗарплатаКадрыРасширенныйКлиент.ВводНачисленийНачислениеПриИзменении(ЭтаФорма, ОписаниеТаблицыВидовРасчета, 2); РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицыВидовРасчета, Истина, Истина); Для Каждого ТекущиеДанные Из Объект.Начисления Цикл СтрокаНачислений = ТекущиеДанные; Если СтрокаНачислений = Неопределено Тогда Возврат; КонецЕсли; СтрокиНачислений = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(СтрокаНачислений); ЗарплатаКадрыРасширенныйКлиентСервер.ВводНачисленийИнициализироватьСтрокиНачислений(ЭтаФорма, СтрокиНачислений, ОписаниеТаблицыВидовРасчета, 2, ТекущиеДанные.Сотрудник); РасчетЗарплатыКлиент.СтрокаРасчетаПриОкончанииРедактирования(ЭтаФорма, ОписаниеТаблицыВидовРасчета); УстановитьДоступностьКомандыЗаполнитьССохранениемИсправленийПриОкончанииРедактированияСтроки(ТекущиеДанные); ТекущиеДанные.Значение1 = ТекущиеДанные.Результат; //ТекущиеДанные.Результат = 0; //все равно Результат очистится при расчете РассчитатьСотрудникаНаСервере(ТекущиеДанные.Сотрудник, ОписаниеТаблицыВидовРасчета, Ложь); КонецЦикла; РассчитатьИтогиПоДокументу(ЭтаФорма); УстановитьОтображениеСообщенияОНеобходимостиПерерасчета(); КонецПроцедуры &НаСервере Функция ВыполнитьЗагрузкуИзФайлаExcelНаСервере(Адрес, ТекстОшибки) Экспорт ТЗ_ИзФайлаExcel = Получить_ТЗ_ИзФайлаExcelНаСервере(Адрес); //+ в первом цикле сформируем массив ссылок сотрудников полученных от физ. лиц ТекстОшибки = ""; ТЗСотрудникиИСуммы = Новый ТаблицаЗначений; ТЗСотрудникиИСуммы.Колонки.Добавить("Сотрудник"); ТЗСотрудникиИСуммы.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(13, 2))); МассивСотрудников = Новый Массив; Для Каждого ТС Из ТЗ_ИзФайлаExcel Цикл ФИО = СокрЛП(ТС.Ф_И_О_); ФизическоеЛицо = Справочники.ФизическиеЛица.НайтиПоНаименованию(ФИО); Если Не ФизическоеЛицо.Пустая() Тогда НашлиСотрудника = КадровыйУчетРасширенный.ОсновнойСотрудникФизЛица(ФизическоеЛицо, Объект.Организация, Объект.Дата); Если НашлиСотрудника <> Неопределено Тогда Если ЗначениеЗаполнено(ТС.ПерерИтого) Тогда МассивСотрудников.Добавить(НашлиСотрудника); Стр = ТЗСотрудникиИСуммы.Добавить(); Стр.Сотрудник = НашлиСотрудника; Стр.Сумма = Окр(ТС.ПерерИтого, 0); КонецЕсли; Иначе ТекстОшибки = ТекстОшибки + НСтр("ru = 'Не найден сотрудник %1.'") + Символы.ПС; ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ФИО); КонецЕсли; Иначе ТекстОшибки = ТекстОшибки + НСтр("ru = 'Не удалось найти физическое лицо %1.'") + Символы.ПС; ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, ФИО); КонецЕсли; КонецЦикла; //- в первом цикле сформируем массив ссылок сотрудников полученных от физ. лиц //+ во втором цикле заполним таб. часть документа Ном = 0; Если МассивСотрудников.Количество() > 0 Тогда КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(МассивСотрудников), "Организация, Подразделение, ГрафикРаботы, ДатаУвольнения", Объект.Дата); НачислениеПремия = ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Премия за месяц"); Для Каждого ДанныеСотрудника Из КадровыеДанныеСотрудников Цикл Если ЗначениеЗаполнено(ДанныеСотрудника.ДатаУвольнения) Тогда ТекстОшибки = ТекстОшибки + НСтр("ru = 'Сотрудник %1 уволен.'") + Символы.ПС; ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Строка(ДанныеСотрудника.Сотрудник)); Ном = Ном + 1; КонецЕсли; Если ДанныеСотрудника.Подразделение = Объект.Подразделение Тогда НС = Объект.Начисления.Добавить(); НС.Сотрудник = ДанныеСотрудника.Сотрудник; НС.Подразделение = ДанныеСотрудника.Подразделение; НС.Начисление = НачислениеПремия; НС.ГрафикРаботы = ДанныеСотрудника.ГрафикРаботы; НС.ГрафикРаботыНорма = ДанныеСотрудника.ГрафикРаботы; НС.ОбщийГрафик = ДанныеСотрудника.ГрафикРаботы; НС.ПериодДействия = Объект.МесяцНачисления; НС.ПериодРегистрацииВремени = Объект.МесяцНачисления; // передадим значение показателя для последующего расчета НС.Результат = ТЗСотрудникиИСуммы.Найти(ДанныеСотрудника.Сотрудник, "Сотрудник").Сумма; КонецЕсли; КонецЦикла; КонецЕсли; Если Ном > 0 Тогда ТекстОшибки = ТекстОшибки + НСтр("ru = 'Загрузка завершена. Найдено %1 уволенных сотрудников (требуют проверки).'"); Иначе ТекстОшибки = ТекстОшибки + НСтр("ru = 'Загрузка завершена.'"); КонецЕсли; ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Ном); Попытка УдалитьФайлы(ИмяВременногоФайла); Исключение КонецПопытки; ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.Начисления, "ПериодДействия", "ПериодДействияСтрокой"); Возврат ТекстОшибки; КонецФункции &НаСервере Функция Получить_ТЗ_ИзФайлаExcelНаСервере(Адрес) Данные = ПолучитьИзВременногоХранилища(Адрес); ИмяВременногоФайла = ПолучитьИмяВременногоФайла(РасширениеExcelФайла); Данные.Записать(ИмяВременногоФайла); Документ = Новый ТабличныйДокумент; Документ.Прочитать(ИмяВременногоФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение); ПЗ = Новый ПостроительЗапроса; ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(Документ.Область(4, 2, Документ.ВысотаТаблицы, 40)); ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять; ПЗ.ЗаполнитьНастройки(); ПЗ.Выполнить(); Возврат ПЗ.Результат.Выгрузить(); КонецФункции |
|||
|
27
paramedic
28.10.26
✎
15:28
|
(24) Реклассификация - просто перенос расходов между статьями. На базу распределения не влияет никак.
Ручное распределение хорошо, но когда у вас 100-150 партий выпуска и под 100 статей, то задавать все коэффициенты вручную ежемесячно - врагу не пожелаешь. А не дай бог зарплата поменяется - все коэффициенты заново считать. |
| Форум | Правила | Описание | Секции | Поиск |