Имя: Пароль:
1C
1С v8
ЗУП 3.1. Командировка не учитывается при расчете аванса
0 Антиквар
 
09.06.19
10:07
Всем привет!
У нас аванс считается расчетом за первую половину месяца.
И если в это время сотрудник находился в командировке, то дни командировки исключаются из расчета аванса.
Бухгалтеров обязали выплачивать аванс с учетом дней командировки, т.е. чтобы при расчете аванса командировка была как явка на работу.
Кучу нормативных актов под нос сунули, в общем пришли к выводу, что командировка - это не причина уменьшать аванс.
Я так понимаю стандартными средствами это не настроить?
Кто-нибудь решал такую проблему?
1 SleepyHead
 
гуру
09.06.19
10:25
Регистрируй неявку на этот период по невыясненной причине, после расчёта аванса удаляй.
2 Антиквар
 
09.06.19
10:30
(1) А в чем смысл неявки? Неявка не уменьшает аванс? Но командировка то заведена уже в 1С к этому времени. Аванс 24-го числа
3 Антиквар
 
09.06.19
11:03
Попробую поставить у командировки скрытую галочку "Начисляется за первую половину месяца", может прокатит...
4 Фрэнки
 
09.06.19
11:48
Т.е тебе нужно, чтобы Аванс начислялся за все дни, даже если эти дни уже оплачиваются Командировкой?
А оплата Командировки включена в Заработную плату, так?

И получается, если командировка есть, и она попала на первую половину месяца, то в Аванс ничего не попадает?
5 Фрэнки
 
09.06.19
11:48
И в самом тяжелом случае возникает проблема, что Аванс платить нужно, а там сумма "ноль"
6 Фрэнки
 
09.06.19
11:50
Перед расчетом Аванса у таких работников можно индивидуально устанавливать способ расчета Аванса, который не будет учитывать неявки.
7 Akela has missed
 
09.06.19
12:07
(0) Как вариант можно настроить ВР "Доплата до оклада в командировке" https://buh.ru/articles/documents/52450/ и сказать что он начисляется при расчете первой половины месяца.
8 Фрэнки
 
09.06.19
12:22
(7) кстати, в статье не достает описаний для 3.1.9 - если делать так, как в статье, то доплата не работает

Ну и сам по себе смысл привязывать Аванс к доплате до Оклада... Сама доплата не будет соответствовать сумме Аванса и по способы выплаты эту доплату также нужно привязывать к выплате с зарплатой, как и саму командировку
9 Akela has missed
 
09.06.19
12:25
(8) Смысл в том, что командировка вообще не начисляется, и поэтому сумма доплаты всегда будет равна сумме оклада, который мог бы быть за время командировки.
10 Akela has missed
 
09.06.19
12:31
А чего не хватает для 3.1.9? У меня все работает.
11 Фрэнки
 
09.06.19
12:43
(10) ну сегодня базы перед глазами нет, но я на неделе настраивал доплату до фактического заработка и по этой статье и той, что  на ИТС расписано. Не получилось.
12 SleepyHead
 
гуру
09.06.19
16:35
(2) Да ни в чем, невнимательно прочитал вопрос. Ответ не читать, он неправильный.
13 SleepyHead
 
гуру
09.06.19
16:37
(11) Аванс + командировка = двойная оплата за одно и то же время, imho.

Аванс - оплата по окладу, а командировка за те же дни оплата по среднему. Тот случай, когда задача не имеет решения ввиду ее неправильной постановки.
14 Фрэнки
 
09.06.19
16:59
(13) А как правильно?

Есть требование по выплатам заработной платы дважды в месяц.
Есть командировка, с длительностью в несколько дней. Выплата командировочных установлена "С заработной платой"
Стоит срок выдачи Аванса. С расчетом по отработанным дням.
В расчет аванса пойдет сумма меньше или даже не пойдет ничего, т.к. "К" просто не включена в отработанные дни.

А можно выдать Аванс и при выплате Зарплаты остаток взаиморасчетов.
15 Антиквар
 
