UTM-метки в 1С: от заявки на сайте до отчёта по каналам продаж
Содержание
Подключить UTM к 1С можно тремя способами: передать метки в комментарии заказа через обычный обмен с сайтом, записать их в дополнительные реквизиты заказа или принять отдельным HTTP-сервисом в расширении конфигурации. Готовой кнопки «подключить UTM» в типовых конфигурациях нет. Любой способ сводится к одной цепочке: сайт запоминает метки посетителя → передаёт их вместе с заказом → 1С хранит их рядом с заказом → отчёт группирует продажи по источнику, каналу и кампании.
Пример настройки — 1С:Управление торговлей 11 (документ «Заказ клиента »). Для 1С:Бухгалтерии логика та же, только метки привязывают к счёту покупателю или реализации.
Если вам нужен УТМ для ЕГАИС (универсальный транспортный модуль для алкоголя) — это другая задача. Здесь речь о маркетинговых UTM-метках в ссылках рекламы.
Как UTM-метки работают в связке «сайт — 1С»
UTM-метка — это параметры в адресе ссылки. Рекламная система или вы сами дописываете их к адресу посадочной страницы. 1С эти параметры никогда не видит напрямую: человек кликает по ссылке в браузере, а не в программе.
Стандартный набор из пяти параметров:
| Параметр | Что означает | Пример значения |
|---|---|---|
utm_source | источник трафика | yandex, vk, newsletter |
utm_medium | тип трафика | cpc, email, social |
utm_campaign | кампания | zimnyaya_rasprodazha |
utm_content | объявление, баннер | banner_240x400 |
utm_term | ключевая фраза | купить ноутбук |
Отсюда главный принцип: метки нужно поймать на сайте в момент первого захода и донести до заказа. Если посетитель пришёл по рекламе, походил по каталогу и оформил заказ через 20 минут, в адресе страницы оформления меток уже нет. Их надо сохранить заранее — в cookie или localStorage.
Что даёт UTM в 1С, а не только в Яндекс Метрике:
- 💰 реальная выручка по каналу, а не «цели» и «конверсии»;
- 📦 учёт отмен и возвратов: заказ из рекламы мог не отгрузиться;
- 🧾 маржа по каналу, если в базе считается себестоимость;
- 🔁 повторные покупки клиента, который впервые пришёл по рекламе.
Подготовка базы 1С: где хранить UTM-метки
Сначала решите, куда в 1С складывать пять значений. Вариантов два, и от выбора зависит, как потом строить отчёты.
| Где хранить | Как настроить | Плюсы | Минусы |
|---|---|---|---|
| Дополнительные реквизиты заказа | В пользовательском режиме, без программиста | Видны прямо в форме заказа | Писать в них из кода и строить отчёты сложнее |
| Регистр сведений в расширении | Конфигуратор, расширение конфигурации | Чистая таблица «заказ → метки», простые запросы | Нужен программист 1С |
| Комментарий заказа | Ничего настраивать не надо | Работает сразу с типовым обменом | Для отчёта текст придётся разбирать |
Вариант 1. Дополнительные реквизиты
- Включите механизм:
НСИ и администрирование → Общие настройки(в Бухгалтерии —Администрирование → Общие настройки), флажок «Дополнительные реквизиты и сведения». - На той же странице откройте ссылку «Дополнительные реквизиты».
- В списке наборов выберите документ «Заказ клиента».
- Создайте пять реквизитов с типом «Строка»: «UTM: источник», «UTM: канал», «UTM: кампания», «UTM: объявление», «UTM: ключевая фраза».
- Откройте любой заказ — поля появятся на вкладке «Дополнительно» или внизу формы, в зависимости от релиза.
Этот вариант удобен, если метки вносит менеджер вручную со слов клиента или копирует из письма с заявкой.
Вариант 2. Регистр сведений в расширении
Для автоматической передачи надёжнее отдельная таблица. Программист создаёт расширение конфигурации
(не трогая типовую конфигурацию
, чтобы обновления ставились без проблем) и добавляет в него регистр сведений
, например мрк_UTMМеткиЗаказов:
- 🔑 измерение
Заказ— тип «ДокументСсылка.ЗаказКлиента»; - 📝 ресурсы
Источник,Канал,Кампания,Объявление,КлючеваяФраза— строка 150; - 🆔 ресурс
ClientID— строка 50, идентификатор посетителя Метрики; - 🕒 ресурс
ДатаПерехода— дата и время.
Префикс мрк_ — это префикс имён расширения. Он защищает от совпадения имён с объектами будущих релизов.
Расширение, которое добавляет свои данные, после установки требует обновить структуру базы. Делайте это в нерабочее время и после резервной копии.
Передача UTM-меток с сайта в 1С
Передача состоит из двух половин: сайт сохраняет метки и кладёт их в заказ, 1С их принимает.
Шаг 1. Сохранить метки на сайте
Этот скрипт на странице сайта запоминает метки в cookie на 30 дней. Новый заход по рекламной ссылке перезаписывает их — это модель «последний рекламный переход».
(function () {
var keys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term'];
var params = new URLSearchParams(window.location.search);
if (!params.get('utm_source')) return; // заход без меток не затирает старые
var data = {};
keys.forEach(function (k) { data[k] = params.get(k) || ''; });
data.landing = window.location.pathname;
data.ts = new Date().toISOString();
document.cookie = 'utm_data=' + encodeURIComponent(JSON.stringify(data)) +
'; path=/; max-age=' + 60 * 60 * 24 * 30 + '; SameSite=Lax';
})();
Нужна модель «первый переход» — добавьте в начало проверку: если cookie utm_data уже есть, выйти из функции.
При оформлении заказа сайт читает cookie и кладёт метки в скрытые поля формы или прямо в данные заказа на сервере. Разработчику сайта достаточно сказать: «метки из cookie utm_data должны уйти в 1С вместе с заказом».
Шаг 2а. Через комментарий заказа (без программиста 1С)
Если заказы уже приходят в 1С через обмен с сайтом, проще всего попросить разработчика сайта дописывать метки в комментарий заказа одной строкой с постоянным форматом:
UTM: source=yandex; medium=cpc; campaign=zimnyaya_rasprodazha; content=banner_1; term=купить ноутбук
Типовой обмен перенесёт комментарий в заказ. Минус один: для отчёта строку придётся разбирать. Отбор по подстроке source=yandex в списке заказов работает сразу, а для сводного отчёта нужен разбор строки в запросе или обработке.
Шаг 2б. Через HTTP-сервис расширения
Сайт отправляет POST-запрос с JSON сразу после того, как заказ создан в 1С и сайту известен его идентификатор. В расширении создаётся HTTP-сервис с корневым URL utm, шаблоном /order и методом POST. Обработчик:
Функция ЗаказPOST(Запрос)
Ответ = Новый HTTPСервисОтвет(200);
Попытка
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Запрос.ПолучитьТелоКакСтроку("UTF-8"));
Данные = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
Заказ = Документы.ЗаказКлиента.ПолучитьСсылку(
Новый УникальныйИдентификатор(ЗначениеПоля(Данные, "order_guid")));
Если Заказ.ПолучитьОбъект() = Неопределено Тогда
Ответ.КодСостояния = 404;
Ответ.УстановитьТелоИзСтроки("order not found");
Возврат Ответ;
КонецЕсли;
Запись = РегистрыСведений.мрк_UTMМеткиЗаказов.СоздатьМенеджерЗаписи();
Запись.Заказ = Заказ;
Запись.Источник = НРег(ЗначениеПоля(Данные, "utm_source"));
Запись.Канал = НРег(ЗначениеПоля(Данные, "utm_medium"));
Запись.Кампания = ЗначениеПоля(Данные, "utm_campaign");
Запись.Объявление = ЗначениеПоля(Данные, "utm_content");
Запись.КлючеваяФраза = ЗначениеПоля(Данные, "utm_term");
Запись.ClientID = ЗначениеПоля(Данные, "client_id");
Запись.ДатаПерехода = ТекущаяДатаСеанса();
Запись.Записать(Истина);
Исключение
Ответ.КодСостояния = 400;
Ответ.УстановитьТелоИзСтроки(
КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
Возврат Ответ;
КонецФункции
Функция ЗначениеПоля(Данные, Имя)
Значение = Неопределено;
Если Данные.Свойство(Имя, Значение) И Значение <> Неопределено Тогда
Возврат Лев(СокрЛП(Строка(Значение)), 150);
КонецЕсли;
Возврат "";
КонецФункции
Пример тела запроса от сайта:
{
"order_guid": "6f1c2b4e-8a3d-4f5e-9b21-0c7d1e2f3a4b",
"utm_source": "yandex",
"utm_medium": "cpc",
"utm_campaign": "zimnyaya_rasprodazha",
"utm_content": "banner_1",
"utm_term": "купить ноутбук",
"client_id": "1712345678901234567"
}
Чтобы сервис стал доступен снаружи, базу публикуют на веб-сервере (Администрирование → Публикация на веб-сервере в Конфигураторе) с отмеченными HTTP-сервисами, включая сервисы расширений. Адрес получится вида https://сервер/имя_публикации/hs/utm/order.
Для доступа заведите в 1С отдельного пользователя только с правами на запись этого регистра. Сайт передаёт его логин и пароль в заголовке Basic-авторизации.
Не публикуйте базу в интернет без HTTPS и без отдельного пользователя с урезанными правами. Учётные данные администратора в коде сайта — прямой путь к утечке базы.
Сценарии автоматизации на данных UTM
Метки в базе полезны не только для отчёта раз в месяц. Типичные сценарии, которые делают поверх того же регистра:
- 👤 Распределение заказов. Заявки с
utm_medium=cpcпо дорогим кампаниям сразу назначаются старшему менеджеру. - 🏷️ Сегменты клиентов. Источник первого заказа переносят в дополнительное сведение контрагента. Так видно, откуда пришла клиентская база в целом.
- 📤 Обратная выгрузка в Метрику. Оплаченные и отгруженные заказы выгружают в Яндекс Метрику как офлайн-конверсии: идентификатор посетителя, цель, время, сумма. Рекламная система начинает учиться на реальных продажах, а не на отправке формы.
- ⏰ Регламентное задание. Если выбрали путь через комментарий, ночное задание разбирает строку
UTM: …и раскладывает значения по полям регистра.
Для обратной выгрузки и нужен ClientID. На сайте его получают методом счётчика ym(НОМЕР_СЧЁТЧИКА, 'getClientID', function (id) { … }) и передают в 1С вместе с метками.
Отчёт по рекламным каналам в 1С
Когда метки лежат в регистре, отчёт строится обычным запросом или схемой компоновки данных. Пример запроса, который считает заказы и сумму по источнику, каналу и кампании за период:
ВЫБРАТЬ
UTM.Источник КАК Источник,
UTM.Канал КАК Канал,
UTM.Кампания КАК Кампания,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ UTM.Заказ) КАК Заказов,
СУММА(UTM.Заказ.СуммаДокумента) КАК СуммаЗаказов
ИЗ
РегистрСведений.мрк_UTMМеткиЗаказов КАК UTM
ГДЕ
UTM.Заказ.Проведен
И UTM.Заказ.Дата МЕЖДУ &НачалоПериода И &КонецПериода
СГРУППИРОВАТЬ ПО
UTM.Источник,
UTM.Канал,
UTM.Кампания
УПОРЯДОЧИТЬ ПО
СуммаЗаказов УБЫВ
Что добавить, чтобы отчёт показывал деньги, а не заявки:
- Соединить регистр с отгрузками по заказу — тогда отменённые и неотгруженные заказы не завышают выручку канала.
- Учесть возвраты от клиентов по тем же заказам.
- Подтянуть себестоимость, если её считает конфигурация: канал с большой выручкой и низкой маржой часто оказывается убыточным.
- Вывести отчёт в форму с отбором по периоду и группировкой по кампаниям — маркетологу удобнее смотреть кампанию целиком, чем каждое объявление.
Если выбрали дополнительные реквизиты, начните с того, что уже есть: в списке заказов клиентов добавьте колонки реквизитов через настройку списка и включите отбор по «UTM: источник». Для небольшого потока заявок этого хватает.
Приводите utm_source и utm_medium к нижнему регистру ещё при записи. Иначе Yandex, yandex и YANDEX окажутся тремя разными строками в отчёте.
Частые ошибки и отладка подключения UTM
Проблемы обычно видны по одному признаку: заказ в 1С есть, а меток у него нет или они странные. Ищите, на каком участке цепочки они потерялись.
Ещё три ошибки, которые всплывают уже после запуска:
- 📞 Звонки без меток. Клиент увидел рекламу и позвонил. Такой заказ менеджер создаёт вручную, и меток у него нет. Без коллтрекинга честно помечайте такие заказы источником «телефон», а не оставляйте пустыми.
- 🔄 Повторная запись перезаписывает метки. Если сайт шлёт метки при каждом изменении заказа, а клиент пришёл в оплату по ссылке из письма с другими метками, исходный источник пропадёт. Записывайте метки один раз, при создании заказа.
- 🧩 Разные метки на одну кампанию. Маркетолог назвал кампанию
sale_winter, а коллега —winter-sale. Договоритесь о справочнике названий до запуска рекламы, а не после.