Как реализовать автоматическое начисление зарплаты процентом от заказа в 1С

Программист 1С v8.3 (Управляемые формы) Управленческий учет Промышленность, строительство и АПК
← На главную

Переход от учебных примеров к реальным бизнес-задачам — это важный этап для любого разработчика. Задача автоматизации начисления зарплаты мастерам (в нашем случае — установщикам натяжных потолков) на основе процента от сделки является классической задачей управленческого учета. Разберем подробно, как реализовать этот механизм, используя стандартные объекты платформы 1С.

Анализ бизнес-логики и выбор архитектуры

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

Способ 1. Использование оборотного регистра накопления (Упрощенный)

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

Шаг 1. Подготовка метаданных

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

В регистре определим:

  1. Измерения: Сотрудник (тип СправочникСсылка.Сотрудники).
  2. Ресурсы: Сумма (тип Число(15, 2)).

Шаг 2. Реализация логики проведения

В модуле документа ОказаниеУслуг в процедуре ОбработкаПроведения напишем алгоритм, который будет рассчитывать сумму процента и записывать её в регистр. Выясним причину выбора процента: он может быть фиксированным для всех или индивидуальным для каждого мастера.

Рассмотрим пример кода, где процент мастера хранится в его карточке (справочник Сотрудники):


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

    Для Каждого СтрокаУслуг Из ТабличнаяЧастьУслуги Цикл
        // Проверяем, указан ли мастер в строке или документе
        Если ЗначениеЗаполнено(СтрокаУслуг.Мастер) Тогда
            НовоеДвижение = Движения.ЗарплатаКНачислению.Добавить();
            НовоеДвижение.Период = Дата;
            НовоеДвижение.Сотрудник = СтрокаУслуг.Мастер;
            
            // Рассчитываем процент (например, 10% от суммы услуги)
            // В реальной базе лучше брать процент из кадровых данных
            ПроцентМастера = СтрокаУслуг.Мастер.ПроцентнаяСтавка; 
            НовоеДвижение.Сумма = (СтрокаУслуг.Сумма * ПроцентМастера) / 100;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Способ 2. Реализация через механизмы сложных периодических расчетов

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

Посмотрим на структуру этого решения:

  1. План видов расчета (Зарплата): здесь мы создаем предопределенные элементы, такие как Оклад и СдельнаяОплата.
  2. Регистр расчета (Начисления): основной объект, который хранит записи о том, кому, за что и сколько начислено. Он связан с ГрафикомРаботы.

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

Важные нюансы при расчете натяжных потолков

Проанализируем специфику отрасли. Часто сумма заказа состоит из стоимости материалов (полотно, профиль, светильники) и стоимости работ. Процент мастеру обычно платится только с работ.

Рассмотрим пример разделения в коде:


// Выделяем только услуги (монтаж) из общей суммы чека
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ОказаниеУслугУслуги.Мастер КАК Мастер,
    |	СУММА(ОказаниеУслугУслуги.Сумма) КАК СуммаРабот
    |ИЗ
    |	Документ.ОказаниеУслуг.Услуги КАК ОказаниеУслугУслуги
    |ГДЕ
    |	ОказаниеУслугУслуги.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга)
    |	И ОказаниеУслугУслуги.Ссылка = &Ссылка
    |СГРУППИРОВАТЬ ПО
    |	ОказаниеУслугУслуги.Мастер";

Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();

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

Отражение выплаты зарплаты

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

При проведении выплаты мы должны делать движение в минус по тому же регистру (если это регистр остатков) или просто фиксировать факт оплаты в отдельном регистре. Рекомендуем использовать Регистр накопления (Остатки) ВзаиморасчетыСПерсоналом. В этом случае:

Дополнительные рекомендации

Рассмотрим возможность внедрения Коэффициента трудового участия (КТУ). Если на одном объекте работали два мастера, сумма процента может делиться пропорционально. В документе ОказаниеУслуг в табличной части исполнителей добавьте колонку КТУ. При расчете суммы начисления используйте формулу:

СуммаНачисления = (ОбщийПроцентЗаЗаказ * КТУ_Мастера) / Сумма_КТУ_Всех_Мастеров_По_Заказу.

Также полезно привязывать начисление процента к статусу оплаты заказа клиентом. Вы можете добавить проверку в код: если заказ не оплачен полностью, движение по зарплате мастера не формируется или формируется в статусе "Отложенное начисление". Это стимулирует мастеров контролировать подписание актов и получение денег от заказчиков.

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

← На главную