Как оценить и реализовать тестовое задание на разработку системы лояльности в 1С

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

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

Анализ требований и оценка трудозатрат

Типовое задание включает в себя создание справочников, регистров и веб-сервиса. Опытные специалисты оценивают «чистое» время кодинга в пустой конфигурации в 2–4 часа. Однако, если учитывать необходимость отладки, публикации веб-сервиса на локальном сервере (IIS или Apache) и возможные неточности в постановке задачи, реалистичный срок для качественного выполнения — от 8 до 16 рабочих часов. Разберем по шагам, как реализовать каждый пункт задания наиболее профессионально.

Шаг 1. Справочник «Карты лояльности» и работа с изображениями

Первым делом создадим справочник КартыЛояльности. Помимо стандартных реквизитов Код и Наименование, добавим Штрихкод (тип Число(17, 0)) и Фото (тип ХранилищеЗначений).

Рассмотрим подробнее механизм отображения фотографии на управляемой форме. Напрямую отобразить данные из реквизита типа ХранилищеЗначений нельзя. Нам потребуется создать реквизит формы с типом Строка (в котором будет храниться адрес во временном хранилище) и связать его с элементом формы типа «Поле картинки».

Проанализируем программный код для вывода фото при открытии элемента:


&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    // Получаем навигационную ссылку на данные в хранилище
    АдресФото = ПолучитьНавигационнуюСсылку(ТекущийОбъект.Ссылка, "Фото");
КонецПроцедуры

Если же мы хотим загружать новое фото, воспользуемся методом ПоместитьФайл на клиенте, а затем на сервере запишем полученный адрес в ХранилищеЗначений.

Шаг 2. Справочник «Держатели карт» и вычисляемые поля

Справочник ДержателиКартЛояльности содержит поле Баллы, которое не должно быть реквизитом базы данных. Это проверяет наше умение работать с динамическим расчетом данных на форме.

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

Пример логики сбора строки баллов:


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

Шаг 3. Регистр сведений: История владения картами

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

Структура регистра:

  1. Измерение: Карта (тип СправочникСсылка.КартыЛояльности).
  2. Ресурс: Держатель (тип СправочникСсылка.ДержателиКартЛояльности).
  3. Реквизиты: ДатаПолучения, ДатаЛиквидации.

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

Шаг 4. Регистр накопления и регистраторы

Регистр накопления БаллыЛояльности (вид «Остатки») необходим для учета баланса баллов. Однако в 1С данные в регистр накопления не могут попасть «сами по себе» — для этого нужны документы-регистраторы.

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

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

Шаг 5. Реализация Веб-сервиса GetPoints

Создание веб-сервиса — это этап, требующий настройки внешнего окружения. Рассмотрим пошагово процесс реализации метода GetPoints, который принимает штрихкод и возвращает остаток баллов.

1. Создание XDTO-пакета. Сначала опишем типы данных. Создадим пакет (например, LoyaltyTypes), в котором определим тип возвращаемого значения (строка).

2. Создание объекта «Веб-сервис». В ветке «Общие» создаем новый веб-сервис LoyaltyService. Указываем пространство имен и выбираем наш XDTO-пакет. Добавляем метод GetPoints с входным параметром Barcode.

3. Программная логика метода:


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

4. Публикация. Чтобы сервис стал доступен, необходимо через меню «Администрирование -> Публикация на веб-сервере» опубликовать информационную базу. Не забудьте установить галочку «Публиковать веб-сервисы».

Рекомендации по выполнению и частые ошибки

Проанализируем типичные подводные камни, которые могут снизить оценку за выполнение задания:

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

← На главную