09.06.19
22:10
(14) Всё верно. Именно так и надо.
(7) Спасибо, почитаю статью.

Я ещё попробую что написал в (3), по-моему на эту галочку всё завязано и ничего она не должна испортить, если поставить её для командировки.
16 Фрэнки
 
09.06.19
23:16
все-таки самое простое - изменить способ расчета Аванса для каждого такого работника, которому посчастливилось оказаться в достаточно длительной командировке.  Кстати, можно для таких случаев и в допсоглашение к тд вписать соответствующую оговорку, которая будет оправдывать завышенный размер аванса или немного заниженный.
17 Антиквар
 
09.06.19
23:26
(16) Думаю бухгалтера на это не согласятся. У нас очень много сотрудников и очень много командировок. А тут вручную отслеживать, менять аванс, затем не забыть вернуть. А некоторые сотрудники могут чуть ли не каждый месяц в командировки ездить...
18 Фрэнки
 
09.06.19
23:35
(17) его не нужно "забыть вернуть"
Уточни у своих бухгалтеров из каких соображений они устанавливали сотрудникам именно этот способ расчета аванса. Вангую, что такое состояние аванса их устроит точно также, как и то, которое они прописали ранее.

Я от них обычно слышу, что есть месяц Январь и выплатить за период 1 - 15 января половину оклада у них какой-то кризис. Следующий кризис - 8 марта. Майские праздники и меньше всего их заботит Июнь и Ноябрь почему-то.
19 Dmitriy_
Kolesnikov
 
10.06.19
04:09
Я решал эту задачу в 3.1.7, продолжает работать в 3.1.8.
Никакие галочки вам не помогут.
Дорабатывал МенеджерРасчетаЗарплаты.

И аванс выплачиваем из расчета, как будто сотрудник эти дни не в командировке.
20 SleepyHead
 
гуру
10.06.19
05:35
(14) А разве правильно выдавать зарплату за 1 половину месяца, если человек ее не заработал?
21 Провинциальный 1сник
 
10.06.19
06:25
Вообще надо законодательно отменить выплату зарплаты "каждые полмесяца", это абсурд, когда расчетный период месяц. А про аванс ввести сточку "выплачивается в сроках и размерах по соглашению между работником и работодателем, но не выше размера среднемесячной зарплаты".
22 Фрэнки
 
10.06.19
09:01
(20) (вкл шутка) Не, я не против - зачем вообще что-то выплачивать работникам, тем более, что командировка - это наверное такой особый вид отпуска или даже не отпуска, а прогул это самый натуральный.
(откл шутка)

Хотя... например, Отпускные не просто положено выплачивать отдельной ведомостью, а даже в строго оговоренный срок...
несколько дней до его начала, а не в какое-то другое удобное работодателю время.

Вообще, внутри оформления командировки есть переключатель, на способ ее оплаты (в Зарплату или отдельной ведомостью)
Можно предположить, что по задумке разработчиков в этом как раз случае этот переключатель нужно применять.
Но это все равно не до конца продумано, имхо.
23 El_Duke
 
гуру
10.06.19
09:32
(0) Не осилил в чем проблема

В доке Командировка есть поле Выплата, установите его в значение С авансом или В межрасчетный период и можете выплачивать когда вам хочется.

Нафига извращаться с малопонятными способами ?
24 Антиквар
 
10.06.19
09:47
(19) "Никакие галочки вам не помогут"
Да, уже проверил. Сделал как хотел в (3) - не получилось. Как я понял, кроме флажка "Начисляется за первую половину месяца" у вида расчета не должен быть заполнен реквизит "Вид документа". Но у командировки этот реквизит автоматически стоит "Командировка" и очищать его нельзя.

"Дорабатывал МенеджерРасчетаЗарплаты." - я пока не нашел где в коде исправления вносить. Не подскажете? Правда у нас 3.1.5 ещё.
25 Антиквар
 
