Как разработать простую конфигурацию 1С для IT-компании с нуля

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

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

В этой статье мы подробно, шаг за шагом разберем, как спроектировать и написать простую, но функциональную конфигурацию для IT-компании. Наш учебный проект будет решать реальные бизнес-задачи: оценку стоимости проектов, распределение задач, контроль сроков выполнения и учет технических доступов.

Шаг 1. Подготовка и планирование разработки

Прежде чем открывать конфигуратор 1С, необходимо провести подготовительную работу. Как справедливо отмечают опытные разработчики, хаотичное создание объектов в базе быстро приведет к архитектурному тупику. Разберем основные этапы подготовки:

  1. Изучение базовой литературы. Начнем с классического учебника — «Практическое пособие разработчика» авторов Радченко и Хрусталевой. Эта книга дает базовое понимание того, как устроены метаданные в 1С, как работает управляемое приложение и клиент-серверное взаимодействие.
  2. Прохождение экспресс-курсов. Для быстрого старта отлично подойдет бесплатный вводный курс по программированию в 1С (например, базовые уроки по конфигурированию). Это позволит познакомиться с интерфейсом среды разработки и базовым синтаксисом языка.
  3. Проектирование на бумаге. Набросаем структуру будущей базы данных в текстовом документе или в виде ментальной карты. Нам нужно четко определить, какие сущности мы будем хранить в виде справочников, какие процессы регистрировать документами и где накапливать оперативную информацию.

Перейдем к практическому проектированию нашей архитектуры.

Шаг 2. Архитектура базы данных: Справочники

Справочники в 1С используются для хранения условно-постоянной информации. Для IT-компании нам понадобятся следующие объекты конфигурации:

1. Справочник Контрагенты
Здесь мы будем хранить информацию о наших заказчиках. Достаточно создать стандартные реквизиты: ИНН, КонтактноеЛицо, Телефон и ЭлектроннаяПочта.

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

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

4. Справочник СерверыИДомены (наши «Хосты»)
Для любой веб-студии критически важно вести учет доступов к хостингам и серверам клиентов. Создадим этот справочник и добавим в него следующие реквизиты:

Шаг 3. Документы и регистры накопления

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

1. Документ КалькуляцияПроекта
Этот документ создается менеджером при получении заказа. Нам необходимо оценить трудозатраты и рассчитать стоимость проекта для клиента. В документе создаем реквизит шапки Проект и табличную часть ЭтапыРаботы со следующими колонками:

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


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

При проведении этот документ должен записывать плановые показатели в регистр накопления ПлановыеТрудозатраты.

2. Документ УчетВремени (Тайм-трекинг)
Разработчики ежедневно заполняют этот документ, указывая, сколько реального времени они потратили на задачи в рамках конкретного проекта. В табличной части документа будут колонки: Проект, Сотрудник, ВыполненнаяРабота и ФактическиеЧасы. При проведении документ делает движения (расход или приход в зависимости от выбранной структуры регистра) в регистр накопления ФактическиеТрудозатраты.

Шаг 4. Уникальные возможности для учебного проекта

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

Реализация Диаграммы Ганта для визуализации задач

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

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


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

Интеграция с Telegram-ботом

Вместо сложной интеграции с YouTube API, которая требует прохождения громоздкой авторизации OAuth 2.0, мы реализуем удобную отправку уведомлений в Telegram. Это пишется буквально в несколько строк кода с использованием объекта HTTPСоединение.

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


&НаСервереБезКонтекста
Процедура ОтправитьСообщениеВТелеграм(ЧатID, ТекстСообщения)
    
    ТокенБота = "YOUR_TELEGRAM_BOT_TOKEN"; // Токен, полученный от BotFather
    АдресЗапроса = "api.telegram.org";
    
    // Формируем текст запроса
    ПараметрыЗапроса = "bot" + ТокенБота + "/sendMessage?chat_id=" + ЧатID + "&text=" + ТекстСообщения;
    
    Попытка
        Соединение = Новый HTTPСоединение(АдресЗапроса, 443, , , , 10, Новый ЗащищенноеСоединениеOpenSSL());
        Запрос = Новый HTTPЗапрос(ПараметрыЗапроса);
        Ответ = Соединение.Получить(Запрос);
        
        Если Ответ.КодСостояния <> 200 Тогда
            ЗаписьЖурналаРегистрации("Telegram Integration", УровеньЖурналаРегистрации.Ошибка, , , "Ошибка отправки: " + Ответ.ПолучитьТелоКакСтроку());
        КонецЕсли;
    Исключение
        ЗаписьЖурналаРегистрации("Telegram Integration", УровеньЖурналаРегистрации.Ошибка, , , "Не удалось установить соединение с сервером Telegram");
    КонецПопытки;
    
КонецПроцедуры

Робот-помощник: Проверка доменов и хостингов

Давайте сделаем так, чтобы система сама следила за тем, когда у клиентов заканчивается оплата хостинга или домена, и автоматически предупреждала ответственного менеджера. Для этого мы создадим регламентное задание ПроверитьСрокиОплатыХостингов, которое будет запускаться каждую ночь.

Рассмотрим алгоритм работы этого регламентного задания:


Процедура ПроверитьСрокиОплатыХостингов() Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	СерверыИДомены.ДоменноеИмя КАК Домен,
        |	СерверыИДомены.ДатаОкончанияОплаты КАК ДатаОкончания,
        |	СерверыИДомены.Проект.Контрагент.Наименование КАК Клиент
        |ИЗ
        |	Справочник.СерверыИДомены КАК СерверыИДомены
        |ГДЕ
        |	СерверыИДомены.ДатаОкончанияОплаты МЕЖДУ &НачалоИнтервала И &КонецИнтервала";
    
    // Проверяем домены, оплата которых истекает ровно через 7 дней
    Запрос.УстановитьПараметр("НачалоИнтервала", НачалоДня(ТекущаяДата() + 7 * 86400));
    Запрос.УстановитьПараметр("КонецИнтервала", КонецДня(ТекущаяДата() + 7 * 86400));
    
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        ТекстПредупреждения = "Внимание! Через 7 дней (" + Формат(Выборка.ДатаОкончания, "ДФ=dd.MM.yyyy") + ") истекает оплата домена " + Выборка.Домен + " для клиента " + Выборка.Клиент;
        // Отправляем уведомление руководителю проектов в Телеграм
        ОтправитьСообщениеВТелеграм("ID_ЧАТА_РУКОВОДИТЕЛЯ", ТекстПредупреждения);
    КонецЦикла;
    
КонецПроцедуры

Простая Канбан-доска для задач

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

Включив стандартное свойство "Разрешить перетаскивание" (Drag-and-Drop) для элементов списка, мы сможем перетаскивать строки проектов из одной колонки статуса в другую. При этом в обработчике события формы ПриДрагЭндДропе (или при изменении положения элемента) мы будем программно перезаписывать статус нашего проекта в базе данных. Это сделает интерфейс системы современным и интерактивным.

Заключение

Разработав такую конфигурацию, мы получим не просто абстрактный набор справочников, а полноценную рабочую систему управленческого учета для небольшой IT-компании. Мы применили знания по архитектуре баз данных, настроили автоматические расчеты, реализовали отправку уведомлений через внешнее API Telegram и визуализировали данные с помощью диаграммы Ганта. Такой проект станет отличной демонстрацией навыков программирования на платформе 1С!

← На главную