Добрый день есть код который отрабатывает как надо но нужно что бы после прочтения и заполнения реквизитов в 1с он удалил прочитанную строчку как это лучше сделать? вот сам код:

```1c
    МассивФаилов = НайтиФайлы("C:\", "*.txt");
    Текст = Новый ТекстовыйДокумент;
    Для Каждого Фаил из МассивФаилов Цикл
    Текст.Прочитать(Фаил.ПолноеИмя);
    Для НомерСтроки = 1 по Текст.КоличествоСтрок() Цикл
    Стр = Текст.ПолучитьСтроку(НомерСтроки);
    МассивРеквизитов = СтрРазделить(Стр,"-",Ложь);
    если объект.реквизит1 = МассивРеквизитов[0] тогда
    объект.реквизит2 = МассивРеквизитов[1];
    Объект.реквизит3 = МассивРеквизитов[2];
    Объект.реквизит4 = МассивРеквизитов[3];
    Сообщить(Стр);
    конецесли;
    КонецЦикла;
```
---
будет записано в тот же файл, из которого было чтение.
Вот полный код:

```1c
    МассивФаилов = НайтиФайлы("C:\", "*.txt");
    Текст = Новый ТекстовыйДокумент;
    Для Каждого Фаил из МассивФаилов Цикл
    Текст.Прочитать(Фаил.ПолноеИмя);
    УдаляемыеСтроки = Новый Массив;
    Для НомерСтроки = 1 по Текст.КоличествоСтрок() Цикл
    Стр = Текст.ПолучитьСтроку(НомерСтроки);
    МассивРеквизитов = СтрРазделить(Стр,"-",Ложь);
    если объект.реквизит1 = МассивРеквизитов[0] тогда
    УдаляемыеСтроки.Добавить(НомерСтроки);
    объект.реквизит2 = МассивРеквизитов[1];
    Объект.реквизит3 = МассивРеквизитов[2];
    Объект.реквизит4 = МассивРеквизитов[3];
    Сообщить(Стр);
    конецесли;
    КонецЦикла;
    Для к=-УдаляемыеСтроки.Количество()+1 По 0 Цикл
    Тест.УдалитьСтроку(УдаляемыеСтроки[-к];
    КонецЦикла;
    Текст.Записать(Фаил.ПолноеИмя);
    КонецЦикла;
```
---
перезаписью самого файла с нужным текстом, который должен остаться.
Только зачем каждую строку? Там очень много строк? Ну хотя бы порциями, а не каждую строчку. Иначе большая часть времени будет уходить на перезапись.
Для надежности можно каждую порцию оборачивать в транзакцию.
---
в файле может быть 5-10 строк нужно удалить именно ту строку которая подошла по условиям и данными которой заполнились реквизиты в 1с
---
удаляете по окончанию цикла и перезаписываете файл новыми данными.
---
при попытке удалить строку по завершению цикла пишет недопустимое значение параметра 1
Текст.УдалитьСтроку(стр);
---
```1c
    УдаляемыеСтроки = Новый Массив;
    Для НомерСтроки = 1 по Текст.КоличествоСтрок() Цикл
    Стр = Текст.ПолучитьСтроку(НомерСтроки);
    МассивРеквизитов = СтрРазделить(Стр,"-",Ложь);
    если объект.реквизит1 = МассивРеквизитов[0] тогда
    УдаляемыеСтроки.Добавить(НомерСтроки);
    объект.реквизит2 = МассивРеквизитов[1];
    Объект.реквизит3 = МассивРеквизитов[2];
    Объект.реквизит4 = МассивРеквизитов[3];
    Сообщить(Стр);
    конецесли;
    КонецЦикла;
    Для к=-УдаляемыеСтроки.Количество()+1 По 0 Цикл
    Тест.УдалитьСтроку(УдаляемыеСтроки[-к];
    КонецЦикла;
```
---
Переменная не определена (УдаляемыеСтроки)
    <<?>>УдаляемыеСтроки.Добавить(НомерСтроки);
