При попытке провести или записать документ с большим объемом номенклатуры пользователи и разработчики могут столкнуться с системным ограничением конфигурации или платформы. В типовых конфигурациях, таких как «1С:Управление торговлей», при превышении определенного объема строк срабатывают встроенные проверки вида:
Если Параметры.КоличествоСтрок > 99999 Тогда
// Предупреждение о превышении допустимого количества строк
КонецЕсли;
Разберем детально, чем обусловлен данный лимит, к каким последствиям приводит его обход и как правильно организовать работу со сверхбольшими объемами данных в «1С:Предприятии».
Выясним природу этого лимита. Главная причина кроется не в логике конкретной конфигурации, а в архитектуре хранения табличных частей платформы 1С на уровне реляционной базы данных:
НомерСтроки транслируется в колонку базы данных _LineNo с фиксированным типом numeric(5, 0). Это физически ограничивает диапазон значений числами от 1 до 99 999. Попытка записать 100 000-ю строку вызовет ошибку переполнения разрядности на уровне SQL-сервера.Рассмотрим практические варианты решения задачи, когда необходимо загрузить или обработать объем позиций, превышающий разумные пределы одного документа.
Наиболее надежный и рекомендуемый способ — программное разделение входящего массива на порции. Оптимальным размером пакета для проведения в типовых конфигурациях считается объем от 1 000 до 5 000 строк (максимум — 10 000 строк):
Проанализируем состав данных перед записью в документ. Если в исходном массиве присутствуют дублирующиеся товары с одинаковыми параметрами, выполняем предварительную группировку:
ТаблицаЗначений.Свернуть() по ключевым аналитикам (номенклатура, характеристика, склад, цена, ставка НДС) с суммированием по полям количества и суммы.Если документ выступает исключительно как регистратор исторического факта (например, импорт прайс-листа поставщика, инвентаризация гигантского распределительного центра или загрузка реестра платежей):
ДинамическийСписок с отбором по текущему документу. Это обеспечивает порционное чтение данных с сервера без зависания интерфейса и перегрузки оперативной памяти.Если проведение созданных документов по-прежнему создает пиковую нагрузку на транзакционную систему, применяем разделение логики: