Разработка собственной конфигурации на платформе 1С с нуля — это один из лучших способов быстро освоить программирование, разобраться в объектной модели системы и понять принципы проектирования баз данных. Особенно интересно создавать прикладное решение для сферы информационных технологий (IT-компании, веб-студии или агентства по заказной разработке ПО). В такой конфигурации мы сможем реализовать учет проектов, контроль загрузки программистов, ведение технических данных хостинга и даже настроить интеграцию с внешними сервисами.
В этой статье мы подробно, шаг за шагом разберем, как спроектировать и написать простую, но функциональную конфигурацию для IT-компании. Наш учебный проект будет решать реальные бизнес-задачи: оценку стоимости проектов, распределение задач, контроль сроков выполнения и учет технических доступов.
Прежде чем открывать конфигуратор 1С, необходимо провести подготовительную работу. Как справедливо отмечают опытные разработчики, хаотичное создание объектов в базе быстро приведет к архитектурному тупику. Разберем основные этапы подготовки:
Перейдем к практическому проектированию нашей архитектуры.
Справочники в 1С используются для хранения условно-постоянной информации. Для IT-компании нам понадобятся следующие объекты конфигурации:
1. Справочник Контрагенты
Здесь мы будем хранить информацию о наших заказчиках. Достаточно создать стандартные реквизиты: ИНН, КонтактноеЛицо, Телефон и ЭлектроннаяПочта.
2. Справочник Проекты
Этот справочник логично сделать подчиненным справочнику Контрагенты. В нем будут находиться конкретные заказы на разработку сайтов или мобильных приложений. Добавим в него реквизиты:
ДатаНачала (Тип: Дата)ДатаОкончанияПлановая (Тип: Дата)ТехнологическийСтек (Тип: Строка или ссылка на другой справочник)СтатусПроекта (Тип: ПеречислениеСсылка.СтатусыПроектов — со значениями "На согласовании", "В разработке", "Тестирование", "Завершен")3. Справочник Сотрудники
Список всех наших специалистов (разработчиков, дизайнеров, тестировщиков, менеджеров). Полезно добавить реквизиты: Роль (например, программист, дизайнер) и СтавкаЧаса (Тип: Число) для последующего расчета себестоимости.
4. Справочник СерверыИДомены (наши «Хосты»)
Для любой веб-студии критически важно вести учет доступов к хостингам и серверам клиентов. Создадим этот справочник и добавим в него следующие реквизиты:
Проект (Тип: СправочникСсылка.Проекты)ДоменноеИмя (Тип: Строка)IPАдрес (Тип: Строка)ЛогинПанели (Тип: Строка)ПарольПанели (Тип: Строка)ДатаОкончанияОплаты (Тип: Дата) — очень важный реквизит, по которому мы настроим автоматические уведомления.В отличие от справочников, документы отражают события, происходящие в бизнесе, и совершают движения по регистрам для накопления оперативной информации. Разберем и реализуем цепочку документов.
1. Документ КалькуляцияПроекта
Этот документ создается менеджером при получении заказа. Нам необходимо оценить трудозатраты и рассчитать стоимость проекта для клиента. В документе создаем реквизит шапки Проект и табличную часть ЭтапыРаботы со следующими колонками:
Этап (Тип: Строка — например, Дизайн, Верстка, Программирование)Исполнитель (Тип: СправочникСсылка.Сотрудники)ПлановыеЧасы (Тип: Число)Ставка (Тип: Число)Сумма (Тип: Число, рассчитывается автоматически как произведение часов на ставку)Для автоматического расчета суммы при изменении часов или ставки в форме документа напишем простой обработчик событий на клиенте:
&НаКлиенте
Процедура ЭтапыРаботыПлановыеЧасыПриИзменении(Элемент)
СтрокаТаблицы = Элементы.ЭтапыРаботы.ТекущиеДанные;
Если СтрокаТаблицы <> Неопределено Тогда
СтрокаТаблицы.Сумма = СтрокаТаблицы.ПлановыеЧасы * СтрокаТаблицы.Ставка;
КонецЕсли;
КонецПроцедуры
При проведении этот документ должен записывать плановые показатели в регистр накопления ПлановыеТрудозатраты.
2. Документ УчетВремени (Тайм-трекинг)
Разработчики ежедневно заполняют этот документ, указывая, сколько реального времени они потратили на задачи в рамках конкретного проекта. В табличной части документа будут колонки: Проект, Сотрудник, ВыполненнаяРабота и ФактическиеЧасы. При проведении документ делает движения (расход или приход в зависимости от выбранной структуры регистра) в регистр накопления ФактическиеТрудозатраты.
Чтобы проект выглядел профессионально и получил высокую оценку на защите, добавим в него несколько интерактивных и современных функций.
В платформе 1С есть замечательный встроенный инструмент для графического отображения планов — диаграмма Ганта. Мы можем разместить ее прямо на управляемой форме обработки или отчета, чтобы руководитель видел, кто из сотрудников занят и укладываемся ли мы в сроки.
Рассмотрим пример кода, который программно заполняет диаграмму Ганта данными из нашей базы данных:
&НаСервере
Процедура ЗаполнитьДиаграммуГантаНаСервере()
Диаграмма = Отчет.ДиаграммаГанта;
Диаграмма.Очистить();
// Получаем данные по проектам и срокам
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Проекты.Ссылка КАК Проект,
| Проекты.Наименование КАК Наименование,
| Проекты.ДатаНачала КАК ДатаНачала,
| Проекты.ДатаОкончанияПлановая КАК ДатаОкончания
|ИЗ
| Справочник.Проекты КАК Проекты";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
// Создаем серию для каждого проекта
Серия = Диаграмма.УстановитьСерию(Выборка.Наименование);
Точка = Диаграмма.УстановитьТочку(Выборка.Проект);
// Задаем интервал времени для отображения на диаграмме
ЗначениеГанта = Диаграмма.ПолучитьЗначение(Точка, Серия);
Интервал = ЗначениеГанта.Добавить();
Интервал.Начало = Выборка.ДатаНачала;
Интервал.Конец = Выборка.ДатаОкончания;
КонецЦикла;
КонецПроцедуры
Вместо сложной интеграции с 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С!