10.06.19
10:09
(23) Так то вроде логично и красиво. Главное в командировках до аванса ставить выплату "в аванс", а после аванса "в зарплату".
В итоге аванс не учитывает командировку, но сама командировка тоже выплачивается. Т.е. всё прозрачно и красиво.
Я эту тему задвинул тоже, но что-то не рассматривают этот вариант, не знаю почему у нас уперлись, что выплачивать командировку надо с зарплатой, может какими-то локальными актами это определяется и не хотят менять... Может другие сложности...
26 Антиквар
 
10.06.19
10:10
Есть ещё такая мысль - не проводить командировки до даты аванса :)
По-моему это самое простое, чтобы вообще ничего не менять.
27 Фрэнки
 
10.06.19
10:19
(26) в смысле, для оформления командировок используется роль Кадровика. Этой роли им вполне хватает, чтоб распечатать нужные листы.
Затем расчетчики проводят их только когда уже близок срок расчетов Начисления ЗП за весь месяц.
28 El_Duke
 
гуру
10.06.19
10:28
(25) Резьба по коре дуба - большое и сложное искусство
В вашем случае корой выступает верхний слой мозгового вещества постановщика задачи из (0)

В конфе есть типовой готовый инструмент для решения задачи, но нет же, душа требует изврата !

Соболезную коллега, резец вам в руки. Воспользоваться им придется, ибо реализация хотелки из (0) приведет к постоянным перерасчетам начислений.
29 Dmitriy_
Kolesnikov
 
10.06.19
10:44
Вот что нашел, если чего-то не хватает - сообщите. Делал год назад, сейчас просто скопировал, не вникая.

Общий модуль РасчетЗарплатыРасширенныйПереопределяемый


