Как сделать комментарий в каждой ячейке табеля в 1С:ЗУП 3.1?

Пользователь 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом Управленческий учет IT и автоматизация бизнеса
← На главную

При внедрении и эксплуатации программы 1С:Зарплата и Управление Персоналом (ЗУП) 3.1 многие компании сталкиваются с ситуацией, когда руководство или руководители подразделений требуют детального обоснования по каждому рабочему дню сотрудника. Например: «Почему Вася 12 мая отработал 12 часов вместо 8?», «По какой причине Петров опоздал на 2 часа 14 мая?» или «Зачем Сидоров выходил в субботу?». Естественным желанием пользователя становится попытка написать текстовое примечание прямо в ячейку интерактивного табеля.

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

Почему в типовом табеле 1С:ЗУП 3.1 нельзя комментировать отдельные дни?

Давайте проанализируем архитектуру решения фирмы «1С». С точки зрения методологии учета рабочего времени, документ Табель является лишь сводным регистрирующим документом, фиксирующим результаты. Сама форма табеля (регламентированная форма Т-13) утверждена Госкомстатом РФ и жестко стандартизирована. В ней предусмотрены только буквенные (или цифровые) коды видов времени (например, Я — явка, ОТ — отпуск, К — командировка) и количество отработанных часов.

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

Тем не менее, решать задачу контроля «нетипичной» активности сотрудников необходимо. Ниже мы детально рассмотрим два подхода: методологический (штатный) и технический (с помощью доработки).

Вариант 1. Методологический подход (решение стандартными средствами 1С)

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

Рассмотрим, как фиксировать комментарии к отклонениям через штатные документы:

  1. Для переработок и сверхурочной работы:

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

  2. Для опозданий и внутрисменных неявок:

    Если сотрудника не было часть дня на рабочем месте, в программе регистрируется документ Отсутствие (болезнь, прогул, неявка) с установленным флагом «Отсутствие в течение части смены». В данном документе также присутствует текстовое поле Причина отсутствия и общее поле Комментарий, где фиксируется вся подноготная (например, «Застрял в лифте, предоставлена объяснительная»).

  3. Для перемещений по объектам (механизм «Территории»):

    Если сотрудники компании постоянно меняют рабочие места в течение месяца и важно знать, где именно выполнялись работы, следует включить в настройках учетной политики использование обособленных территорий. Тогда рабочее время сотрудника в табеле будет дробиться автоматически по строкам с привязкой к конкретной территории (например, «Объект №1», «Склад на Полярной»), что исключит необходимость писать текстовые пояснения в ячейках вручную.

Использование документов-отклонений позволяет вести учет прозрачно, обоснованно и в полном соответствии с Трудовым кодексом РФ. Однако, если в вашей организации процессы еще не выстроены жестко, а руководителям по-прежнему нужен простой блокнот внутри табеля, придется прибегнуть к технической доработке конфигурации.

Вариант 2. Технический подход (создание расширения конфигурации)

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

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

Шаг 1. Создание нетипового регистра сведений

Поскольку в типовых объектах хранить текстовые комментарии по дням негде, мы создадим в расширении новый независимый регистр сведений. Назовем его, например, УР_КомментарииКЯчейкамТабеля.

Определим следующую структуру для нашего нового регистра:

Шаг 2. Модификация формы документа «Табель»

В расширение необходимо добавить форму документа Документ.Табель.Форма.ФормаДокумента. Нам нужно решить две задачи:

  1. Визуализировать наличие комментария у ячейки (например, окрашивать ячейку или выводить комментарий в отдельную информационную панель при активизации ячейки табеля).
  2. Предоставить пользователю удобный интерфейс для ввода и редактирования этого комментария.

Рекомендуем организовать интерфейс следующим образом: под табличной частью табеля добавить текстовое поле ввода (строку), связанную с реквизитом формы ТекущийКомментарийДня. При активизации ячейки в таблице табеля программа будет считывать данные из нашего регистра сведений по текущему сотруднику и выбранной дате, и выводить текст в это поле. При изменении текста в этом поле данные будут автоматически записываться в регистр сведений.

Рассмотрим пример кода на языке 1С, который реализует чтение комментария при активизации ячейки табеля. Этот код размещается в модуле формы документа в расширении:


&НаКлиенте
Процедура УР_ТабельПриАктивизацииЯчейкиПеред(Элемент)
    
    ТекущиеДанные = Элементы.ДанныеОВремени.ТекущиеДанные;
    Если ТекущиеДанные = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    // Определяем, какая колонка (дата) сейчас активна
    ИмяТекущейКолонки = Элементы.ДанныеОВремени.ТекущийЭлемент.Имя;
    
    // Проверяем, что активизирована колонка с датой (в табеле они обычно именуются как Число1, Число2 и т.д.)
    Если Лев(ИмяТекущейКолонки, 5) = "Число" Тогда
        НомерДня = Число(Сред(ИмяТекущейКолонки, 6));
        
        // Получаем дату дня из шапки документа или периода регистрации
        ТекущаяДатаДня = ПолучитьДатуПоНомеруДня(НомерДня);
        ТекущийСотрудник = ТекущиеДанные.Сотрудник;
        
        // Читаем комментарий из базы данных
        ТекущийКомментарийДня = ПолучитьКомментарийИзРегистра(ТекущийСотрудник, ТекущаяДатаДня, Объект.Ссылка);
    Иначе
        ТекущийКомментарийДня = "";
    КонецЕсли;

КонецПроцедуры

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


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

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

Какое решение выбрать?

Перед тем как ставить задачу программисту на разработку расширения и усложнять базу данных дополнительными нетиповыми объектами, настоятельно рекомендуем взвесить все «за» и «против». Попытайтесь ответить на следующие вопросы:

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

← На главную