При оформлении крупных оптовых отгрузок или сведении сводных учетных данных пользователи нередко сталкиваются с необходимостью внесения тысяч строк в один документ (например, Реализация (акт, накладная, УПД) в 1C:Бухгалтерия 3.0 или Реализация товаров и услуг в 1С:Управление торговлей 11). Разберем, какие ограничения накладывает платформа 1С:Предприятие, почему длительный ввод данных приводит к ошибкам и как правильно организовать работу с объемными табличными частями.
Выясним, существует ли жесткий предел на число записей в табличной части документа:
НомерСтроки табличных частей имеет числовой тип с длиной 5 знаков. Таким образом, абсолютный технический максимум для одной табличной части составляет 99 999 строк. Превысить это число в рамках одного документа невозможно на уровне СУБД.Недостаточно памяти). Это связано с тем, что клиенту необходимо хранить в памяти контекст всей формы, выполнять динамический пересчет итогов, сумм НДС и автоматических скидок.Проанализируем частую проблему: пользователь открывает документ и вводит строки вручную на протяжении длительного времени (нескольких часов или дней) без промежуточного сохранения. При нажатии кнопки проведения система выдает ошибку блокировки. Рассмотрим причины такого поведения платформы:
ВерсияДанных. Если документ или зависимые от него справочники были изменены другим процессом (например, регламентным заданием, фоновым обменом РИБ или другим пользователем), версия объекта в базе данных обновляется. Контекст в открытой форме устаревает, и платформа блокирует запись во избежание потери чужих изменений.rphost). Если серверный контекст формы сбрасывается по таймауту неактивности, повторная попытка сохранить несохраненный объект приводит к ошибке сериализации и конфликту версий.ОбменДанными.Загрузка = Истина принудительно перезаписывает объект, делая несохраненную открытую форму недействительной.Если форма с большим количеством строк уже заполнена, но провести или записать документ не получается, выполним следующие шаги для сохранения результатов работы:
Лист Excel (*.xlsx).Разберем практические правила, которые помогут избежать сбоев и зависаний базы при оформлении крупных документов:
ДокументОбъект = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
ДокументОбъект.Дата = ТекущаяДата();
ДокументОбъект.Организация = ВыбраннаяОрганизация;
ДокументОбъект.Контрагент = ВыбранныйКонтрагент;
ДокументОбъект.ДоговорКонтрагента = ВыбранныйДоговор;
Для Каждого СтрДанных Из ТаблицаИмпорта Цикл
НоваяСтрока = ДокументОбъект.Товары.Добавить();
НоваяСтрока.Номенклатура = СтрДанных.Номенклатура;
НоваяСтрока.Количество = СтрДанных.Количество;
НоваяСтрока.Цена = СтрДанных.Цена;
НоваяСтрока.Сумма = СтрДанных.Сумма;
НоваяСтрока.СтавкаНДС = СтрДанных.СтавкаНДС;
КонецЦикла;
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
При таком подходе исключаются перегрузка оперативной памяти клиентского приложения и риски потери данных из-за конфликтов версий в интерфейсе.