// Процедура предназначена для добавления строк начислений зарплаты сотрудникам.
// Выполняется при выявлении начислений, составляющих оплату труда (при начислении зарплаты за месяц).
//
// Параметры
//    - МенеджерВременныхТаблиц, содержащий ВТСотрудникиПериоды с полями Сотрудник, Организация, ДатаНачала, ДатаОкончания.
//    - ДополнительныеНачисления - таблица значений с полями
//    * Сотрудник
//    * Организация
//    * Начисление
//    * ДатаНачала
//    * ДатаОкончания
//
Процедура ЗаполнитьДополнительныеНачисленияЗарплаты(МенеджерВременныхТаблиц, ДополнительныеНачисления) Экспорт
        // Колесников 14.08.2018 - ЗИ от Задонских - в аванс должны попадать командировки и учебные отпуска // Исправлено 17.08.2018
        Запрос = Новый Запрос("выбрать * из ВТНастройкиРасчета");
        Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
        выборка = Запрос.Выполнить().Выбрать();
        Если выборка.НайтиСледующий("ПерваяПоловинаМесяца", "Параметр") и выборка.Значение тогда
                //выборка.НайтиСледующий("ДатаНачала", "Параметр");
                //Запрос.УстановитьПараметр("ДатаНачалаПериода", Выборка.Значение);
                //выборка.НайтиСледующий("ДатаОкончания", "Параметр");
                //Запрос.УстановитьПараметр("ДатаОкончанияПериода", Выборка.Значение);
                Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
                               |    НачисленияУдержанияПоСотрудникам.Сотрудник КАК Сотрудник,
                               |    НачисленияУдержанияПоСотрудникам.Организация КАК Организация,
                               |    НачисленияУдержанияПоСотрудникам.НачислениеУдержание КАК Начисление,
                               |    ВЫБОР
                               |        КОГДА НачисленияУдержанияПоСотрудникам.ДатаНачала >= ВТСотрудникиПериоды.ДатаНачала
                               |            ТОГДА НачисленияУдержанияПоСотрудникам.ДатаНачала
                               |        ИНАЧЕ ВТСотрудникиПериоды.ДатаНачала
                               |    КОНЕЦ КАК ДатаНачала,
                               |    ВЫБОР
                               |        КОГДА НачисленияУдержанияПоСотрудникам.ДатаОкончания <= ВТСотрудникиПериоды.ДатаОкончания
                               |            ТОГДА НачисленияУдержанияПоСотрудникам.ДатаОкончания
                               |        ИНАЧЕ ВТСотрудникиПериоды.ДатаОкончания
                               |    КОНЕЦ КАК ДатаОкончания,
                               |    НачисленияУдержанияПоСотрудникам.ДокументОснование КАК ДокументОснование
                               |ИЗ
                               |    РегистрНакопления.НачисленияУдержанияПоСотрудникам КАК НачисленияУдержанияПоСотрудникам
                               |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСотрудникиПериоды КАК ВТСотрудникиПериоды
                               |        ПО НачисленияУдержанияПоСотрудникам.Организация = ВТСотрудникиПериоды.Организация
                               |            И НачисленияУдержанияПоСотрудникам.Сотрудник = ВТСотрудникиПериоды.Сотрудник
                               |            И НачисленияУдержанияПоСотрудникам.ДатаОкончания >= ВТСотрудникиПериоды.ДатаНачала
                               |            И НачисленияУдержанияПоСотрудникам.ДатаНачала <= ВТСотрудникиПериоды.ДатаОкончания
                               |ГДЕ
                               |    (НачисленияУдержанияПоСотрудникам.НачислениеУдержание.КатегорияНачисленияИлиНеоплаченногоВремени = ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.ОплатаКомандировки)
                               |            ИЛИ НачисленияУдержанияПоСотрудникам.НачислениеУдержание.КатегорияНачисленияИлиНеоплаченногоВремени = ЗНАЧЕНИЕ(Перечисление.КатегорииНачисленийИНеоплаченногоВремени.ОплатаПоСреднемуЗаработку))
                               |    И (НачисленияУдержанияПоСотрудникам.НачислениеУдержание.ВидДокументаНачисления = ЗНАЧЕНИЕ(Перечисление.ВидыДокументовНачисления.Командировка)
                               |            ИЛИ НачисленияУдержанияПоСотрудникам.НачислениеУдержание.ВидДокументаНачисления = ЗНАЧЕНИЕ(Перечисление.ВидыДокументовНачисления.ОплатаПоСреднемуЗаработку))
                               |    И НачисленияУдержанияПоСотрудникам.Сторно = ЛОЖЬ
                               |    И НЕ НачисленияУдержанияПоСотрудникам.ДокументОснование ЕСТЬ NULL
                               |    И НачисленияУдержанияПоСотрудникам.НачислениеУдержание.НачисляетсяПриРасчетеПервойПоловиныМесяца
                               |
                               |УПОРЯДОЧИТЬ ПО
                               |    Сотрудник,
                               |    Начисление
                               |АВТОУПОРЯДОЧИВАНИЕ";                  
                тзНУ = Запрос.Выполнить().Выгрузить();
                для каждого стрНУ из тзНУ цикл
                        стрДН = Неопределено;
                        струкОтбор = новый структура("Сотрудник, Организация, Начисление", стрНУ.Сотрудник, стрНУ.Организация, стрНУ.Начисление);
                        масСтрДН = ДополнительныеНачисления.НайтиСтроки(струкОтбор);
                        НачислениеПересекаетсяСИмеющимся = ложь;                        
                        для каждого стрДН из масСтрДН цикл
                                Если стрНУ.ДатаНачала <= стрДН.ДатаОкончания и стрНУ.ДатаОкончания >= стрДН.ДатаНачала тогда //хотя бы один день пересекается
                                        НачислениеПересекаетсяСИмеющимся = истина;
                                        Прервать;
                                КонецЕсли;                      
                        КонецЦикла;
                        Если НЕ НачислениеПересекаетсяСИмеющимся тогда
                                стрДН = ДополнительныеНачисления.Добавить();
                                ЗаполнитьЗначенияСвойств(стрДН, стрНУ);
                        КонецЕсли;
                КонецЦикла;
        КонецЕсли;
        // Конец Колесников 14.08.2018 // // //
КонецПроцедуры
30 Антиквар
 
