При работе с крупными каталогами товаров и динамическими прайс-листами поставщиков выгрузка цен в 1С может происходить несколько раз в день. Если каталог содержит десятки тысяч наименований, ежедневное проведение документов Установка цен номенклатуры приводит к формированию миллиона новых записей в регистре сведений. Со временем таблица СУБД разрастается до десятков миллионов строк, что снижает производительность системы и замедляет обмен с сайтом. Разберем основные способы решения этой проблемы и оптимизации архитектуры 1С.
Рассмотрим самую распространенную причину взрывного роста таблиц СУБД: запись «новых» цен даже тогда, когда итоговая стоимость товара в рублях не изменилась или изменилась незначительно. При пересчете курса валют стоимость мелких позиций после округления часто остается прежней.
Выясним, как предотвратить создание дублирующих записей. Перед формированием документа или набора записей регистра необходимо сравнить текущую цену в базе с новым значением. Если разница не превышает заданный порог (или равна нулю), запись выполнять не нужно.
Разберем пример алгоритма проверки перед записью новой цены:
// Сравнение новой цены с актуальной ценой из базы
Если Абс(НоваяЦена - ТекущаяЦена) > 0.01 Тогда
// Фиксируем изменение цены только при реальном отклонении
ЗаписатьНовуюЦену(Номенклатура, ВидЦены, НоваяЦена);
КонецЕсли;
Использование этого подхода позволяет сократить количество создаваемых записей в регистре в десятки раз, так как в реальности за день меняются цены далеко не на весь ассортимент.
Проанализируем альтернативный подход к ценообразованию. Если поставщик привязывает цены к валюте (USD, EUR), а изменения прайс-листа в течение дня вызваны колебаниями валютного курса, не обязательно пересчитывать и перезаписывать рублевые цены всех 60 000 товаров.
Рассмотрим пошаговую схему оптимизации:
Такой подход полностью снимает нагрузку с регистра сведений Цены номенклатуры, исключая необходимость создавать сотни тысяч ежедневных движений.
Если для бизнес-процессов компании не требуется подробная история изменения цен за прошлые месяцы или годы, устаревшие данные можно безопасно удалять. Отсутствие старых записей в регистре сведений Цены номенклатуры не влияет на проведенные документы продаж и себестоимость, так как сумма и цена в документах реализации фиксируются непосредственно в их табличных частях.
При очистке больших объемов данных необходимо учитывать технические особенности СУБД (MS SQL Server или PostgreSQL):
.ldf). Выполняйте удаление короткими транзакциями (например, по 10 000–50 000 записей).Посмотрим на задачу с точки зрения системной архитектуры. Если главная цель частого обновления — отображать актуальные цены поставщиков в интернет-магазине на базе 1С-Битрикс, хранение каждого промежуточного шага в основной базе 1С является избыточным.
Выясним, как настроить эффективный обмен без перегрузки 1С:
Благодаря этому основная учетная система 1С освобождается от обработки миллионных массивов временных данных, а сайт получает обновленные цены за считанные секунды.