Имя: Пароль:
1C
1С v8
Программный пересчет строки сотрудника в разовом начислении.
0 gul_Sayan
 
03.11.23
10:06
Есть задача Нужно программно скорректировать строку начисления (не все) в документе разовое начисление.
Строку то скорректировал, а вот как пересчитать НДФЛ и Удержания не открывая формы?
1 SleepyHead
 
03.11.23
10:07
(0) Смотри, что происходит по кнопке "Пересчитать сотрудника". И можно ли обойтись без открытия формы, работая только с коллекциями, связанными с документом.
2 gul_Sayan
 
03.11.23
10:22
По кнопке передаётся в том числе и форма, а вот форму то открывать и не хочется, тем паче что иногда требуется пересчитать 1 строку из 100.
3 SleepyHead
 
03.11.23
10:24
(2) Передай туда структуру, которая повторяет то, что содержат данные формы.
4 Масянька
 
03.11.23
10:24
(0) Все пересчеты лежат в модуле формы. И работают с ТЧ документа.
Такое вот ноу-хау от 1С.
5 Масянька
 
03.11.23
10:27
(4) РасчетЗарплатыРасширенныйКлиентСервер.УстановитьПланируемуюДатуВыплаты(ВладелецФормы, ОписаниеДокумента(ВладелецФормы))
6 gul_Sayan
 
03.11.23
10:34
Короче похоже без открытия формы не обойтись :-(
7 SleepyHead
 
03.11.23
10:36
(2)

Это из модуля формы документа. Все считается на сервере
Сдается мне, переписать этот код без формы особого труда не составит.

&НаСервере
Процедура ПересчитатьНДФЛ()
    
    УстановитьПривилегированныйРежим(Истина);
    МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(Объект.МесяцНачисления, Объект.Организация);
    Сотрудники = ОбщегоНазначения.ВыгрузитьКолонку(Объект.Начисления, "Сотрудник");
    ФизическиеЛицаСотрудников = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(Сотрудники, "ФизическоеЛицо");
    ФизическиеЛица = ОбщегоНазначения.ВыгрузитьКолонку(ФизическиеЛицаСотрудников, "Значение");
    ЗаполнитьНастройкиМенеджераРасчета(ФизическиеЛица, МенеджерРасчета);
    МенеджерРасчета.НастройкиРасчета.ФизическиеЛица = ФизическиеЛица;
    
    Если ОтложитьРасчетНалогаДоРасчетаЗарплатыВКонцеМесяца Тогда
        Объект.НДФЛ.Очистить();
        Объект.КорректировкиВыплаты.Очистить();
        Объект.ПримененныеВычетыНаДетейИИмущественные.Очистить();
    КонецЕсли;
    
    ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета);
    МенеджерРасчета.ПересчитатьНДФЛ();
    РасчетЗарплатыВДанныеФормы(МенеджерРасчета.Зарплата);
    ЗаполнитьНалогиУдержания();
    УстановитьПривилегированныйРежим(Ложь);
    
КонецПроцедуры
8 El_Duke
 
03.11.23
10:46
(7) "Сдается мне, переписать этот код без формы особого труда не составит"

Очень опасный инструмент может получиться. Пересчитали начисление, налоги и ... никаких следов. Кто, когда, зачем ?
Пострашнее чем фаустпатрон. Особенно в прошедшем периоде, когда пересчитанный НДФЛ и остальное надо пересдать корректировкой 6-НДФЛ, перс.сведений и тд.

В Разовом начислении есть каноническая ссылка Исправить, хоть следы останутся для последующего следствия
9 SleepyHead
 
03.11.23
10:51
(8) Хочет человек создать документ, заполнить и рассчитать. Под его ответственность.

Мне этот момент интересен чисто технически - можно или нет.
10 gul_Sayan
 
03.11.23
11:44
(7) Спасибо.
11 gul_Sayan
 
03.11.23
11:46
(8) Документы текущего периода, так что корректировка вполне возможна, да и так первоначально собирались документ открывать и пересчитывать сотрудников.
12 SleepyHead
 
03.11.23
11:48
(11) А может, все же по кнопке "Исправить" и не грешить?
13 Масянька
 
03.11.23
11:51
(11) По законам жанрам (ЗУП), если ЗП ещё не закрыта (рассчитана, выплачена) - корректируем в док-те, иначе - исправляем док-т.
Не забываем про межрасчетные выплаты.
14 El_Duke
 
03.11.23
13:11
(11) Если доки текущего периода, то зачем вообще нужна эта задача ?
15 Gucci76
 
03.11.23
13:27
ПерезаполнитьДанныеФормыНаСервере(МассивСотрудников,Истина);