10.06.19
12:24
(27) Но если командировка сделана только кадровиком, то аванс ведь начисляется полностью? Аванс уменьшается, если командировка проведена расчетчиком, так?
31 Антиквар
 
10.06.19
12:24
(29) Нашел эту процедуру, она вообще пустая в ЗУПе. Интересно, спасибо, посмотрю.
32 El_Duke
 
гуру
10.06.19
13:27
(31) Следующим этапом в реализации сего чуда будет такой

Из кабинета расчетчика доносится страшный вопль "Ааааааааа, у Сидорова в расчетном листке за май сторно 10 дней апрельского оклада ! Помогите, аааааааааааыыыыы !!!"

Вызывают ТС, тычут ему пальцом в расчетный, требуют немедля убрать. ТС разводит руки и говорит: "Так сделано по личному указанию Полиграф Полиграфыча, чтоб за дни командировки платился аванс"
- Ну пусть платится, откуда сторно в расчетном за май ?
- Дык ему ж заплатили оклад за те дни что он в командировке был, а потом за эти же дни - по среднему ...
- Ничего не знаю, сторно уберите, ААААААААААААААА !!!

Финал, немая сцена ....
33 Dmitriy_
Kolesnikov
 
10.06.19
13:47
(32) вы что-то не так поняли. Посмотрите - мой код работает только при начислении аванса.
Если выборка.НайтиСледующий("ПерваяПоловинаМесяца", "Параметр")
Так что в расчетный листок ничего никогда не попадет.

(29) ясен перец, что пустая. Это же переопределяемый модуль. Он как раз и предназначен для доработки расчетов по месту внедрения.
34 Фрэнки
 
10.06.19
13:59
(33) // для доработки расчетов по месту внедрения.

Такие как раз удобно в Расширение перехватывать с пометкой &Вместо
35 Фрэнки
 
10.06.19
14:05
(32) да все должно быть норм не будет никаких сторно - это же специально предусмотренный вид Начисление за первую половину месяца.

Просто для Ведомости подбирает суммы и все. Другое дело, что может быть ситуация, когда сумма командировочных окажется меньше, чем начисленный Аванс, но и в этом случае критичного не создаст, а только подвиснет переплата на какой-то период расчетов.
36 Антиквар
 
11.06.19
00:05
(29) Первая же строчка Вашего кода непонятна:

Запрос = Новый Запрос("выбрать * из ВТНастройкиРасчета");

У меня в этом общем модуле нет такой таблицы ВТНастройкиРасчета.
Да и вообще полным поиском по конфигурации не нашло ни одной переменной с таким именем.
Релиз ЗУП 3.1.5.421
37 Dmitriy_
Kolesnikov
 
11.06.19
02:20
А, это я так параметры передаю через МенеджерВременныхТаблиц.
Должен быть ещё кусок кода, который сохраняет параметры в эту ВТ. Доберусь до базы - поищу.
38 Антиквар
 
11.06.19
10:34
(37) Ясно, спасибо
39 Dmitriy_
Kolesnikov
 
15.06.19
13:33
(38) Обработка МенеджерРасчетаЗарплаты, модуль объекта, процедура ЗаполнитьВыявленнымиНачислениями, см. моё дополнение:


