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

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

Прежде чем приступать к коду, необходимо четко понимать разницу между интерфейсом приложения и веб-страницей. Интерфейс 1С рендерится клиентским приложением, тогда как веб-страница — это текст, отдаваемый браузеру по протоколу HTTP. Для работы с последним вариантом вам потребуется опубликованная база на веб-сервере (IIS или Apache) с включенной поддержкой HTTP-сервисов.

Архитектурные подходы: Веб-расширения против HTTP-сервисов

Выбор инструмента определяет сложность реализации и гибкость итогового решения. Веб-расширения позволяют модифицировать существующие формы, добавлять новые поля и кнопки, но они работают строго в контексте платформы 1С и требуют установленного клиентского приложения (браузерного или десктопного). Это решение идеально подходит для доработки внутренних процессов предприятия.

С другой стороны, HTTP-сервисы (REST или SOAP) открывают двери во внешний мир. Вы можете создать обработчик, который при обращении по определенному URL будет формировать HTML-страницу «с нуля» или отдавать данные в формате JSON для внешнего сайта. Такой подход превращает 1С в мощный сервер приложений, способный обслуживать тысячи одновременных подключений из интернета.

⚠️ Внимание: Публикация базы данных в интернет через HTTP-сервисы требует повышенных мер безопасности. Обязательно настройте HTTPS, ограничьте права доступа пользователей и используйте механизмы аутентификации, чтобы избежать утечки конфиденциальных данных.

Если ваша цель — создать публичную страницу, например, форму заказа для клиентов, использование HTTP-сервиса является единственно верным решением. Веб-расширение в данном случае не подойдет, так как оно не предназначено для анонимного доступа и генерации чистого HTML вне оболочки платформы.

📊 Какой метод вы планируете использовать?
Веб-расширение для доработки форм
HTTP-сервис для внешнего сайта
Оба варианта
Пока не знаю разницы

Настройка публикации базы на веб-сервере

Фундаментом для создания любых веб-страниц в 1С является корректная публикация информационной базы. Без этого шага сервер просто не сможет принимать входящие HTTP-запросы. Процедура выполняется через консоль управления веб-сервером или утилиту командной строки ras.

В процессе публикации критически важно активировать галочку «Публиковать HTTP-сервисы»**. Если этот параметр не установлен, платформа проигнорирует все созданные вами обработчики, и при обращении к адресу вы получите ошибку 404 или стандартную страницу входа в 1С. Также рекомендуется проверить настройки пула приложений в IIS, убедившись, что он работает в режиме Integrated.

Для проверки работоспособности достаточно ввести в браузере адрес вида http://server/base/hs/. Если настройка прошла успешно, вы увидите список доступных сервисов или сообщение о том, что сервис не найден (что нормально, если вы еще не создали обработчики). Ошибка «Служба IIS не запущена» или «Отказано в доступе» свидетельствует о проблемах на уровне операционной системы или прав пользователя.

Параметр публикации Значение по умолчанию Рекомендуемое значение Влияние на работу
HTTP-сервисы Нет Да Без этого невозможно создание страниц
Веб-службы Нет По необходимости Нужно только для SOAP-интеграций
Стандартные OData Нет Да Упрощает получение данных для фронтенда
Администрирование Нет Нет Опасно открывать публично
💡

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

Создание HTTP-сервиса и обработчика GET-запроса

Логика формирования страницы resides в объекте метаданных «HTTP-сервис». В конфигураторе необходимо добавить новый сервис, задать ему имя (например, LandingPage) и создать внутри него обработчик для метода GET. Именно этот метод браузеры используют по умолчанию при открытии ссылки.

В коде обработчика вы получаете объект ЗапросHTTP, из которого можно извлечь параметры строки адреса, заголовки и данные аутентификации. Основное действие происходит при формировании объекта ОтветHTTP. Вам нужно явно указать заголовок Content-Type со значением text/html; charset=utf-8, чтобы браузер понял, что ему отдали веб-страницу, а не бинарный файл или текст.