---
еще раз посмотрите. Я добавил в самом верху пропущенное объявление переменной.
---
не работает та же самая ошибка
---
ошибка ушла сейчас проверю
---
ошибка ушла. но строка не удаляется
---
не удаляется из файла? Конечно. Нужно еще записать полученный Текст.
---
текстом полученным из строки заполняются реквизиты в 1с
---
И? После кода в (14) необходимо записать Текст.
Текст.Записать(Фаил.ПолноеИмя);
---
Для к=-УдаляемыеСтроки.Количество()+1 По 0 Цикл
Текст.УдалитьСтроку(УдаляемыеСтроки[-к];
Текст.Записать(Фаил.ПолноеИмя);

так?
---
после кода. Вот так:

```1c
    УдаляемыеСтроки = Новый Массив;
    Для НомерСтроки = 1 по Текст.КоличествоСтрок() Цикл
    Стр = Текст.ПолучитьСтроку(НомерСтроки);
    МассивРеквизитов = СтрРазделить(Стр,"-",Ложь);
    если объект.реквизит1 = МассивРеквизитов[0] тогда
    УдаляемыеСтроки.Добавить(НомерСтроки);
    объект.реквизит2 = МассивРеквизитов[1];
    Объект.реквизит3 = МассивРеквизитов[2];
    Объект.реквизит4 = МассивРеквизитов[3];
    Сообщить(Стр);
    конецесли;
    КонецЦикла;
    Для к=-УдаляемыеСтроки.Количество()+1 По 0 Цикл
    Тест.УдалитьСтроку(УдаляемыеСтроки[-к];
    КонецЦикла;
    Текст.Записать(Фаил.ПолноеИмя);
```
---
а если имена файлов разные?
---
будет записано в тот же файл, из которого было чтение.
Вот полный код:

```1c
    МассивФаилов = НайтиФайлы("C:\", "*.txt");
    Текст = Новый ТекстовыйДокумент;
    Для Каждого Фаил из МассивФаилов Цикл
    Текст.Прочитать(Фаил.ПолноеИмя);
    УдаляемыеСтроки = Новый Массив;
    Для НомерСтроки = 1 по Текст.КоличествоСтрок() Цикл
    Стр = Текст.ПолучитьСтроку(НомерСтроки);
    МассивРеквизитов = СтрРазделить(Стр,"-",Ложь);
    если объект.реквизит1 = МассивРеквизитов[0] тогда
    УдаляемыеСтроки.Добавить(НомерСтроки);
    объект.реквизит2 = МассивРеквизитов[1];
    Объект.реквизит3 = МассивРеквизитов[2];
    Объект.реквизит4 = МассивРеквизитов[3];
    Сообщить(Стр);
    конецесли;
    КонецЦикла;
    Для к=-УдаляемыеСтроки.Количество()+1 По 0 Цикл
    Тест.УдалитьСтроку(УдаляемыеСтроки[-к];
    КонецЦикла;
    Текст.Записать(Фаил.ПолноеИмя);
    КонецЦикла;
```
---
Индекс находится за границами массива
   если объект.реквизит1 = МассивРеквизитов[0]

если в файле больше 2 строк вида:
11111-11111-11111-11111-11111
22222-22222-22222-22222-22222
---
это уже другая ошибка. В отладке указать "Остановка по ошибке" и посмотреть что содержится в МассивРеквизитов.
---
Индекс находится за границами массива
если объект.реквизит1 = МассивРеквизитов[0]

если в файле больше 2 строк вида:
11111-11111-11111-11111-11111
22222-22222-22222-22222-22222 Ну вот, опять те же грабли. Посмотрим, найдутся ли теперь желающие по ним потоптаться?
---
куда записать можете объяснить нормально первый раз с этим сталкиваюсь
---
из Справки
---
Неверный подход удалять каждую строку во время процеса чтения файла...
Вы в цикле запоминайте скажем номера строк, которые прочли и ПОСЛЕ выполнения цикла удаляйте все прочтенные строки.
Это будет корректно.
В противном случае зачем вы используете цикл
Для НомерСтроки = 1 по Текст.КоличествоСтрок() Цикл
если хотите постоянно менять файл из которого берете строки?
---
цикл из за того что может быть 5-6 файлов в каждом разное количество строк, цикл обходит все файлы находит нужную строку и заполняет реквизиты, и нужно удалить не весь файл а именно строку данными которой были заполнены реквизиты
---
Вот я и говорю, запоминайте строку , которую нужно удалить и ПОСЛЕ завершения цикла удаляйте ....
Но никак не в Цикле...
---
выношу за цикл Текст.УдалитьСтроку(стр); получаю ошибку Несоответствие типов (параметр номер '1')
---
А вы почитайте, что за параметр должен быть в УдалитьСтроку( в синтаксис помощнике....
---
вы и сами запутаетесь, и программа будет криво работать...
---
Если строка для удаления одна и после нахождения ее больше искать нечего , то имеет смысл

УдалитьСтроку и сразу Прервать цикл...
---
А не проще все в ТЗ выгрузить и с ТЗ работать. После обработки всех позиций, удалить строки, ТЗ обратно выгрузить в текст, текст записать в файл. Как то так...