Процедура ЗаполнитьВыявленнымиНачислениями(ТаблицаСотрудников, Начисления, Отборы = Неопределено)
    
    УдалитьВТ = Новый Массив;
    
    СоздатьВТСотрудникиПериоды(ТаблицаСотрудников);
    УдалитьВТ.Добавить("ВТСотрудникиПериоды");
    
    ОписаниеВТСотрудникиПериоды = ОписаниеВТСПериодами();
    ОписаниеВТСотрудникиПериоды.ИмяВТ = "ВТСотрудникиПериоды";
    ОписаниеВТСотрудникиПериоды.ИмяПоляНачалоПериода = "ДатаНачала";
    ОписаниеВТСотрудникиПериоды.ИмяПоляОкончаниеПериода = "ДатаОкончания";
    ОписаниеВТСотрудникиПериоды.Измерения.Добавить("Сотрудник");
    ОписаниеВТСотрудникиПериоды.Измерения.Добавить("Организация");
    
    ИнициализироватьМенеджерУчетаВремени(ОписаниеВТСотрудникиПериоды);
    
    ЗаполнитьКадровыеСведенияВТСПериодами(ОписаниеВТСотрудникиПериоды);
    ВычеркнутьНеСоответствующиеКадровомуОтбору(ОписаниеВТСотрудникиПериоды, Отборы);
    ВычеркнутьРанееОплаченныеПериоды(ОписаниеВТСотрудникиПериоды);
    
    ДополнитьВТСотрудникиПериодыПрименениемНачислений(ОписаниеВТСотрудникиПериоды);
    ДополнитьВТСотрудникиПериоды(ОписаниеВТСотрудникиПериоды);
        
    ОписаниеВТНачисления = ОписаниеВТНачисления();
    ОписаниеВТНачисления.ИмяВТ = "ВТСотрудникиПериоды";
    ОписаниеВТНачисления.ИмяПоляНачалоПериода = "ДатаНачала";
    ОписаниеВТНачисления.ИмяПоляОкончаниеПериода = "ДатаОкончания";
    СоздатьВТПоказателиРасчетаНачисления(ОписаниеВТНачисления);
    УдалитьВТ.Добавить("ВТПоказателиРасчета");
    
    ДобавитьПлановыеНачисления(ОписаниеВТСотрудникиПериоды, Начисления);
    ДобавитьНачисленияПоЗначениямОперативныхПоказателей(ОписаниеВТСотрудникиПериоды, Начисления);
    ДобавитьНачисленияПоЗначениямРазовыхПоказателей(ОписаниеВТСотрудникиПериоды, Начисления, Истина);
    ДобавитьНачисленияПоВидамВремени(ОписаниеВТСотрудникиПериоды, Начисления);
    ДобавитьНачисленияПоИзвестнымЗначениямОпределяющихПоказателей(ОписаниеВТСотрудникиПериоды, Начисления);
    //Колесников 14.08.2018 - передача параметров расчета в РасчетЗарплатыРасширенныйПереопределяемый через менеджер временных таблиц
    Запрос = новыйзапрос();
    Запрос.текст = "ВЫБРАТЬ
                   |    ""ПерваяПоловинаМесяца"" КАК Параметр,
                   |    &ЗначениеПерваяПоловинаМесяца КАК Значение
                   |ПОМЕСТИТЬ ВТНастройкиРасчета";
    Запрос.УстановитьПараметр("ЗначениеПерваяПоловинаМесяца", НастройкиРасчета.ПерваяПоловинаМесяца);
    Запрос.Выполнить();
    // Конец Колесников // // //
    
    РасчетЗарплатыРасширенныйПереопределяемый.ЗаполнитьДополнительныеНачисленияЗарплаты(МенеджерВременныхТаблиц, Начисления);
    
    УничтожитьВТ(УдалитьВТ);
    
КонецПроцедуры
40 Антиквар
 
16.06.19
13:02
(39) Спасибо большое, посмотрю.
41 Антиквар
 
17.06.19
00:47
(39) Теперь другая ошибка:
{ОбщийМодуль.ДлительныеОперации.Модуль(334)}: При расчете начисления «Командировка» за Июнь 2019 для сотрудника <ФИО> возникла ошибка: Поле объекта не обнаружено (СреднийЗаработокОбщий)
Формула, используемая при расчете: СреднийЗаработокОбщий * ВремяВДняхЧасах * КоэффициентИндексацииСреднегоЗаработка

Видимо разница в релизах сказывается
42 Антиквар
 
17.06.19
00:54
(41) Извиняюсь, оказалось, что всё-таки нужно обработкой поставить галочку "Начисляется за первую половину месяца" у начисления "Командировка".
После этого ошибку не выдает, командировку включает в расчет первой половины. Поэкспериментирую ещё. Спасибо!