Добрый день!

Помогите новичку. Делаю обработку импорта. Как заполнить определенные колонки табличной части(данные в остальных не должны пропасть) из строчек TXT?
Скиньте ,если можно пример.

Спасибо.
---
Если есть строки в табличной части, сначала надо выполнить поиск нужной строки.

```1c
    Отбор = Новый структура;
    Отбор.Вставить("Номер",Номер);
    Отбор.Вставить("ВторойПараметрПоиска",Х);
    //Их может быть несколько, главное название по имени колонок.
    МассивСтрок = Номера.НайтиСтроки(Отбор);

    Если МассивСтрок.Количество() = 0 Тогда
    //Надо добавитьСтроку
    ИначеЕсли МассивСтрок.Количество() = 1 Тогда
    Стр = МассивСтрок[0]; //Нужная тебе строка в таблице
    Иначе
    //Найдено больше одной строки и нужно определить какую править из найденых
    КонецЕсли;
```
---
Опишите подробнее проблему, так вам вряд ли кто-то поможет)
---
Опишите подробнее проблему, так вам вряд ли кто-то поможет) Да уж два месяца и описывает, и помогают, а толку всё нет:
https://forum.infostart.ru/forum9/topic237066/
https://forum.infostart.ru/forum9/topic237078/
https://forum.infostart.ru/forum9/topic240526/
https://forum.infostart.ru/forum9/topic240579/
---
Мне нужно чтобы значения в табличной части колонок "абонплата","Скидка","ТекСумма","ТекСуммаСПДВ" каторые заполнены, при следующем импорте(документ должен создаваться копированием) заменялись новыми(за следующий месяц).Все остальное(в колонках "НомерТелефона","НомерКонтракта","ТарифнийПлан","Подразделение" должно остаться.

Как перезаписать(переввести) определенные данные в табличную часть документа?

При импорте ,когда тч документа пуста я использовал:

```1c
    СтрТаб = ЭтотОбъект.Номера.Добавить();

    СтрТаб.НомерТелефона = Тел;
    СтрТаб.НомерКонтракта = Контракт;
    СтрТаб.ТарифнийПлан = Тариф;
    СтрТаб.Абонплата = АбонплатаСПдв;
    СтрТаб.Скидка = ЗНИЖКИ ;
    СтрТаб.ТекСумма = ТекСумма;
    //ТекСуммаПДВ = ТекСумма*0.2;
    //ТекСуммаСПДВ = +ТекСуммаПДВ+ТекСумма;
    СтрТаб.ТекСуммаСПДВ = ТекСуммаСПДВ;

    Пробовал и так
    Т=ЭлементыФормы.Номера.ТекущиеДанные;
    Т. Абонплата = АбонплатаСПдв;
    Т. Скидка = ЗНИЖКИ ;
    Т. ТекСумма = ТекСумма;
    Т. ТекСуммаСПДВ = ТекСуммаСПДВ;
```

но заменяет почемуто данные только в первой строке.

Вот вся обработка импорта :

```1c
    Процедура ОсновныеДействияФормыЗаполнить(Кнопка)

    Перем Стр;
    Стр = ";

    Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.ПолноеИмяФайла = ";
    Текст = "ru = " Текст"; en = "Text"";
    Фильтр = Нстр(Текст)+"(*.txt)|*.txt";
    ДиалогОткрытияФайла.Фильтр = Фильтр;
    ДиалогОткрытияФайла.МножественныйВыбор = Ложь;

    Если ДиалогОткрытияФайла.Выбрать() Тогда
    ИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла;

    Сообщить (ИмяФайла);
    Иначе
    Текст = "ru= "Файл не выбран!"; en="File not selected"";
    Предупреждение(НСтр(Текст));

    КонецЕсли;

    Текст = Новый ТекстовыйДокумент();

    Текст.Прочитать(ИмяФайла);

    Стр = Текст.ПолучитьТекст() ;

    Если Найти(Стр,"ТОВАРИСТВО З ОБМЕЖЕНОЮ")>0 тогда
    Организация2=Лев(СокрЛП(Сред(Стр,Найти(Стр,"ТОВАРИСТВО З ОБМЕЖЕНОЮ")+42)),20);
    КонецЕсли;

    Если Найти(Стр,"Особовий рахунок:")>0 тогда
    ОсобовийРахунок=Лев(СокрЛП(Сред(Стр,Найти(Стр,"Особовий рахунок:")+18)),13);
    КонецЕсли;

    Если Найти(Стр,"Номер рахунку:")>0 тогда
    НомерРахунку=Лев(СокрЛП(Сред(Стр,Найти(Стр,"Номер рахунку:")+16)),10);
    КонецЕсли;

    Если Найти(Стр,"Номер рахунку:")>0 тогда
    НомерРахункуРозрах=Лев(СокрЛП(Сред(Стр,Найти(Стр,"Номер рахунку:"))),40);
    КонецЕсли;

    Если Найти(Стр,"Розрахунковий період:")>0 тогда
    РозрахунковийПеріод=Лев(СокрЛП(Сред(Стр,Найти(Стр,"Розрахунковий період:"))),45);
    КонецЕсли;

    Если Найти(Стр,"ЗАГАЛОМ БЕЗ ПОДАТКІВ: ")>0 тогда
    СуммаБезПДВ2=Лев(Сред(Стр,Найти(Стр,"ЗАГАЛОМ БЕЗ ПОДАТКІВ: ")+94),11);
    КонецЕсли;

    Если Найти(Стр,"ЗАГАЛОМ НАРАХОВАНО ЗА ПЕРІОД ЗА ВСІМА КОНТРАКТАМИ РАЗОМ З ПДВ ТА ПФ")>0 тогда
    СуммаСПДВ2=Лев(Сред(Стр,Найти(Стр,"ЗАГАЛОМ НАРАХОВАНО ЗА ПЕРІОД ЗА ВСІМА КОНТРАКТАМИ РАЗОМ З ПДВ ТА ПФ")+94),11);
    КонецЕсли;

    Контракт=";
    Тел=";
    Пакет=";
    Тариф=0;

    Загалом=0;

    Для а = 1 по Текст.КоличествоСтрок() Цикл
    Стр = Текст.ПолучитьСтроку(а);

    Если Найти(Стр,"Контракт №")>0 тогда

    Тел=Прав(СокрЛП(Сред(Стр,Найти(Стр,"Контракт №")+4)),10);
    Контракт=Лев(СокрЛП(Сред(Стр,Найти(Стр,"Контракт №")+10)),12);

    ИначеЕсли Найти(Стр,"Тарифний Пакет:")>0 тогда
    Тариф= Лев(СокрЛП(Сред(Стр,Найти(Стр,"Тарифний Пакет:")+15)),21);

    ИначеЕсли Найти(Стр,"ВАРТІСТЬ ПАКЕТА/ЩОМІСЯЧНА ПЛАТА: ")>0 тогда
    Абонплата=Прав(СокрЛП(Сред(Стр,Найти(Стр,"ВАРТІСТЬ ПАКЕТА/ЩОМІСЯЧНА ПЛАТА: ")+4)),9);

    ИначеЕсли Найти(Стр,"Знижка на суму особового рахунку ")>0 тогда
    ЗНИЖКИ=Прав(СокрЛП(Сред(Стр,Найти(Стр,"Знижка на суму особового рахунку ")+4)),9);

    ИначеЕсли Найти(Стр,"ЗАГАЛОМ ЗА КОНТРАКТОМ")>0 тогда
    ТекСумма=Прав(СокрЛП(Сред(Стр,Найти(Стр,"ЗАГАЛОМ ЗА КОНТРАКТОМ")+4)),9);

    АбонплатаПдв = Абонплата*0.2;
    АбонплатаСПдв = АбонплатаПдв+ Абонплата;
    ТекСуммаПДВ = ТекСумма*0.2;
    ТекСуммаСПДВ = +ТекСуммаПДВ+ТекСумма;

    Если Справочники.МобильныеНомераСотрудников.НайтиПоНаименованию(Тел).Пустая() Тогда

    СтрТаб = ЭтотОбъект.Номера.Добавить();
    СтрТаб.НомерТелефона = Тел;
    СтрТаб.НомерКонтракта = Контракт;
    СтрТаб.ТарифнийПлан = Тариф;
    СтрТаб.Абонплата = АбонплатаСПдв;
    СтрТаб.Скидка = ЗНИЖКИ ;
    СтрТаб.ТекСумма = ТекСумма;
    СтрТаб.ТекСуммаСПДВ = ТекСуммаСПДВ;

    Иначе

    Т=ЭлементыФормы.Номера.ТекущиеДанные;
    Т. Абонплата = АбонплатаСПдв;
    Т. Скидка = ЗНИЖКИ ;
    Т. ТекСумма = ТекСумма;
    Т. ТекСуммаСПДВ = ТекСуммаСПДВ;

    КонецЕсли;

    Контракт=";
    Тел=";
    Пакет=";
    Тариф=0;
    Абонплата = 0;
    ЗНИЖКИ = 0;

    КонецЕсли;
    КонецЦикла;

    ЭтотОбъект.СуммаИтого = СуммаБезПДВ2;
    ЭтотОбъект.Номер_рахунку =НомерРахунку;
    ЭтотОбъект.ОсобовийРахунок = ОсобовийРахунок;
    ЭтотОбъект.Организация = Организация2 ;
    ЭтотОбъект.СуммаСПдв =СуммаСПДВ2;
    ЭтотОбъект.Примечание =НомерРахункуРозрах+" "+РозрахунковийПеріод;

    Для Каждого ТабСтр из ЭтотОбъект.Номера Цикл
    СправМоб = Справочники.МобильныеНомераСотрудников.СоздатьЭлемент();

    Если Справочники.МобильныеНомераСотрудников.НайтиПоНаименованию(ТабСтр.НомерТелефона).Пустая() Тогда

    СправМоб.Наименование = ТабСтр.НомерТелефона;
    СправМоб.НомерКонтракта = ТабСтр.НомерКонтракта;
    СправМоб.ТарифнийПлан = ТабСтр.ТарифнийПлан;
    СправМоб.Записать();

    КонецЕсли ;
    КонецЦикла;
    КонецПроцедуры
```
---
То что в примере по первой ссылке. Если посмотреть картинку, где вы выделили как 1,2,3 строку, то это не корректно.
Это не строка, а блок, который разбит на строки.
Советую все таки делать перебором строк. Просто у каждого блока есть начало и если при обработке находите начало блока, то делаете разбор блока и вытаскиваете нужную информацию.

```1c
    Процедура ОсновныеДействияФормыЗаполнить(Кнопка)

    Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.ПолноеИмяФайла = ";
    Текст = "ru = " Текст"; en = "Text"";
    Фильтр = Нстр(Текст)+"(*.txt)|*.txt";
    ДиалогОткрытияФайла.Фильтр = Фильтр;
    ДиалогОткрытияФайла.МножественныйВыбор = Ложь;

    Если ДиалогОткрытияФайла.Выбрать() Тогда
    ИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла;
    Сообщить (ИмяФайла);
    Иначе
    Текст = "ru= "Файл не выбран!"; en="File not selected"";
    Предупреждение(НСтр(Текст));
    КонецЕсли;
    Текст = Новый ТекстовыйДокумент();

    Текст.Прочитать(ИмяФайла);

    ОбрабатываемБлок = Ложь;
    Для а = 1 по Текст.КоличествоСтрок() Цикл
    Стр = Текст.ПолучитьСтроку(а);
    Если ОбрабатываемБлок Тогда
    //Обрабатываем строку.
    Если Найти(Стр,"ЗАГАЛОМ ЗА КОНТРАКТОМ")>0 Тогда
    ОбрабатываемБлок = Ложь;
    //КонецБлока
    КонецЕсли;
    Иначе
    Если Найти(Стр,"Контракт №") > 0 Тогда
    ОбрабатываемБлок = Истина;
    //Начало блока
    Иначе
    Продолжить;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;

    КонецПроцедуры
```
---
Как перезаписать(переввести) определенные данные в табличную часть документа?

При импорте ,когда тч документа пуста я использовал:

```1c
    СтрТаб = ЭтотОбъект.Номера.Добавить();

    СтрТаб.НомерТелефона = Тел;
    СтрТаб.НомерКонтракта = Контракт;
    СтрТаб.ТарифнийПлан = Тариф;
    СтрТаб.Абонплата = АбонплатаСПдв;
    СтрТаб.Скидка = ЗНИЖКИ ;
    СтрТаб.ТекСумма = ТекСумма;
    //ТекСуммаПДВ = ТекСумма*0.2;
    //ТекСуммаСПДВ = +ТекСуммаПДВ+ТекСумма;
    СтрТаб.ТекСуммаСПДВ = ТекСуммаСПДВ;
```

но этот метод добавляет строки снизу

Пробовал и так:

```1c
    Т=ЭлементыФормы.Номера.ТекущиеДанные;
    Т. Абонплата = АбонплатаСПдв;
    Т. Скидка = ЗНИЖКИ ;
    Т. ТекСумма = ТекСумма;
    Т. ТекСуммаСПДВ = ТекСуммаСПДВ;
```

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

```1c
    Отбор = Новый структура;
    Отбор.Вставить("Номер",Номер);
    Отбор.Вставить("ВторойПараметрПоиска",Х);
    //Их может быть несколько, главное название по имени колонок.
    МассивСтрок = Номера.НайтиСтроки(Отбор);

    Если МассивСтрок.Количество() = 0 Тогда
    //Надо добавитьСтроку
    ИначеЕсли МассивСтрок.Количество() = 1 Тогда
    Стр = МассивСтрок[0]; //Нужная тебе строка в таблице
    Иначе
    //Найдено больше одной строки и нужно определить какую править из найденых
    КонецЕсли;
```
---
Спасибо.