Имеется таблица значения. При переборе таблицы значения хочу выполнить условие создания документа каждые 20 000 строк. Подскажите, как можно выполнить подобное?

Перебор ТЗ у нас идет так

 Для Каждого Строка Из ТЗ Цикл

       //условие

      КонецЦикла;

Не запихивать же счетчик внутри цикла?
---
проверку нужно внутри цикла делать

```1c
    НовДок = Неопределено;
    Для Каждого СтрокаТЗ Из ТЗ Цикл
    Если ТЗ.Индекс(СтрокаТЗ)%20000 = 0 Тогда
    Если НовДок <> Неопределено Тогда
    НовДок.Записать();
    КонецЕсли;
    НовДок = Документы.ПриходнаяНакладная.СоздатьДокумент();
    НовДок.Дата = ТекущаяДата();
    КонецЕсли;
    СтрокаТЧ = НовДок.Материалы.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТЧ, СтрокаТЗ);
    КонецЦикла;
    Если НовДок <> Неопределено Тогда
    НовДок.Записать();
    КонецЕсли;
```
---
или вариант ТЗ.Индекс(Строка)
---
(2)

```1c
    Если ТЗ.Индекс(Строка)%20000 = 0 Тогда
    СоздатьДок();
    КонецЕсли;
```
---
Думаю, создавать документ нужно перед началом цикла, а не после его окончания.
Создали Док
Записали 20000 строк в него
Записали Док
Создали новый

Хотя всякое бывает, не спорю.
---
Согласен. Про это и хотел спросить

```1c
    Если ТЗ.Индекс(Строка)%20000 = 0 Тогда

    НовДок = Документы.ПриходнаяНакладная.СоздатьДокумент();
    НовДок.Дата = ТекущаяДата();

    Для Каждого Строка Из ТЗ Цикл

    ТЧ = НовДок.Материалы.Добавить();
    ТЧ.Номенклатура = ТЗ.Номенклатура;
    ТЧ.Количество = ТЗ.Количество;
    ТЧ.Сумма = ТЗ.Сумма;

    КонецЦикла;

    НовДок.Записать();

    КонецЕсли;
```

Так не работает. Если запихнуть создание документа в цикл, то будет создаваться каждую строку новый документ.
---
проверку нужно внутри цикла делать

```1c
    НовДок = Неопределено;
    Для Каждого СтрокаТЗ Из ТЗ Цикл
    Если ТЗ.Индекс(СтрокаТЗ)%20000 = 0 Тогда
    Если НовДок <> Неопределено Тогда
    НовДок.Записать();
    КонецЕсли;
    НовДок = Документы.ПриходнаяНакладная.СоздатьДокумент();
    НовДок.Дата = ТекущаяДата();
    КонецЕсли;
    СтрокаТЧ = НовДок.Материалы.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТЧ, СтрокаТЗ);
    КонецЦикла;
    Если НовДок <> Неопределено Тогда
    НовДок.Записать();
    КонецЕсли;
```
---
Я бы по-другому сделал:

```1c
    НовДок = Неопределено;
    Если ТЗ.Количество() > 0 Тогда
    НовДок = Документы.ПриходнаяНакладная.СоздатьДокумент();
    НовДок.Дата = ТекущаяДата();
    КонецЕсли;
    Для Каждого СтрокаТЗ Из ТЗ Цикл
    СтрокаТЧ = НовДок.Материалы.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТЧ, СтрокаТЗ);
    Если ТЗ.Индекс(СтрокаТЗ)%20000 = 0 Тогда
    НовДок.Записать();
    НовДок = Документы.ПриходнаяНакладная.СоздатьДокумент();
    НовДок.Дата = ТекущаяДата();
    КонецЕсли;
    КонецЦикла;
    Если НовДок <> Неопределено Тогда
    НовДок.Записать();
    КонецЕсли;
```
---
и получите первый документ всего с одной строкой в ТЧ.
---
Чойта? Через 20000 строк только документ должен быть записан. Код не проверял. Сейчас попробую.потестить.
---
индексы начинаются с 0.
Если ТЗ.Индекс(СтрокаТЗ)%20000 = 0 Тогда
индекс первой строки = 0.
0%20000 = 0
первой же строкой попадаем в условие.
---
Ваш код сработал. Спасибо большое.
---
ещё нужно учесть случаи:
1. строк менее 20к
2. строк более 20к
(теряем данные в этих случаях)
---
тут согласен. ну это можно доработать.
---
Кстати, представьте, что в ТЗ 2 строки. Условие не выполнится, и документ создан не будет.
---
А что в этом случае тогда предпринять?
---
вот так попробуйте.

```1c
    НовДок = Документы.ПриходнаяНакладная.СоздатьДокумент();
    НовДок.Дата = ТекущаяДата();
    Для Каждого СтрокаТЗ Из ТЗ Цикл
    Если ТЗ.Индекс(СтрокаТЗ)%20000 = 0 И ТЗ.Индекс(СтрокаТЗ) > 0 Тогда
    НовДок.Записать();
    НовДок = Документы.ПриходнаяНакладная.СоздатьДокумент();
    НовДок.Дата = ТекущаяДата();
    КонецЕсли;
    СтрокаТЧ = НовДок.Материалы.Добавить();
    ЗаполнитьЗначенияСвойств(СтрокаТЧ, СтрокаТЗ);
    КонецЦикла;
    Если НовДок.Материалы.Количество() > 0 Тогда
    НовДок.Записать();
    КонецЕсли;
```
---
Либо мой вариант, только прибавьте единицу к индексу (или используйте атрибут НомерСтроки). Тут согласен с предыдущим оратором.
---
почему не запихивать? Делать лучше так, как умеешь. Иначе можно вообще ничего не сделать.