Расчет аванса по точному календарному количеству дней в ЗУП 2.5

28.12.15

Разработка - Механизмы типовых конфигураций

В ЗУП принята методика расчета аванса за первую половину месяца, при которой используется норма рабочего времени за месяц, которая делится пополам. Но это ведет к неправильному расчету аванса, т.к. не всегда первая половина месяца равна второй по количеству рабочих часов. Иногда это критично для клиента, поэтому требуются доработки.

Скачать исходный код

Наименование Файл Версия Размер
down.zip
.zip 12,06Kb
2
.zip 12,06Kb 2 Скачать

Доработки получаются не слишком сложными, нужно просто разобраться, где вставить заплатки. Рассмотрим пример, где рабочее время и его норма измеряется в часах.

Собственный алгоритм вычисления нормы за месяц

Норма рабочего времени за месяц вычисляется в модуле ПроведениеРасчетовПереопределямый, найти можно по идентификатору НормаВремениЗаМесяц.

В типовом коде норма вычисляется как ДанныеГрафика.ОсновноеЗначениеНормаПериодДействия. При пользовании отладчиком видно, что период действия - с 1 по 15 число, но норма считается за месяц. Это связано с тем, что период действия всегда расширяется до периодичности регистра расчета, а в данном случае это месяц. Это довольно неявно и непрозрачно, но ничего не поделаешь.

Поэтому приходится использовать запрос к регистру сведений графика, чтобы получить норму за половину месяца.

Текст заплатки получается довольно объемным, ее нужно вставить сразу перед выполнением запроса в процедуре ПолучитьДанныеДляРасчета:

Если НеобходимыеДанные.НормаВремениЗаМесяц И Регистратор.Метаданные().Имя = "НачислениеЗарплатыРаботникамОрганизаций" И Регистратор.ПериодНачисления = Перечисления.ПериодНачисленияЗарплаты.ПерваяПоловинаТекущегоМесяца Тогда
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "ЕСТЬNULL(СводныеИндивидуальныеГрафики.НормаВремени,ДанныеГрафика.ОсновноеЗначениеНормаПериодДействия)",
            "2 * ЕСТЬNULL(СводныеИндивидуальныеГрафики.НормаВремени,ДанныеГрафикаДоп.ОсновноеЗначениеНорма)");
    //Это должно заменяться раньше чем следующие замены изза "КАК НормаВремениЗаМесяц"
    Запрос.Текст = СтрЗаменить(Запрос.Текст,
            "КАК НормаВремениЗаМесяц",
            "КАК НормаВремениЗаМесяц" +
            ", ДанныеГрафикаДоп.НормаВремениЗаМесяцПоПолумесяцу КАК НормаВремениЗаМесяцПоПолумесяцу ");
    Запрос.Текст = СтрЗаменить(Запрос.Текст,
            "ЛЕВОЕ СОЕДИНЕНИЕ ВТСводныеИндивидуальныеГрафики КАК СводныеИндивидуальныеГрафики",
            "ЛЕВОЕ СОЕДИНЕНИЕ (" +
            "ВЫБРАТЬ
            |      Основной.Регистратор,
            |      Основной.НомерСтроки,
            |      СУММА(ВЫБОР
            |                   КОГДА ГрафикиРаботыПоВидамВремени.Дата МЕЖДУ НАЧАПЕРИОДА(Основной.ПериодДействияНачало, МЕСЯЦ) И Основной.ПериодДействияКонец
            |                          ТОГДА ГрафикиРаботыПоВидамВремени.ОсновноеЗначениеНорма
            |                   ИНАЧЕ 0
            |            КОНЕЦ) КАК ОсновноеЗначениеНорма,
            |      СУММА(ВЫБОР
            |                   КОГДА ГрафикиРаботыПоВидамВремени.Дата >= Основной.ПериодДействияНачало
            |                                 И НАЧАЛОПЕРИОДА(Основной.ПериодДействияКонец, МЕСЯЦ) = НАЧАЛОПЕРИОДА(ГрафикиРаботыПоВидамВремени.Дата, МЕСЯЦ)
            |                          ТОГДА ГрафикиРаботыПоВидамВремени.ОсновноеЗначениеНорма
            |                   ИНАЧЕ 0
            |            КОНЕЦ) КАК НормаВремениЗаМесяцПоПолумесяцу
            |ИЗ
            |      РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Основной
            |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботыПоВидамВремени
            |            ПО Основной.ГрафикРаботы = ГрафикиРаботыПоВидамВремени.ГрафикРаботы
            |                   И Основной.ВидУчетаВремени = ГрафикиРаботыПоВидамВремени.ВидУчетаВремени
            |ГДЕ
            |      Основной.Регистратор = &парамРегистратор
            |      И Основной.Авторасчет
            |
            |СГРУППИРОВАТЬ ПО
            |      Основной.НомерСтроки,
            |      Основной.Регистратор"
            + ") КАК ДанныеГрафикаДоп ПО Основной.Регистратор = ДанныеГрафикаДоп.Регистратор И ДанныеГрафикаДоп.НомерСтроки = Основной.НомерСтроки"
            + " ЛЕВОЕ СОЕДИНЕНИЕ ВТСводныеИндивидуальныеГрафики КАК СводныеИндивидуальныеГрафики"
        );
    ПоляЗапроса.Добавить("НормаВремениЗаМесяцПоПолумесяцу");
