|
ЗУП - программно заполнение док-та "Доход в натуральной форме: не считает НДФЛ | ☑ | ||
---|---|---|---|---|
0
Масянька
04.08.23
✎
09:17
|
Доброе утро!
Универсальным отчетом сравнила ТЧ документов, где считает и созданный программно. Отличий не нашла. А ндфл нет. Что не досмотрела? Спасибо. |
|||
1
asady
04.08.23
✎
09:27
|
(0) в этом документе есть ТЧ "НДФЛ" - она почему-то на форму не выведена
программно заполнить ее нужно |
|||
2
Масянька
04.08.23
✎
09:30
|
(1) Повторяю: "Универсальным отчетом сравнила ТЧ документов, где считает и созданный программно. Отличий не нашла."
|
|||
3
SleepyHead
гуру
04.08.23
✎
09:38
|
(2) Сравни теперь реквизиты документов. А еще хитрая ЗУПа любит хранить данные в регистрах, которые связаны с документом, ну к примеру - документы, учтенные в расчете НДФЛ
Сравнивай вообще все, что связано с другим документом, в котором видно. |
|||
4
asady
04.08.23
✎
09:38
|
(2) ты их не видишь, а они есть.
отладчиком пройдись - может найдешь |
|||
5
Масянька
04.08.23
✎
09:40
|
(3) В реквизитах (различия) - руководитель, ГБ, ответственный.
|
|||
6
Масянька
04.08.23
✎
09:41
|
+(5) Если нажать "Пересчитать сотрудника" - считает.
|
|||
7
Масянька
04.08.23
✎
09:42
|
(4) Да, заполнила я таблицы: физ. лица, начисления, НДФЛ.
Другие версии есть? |
|||
8
Масянька
04.08.23
✎
09:43
|
(3) Открыла движения док-та (рассчитан НДФЛ, не проведен) - пусто.
|
|||
9
Масянька
04.08.23
✎
09:45
|
(3) В этом регистре нет док-та (в котором рассчитан НДФЛ).
|
|||
10
SleepyHead
гуру
04.08.23
✎
10:00
|
(9) Отладчик в ПриСозданииНаСервере, ПриОткрытии, итп
|
|||
11
SleepyHead
гуру
04.08.23
✎
10:02
|
табличные части "Распределение результатов начислений", "распределение результатов удержаний" не заполнены.
|
|||
12
Масянька
04.08.23
✎
10:04
|
(11) Да (не заполнены).
|
|||
13
SleepyHead
гуру
04.08.23
✎
10:05
|
(12) А в документе, который вручную создан, заполнены?
|
|||
14
Масянька
04.08.23
✎
10:08
|
(13) Нет.
|
|||
15
Масянька
04.08.23
✎
10:09
|
Как включить отладку?
База SQL |
|||
16
SleepyHead
гуру
04.08.23
✎
10:10
|
||||
17
asady
04.08.23
✎
10:13
|
(0) Модуль формы ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) https://infostart.ru/1c/articles/1098803/?ysclid=lkw8vzmdpn593039213
В этом обработчике можно дозаполнять реквизиты объекта (через параметр ТекущийОбъект) или провести дополнительные проверки. Есть доступ к данным формы. Важно понимать, что в предыдущем обработчике (в процессе проверки заполнения) произошло «разделение» формы на форму и прикладной объект (пока только в памяти сервера), данные которого будут записаны в базу данных. В обработчике модуля формы ПередЗаписьюНаСервере появляется возможность доступа как к данным основного реквизита формы Объект, а также и к самому объекту, который будет записан через параметр обработчика ТекущийОбъект. Параметр ТекущийОбъект имеет тип класса «объект» в зависимости от типа записываемого объекта (в случае записи документа ДокументОбъект). Т.е. экземпляр класса объект создан, и можно обратиться к его свойствам и методам, но в базу данных ещё не записан. И тут внимание!!! ТекущийОбъект - объект, который реально будет записан в информационную базу и дозаполнять реквизиты нужно именно через параметр ТекущийОбъект. Внесение изменений через реквизит формы объекта Объект не даст никакого результата, его можно только анализировать. В информационную базу эти данные записаны не будут. После завершения транзакции записи, данные из ТекущегоОбъекта запишутся в Объект. Таким образом, все изменения, внесенные в Объект, пропадут. Также нужно понимать, что при программной записи объекта это событие вызываться не будет (!!!!!!). Поэтому если какие-либо алгоритмы должны выполняться при любом способе записи данных объекта, а не только при записи из формы, их следует размещать в обработчике события объекта (ПередЗаписью), а не в обработчике события формы. В текущем документе имеем: &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) РеквизитыВДанные(ТекущийОбъект); Если ЗаполнениеВыполнено <> Неопределено Тогда ТекущийОбъект.ДополнительныеСвойства.Вставить("УдалитьПерерасчетыЗарплаты", Истина); ТекущийОбъект.ДополнительныеСвойства.Вставить("СотрудникиПерерасчетаЗаработка", ОбщегоНазначения.ВыгрузитьКолонку(ЗаполнениеВыполнено, "Ключ")); КонецЕсли; ... |
|||
18
Масянька
04.08.23
✎
10:17
|
(16) Это на сервере?
|
|||
19
Гена
гуру
04.08.23
✎
10:18
|
А может не включена опция в Настройка - Расчет зарплаты - <Выполнять автоматический пересчет документов при их редактировании> ?
Или она не влияет на программно создаваемый док? |
|||
20
Масянька
04.08.23
✎
10:22
|
(16) На сервере все включено.
|
|||
21
Гена
гуру
04.08.23
✎
10:27
|
Я так понимаю, что идёт список десятков сотрудников по путёвкам детей в лагеря. А нельзя не мучится с "два в одном флаконе" и сначала создать программно доки дохода, а потом их следующей приблудой программно же и рассчитать/провести?
|
|||
22
Масянька
04.08.23
✎
10:31
|
(21) А "программно рассчитать" это как?
Я просто уже не знаю, и не понимаю... |
|||
23
Гена
гуру
04.08.23
✎
10:38
|
(22) Это к программистам. Просто по логике проще сначала создать кучу однотипных доков, а затем уже их перебирать, рассчитывать, проводить. Нет?
|
|||
24
SleepyHead
гуру
04.08.23
✎
10:46
|
(23) "Ой, ежики, идите нахрен, я не тактик, я стратег" (с)
(14) Не верю. Мне приходилось такие табличные части заполнять, без них документ просто отказывался проводиться. |
|||
25
Гена
гуру
04.08.23
✎
10:47
|
(24) матершинник )
|
|||
26
SleepyHead
гуру
04.08.23
✎
11:00
|
(25) Вчера была опечатка, если вы про нее ))
|
|||
27
Масянька
04.08.23
✎
11:17
|
||||
28
SleepyHead
гуру
04.08.23
✎
11:40
|
(27) Это документ, созданные вручную? Который проводится?
|
|||
29
Масянька
04.08.23
✎
11:45
|
(28) Это все документы - пусто.
|
|||
30
SleepyHead
гуру
04.08.23
✎
11:45
|
Посмотрел в одной из своих реальных баз, да, не заполняются эти две таблицы, но только в том случае, если нет распределения по статьям финансирования или по территориям/условиям труда. Заполнены только таб части НДФЛ и Начисления.
|
|||
31
Масянька
04.08.23
✎
11:49
|
(30) Чего делать-то?
|
|||
32
SleepyHead
гуру
04.08.23
✎
11:52
|
(31) Дальше разбираться. Ты вот смотришь какими-то разрозненными кусками, а нужно взять документ, который создан вручную и проводится, и вывести все его реквизиты в таблицу. Рядом вывести реквизиты документа, который не проводится, и посмотреть, чем отличаются. То же по каждой табличной части.
Вся логика проведения зашита в менеджере этого документа, так что советы по воспроизведению расчетов идут мимо, это тупиковый путь. Документ проводится по данным, записанным в объкте. |
|||
33
asady
04.08.23
✎
12:03
|
(32) - не совсем прав
читай (17) до просветления |
|||
34
SleepyHead
гуру
04.08.23
✎
12:05
|
(33) Не понял, что особенного дает 17 ? Заполняешь объект сразу как нужно и записываешь с проведением.
|
|||
35
Масянька
04.08.23
✎
12:05
|
(33) До какого просветления?
Я создаю новый док-т, заполняю, записываю. Теперь записывать нужно 2 раза? |
|||
36
SleepyHead
гуру
04.08.23
✎
12:06
|
(35) Там либо очень сильное колдунство, которое я не понимаю, либо он ошибается. Предложенный метод поможет, если ты работаешь с формой. А ты, насколько я понимаю, записывешь без формы, а создаешь документы программно.
Причем тут вообще методика из 17, непонятно. |
|||
37
asady
04.08.23
✎
12:09
|
(36) разработчики 1С сделали некую фичу - я привел фрагмент из формы документа "ДоходВНатуральнойФорме" - из-за которой проведение из формы и без формы будет всегда иметь разные результаты
|
|||
38
SleepyHead
гуру
04.08.23
✎
12:12
|
(37) Там вообще отрабатывается запись в фоне, насколько я понял. Все равно не врубаюсь, в чем тут логика - не должны результаты проведения отличаться.
|
|||
39
Gucci76
04.08.23
✎
12:13
|
(35) А как заполняли? Руками или экспортной процедурой из формы документа?
|
|||
40
SleepyHead
гуру
04.08.23
✎
12:13
|
ну да, есть там своя логика, например вот это вызывается
Но опять же, в итоге проведение все равно идет из модуля объекта по данным объекта. В форме всего лишь обеспечивается правильное заполнение данных объекта. Процедура РеквизитыВДанные(ТекущийОбъект) ТекущийОбъект.Показатели.Очистить(); ОписанияТаблиц = Новый Массив; ОписанияТаблиц.Добавить(ОписаниеТаблицыНачислений()); ОписанияТаблиц.Добавить(ОписаниеТаблицыПерерасчетов()); ОписанияТаблиц.Добавить(ОписаниеТаблицыЗависимыеНачисления()); ЗарплатаКадрыРасширенный.ВводНачисленийРеквизитВДанные(ЭтотОбъект, ТекущийОбъект, ОписанияТаблиц, 2); ЗарплатаКадрыРасширенный.ВводРаспределенияРезультатовРасчетаРеквизитВДанные(ЭтотОбъект, ТекущийОбъект, ОписанияТаблицДляРаспределенияРезультата()); РасчетЗарплатыРасширенныйФормы.РаспределениеПоТерриториямУсловиямТрудаРеквизитВДанные(ЭтотОбъект, ТекущийОбъект, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда()); КонецПроцедуры |
|||
41
Масянька
04.08.23
✎
12:18
|
(39) Кусок:
&НаСервере Процедура СоздатьСамДокумент(ДатаДохода, СписокДанных) ДокументНачисления = Документы.ДоходВНатуральнойФорме.СоздатьДокумент(); ДокументНачисления.Организация = Справочники.Организации.ОрганизацияПоУмолчанию(); ДокументНачисления.Дата = ДатаДохода; ДокументНачисления.МесяцНачисления = ДатаДохода; ДокументНачисления.Начисление = Объект.ВидРасчета; ДокументНачисления.ДатаПолученияДохода = ДатаДохода; Попытка ДокументНачисления.Записать(РежимЗаписиДокумента.Запись); Сообщить("Записан документ: " + ДокументНачисления.Ссылка); Исключение Сообщить("Не удалось записать документ: " + ДокументНачисления + " по причине:" + Символы.ПС + ОписаниеОшибки()); Возврат; КонецПопытки; Для Каждого СтрокаТаблицы Из СписокДанных Цикл мФизическоЛицо = ПолучитьСотрудника(СтрокаТаблицы.Код, "ФизическоеЛицо"); мСотрудник = ПолучитьСотрудника(СтрокаТаблицы.Код, "Ссылка"); мПодразделение = ПолучитьКадровыеДанныеСотрудника(ДатаДохода, мФизическоЛицо, "Подразделение"); мГрафик = ПолучитьГрафикСотрудника(мСотрудник, ДатаДохода); мМесяцНалоговогоПериода = ДатаДохода; мКатегорияДохода = Объект.ВидРасчета.КатегорияДохода; мРезультат = СтрокаТаблицы.Результат; мДатаНачала = СтрокаТаблицы.ДатаНачала; мДатаОкончания = СтрокаТаблицы.ДатаОкончания; НоваяСтрокаФизическиеЛица = ДокументНачисления.ФизическиеЛица.Добавить(); НоваяСтрокаФизическиеЛица.ФизическоеЛицо = мФизическоЛицо; НоваяСтрокаНачисления = ДокументНачисления.Начисления.Добавить(); НоваяСтрокаНачисления.Сотрудник = мСотрудник; НоваяСтрокаНачисления.Подразделение = мПодразделение; НоваяСтрокаНачисления.ПериодДействия = мМесяцНалоговогоПериода; |
|||
42
asady
04.08.23
✎
12:18
|
(40) скорее всего причина в том что данные объекта при программном заполнении заполняются программистом не так как в типовой процедура РеквизитыВДанные()
|
|||
43
Gucci76
04.08.23
✎
12:24
|
На форме документа есть экспортная процедура
Процедура ПерезаполнитьДанныеФормыНаСервере(Знач Сотрудники, СохранятьИсправления = Истина) Экспорт попробуйте ее использовать |
|||
44
Масянька
04.08.23
✎
12:28
|
(43) А как её использовать в обработке?
|
|||
45
Gucci76
04.08.23
✎
12:32
|
&НаКлиенте
Процедура ЗаполнитьДокумент() ЗаполнитьДокументНаСервере(); // заполняете ТЧ и реквизиты шапки документа МассивСотрудников = Новый Массив; // заполнить как надо массивСотрудников ПараметрыФормы = Новый Структура("Ключ",Объект.ДокументСсылка); УпрФорма = ПолучитьФорму("Документ.ДоходВНатуральнойФорме.ФормаОбъекта",ПараметрыФормы,ЭтаФорма); //УпрФорма.СотрудникиКРасчету = МассивСотрудников; УпрФорма.ПерезаполнитьДанныеФормыНаСервере(МассивСотрудников); УпрФорма.Модифицированность = Истина; УпрФорма.Открыть(); КонецПроцедуры |
|||
46
Gucci76
04.08.23
✎
12:32
|
Приблизительно так
|
|||
47
Hungry Programmer
04.08.23
✎
12:35
|
Ужас, шел 2023-й год. Создать и рассчитать документ на сервере в ЗУПе по прежнему большой геморрой без обращения к форме (
|
|||
48
Saval1986
04.08.23
✎
13:31
|
(0) может конечно глупай вопрос, но все же задам т.к. сам попадал )) после программного заполнения формы как записываете документ? Режим записи - проведение?
|
|||
49
SleepyHead
гуру
04.08.23
✎
14:59
|
Вот такой код прекрасно работает
Ссылка на обработку на яндекс-диске, пока живая, потом удалю https://disk.yandex.ru/d/RGwivp_YyDBBNw &НаСервере Процедура СоздатьДоходВНатуральнойФормеНаСервере() СтрТК=КадровыйУчет.КадровыеДанныеСотрудника(Истина,Объект.Сотрудник,"ФизическоеЛицо,Подразделение,ГрафикРаботы",Объект.ДатаПолученияДохода); // всегда создаем новый документ Док = Документы.ДоходВНатуральнойФорме.СоздатьДокумент(); Док.Дата = Объект.ДатаПолученияДохода; Док.МесяцНачисления = НачалоМесяца(Объект.ДатаПолученияДохода); Док.Организация = Объект.Организация; Док.Начисление = Объект.Начисление; Док.ДатаПолученияДохода = Объект.ДатаПолученияДохода; Стр=Док.Начисления.Добавить(); Стр.Сотрудник = Объект.Сотрудник; Стр.Результат = Объект.Сумма; Стр.ФиксРасчет = Истина; Стр.ФиксЗаполнение = Истина; Стр.ИдентификаторСтрокиВидаРасчета = 1; Стр.ПериодДействия = НачалоМесяца(Объект.ДатаПолученияДохода); Стр.ГрафикРаботы = СтрТК.ГрафикРаботы; Стр.ГрафикРаботыНорма = СтрТК.ГрафикРаботы; Стр.ОбщийГрафик = СтрТК.ГрафикРаботы; Стр.МестоПолученияДохода = СтрТК.Подразделение; Стр.ПериодРегистрацииВремени = Стр.ПериодДействия; Стр.ДатаНачала = НачалоМесяца(Объект.ДатаПолученияДохода); Стр.ДатаОкончания = КонецМесяца(Объект.ДатаПолученияДохода); Стр=Док.НДФЛ.Добавить(); Стр.ФизическоеЛицо=СтрТК.ФизическоеЛицо; Стр.МесяцНалоговогоПериода = Объект.ДатаПолученияДохода; Стр.Подразделение = СтрТК.Подразделение; Стр.Налог = Окр(Объект.Сумма*0.13,0,РежимОкругления.Окр15как20); Стр.ИдентификаторСтрокиНДФЛ = 1; Стр.ФиксРасчет = Истина; Стр.ФиксСтрока = Истина; Стр.КатегорияДохода = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Начисление, "КатегорияДохода"); Попытка Док.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный); Объект.Ссылка = Док.Ссылка; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки;; КонецПроцедуры &НаКлиенте Процедура СоздатьДоходВНатуральнойФорме(Команда) Если НЕ ПроверитьЗаполнение() Тогда Возврат КонецЕсли; СоздатьДоходВНатуральнойФормеНаСервере(); КонецПроцедуры |
|||
50
SleepyHead
гуру
04.08.23
✎
15:01
|
Форма документа открывается, табличная часть заполнена, движения выполнены
Написано минут за 5-10 наверное со всеми проверками, без регистрации, смсм и прочих извращений с вызовом формы документа По хорошему бы еще заполнить показатели начисления, но если в табличных частях начислений и НДФЛ поставить Фискрасчет, то работает и без лишних телодвижений. |
|||
51
Масянька
04.08.23
✎
15:26
|
(48) Запись. Бухи должны проверить.
|
|||
52
Масянька
04.08.23
✎
15:27
|
(49) Налог рассчитать (ручками) и я могу.
При добавлении строки (в созданном программно документе), при перерасчете сотрудника - НДФЛ автоматом садится. Идеал - именно автомат-расчет. |
|||
53
Гена
гуру
04.08.23
✎
17:19
|
(52) Может всё-таки разными процедурами? Сначала сделать доки, а потом заходить и спокойно рассчитывать?
|
|||
54
SleepyHead
гуру
04.08.23
✎
18:21
|
(52) ну так кури процедуру формы РассчитатьСотрудниковНаСервере
|
|||
55
SleepyHead
гуру
04.08.23
✎
18:24
|
Хотя там и завязано все на форму.. А вообще сдается мне, кто-то просто работать не хочет, я про бухгалтерию.
Если сотрудников в документе много, то намного проще к форме прикрутить процедуру загрузки суммы натурального дохода. А потом уже после загрузки буху не составит труда выделить сотрудников и надать кнопку пересчета. |
|||
56
ДиВаH2
05.08.23
✎
15:26
|
В ЗУП 3 многое завязано на методы в форме, еще часто добавляют программно реквизиты в тч на форме, чтобы использовать в алгоритмах. Приходится программно заполнять, потом открывать форму, вызывать методы пересчета и закрывать.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |