Расчет заработной платы на Платформе 1С 8: можно ли обойтись без реквизита КатегорияРасчета?

25.07.10

Разработка - Математика и алгоритмы

В статье делается попытка обосновать алгоритм расчета по базе с автоматическим вычислением приоритета расчета - т.е. без применения реквизита ПВР КатегорияРасчета. Выгрузки информационных баз загружаются в пустую базу 1С 8.2 и работают в обычном режиме.

Бесплатные

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Узнавайте о новых бесплатных решениях в нашей телеграм-группе Инфостарт БЕСПЛАТНО

Наименование Скачано Бесплатно
Files.rar
.rar 1,12Mb
54 Скачать бесплатно

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Расчет заработной платы на Платформе 1С 8: можно ли обойтись без реквизита КатегорияРасчета?

Все, кто работает в 1С 8 с расчетными механизмами, знают, что такое План видов расчета (ПВР), а также знают, каким образом изначально организуется порядок следования расчета отдельных начислений и удержаний в соответствии с "глубиной" их зависимости  по базе.

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

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

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

Таким образом, в общем случае неправильно установленное значение категории расчета влечет за собой длинный и широкий "хвост" ошибок расчета для всей информационной базы ЗУП. А учитывая, что состав базовых ВР у отдельных видов расчета может достигать нескольких десятков, а также то, что "глубина зависимости" по базе у некоторых созданных пользователем ВР может достигать четвертого и даже пятого уровня, ошибка в значении категории расчета может грозить срывом расчетного регламента у всего предприятия - и чем предприятие крупнее, тем последствия такого срыва значительнее.

Автор уже третий год ведет учебные занятия по курсу "Решение расчетных задач на Платформе 1С 8", и практически на каждом потоке находятся учащиеся, задающие один и тот же резонный вопрос: А зачем вообще нужен реквизит КатегорияРасчета, если структура ("дерево") базовой зависимости потенциально определяется из содержания табличных частей БазовыеВидыРасчета всех ПВР, следовательно, категория расчета в принципе может быть получена автоматически, расчетным путем?

В предлагаемой статье сделана попытка дать пример реализации такого алгоритма автоматического определения "категории расчета" каждого ВР перед началом расчетов.

Довольно широко известен алгоритм, который позволяет получить "дерево базовой зависимости" для видов расчета всех ПВР ЗУП примерно такого вида (приводится фрагмент для ВР Районный коэффициент):

Вступайте в нашу телеграмм-группу Инфостарт

См. также

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

Каждый, кто работал с кадровыми отчетами в ЗУП, ERP или УХ, сталкивался с механизмом представлений – странным кодом запроса, где поля отображаются пустыми ссылками, а в названии временной таблицы есть слово «Представление». В статье разберем, что такое представления и как ими пользоваться. Больше не нужно ломать голову над тем, откуда и как правильно получать данные. Механизм представлений сделает это за вас.

08.07.2025    19619    user2012581    55    

65

Механизмы типовых конфигураций Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Расчет себестоимости в типовых конфигурациях 1С – для многих «черный ящик», работающий по жестко зашитым в него алгоритмам. Реализация этого «черного ящика» может меняться в зависимости от конкретной конфигурации – УПП, БП 3.0, ERP. Но принцип работы везде одинаковый. Расскажем о том, как устроен расчет себестоимости, как его дорабатывать, и какие методы могут быть эффективны и без доработок.

27.12.2024    32176    Begemoth80    33    

96

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

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

07.02.2024    8319    YA_418728146    11    

56

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

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

28.12.2023    16194    mrXoxot    11    

121
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. script 128 22.07.10 16:58 Сейчас в теме
Гы-гы. Может вернуться к семерочному реквизиту Приоритет в компоненте Расчет ? ;)
2. ixijixi 2161 17.10.11 11:15 Сейчас в теме
Спасибо за статью, это именно то, что нужно.
3. acces969 381 23.09.17 07:27 Сейчас в теме
Такие задачи решаются рекурсией, но она сами знаете чем чревата.

&НаСервере
Функция ОпределениеПорядкаВидовРасчетов(ТЗ)
	
	ИзмененПорядок = Ложь;
	Для каждого СтрокаВидаРасчета Из ТЗ Цикл
		
		Для каждого БазовыйВидРасчета Из СтрокаВидаРасчета.ВидРасчета.БазовыеВидыРасчета Цикл
			СтруктураПоиска = Новый Структура("ВидРасчета", БазовыйВидРасчета.ВидРасчета);
			БазовыеВидыРасчета = ТЗ.НайтиСтроки(СтруктураПоиска);
			Для каждого СтрокаБазовогоВидаРасчета Из БазовыеВидыРасчета Цикл
				Если СтрокаБазовогоВидаРасчета.Порядок < СтрокаВидаРасчета.Порядок + 1 Тогда 
					СтрокаБазовогоВидаРасчета.Порядок = СтрокаВидаРасчета.Порядок + 1;	
					ИзмененПорядок = Истина;
				КонецЕсли;
				
			КонецЦикла;		
		КонецЦикла;	
	КонецЦикла;	
	
	Если ИзмененПорядок Тогда
		ТЗ = ОпределениеПорядкаВидовРасчетов(ТЗ);
	КонецЕсли;
	
	Возврат ТЗ;
		
КонецФункции
Показать
4. boln 1044 23.09.17 10:07 Сейчас в теме
(3)
Такие задачи решаются рекурсией, но она сами знаете чем чревата.

"В России две беды - рекурсия и две беды"(с) :)))

А чем чревата рекурсия? Переполнением стека? Но это становится вероятным на очень большой глубине вложения вызовов, что, в свою очередь, зависит от количества обрабатываемых элементов. А количество видов расчета - несколько десятков. Любой стек, по-моему, не треснет от такого заполнения.

Я в своем коде, в прикрепленной базе, использую рекурсивный поиск по дереву значений. По таблице значений, конечно, круче, но она становится эффективной на большой глубине вложения вызовов. На небольшой глубине дерево тормозит не сильно, ТЗ и ДЗ работают примерно с одинаковой производительностью.

И, конечно, если передавать ТЗ параметром в функцию, стек может быстро треснуть. Можно обойтись без передачи ТЗ через параметр.
Для отправки сообщения требуется регистрация/авторизация

Вид расчета

План видов расчета

Районный коэффициент

Основные начисления организаций

Доплата за вечерние часы

Основные начисления организаций

Доплата за ночные часы

Основные начисления организаций

Доплата за работу в праздники и выходные

Основные начисления организаций

Квартальная премия

Дополнительные начисления организаций

Месячная премия

Дополнительные начисления организаций

Доплата за вечерние часы

Основные начисления организаций

Доплата за ночные часы

Основные начисления организаций

Доплата за работу в праздники и выходные

Основные начисления организаций

Оклад по дням

Основные начисления организаций

Оклад по часам

Основные начисления организаций

Оплата по дневному тарифу

Основные начисления организаций

Оплата по производственным нарядам

Основные начисления организаций

Оплата по часовому тарифу

Основные начисления организаций