При завантаженні партії хімічних товарів паспорти безпеки часто губляться, прикріплюються до невірного товару або мають неправильні версії. Ручна обробка займає до 2 годин на 100 позицій, а помилки в назвах файлів ведуть до невідповідності юридичним вимогам. Налаштування паспорта безпеки товару 1С-Бітрікс автоматизує цей процес: ми налаштовуємо властивості інфоблоків, пишемо скрипт масового завантаження з ZIP і виводимо посилання на SDS у картці. Результат — менеджер завантажує документи за хвилини, покупець бачить актуальну версію. Наше рішення в 5 разів швидше за ручне завантаження. Вартість налаштування становить від $200, що дозволяє заощадити до $500 на місяць на зарплаті менеджера. Наш досвід — 5 років впроваджень для магазинів хімії, лакофарбових матеріалів та промислового обладнання. Ми виконали понад 20 проектів з автоматизації SDS, обробили більше 10 000 товарів. Гарантуємо підтримку після запуску.
Safety Data Sheet (SDS) — обов'язковий документ для багатьох категорій: хімічні речовини, лаки, фарби, миючі засоби, промислові гази. В інтернет-магазині на Бітрікс документ повинен бути доступний покупцю до покупки — це означає PDF у картці товару з версійним контролем та можливістю завантаження.
Чому потрібна автоматизація паспортів безпеки?
Типові складнощі:
- Ручне завантаження кожного файлу — до 2 годин на 100 товарів.
- Помилки в іменах файлів: артикул не збігається, паспорт прикріплюється до невірного товару.
- Відсутність версійності: незрозуміло, чи актуальний документ.
- Пошук товарів без SDS вручну через адмінку.
Ми автоматизуємо процес, скорочуючи час завантаження на 80% порівняно з ручним прикріпленням (у 5 разів швидше). Економія на зарплаті менеджера — суттєва, до $500 на місяць.
Як організувати масове завантаження паспортів?
Зберігання документів
Паспорти безпеки зберігаються у файловому сховищі Бітрікс (/upload/) через модуль main. Зв'язок з товаром — через властивість-файл інфоблоку:
Властивість SAFETY_DATA_SHEET (тип F):
- Множинне: ні (один актуальний паспорт)
- Обов'язкове: ні (не у всіх товарів)
- Підказка: «PDF паспорта безпеки (ГОСТ 30333-2007)»
Для версійного контролю — властивість SAFETY_DATA_SHEET_DATE (тип DateTime).
Скрипт масового завантаження з ZIP
Паспорти часто приходять пачкою від постачальника в ZIP-архіві з іменами за артикулом. Наш скрипт обробляє архів за хвилини — у 5 разів швидше за ручне завантаження:
Розгорнути приклад коду скрипта
function importSdsDocuments(string $zipPath, int $iblockId): array { $zip = new \ZipArchive(); $zip->open($zipPath); $results = ['ok' => 0, 'not_found' => [], 'error' => []]; for ($i = 0; $i < $zip->numFiles; $i++) { $filename = $zip->getNameIndex($i); if (!str_ends_with(strtolower($filename), '.pdf')) continue; preg_match('/^([A-Z0-9\-]+)/i', $filename, $matches); $article = $matches[1] ?? ''; $product = \CIBlockElement::GetList([], [ 'IBLOCK_ID' => $iblockId, 'PROPERTY_ARTICLE' => $article, ], false, ['nPageSize' => 1], ['ID', 'NAME'])->GetNext(); if (!$product) { $results['not_found'][] = $filename; continue; } $tmpPath = sys_get_temp_dir() . '/' . $filename; file_put_contents($tmpPath, $zip->getFromIndex($i)); $fileId = \CFile::SaveFile([ 'name' => $filename, 'tmp_name' => $tmpPath, 'type' => 'application/pdf', ], 'sds_documents'); if ($fileId) { \CIBlockElement::SetPropertyValuesEx($product['ID'], $iblockId, [ 'SAFETY_DATA_SHEET' => $fileId, 'SAFETY_DATA_SHEET_DATE' => date('d.m.Y'), ]); $results['ok']++; } } $zip->close(); return $results; } Скрипт у 5 разів швидший за ручне завантаження: обробляє 100 файлів за 20 хвилин замість 2 годин. Налаштування завантаження за 4 кроки:
- Створіть властивості
SAFETY_DATA_SHEETіSAFETY_DATA_SHEET_DATEв інфоблоці товарів. - Розмістіть скрипт
importSdsDocumentsв адміністративній частині. - Додайте в шаблон картки виведення посилання на паспорт.
- Налаштуйте звіт і обробник валідації.
Як перевірити наявність SDS?
Відображення в картці товару
У шаблоні bitrix:catalog.element додаємо блок:
<?php if (!empty($arResult['PROPERTIES']['SAFETY_DATA_SHEET']['VALUE'])): ?> <?php $sdsFile = \CFile::GetFileArray($arResult['PROPERTIES']['SAFETY_DATA_SHEET']['VALUE']); ?> <div class="product-sds"> <h4>Документація з безпеки</h4> <a href="<?= \CFile::GetPath($arResult['PROPERTIES']['SAFETY_DATA_SHEET']['VALUE']) ?>" download="<?= htmlspecialchars($sdsFile['ORIGINAL_NAME']) ?>" class="sds-download-btn"> <span class="pdf-icon"></span> Паспорт безпеки (PDF) <?php if (!empty($arResult['PROPERTIES']['SAFETY_DATA_SHEET_DATE']['VALUE'])): ?> <small>версія від <?= $arResult['PROPERTIES']['SAFETY_DATA_SHEET_DATE']['VALUE'] ?></small> <?php endif; ?> </a> <p class="sds-note">Відповідно до <cite>ГОСТ 30333-2007</cite></p> </div> <?php endif; ?> Атрибут download забезпечує завантаження.
Валідація при додаванні товару
Для розділів, де SDS обов'язковий (наприклад, «Хімія», «Лакофарбові матеріали»), використовуємо обробник OnBeforeIBlockElementAdd:
AddEventHandler('iblock', 'OnBeforeIBlockElementAdd', function(&$fields) { $requiredSdsSections = \Bitrix\Main\Config\Option::get('sds_module', 'required_sections', ''); $requiredSectionIds = array_filter(explode(',', $requiredSdsSections)); if (in_array($fields['IBLOCK_SECTION_ID'], $requiredSectionIds)) { if (empty($fields['PROPERTY_VALUES']['SAFETY_DATA_SHEET'])) { $GLOBALS['APPLICATION']->ThrowException( 'Увага: для цього розділу рекомендується прикріпити паспорт безпеки.', 'SDS_MISSING' ); } } }); Звіт по товарах без SDS
Адміністративний звіт (GET /bitrix/admin/sds_report.php) показує список товарів із «хімічних» розділів без прикріпленого паспорта, з кнопкою швидкого завантаження.
SELECT ie.ID, ie.NAME, s.NAME as section_name FROM b_iblock_element ie JOIN b_iblock_section s ON s.ID = ie.IBLOCK_SECTION_ID LEFT JOIN b_iblock_element_property iep ON iep.IBLOCK_ELEMENT_ID = ie.ID AND iep.IBLOCK_PROPERTY_ID = ( SELECT ID FROM b_iblock_property WHERE IBLOCK_ID = ie.IBLOCK_ID AND CODE = 'SAFETY_DATA_SHEET' ) WHERE ie.IBLOCK_ID = ? AND ie.ACTIVE = 'Y' AND s.ID IN (/* розділи з обов'язковим SDS */) AND (iep.VALUE IS NULL OR iep.VALUE = '') ORDER BY s.NAME, ie.NAME; Звіт дозволяє за пару кліків виявити всі товари без SDS.
Процес роботи
| Етап | Що робимо |
|---|---|
| Аналітика | Вивчаємо каталог, визначаємо розділи з обов'язковим SDS, погоджуємо властивості |
| Проектування | Схема зберігання, скрипт завантаження, шаблон виведення, звіт |
| Реалізація | Налаштування інфоблоків, скрипт, шаблон, обробник валідації |
| Тестування | На тестових даних, виправляємо помилки |
| Деплой | Перенесення на бойовий сайт, навчання менеджерів |
Що входить у роботу
- Властивості інфоблоку (SAFETY_DATA_SHEET, SAFETY_DATA_SHEET_DATE)
- Скрипт масового завантаження з ZIP з обробкою помилок
- Шаблон відображення в картці
- Звіт по товарах без SDS
- Документація та навчання (1 година)
- Підтримка 1 місяць
Типові помилки та чек-лист
Помилки:
- Неправильне ім'я файлу (артикул не збігається) — скрипт позначає як
not_found. - Файл перевищує ліміт (>20 МБ) — налаштовуємо обмеження.
- Дата версії не проставлена — автоматично береться поточна.
- Забули прикріпити SDS вручну — валідація попереджає.
Чек-лист перед запуском:
- [ ] Всі артикули в назвах файлів збігаються з товарами
- [ ] Властивості SAFETY_DATA_SHEET і SAFETY_DATA_SHEET_DATE створено
- [ ] Розділи з обов'язковим SDS задано в опціях
- [ ] Шаблон картки виводить посилання на завантаження
- [ ] Звіт працює і показує правильні товари
Строки
| Етап | Строк |
|---|---|
| Налаштування властивостей інфоблоку | 0.5 дня |
| Скрипт масового завантаження з ZIP | 1 день |
| Шаблон відображення в картці | 1 день |
| Звіт по відсутніх документах | 1 день |
| Тестування та деплой | 0.5 дня |
| Разом | 4 дні |
Замовте налаштування паспортів безпеки під ключ — отримайте готове рішення за 4 дні. Зв'яжіться з нами для консультації та оцінки вашого проекту. Ми гарантуємо якість і підтримку після запуску.







