Имя: Пароль:
1C
1С v8
ЗУП 3.1 Программный перерасчёт документа отпуска
0 DomenER
 
04.06.21
16:27
Всем привет.

Запросом выбираю нужные мне документы отпуска. Далее в цикле меняю данные табличной части на стороне сервера через ПолучитьОбъект по передаваемой ссылке с клиента.

А вот как запустить пересчитать не понятно (НДФЛ хочу пересчитать).

На клиенте пытаюсь запустить на клиенте
ФормаДокумента = ПолучитьФорму("Документ.Отпуск.Форма.ФормаДокумента", Новый Структура("Ключ",СсылкаДокументаОтпуска), ЭтаФорма);
ФормаДокумента.ПерезаполнитьНачисленияСотрудника(СтрокаТЧотпусков.Сотрудник,истина,Ложь);

И ругается, что "Данные были изменены или удалены другим пользователем". А вот если зайти в документ, подправить данные, то документ пересчитывается нормально.

И также показывает, если использовать следующее
РасчетЗарплатыКлиент.СтрокаРасчетаПриОкончанииРедактирования(ФормаДокумента, ОписаниеТаблицыНачислений(Истина))

ОписаниеТаблицыНачислений - это типовая функция конфигурации.

Как программно запустить перерасчёт?
1 Serg_1960
 
04.06.21
16:56
Имхо, надо открыть форму объекта, а не его ссылки. Иначе будет ругаться на попытку сохранить этот объект после того, как форма изменит и сохранит объект, полученный её из ссылки.
2 mikecool
 
04.06.21
17:00
наверняка есть серверные вызовы пересчета - ищи их
3 DomenER
 
04.06.21
17:09
(2) Пока не нашёл. Выполняется очень много кода...
4 Фрэнки
 
04.06.21
18:40
(3) На самом деле, с такой фигней, как перерасчет НДФЛ, бороться достаточно тяжело. Я бы посмотрел, имеет ли смысл выполнить перерасчет НДФЛ в том списке лиц, который был обработан в отдельном документе для перерасчёта НДФЛ. Понимаю, что это костыль, но конфиг реально заточен под интерактивные действия расчетчика, а не программиста.
5 DomenER
 
05.06.21
13:37
Помогла разобраться одна обработка с инфостарта.

//Получил форму по ссылке
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", СсылкаДокументаОтпуска);
ПараметрыФормы.Вставить("ПерезаполнитьНачисления", Ложь);
ФормаДокумента = ПолучитьФорму("Документ.Отпуск.Форма.ФормаДокумента", ПараметрыФормы, ЭтаФорма);
ФормаДокумента.Открыть();

//Далее пересчитываю
ФормаДокумента.ПерезаполнитьНачисленияСотрудника(СтрокаТЧотпусков.Сотрудник,истина,Ложь);
// Потом провожу и закрываю
ФормаДокумента.КомандаПровестиИЗакрыть(ФормаДокумента.Команды.КомандаПровестиИЗакрыть);


Если нужно перезаполнить начисления, то я использовал:
ФормаДокумента.РассчитатьНачисления(ФормаДокумента.Команды.Рассчитать);
6 SleepyHead
 
гуру
05.06.21
14:37
(0) А потом окажется, что по этим документам уже есть ведомости на выплату.
В результате пересчета НДФЛ возникают последствия, которые тебе еще аукнутся - пересчитанный отпуск попадет в очередную ведомость, часть дохода по отпуску при этом переедет на дату новой ведомости.
И начнется очередной раунд борьбы за НДФЛ.

Устранять нужно причину ошибок, а не их следствия.
7 DrZombi
 
гуру
05.06.21
21:32
(0) Никак, нет этого у ЗУП-а, да, только через форму, т.е. на сервере это можно организовать, но вам не понравится.

Пример, как обойти ограничения от 1С...
https://infostart.ru/1c/articles/317865/
https://infostart.ru/public/1274701/
8 DrZombi
 
гуру
05.06.21
21:35
+(7) Спам бот робит на этой же снове.