Функция ОбработчикGET(Запрос)

Ответ = Новый ОтветHTTP;

Ответ.КодСостояния = 200;

Ответ.Заголовки.Вставить("Content-Type", "text/html; charset=utf-8");

HTML = "";

Ответ.УстановитьТелоИзСтроки(HTML);

Возврат Ответ;

КонецФункции

Обратите внимание, что кодировка должна быть указана явно, иначе вместо русских букв пользователь увидит «кракозябры». Платформа 1С работает с внутренним представлением строк, и корректная конвертация в байтовый поток для ответа клиенту лежит на ответственности разработчика в момент установки тела ответа.

Как передать параметры в URL?

Вы можете добавить параметры после знака вопроса, например /hs/LandingPage/main?id=123. В коде 1С они будут доступны через свойство Запрос.ПараметрыURL.Значение("id").

Генерация динамического HTML-контента

Статические страницы редко бывают полезны в бизнес-среде. Главная сила 1С заключается в возможности подставлять в шаблон HTML актуальные данные из базы: цены, остатки, имена менеджеров. Для этого удобно использовать механизм Таблица значений или прямые запросы к базе данных.

Формирование сложной верстки методом конкатенации строк (склеивания) в коде 1С быстро превращается в спагетти-код, который трудно поддерживать. Рекомендуется хранить HTML-шаблоны в отдельных файлах на сервере или в хранилище общих данных, а затем заменять в них маркеры вида %ИмяКлиента% на реальные значения. Это разделяет логику программы и представление данных.

При выводе данных, полученных от пользователей или из ненадежных источников, обязательно экранируйте специальные символы. Если в название товара попадет символ < или >, это может сломать верстку страницы или, что хуже, привести к XSS-уязвимости. В 1С для этого нет встроенной функции «на один клик», поэтому полезно создать общий модуль с функцией замены.

  • 🔹 Используйте СтрЗаменить() для экранирования символов &, <, > перед вставкой в HTML.
  • 🔹 Разбивайте логику формирования страницы на отдельные функции: одна для шапки, одна для тела, одна для подвала.
  • 🔹 Кэшируйте тяжелые выборки данных, если страница посещается часто, чтобы не нагружать базу данных 1С.

⚠️ Внимание: Не выводите напрямую структуры базы данных (например, полные ссылки на объекты) в HTML-код. Это раскрывает внутреннюю структуру вашей конфигурации злоумышленникам. Используйте только необходимые реквизиты.

Работа с формами и POST-запросами

Чтобы сделать страницу интерактивной, например, создать форму обратной связи или заказа, необходимо обрабатывать метод POST. В отличие от GET, данные в POST-запросе передаются в теле запроса, а не в адресной строке, что позволяет отправлять большие объемы информации безопасно.

В обработчике метода POST вам потребуется прочитать тело запроса. Если форма отправляет данные в формате application/x-www-form-urlencoded (стандарт для HTML-форм), платформа 1С может автоматически распарсить их, если настроить соответствующий параметр. В противном случае придется читать поток вручную и разбирать строку.

☑️ Проверка формы перед внедрением

Выполнено: 0 / 4

После обработки данных (например, создания документа «Заказ клиента») важно сформировать правильный ответ. Обычно это редирект на другую страницу или вывод сообщения об успехе. Для редиректа в ответе HTTP нужно установить код состояния 302 и добавить заголовок Location с адресом новой страницы.

Ответ.КодСостояния = 302;

Ответ.Заголовки.Вставить("Location", "/hs/LandingPage/success");

Такой подход обеспечивает корректное поведение браузера: при обновлении страницы пользователь не отправит форму повторно, что предотвратит создание дублей документов в базе 1С. Это стандартная практика веб-разработки, известная как Post/Redirect/Get.

💡

