Как реализовать карточку клиента с историей оказанных услуг в 1С:Предприятие 8.3?

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

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

Понимание архитектуры данных: Документы против Регистров

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

Документы — это событийные объекты. Они фиксируют факт совершения операции. Если мы будем строить историю работ только по документам, при росте базы (тысячи записей) система начнет "тормозить", так как поиск по документам — операция ресурсоемкая. Правильнее использовать Регистры накопления.

Рекомендуем создать регистр накопления (например, ВыполненныеРаботы), в который документ ОказаниеУслуги будет записывать данные при проведении. Структура регистра может быть следующей:

  1. Измерения: Клиент, Номенклатура (услуга или товар).
  2. Ресурсы: Количество, Сумма.

Теперь выясним, как вывести эти данные в карточку клиента наиболее эффективным способом.

Способ №1. Использование динамических списков (Рекомендуемый)

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

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

  1. Откроем форму элемента справочника Клиенты.
  2. В окне Реквизиты добавим новый реквизит (например, СписокРабот) и укажем его тип как ДинамическийСписок.
  3. В свойствах этого реквизита установим галочку Произвольный запрос и нажмем Открыть.

Напишем текст запроса, который будет собирать данные из нашего регистра накопления (или документов, если регистры еще не созданы):


ВЫБРАТЬ
    РегистрПродажи.Период КАК ДатаРаботы,
    РегистрПродажи.Номенклатура КАК Услуга,
    РегистрПродажи.Количество КАК Количество,
    РегистрПродажи.Сумма КАК Сумма
ИЗ
    РегистрНакопления.Продажи КАК РегистрПродажи
ГДЕ
    РегистрПродажи.Клиент = &Ссылка

Обратите внимание на параметр &Ссылка. Система автоматически подставит в него ссылку на текущего клиента, открытого в форме. Теперь перетащим реквизит СписокРабот на форму в виде таблицы. Мы получили полноценную историю работ, которая обновляется мгновенно.

Способ №2. Командный интерфейс и панель навигации

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

Рассмотрим алгоритм настройки:

  1. В конфигураторе откройте дерево метаданных и найдите документ ОказаниеУслуги.
  2. Перейдите на вкладку Ссылки.
  3. Убедитесь, что в реквизитах документа есть поле Клиент с типом СправочникСсылка.Клиенты.
  4. Откройте форму справочника Клиенты и в верхней левой части редактора формы нажмите на кнопку Панель навигации.
  5. Перетащите из левого окна (доступные команды) в правое (команды формы) пункт Оказание услуг.

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

Способ №3. Вывод агрегированных показателей (Индикаторы)

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

Для этого нам потребуется написать код в модуле формы. Разберем пример реализации в процедуре ПриСозданииНаСервере:


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

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

Не забудьте создать на форме соответствующие реквизиты (ОбщаяСуммаПокупок и ДатаПоследнегоПосещения) и разместить их в шапке формы. Это сделает "карточку клиента" информативной и полезной для бизнеса.

Специфика автосервиса: связка Клиент — Автомобиль

Проанализируем предметную область. В автосервисе клиент часто владеет несколькими автомобилями. Правильная архитектура АИС подразумевает ведение учета именно по связке клиента и его транспортного средства.

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

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

Это значительно повысит качество дипломного проекта, так как демонстрирует глубокое понимание специфики учета.

Печатная форма "Досье клиента"

Хотя студент в исходном вопросе интересовался именно экранной формой, наличие печатной формы в дипломе обязательно. Рассмотрим, как быстро создать "Карточку клиента" для печати.

Используйте Макет (тип "Табличный документ"). Сформируйте в нем шапку с ФИО и телефоном, а затем таблицу с историей услуг. В модуле менеджера справочника Клиенты опишите процедуру печати, которая будет собирать данные запросом и выводить их в макет. Это позволит мастеру-приемщику распечатать историю обслуживания перед началом работ и передать её мастеру в цех.

Резюме для реализации в дипломе

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

← На главную