КонецЕсли;

Нужно не забавить добавить новое поле в результат запроса, есть нюансы по поиску сигнатур для замены, чтобы правильно связать таблицы.

Обратите внимание на НАЧАЛОПЕРИОДА(Основной.ПериодДействияНачало, МЕСЯЦ) – так надо писать, чтобы для принятых не с начала месяца сотрудников норма считалась с начала месяца, а не с периода действия, который равен дате приема сотрудника на работу.

Расчет планового аванса

Чтобы рассчитать плановый аванс, нужно также знать норму часов для сотрудника в первой половине месяца. Чтобы повторно не считать (это довольно сложно, ведь график сотрудника может меняться), лучше сохранить эти данные в дополнительных колонках табличной части Начисления документа НачислениеЗарплатыРаботникамОрганизаций.

Сохранять значения нужно в процедуре РассчитатьЗаписиНабора модуля ПроведениеРасчетовПереопределямый в конце цикла по переменной НаборЗаписейРегистра:

Если СтрокаТабличнойЧасти <> Неопределено Тогда
    
    Попытка
        СтрокаТабличнойЧасти.НормаВремениЗаМесяц = ИсходныеДанные.НормаВремениЗаМесяцПоПолумесяцу;
    Исключение
    КонецПопытки;;
    Попытка
        СтрокаТабличнойЧасти.НормаВремениЗаМесяцПоПолумесяцу = ИсходныеДанные.НормаВремениЗаМесяц;
    Исключение
    КонецПопытки;;
    
КонецЕсли;

Округление до рубля в меньшую сторону

Пожелание клиента было в округлении расчета аванса в меньшую сторону, в конец процедуры РасчитатьВсе модуля документа НачислениеЗарплатыСотрудникамОрганизации вставляем код:

Если ПериодНачисления = Перечисления.ПериодНачисленияЗарплаты.ПерваяПоловинаТекущегоМесяца Тогда
    Для Каждого Строка ИЗ Начисления Цикл
        Строка.Результат = ОКР(Строка.Результат, 0); //Округление
    КонецЦикла;
КонецЕсли;

 

Удаление ненужных начислений

Практика показала, что ЗУП пытается впихнуть в аванс лишние начисления, вроде оплаты питания и т.п.

Их можно удалить, вставив код в конец процедуры ВыполнитьАвтозаполнение модуля документа НачислениеЗарплатыСотрудникамОрганизации:

//Чистим ненужные начисления для расчета аванса
Если ПериодНачисления = Перечисления.ПериодНачисленияЗарплаты.ПерваяПоловинаТекущегоМесяца Тогда
    Всего = Начисления.Количество();
    Для Инд = 1 ПО Всего Цикл
        Строка = Начисления[Всего - Инд];
        //Удаляем дополнительные первичные
        Если Строка.ВидРасчета.ВидВремени = Перечисления.ВидыВремени.ДополнительноОплачиваемоеВПределахНормы И Строка.ВидРасчета.КатегорияРасчета = Справочники.КатегорииРасчетов.Первичное Тогда
            //Удаляем
            Начисления.Удалить(Строка);
        КонецЕсли;
    КонецЦикла;
КонецЕсли;

Отчет по авансам

Соответственно, прилагаю отчет по начислениям, который вычисляет также плановый аванс.

Он делает запрос по проведенным документам начисления авансов за первую половину. Информацию берет из начислений по окладу и дополнительных увеличений начисления оклада.

Отчет работает только на измененной конфигурации, где добавлены колонки по сохраненным нормам рабочего времени за первую половину месяца. Можно адаптировать и под типовую, но тогда будет не доступен расчет планового аванса.

ЗУП аванс за первую половину месяца

См. также

Ценовая власть. Выносим из цикла схему СКД

Механизмы типовых конфигураций Ценообразование, анализ цен Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)

Продолжение темы вынесения кусков повторно-используемого кода в запрос. В прошлый раз мы сделали это с вычислением пользовательских формул. Здесь замахнулись на формулы, задаваемые пользователем запросами.

