Как реализовать механизм записи к мастеру в 1С:Предприятие 8.1 для автосервиса?

Программист Управленческий учет Сфера услуг, туризм и социальный сектор
← На главную

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

Шаг 1: Проектирование структуры данных (Регистры)

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

  1. Регистр сведений «ГрафикРаботыМастеров»: Здесь мы будем хранить информацию о том, в какие дни и смены работают сотрудники. Это позволит избежать записи на время, когда мастера нет на месте.
  2. Регистр сведений «ЗанятостьМастеров»: Основной регистр для контроля пересечений.
    • Измерения: Мастер (тип СправочникСсылка.Сотрудники), Пост (тип СправочникСсылка.Посты).
    • Ресурсы: ДатаНачала, ДатаОкончания.

Важно понимать, что в автосервисе мы записываем клиента не только к человеку, но и на конкретное рабочее место (подъемник, бокс). Поэтому контроль занятости должен идти в разрезе обеих сущностей.

Шаг 2: Создание документа «Запись на обслуживание»

Этот документ будет служить интерфейсом для ввода данных. В нем должны быть реквизиты:

Рассмотрим пример кода для автоматического расчета времени окончания при изменении длительности работы:


Процедура ПродолжительностьПриИзменении(Элемент)
    Если ЗначениеЗаполнено(ДатаНачала) Тогда
        ДатаОкончания = ДатаНачала + (Продолжительность * 3600); // Перевод часов в секунды
    КонецЕсли;
КонецПроцедуры

Шаг 3: Реализация алгоритма проверки пересечений

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

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


Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|   Занятость.Мастер
|ИЗ
|   РегистрСведений.ЗанятостьМастеров КАК Занятость
|ГДЕ
|   Занятость.Мастер = &ПарамМастер
|   И Занятость.ДатаНачала < &ПарамДатаОкончания
|   И Занятость.ДатаОкончания > &ПарамДатаНачала";

Запрос.УстановитьПараметр("ПарамМастер", Мастер);
Запрос.УстановитьПараметр("ПарамДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ПарамДатаОкончания", ДатаОкончания);

Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
    Сообщить("Выбранное время уже занято этим мастером!");
КонецЕсли;

Шаг 4: Визуализация графика (Интерфейс «Планировщик»)

Для удобства пользователя (мастера-приемщика) запись должна выглядеть наглядно. В 1С 8.1 у нас есть два основных пути:

1. Использование объекта «Диаграмма Ганта»

Этот объект встроен в платформу и позволяет отображать интервалы времени на шкале. Мы можем программно заполнять её данными из нашего регистра сведений. Каждая строка — это мастер, а блоки — это его записи. Посмотрим на логику заполнения:


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

2. Использование Табличного документа

Рассмотрим более гибкий вариант. Создадим форму, где по вертикали будут интервалы времени (например, по 30 минут), а по горизонтали — мастера. Программно раскрасим ячейки Область.ЦветФона, которые соответствуют занятому времени. При двойном клике на свободную ячейку будем открывать новый документ ЗаписьНаОбслуживание с уже заполненными временем и мастером.

Шаг 5: Дополнительные механики для диплома

Чтобы работа выглядела завершенной и профессиональной, добавим следующие элементы:

  1. Нормо-часы: В справочнике «Номенклатура» для услуг (например, «Замена масла») добавим реквизит КоличествоНормоЧасов. При выборе услуги в записи система должна автоматически рассчитывать Продолжительность.
  2. Статусы записи: Создадим перечисление СтатусыЗаписи (Запланировано, Выполнено, Отменено, Не приехал). Это позволит в будущем строить отчеты по эффективности работы сервиса.
  3. Ввод на основании: Реализуем механизм создания документа ЗаказНаряд на основании Записи. Это стандартная бизнес-логика: когда клиент приехал, мы не вводим данные заново, а переносим их в основной рабочий документ.

Важное примечание: При работе в версии 8.1 всегда следите за моментом записи в регистр. Оптимально делать движения регистра при проведении документа «Запись на обслуживание». Если документ просто записан, но не проведен — место должно оставаться свободным, либо нужно использовать статус «Предварительный».

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

← На главную