Настройка привязки документов качества к товарам 1С-Битрикс
Документы качества — это более широкое понятие, чем сертификаты соответствия. Сюда входят: декларации ТР ТС, паспорта качества, протоколы испытаний, СГР (свидетельства о государственной регистрации), инструкции по применению. Для каждого типа документа — свои требования к хранению и отображению.
Структура хранения документов
Для гибкой привязки нескольких типов документов к товарам оптимальна схема с отдельным инфоблоком.
Инфоблок 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;
}
Контроль срока действия
Документы с истёкшим сроком нельзя показывать как актуальные. Варианты обработки:
Вариант 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. Или создаёте административную страницу с поиском товаров по фильтру (категория, бренд) и массовой привязкой.
Для массовой привязки всех товаров бренда к документу:
$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–3 ч |
| Доработка карточки товара | 3–4 ч |
| Агент деактивации истёкших документов | 2–3 ч |
| Страница массовой привязки (опционально) | 4–6 ч |
| Уведомления об истечении срока (опционально) | 2–3 ч |







