Как автоматизировать учет рабочего времени сотрудников и расчет стоимости услуг по индивидуальным ставкам в 1С?

Бизнес-аналитик 1С v8.3 (Управляемые формы) Управленческий учет Финансы и профессиональные услуги
← На главную

Для консалтинговых, аудиторских, юридических и ИТ-компаний критически важен точный учет времени, затраченного специалистами на задачи клиентов. Специфика бизнеса часто накладывает дополнительное усложнение: один и тот же сотрудник для разных клиентов может иметь совершенно разные почасовые ставки (биллинг). Ведение такого учета в Excel-таблицах рано или поздно приводит к ошибкам, потере данных и колоссальным трудозатратам на ручную сборку отчетов в конце месяца.

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

Вариант 1. Использование специализированных готовых решений

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

  1. 1С:Управление нашей фирмой (УНФ). Это одно из лучших решений для сервисных компаний малого и среднего бизнеса. В 1С:УНФ реализован мощный блок управления услугами. Мы можем использовать механизм «Биллинг». Он позволяет закрепить за клиентом тарифные планы, вести учет времени с помощью документа УчетВремени, а в конце периода автоматически формировать счета и акты на основе фактически затраченных часов. Начисления сотрудникам при этом можно проводить с помощью «Сдельных нарядов», где ставки также гибко настраиваются.
  2. 1С:Управление франчайзи. Данное решение изначально проектировалось под учет ИТ-услуг и консалтинга. В нем «из коробки» реализована матрица индивидуальных ставок для сотрудников и клиентов, механизмы учета трудозатрат по задачам и последующая автоматическая генерация документов реализации.
  3. 1С:PM Управление проектами (от IT Land). Если консалтинговая деятельность носит выраженный проектный характер, то данный программный продукт закроет все потребности. В нем реализован профессиональный инструмент «Таймшиты» (Листы учета рабочего времени), поддерживается ведение сложных тарифных сеток в разрезе проектов, ролей и конкретных физических лиц.

Вариант 2. Адаптация и доработка типовой «1С:Управление торговлей 11»

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

Проанализируем архитектуру ценообразования в УТ 11. Для реализации нашей задачи мы можем пойти по пути сопоставления сотрудников и видов цен:

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

Вариант 3. Легкое самописное решение (в виде расширения)

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

Спроектируем структуру метаданных для нашей подсистемы учета времени:

  1. Регистр сведений ТарифыСотрудников.

    Этот регистр будет хранить матрицу ставок. Сделаем его периодическим (чтобы иметь историю изменения ставок) с типом записи «Зависимый» или «Независимый».

    Измерения:

    • Сотрудник (СправочникСсылка.ФизическиеЛица или СправочникСсылка.Пользователи)
    • Контрагент (СправочникСсылка.Контрагенты)
    • Проект (СправочникСсылка.Проекты, опционально)

    Ресурсы:

    • Ставка (Число 15, 2)
  2. Документ ЛистУчетаВремени (Таймшит).

    Этот документ предназначен для ежедневного или ежемесячного ввода отработанных часов сотрудниками.

    Реквизиты шапки:

    • Сотрудник (тот, кто выполнял работы)
    • ПериодРегистрации (Месяц, за который вносятся данные)

    Табличная часть Работы:

    • ДатаРаботы (Дата)
    • Контрагент (СправочникСсылка.Контрагенты)
    • ОписаниеЗадачи (Строка)
    • Часы (Число 5, 2)
    • Ставка (Число 15, 2)
    • Сумма (Число 15, 2)

Разберем по шагам, как программно автоматизировать заполнение ставок и расчет сумм при заполнении табличной части документа. Напишем обработчик изменения ключевых полей в строке табличной части документа ЛистУчетаВремени:


&НаКлиенте
Процедура РаботыКонтрагентПриИзменении(Элемент)
    СтрокаТЧ = Элементы.Работы.ТекущиеДанные;
    Если СтрокаТЧ <> Неопределено Тогда
        // Получаем ставку сотрудника для выбранного контрагента с сервера
        СтрокаТЧ.Ставка = ПолучитьСтавкуСотрудника(Объект.Сотрудник, СтрокаТЧ.Контрагент, Объект.Дата);
        // Рассчитываем сумму
        СтрокаТЧ.Сумма = СтрокаТЧ.Часы * СтрокаТЧ.Ставка;
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура РаботыЧасыПриИзменении(Элемент)
    СтрокаТЧ = Элементы.Работы.ТекущиеДанные;
    Если СтрокаТЧ <> Неопределено Тогда
        СтрокаТЧ.Сумма = СтрокаТЧ.Часы * СтрокаТЧ.Ставка;
    КонецЕсли;
КонецПроцедуры

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

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

Вариант 4. Быстрый «костыльный» способ в типовых базах

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

Если бизнес-процессы компании совсем простые, а вести разработку нет возможности, то в любой типовой конфигурации каждого ключевого сотрудника заводят как отдельную «Нашу организацию». В этом случае контрагенты — это клиенты. По каждой «организации» (сотруднику) настраиваются индивидуальные типы цен и прайс-листы для клиентов. Способ спорный, так как он сильно усложняет ведение регламентированной отчетности и подходит только для целей быстрого старта обособленного управленческого учета «на коленке».

Рекомендации по выбору архитектуры

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

  1. Если вы хотите получить готовое и поддерживаемое решение без программирования — выбирайте 1С:УНФ. Функционал биллинга и учета времени там развит на высоком уровне.
  2. Если у вас уже внедрена тяжелая учетная система (КА, ERP, УТ) и вы хотите сохранить единый контур — лучше всего разработать легкое расширение со структурой метаданных, которую мы спроектировали в Варианте 3. Это решит задачу со 100% точностью и без изменения типового кода базы.
  3. Для автоматизации фиксации времени сотрудниками (особенно если они работают удаленно) рассмотрите вариант интеграции 1С с таск-трекером (например, Битрикс24 или Yandex Tracker). Сотрудники будут отмечать время в задачах трекера, а раз в месяц данные по API будут загружаться в созданный нами документ ЛистУчетаВремени в 1С для расчета зарплаты и выставления счетов.
← На главную