UTM-метки в 1С: от заявки на сайте до отчёта по каналам продаж

· 9 мин

Содержание

Подключить 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. Дополнительные реквизиты

  1. Включите механизм: НСИ и администрирование → Общие настройки (в Бухгалтерии — Администрирование → Общие настройки), флажок «Дополнительные реквизиты и сведения».
  2. На той же странице откройте ссылку «Дополнительные реквизиты».
  3. В списке наборов выберите документ «Заказ клиента».
  4. Создайте пять реквизитов с типом «Строка»: «UTM: источник», «UTM: канал», «UTM: кампания», «UTM: объявление», «UTM: ключевая фраза».
  5. Откройте любой заказ — поля появятся на вкладке «Дополнительно» или внизу формы, в зависимости от релиза.

Этот вариант удобен, если метки вносит менеджер вручную со слов клиента или копирует из письма с заявкой.

Вариант 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.Кампания
УПОРЯДОЧИТЬ ПО
    СуммаЗаказов УБЫВ

Что добавить, чтобы отчёт показывал деньги, а не заявки:

  1. Соединить регистр с отгрузками по заказу — тогда отменённые и неотгруженные заказы не завышают выручку канала.
  2. Учесть возвраты от клиентов по тем же заказам.
  3. Подтянуть себестоимость, если её считает конфигурация: канал с большой выручкой и низкой маржой часто оказывается убыточным.
  4. Вывести отчёт в форму с отбором по периоду и группировкой по кампаниям — маркетологу удобнее смотреть кампанию целиком, чем каждое объявление.

Если выбрали дополнительные реквизиты, начните с того, что уже есть: в списке заказов клиентов добавьте колонки реквизитов через настройку списка и включите отбор по «UTM: источник». Для небольшого потока заявок этого хватает.

Приводите utm_source и utm_medium к нижнему регистру ещё при записи. Иначе Yandex, yandex и YANDEX окажутся тремя разными строками в отчёте.

Частые ошибки и отладка подключения UTM

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

Диагностика: выберите симптом

Ещё три ошибки, которые всплывают уже после запуска:

  • 📞 Звонки без меток. Клиент увидел рекламу и позвонил. Такой заказ менеджер создаёт вручную, и меток у него нет. Без коллтрекинга честно помечайте такие заказы источником «телефон», а не оставляйте пустыми.
  • 🔄 Повторная запись перезаписывает метки. Если сайт шлёт метки при каждом изменении заказа, а клиент пришёл в оплату по ссылке из письма с другими метками, исходный источник пропадёт. Записывайте метки один раз, при создании заказа.
  • 🧩 Разные метки на одну кампанию. Маркетолог назвал кампанию sale_winter, а коллега — winter-sale. Договоритесь о справочнике названий до запуска рекламы, а не после.

Частые вопросы

Можно ли подключить UTM к 1С без программиста?
Да, через дополнительные реквизиты заказа и комментарий из обмена с сайтом. Автоматическая раскладка меток по полям и отчёт с выручкой по каналам требуют доработки в расширении.
Подойдёт ли это для 1С:Бухгалтерии?
Да. Дополнительные реквизиты включаются так же, а метки привязывают к счёту покупателю или к реализации. Выручку по каналам считают по реализациям, а не по счетам.
Что выбрать: первый или последний рекламный переход?
Для оценки, откуда приходят новые клиенты, — первый переход. Для оценки, какая реклама дожимает до покупки, — последний. Можно хранить оба набора в разных полях.
Не нарушает ли хранение ClientID закон о персональных данных?
Сам по себе идентификатор посетителя не называет человека, но в 1С он связывается с заказом, где есть имя и телефон. Упомяните сбор таких данных в политике обработки персональных данных сайта.
Сломается ли передача UTM после обновления конфигурации?
Если доработка сделана расширением, типовое обновление её не затрагивает. После крупного обновления проверьте, что расширение применяется без ошибок, и отправьте тестовый заказ.