Всегда используйте паттерн Post/Redirect/Get при работе с формами в 1С, чтобы избежать дублирования документов при обновлении страницы браузером.

Стилизация и подключение внешних ресурсов

«Голый» HTML выглядит непривлекательно, поэтому к страницам, генерируемым в 1С, необходимо подключать CSS-стили и JavaScript. Вы можете хранить файлы стилей (.css) и скриптов (.js) прямо в базе 1С как двоичные данные или вынести их в статическую папку на веб-сервере.

Второй вариант предпочтительнее с точки зрения производительности. Веб-сервер (IIS/Apache) умеет эффективно отдавать статические файлы, кэшировать их и сжимать, тогда как обращение к 1С для получения каждого файла стилей создает лишнюю нагрузку на сервер приложений. В HTML-шаблоне просто укажите путь к файлам.

Если же вам нужно динамически менять стили в зависимости от настроек в базе, можно генерировать CSS «на лету» внутри обработчика 1С, аналогично генерации HTML. Однако помните, что браузеры кэшируют CSS-файлы агрессивно, поэтому при изменении стилей через 1С вам придется управлять заголовками кэширования вручную.

  • 🎨 Подключайте библиотеки вроде Bootstrap через CDN для ускорения разработки интерфейсов.
  • ⚡ Минимизируйте количество запросов к базе при генерации одной страницы.
  • 📱 Обязательно проверяйте адаптивность верстки на мобильных устройствах.

⚠️ Внимание: Интерфейсы и возможности платформы 1С могут обновляться. Всегда сверяйтесь с официальной документацией фирмы «1С» при работе с новыми версиями платформы, особенно в части безопасности HTTP-соединений.

Отладка и тестирование веб-страниц

Разработка веб-интерфейсов в 1С имеет свою специфику отладки. Вы не можете просто поставить точку останова в коде обработчика HTTP-сервиса и нажать F5 в браузере, если не настроено специальное отладочное соединение. Наиболее простой способ — использовать режим предприятия с параметром запуска HTTP-сервиса.

Для анализа входящих запросов и ответов удобно использовать сторонние инструменты, такие как Postman или встроенные инструменты разработчика в браузере (вкладка Network). Они позволяют увидеть точные заголовки, коды ответов и содержимое тела запроса, что незаменимо при поиске ошибок валидации или авторизации.

Частой ошибкой является игнорирование логов веб-сервера. Файлы журналов IIS или Apache содержат информацию о том, дошел ли запрос вообще до платформы 1С или был отброшен на уровне веб-сервера из-за настроек безопасности или отсутствия прав у пула приложений.

Где искать логи ошибок?

В каталоге установки платформы 1С есть папка logs, а также журналы событий Windows. Ошибки публикации часто связаны с правами доступа пользователя IUSR.

Можно ли создать сайт на 1С без знания HTML?

Технически можно использовать конструкторы форм внутри 1С и выводить их как HTML, но результат будет выглядеть устаревшим и неадаптивным. Для создания современных страниц базовое знание HTML и CSS обязательно, даже если логика пишется на встроенном языке 1С.

Будет ли сайт работать быстро, если база 1С большая?

Скорость зависит от оптимизации запросов. Если страница делает тяжелые выборки из миллионов записей при каждом открытии, она будет тормозить. Необходимо использовать индексы, отборы и кэширование данных.

Нужно ли покупать лицензию на веб-клиент для таких страниц?

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

Как защитить страницу паролем?

Самый простой способ — использовать стандартную авторизацию 1С (запрос логина и пароля в заголовке запроса). Для более сложных сценариев можно реализовать свою систему сессионных ключей или JWT-токенов внутри обработчика.

Можно ли использовать базы данных не 1С для хранения контента?

Да, через механизм внешних источников данных или ODBC/OLEDB вы можете читать данные из MySQL или PostgreSQL прямо из кода 1С и включать их в генерируемую HTML-страницу, хотя это усложняет архитектуру.