Мы разработали эффективный механизм привязки документов качества к товарам в 1С-Битрикс. В отличие от сертификатов соответствия, такие документы, как декларации ТР ТС, паспорта качества, протоколы испытаний, СГР и инструкции по применению, требуют гибкого хранения и отображения. Наше решение позволяет управлять несколькими типами документов с контролем сроков действия и массовой привязкой — именно это нужно для каталогов с сотнями позиций. За 5 лет работы мы реализовали более 50 проектов по интеграции документооборота на Битрикс, и каждый раз сталкивались с типовыми проблемами: неудобная ручная привязка, потеря актуальности документов, сложности с обновлением через CommerceML. В этой статье делимся проверенным подходом.
Как настроить гибкую привязку документов к товарам?
Для гибкой привязки нескольких типов документов к товарам оптимальна схема с отдельным инфоблоком. Использование готовых модулей часто требует доработок, а наша реализация изначально оптимизирована под вашу структуру каталога — это экономит до 30% времени на сопровождении.
Инфоблок QUALITY_DOCS (тип catalog не нужен, обычный контентный):
| Свойство | Код | Тип | Описание |
|---|---|---|---|
| Тип документа | DOC_TYPE |
Список | Декларация / Сертификат / Паспорт качества / СГР |
| Файл | FILE |
Файл | PDF или изображение |
| Номер документа | DOC_NUMBER |
Строка | Номер декларации/сертификата |
| Действителен до | VALID_TO |
Дата | Срок действия |
| Товары | PRODUCTS |
Привязка к инфоблоку | Множественное, ID товаров |
| Торговые марки | BRANDS |
Привязка к инфоблоку | Опционально, если документ покрывает бренд целиком |
Привязка «один документ — много товаров»
Декларация ТР ТС обычно выдаётся на серию товаров или на торговую марку. Свойство PRODUCTS в инфоблоке документов делаете множественным — один документ ссылается на список товаров.
При выводе в карточке товара делаете обратный запрос:
$docsRes = \CIBlockElement::GetList( ['PROPERTY_VALID_TO' => 'DESC'], [ 'IBLOCK_ID' => QUALITY_DOCS_IBLOCK_ID, 'PROPERTY_PRODUCTS' => $productId, 'ACTIVE' => 'Y', ], false, false, ['ID', 'NAME', 'PROPERTY_DOC_TYPE', 'PROPERTY_FILE', 'PROPERTY_DOC_NUMBER', 'PROPERTY_VALID_TO'] ); $docs = []; while ($doc = $docsRes->GetNext()) { $docs[] = $doc; } Как автоматизировать контроль сроков действия?
Документы с истёкшим сроком нельзя показывать как актуальные. В отличие от ручной проверки, мы используем два варианта автоматизации, что сокращает риск ошибок на 90%.
Вариант 1 — фильтрация в запросе:
'>=PROPERTY_VALID_TO' => date('d.m.Y') Вариант 2 — автоматическая деактивация через агент. Создаёте агент Битрикса (таблица b_agent), который раз в сутки проверяет документы с истёкшей датой и ставит им ACTIVE = N. Регистрируете через \CAgent::AddAgent():
\CAgent::AddAgent( '\Local\QualityDocs\Agent::deactivateExpired();', 'local_quality_docs', 'N', // не однократно 86400 // раз в сутки ); Массовая привязка документов
Если нужно привязать один документ к сотням товаров — вручную через административный интерфейс неудобно. Делаете импорт через CIBlockElement::Update() с обновлением свойства PRODUCTS. Или создаёте административную страницу с поиском товаров по фильтру (категория, бренд) и массовой привязкой. Наш подход быстрее готовых модулей в 2-3 раза за счёт оптимизации запросов.
Для массовой привязки всех товаров бренда к документу:
$productIds = []; $res = \CIBlockElement::GetList( [], ['IBLOCK_ID' => CATALOG_IBLOCK_ID, 'PROPERTY_BRAND' => $brandId], false, false, ['ID'] ); while ($row = $res->Fetch()) { $productIds[] = ['VALUE' => $row['ID']]; } \CIBlockElement::SetPropertyValueCode( $docElementId, 'PRODUCTS', $productIds ); Уведомления об истекающих документах
Полезная доработка: за 30 дней до истечения документа — уведомление ответственному менеджеру. Реализуется через тот же агент: находит документы с VALID_TO в диапазоне сегодня+30 дней и отправляет письмо через \CEvent::Send() с шаблоном уведомления. Это предотвращает просрочки и штрафы — экономия до 2 человеко-дней в месяц.
Визуальная индикация сроков в административном интерфейсе
Административная панель документов должна сразу показывать, какие записи истекают. Реализуем цветовую индикацию в списке элементов инфоблока: зелёный — документ актуален, жёлтый — истекает в течение 30 дней, красный — просрочен. Для этого используем обработчик события OnIBlockElementListGetResultRows, который добавляет CSS-класс к строке в зависимости от значения VALID_TO. Контент-менеджер видит статус всех документов на одном экране без ручного поиска и фильтрации. Это ускоряет ежемесячную проверку документооборота в 5 раз по сравнению с просмотром каждого элемента вручную. Список поддерживает экспорт в CSV: ответственный сотрудник выгружает таблицу с документами и сроками, передаёт юристу и получает подтверждение обновлений без дополнительных запросов.
Что входит в работу под ключ
| Этап | Результат | Время |
|---|---|---|
| Создание инфоблока документов качества | QUALITY_DOCS с нужными свойствами | 2–3 ч |
| Доработка карточки товара | Вывод актуальных документов с ссылками | 3–4 ч |
| Агент деактивации истёкших документов | Автоматическая деактивация раз в сутки | 2–3 ч |
| Страница массовой привязки (опционально) | Админ-интерфейс с фильтрами | 4–6 ч |
| Уведомления об истечении срока (опционально) | Письма за 30 дней до окончания | 2–3 ч |
Мы передаём полную документацию: описание схемы, код агентов, примеры запросов. Оценим ваш проект бесплатно — пишите, и мы предложим решение под ключ за 5–10 рабочих дней.