1 стартмани

11.04.2024    499    tango    0    

3

Формула в реквизите. Приквелл к сериалу "Ценовая власть"

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Какому-либо элементу списка сопоставляется числовое значение, зависящее от других значений, причем эта зависимость изменяется от элемента к элементу. Так, в справочнике "Валюты" курс какой-либо валюты может быть задан формулой (или даже запросом) от значения другой валюты. А в справочнике "Виды цен" формула определяет расчет цены для товарной позиции, т.е. элементов справочника "Номенклатура", у которых в карточке указан этот вид цены. А в 1С:ERP, например, этот механизм используется в ресурсной спецификации.

10 стартмани

11.04.2024    387    tango    5    

3

Ценовая власть. Второй сезон

Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Бесплатно (free)

В первом сезоне мы рассмотрели (с точки зрения программиста) внутренний механизм, помещающий цены в регистр "Цены". Из этого регистра цена попадает в исходящие УПД (в продажи). Но эта цена (в прайс-листе) дифференцирована (ценообразована) в разрезах свойств самой номенклатуры. Но стратегия ценообразования, ценовая власть - это в первую очередь о работе с ценами для клиента. И тут вступает в дело второй акт марлезонского, Скидки (наценки) и кешбек.

08.04.2024    649    tango    0    

2

Ценовая власть (УТ 11.5) - 2

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление торговлей 11 Бесплатно (free)

В прошлый раз специальной обработкой мы выбрали объекты УТ 1.5, группируя по подсистемам. Оказалось, что состав подсистем не вполне корректно отображает функциональную структуру, но зато мы нашли процедуру, которая, вроде бы, должна содержать в себе всё, что нас интересует. Обновление цен должно ведь следовать выбранной стратегии ценообразования, верно? Иначе что она обновляет...

06.04.2024    449    tango    1    

1

Ценовая власть или Управление ценообразованием (УТ 11.5)

Ценообразование, анализ цен Механизмы типовых конфигураций Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Россия Управленческий учет Абонемент ($m)

Ценовая власть - это способность (возможность) компании изменять в некоторых пределах отпускную цену своего товара (услуг, продукции). Чем в более широких пределах вы можете играть в цену продажи, тем больше этой власти у вас. Если вы не можете управлять отпускной ценой, то это или не ваш бизнес, или не бизнес вовсе. Здесь в рубрике "База знаний аналитика и руководителя проекта" слово проект не ограничено "проектом в 1С". Посмотрим, что для этого есть в УТ 11.5.

1 стартмани

05.04.2024    535    tango    12    

2

Расширяем возможности дополнительных обработок и настраиваем их отладку

БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Уже не одна веб-страница исписана знаниями о дополнительных обработках, как создать, как подключить. Есть масса вариантов, как их можно отладить. Я разобрался в кишках работы библиотеки и покажу, как можно расширить возможности дополнительных отчетов, а также покажу удобный способ отладки.

07.02.2024    2608    YA_418728146    11    

43

Регистры накопления в 1С:КА2 и 1С:ERP для расчета НДФЛ, страховых взносов и взаиморасчетов с сотрудниками на январь 2024 года. Краткое описание

Зарплата Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет НДФЛ Абонемент ($m)

Для расчета зарплаты и соответствующих налогов в конфигурациях 1С:КА2 и 1С:ERP используется 22 регистра накопления, 7 регистров сведений, 1 регистр расчета и бухгалтерские проводки. В таблице приведены названия этих регистров, указаны основные регистраторы и виды движений приход/расход. В описании приводится краткое функциональное назначение регистров в основных зарплатных процессах. Описание регистров родилось из черновиков при написании различных отчетов и обработок при эксплуатации 1С-овских конфигураций и исправлении ошибок по НДФЛ, взаиморасчетов с сотрудниками и прочих. Информация не претендует на полноценное описание работы регистров, скорее это дискуссионный материал. Но, возможно, кому-то пригодится и сократит время при подготовке отчетности за непростой (в плане учета зарплаты) 2023 год. А возможно, кто-то поделится своим опытом.

1 стартмани

10.01.2024    1156    8    2ncom    6    

8

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    4975    mrXoxot    11    

100
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DangerWulf 15.01.16 19:45 Сейчас в теме
Округление до рубля в меньшую сторону
Строка.Результат = ?(ОКР(Строка.Результат, 0)>Строка.Результат,ОКР(Строка.Результат, 0)-1,ОКР(Строка.Результат, 0)); //Округление
+
2. fixin 4253 15.01.16 23:40 Сейчас в теме
(1) Да, вместо Окр надо использовать Цел, этот нюанс я у себя уже обнаружил и поправил.
+
Оставьте свое сообщение