в обработке есть табличное поле адресов емайл

нахожу дубли в колонке

нужно удалить их

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

Процедура ЧисткаДублейНажатие(Элемент)
 ВысотаТаблицы = ЭлементыФормы.ТаблицаИмейлов.ВысотаТаблицы;
 НачНомерСтроки=2;
 КонНомерСтроки = Мин(НачНомерСтроки-1+РазмерОбработки, ВысотаТаблицы);

     ТабДокумент = ЭлементыФормы.ТаблицаИмейлов;

        ПоследняяСтрока = ТабДокумент.ВысотаТаблицы;

    ПоследняяКолонка = ТабДокумент.ШиринаТаблицы;

    ОбластьЯчеек = ТабДокумент.Область(1, 1, ПоследняяСтрока, ПоследняяКолонка);

    // Создаем описание источника данных на основании области ячеек табличного документа.

    ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);

    // Создаем объект для интеллектуального построения отчетов,

    // указываем источник данных и выполняем построение отчета.

    ПостроительОтчета = Новый ПостроительОтчета;

    ПостроительОтчета.ИсточникДанных = ИсточникДанных;

    ПостроительОтчета.Выполнить();

    // Результат выгружаем в таблицу значений.

 ТаблЗнач = ПостроительОтчета.Результат.Выгрузить();

 Для каждого Строка Из ТаблЗнач Цикл
НайденныеСтроки = ТаблЗнач.НайтиСтроки(Новый Структура("Имейл", Строка.Имейл));

Если НайденныеСтроки.Количество()>1 Тогда

ОбщегоНазначения.СообщитьОбОшибке(Строка.Имейл);

ОбработкаПрерыванияПользователя();

//Смещать = ТипСмещенияТабличногоДокумента.ПоВертикали;
//Область = ТабДокумент.Область("R2C2:R2C2");
//ТабДокумент.УдалитьОбласть(Область, Смещать);

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

КонецПроцедуры;
---
```1c
    ..............
    ТаблЗнач = ПостроительОтчета.Результат.Выгрузить();
    ТаблЗнач.Свернуть("Имейл");
    ТабПоле.Очистить();

    НомерКолонки = 1;
    ВсегоСтрок = ТаблЗнач.Количество();
    Для НомерСтроки = 1 По ВсегоСтрок Цикл
    ТабПоле.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки).Текст = ТЗ[НомерСтроки - 1][НомерКолонки - 1];
    КонецЦикла;
```
---
После чтения данных из ТабДок и формирования ТЗ, свернуть последнюю.
---
Если НайденныеСтроки.Количество()>1 Тогда

тут свернуть ??

ОбщегоНазначения.СообщитьОбОшибке(Строка.Имейл);

ОбработкаПрерыванияПользователя();
---
просто ТЗ.Свернуть("ИмяКолонки").
Вообще не важно, есть найденные строки или нет.
---
мне кажется, проще скорректировать данные до формирования табличного документа, а не городить из него ТЗ
---
в поле колонка у которой надо убрать дубли . колонка вручную туда копируется из екселя

нужно по кнопке чистить колонку от дублей

не знаете как ?
---
В ТЗ как раз все проще, сортируешь по емейлу, идешь снизу, если в строке емайл = емейлу из предыдущей - удаляешь. А вот в табличном документе морочиться это точно перебор.
---
пример как удалять можете написать .я таких методов для табличного поля не нашел
---
У ТЗ есть метод Свернуть(), советую почитать С-П про него.
---
Выгрузи запросом ВЫБРАТЬ РАЗЛИЧНЫЕ в ТЗ, потом загрузи обратно.
---
а как я запросом из таблицы которой на форме нет выгружу?
---
Функция ПреобразоватьТабличныйДокументВТаблицуЗначений(ТабДокумент)

    ПоследняяСтрока = ТабДокумент.ВысотаТаблицы;

    ПоследняяКолонка = ТабДокумент.ШиринаТаблицы;

    ОбластьЯчеек = ТабДокумент.Область(1, 1, ПоследняяСтрока, ПоследняяКолонка);

    // Создаем описание источника данных на основании области ячеек табличного документа.

    ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);

    // Создаем объект для интеллектуального построения отчетов,

    // указываем источник данных и выполняем построение отчета.

    ПостроительОтчета = Новый ПостроительОтчета;

    ПостроительОтчета.ИсточникДанных = ИсточникДанных;

    ПостроительОтчета.Выполнить();

    // Результат выгружаем в таблицу значений.

    ТабЗначений = ПостроительОтчета.Результат.Выгрузить();

    Возврат ТабЗначений

КонецФункции
---
Так в ТЗ выковырнуть, как запрос к ТЗ сделать тоже писать?
---
я уже этот код привел выше . мне просто надо удалять дубли . сможете подсказать ?
---
Одна колонка в ТЗ?
---
одна имейл . как ее удалить из табличного поля ?
---
```1c
    ТЗ.Свернуть("ИмяКолонки")
```
---
если данные не потеряются, то можно свернуть
---
Между
ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
И
Возврат ТабЗначений
Впиши
ТабЗначений.Свернуть("Емейл"); Или как там у темя колонка будет называться.
---
о, уже ответили..
---
а удалить из таб поля потом как строки с дублями?
---
Вы ТабДок формируете уже из ТЗ или вместе с ТЗ?
---
Таб Поле на форме

я ТЗ из Таб поля формирую

таб док и таб поле разные сущности не будем путать их
---
Вам табличный документ почистить от дублей нужно - такая задача?
---
табличное поле . я же 2 раза описал задачу
---
1. Прочитали ТабПоле - сформировали ТЗ
2. Свернули полученную ТЗ
3. Очистили ТабПоле и вывели в ТабПоле ТЗ циклом:

```1c
    НомерСтроки = 1;
    НомерКолонки = 1;
    ВсегоСтрок = ТЗ.Количество();
    Для НомерСтроки = 1 По ВсегоСтрок Цикл
    ТабПоле.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки).Текст = ТЗ[НомерСтроки - 1][НомерКолонки - 1];
    КонецЦикла;
```

Можно так же извратиться с ПостроительОтчетов, скормить ему ТЗ и указать ТабПоле в качестве приемника результата.
---
очищать все таб поле?
---
да, оно не умеет очищаться частично.
---
а номер строки и номер колонки откуда брать?
---
обновил сообщение (26)
---
ТаблЗнач = ПостроительОтчета.Результат.Выгрузить();

 ТаблЗнач.Свернуть("Имейл");

 Для каждого Строка Из ТаблЗнач Цикл
НайденныеСтроки = ТаблЗнач.НайтиСтроки(Новый Структура("Имейл", Строка.Имейл));

Если НайденныеСтроки.Количество()>1 Тогда

ОбщегоНазначения.СообщитьОбОшибке(Строка.Имейл);

 ТабДокумент.Очистить();

 НомерСтроки = 1;
НомерКолонки = 1;
Для НомерСтроки = 1 По ТаблЗнач.Количество() Цикл
     ТабПоле.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки).Текст = ТЗ[НомерСтроки - 1][НомерКолонки - 1];
КонецЦикла;

 Для Каждого Стр Из ТабДокумент Цикл
     ТабДокумент.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки).Текст = Стр.Имейл;
КонецЦикла;

ОбработкаПрерыванияПользователя();
---
```1c
    ..............
    ТаблЗнач = ПостроительОтчета.Результат.Выгрузить();
    ТаблЗнач.Свернуть("Имейл");
    ТабПоле.Очистить();

    НомерКолонки = 1;
    ВсегоСтрок = ТаблЗнач.Количество();
    Для НомерСтроки = 1 По ВсегоСтрок Цикл
    ТабПоле.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки).Текст = ТЗ[НомерСтроки - 1][НомерКолонки - 1];
    КонецЦикла;
```
---
вроде получилось .еще подскажите как первую строку сверху закрепить где название колонки . а то ее очищает

и куда донат кинуть за помощь?
---
первую строку так же придется заполнить после очистки

```1c
    ............
    ТаблЗнач = ПостроительОтчета.Результат.Выгрузить();
    ТаблЗнач.Свернуть("Имейл");
    ТабПоле.Очистить();

    НомерСтроки = 1;
    ВсегоКолонок = ТаблЗнач.Колонки.Количество();
    Для НомерКолонки = 1 По ВсегоКолонок Цикл
    ТабПоле.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки).Текст = ТЗ.Колонки[НомерКолонки - 1].Имя;
    КонецЦикла;

    НомерКолонки = 1;
    ВсегоСтрок = ТаблЗнач.Количество();
    Для НомерСтроки = 1 По ВсегоСтрок Цикл
    ТабПоле.Область(НомерСтроки + 1, НомерКолонки, НомерСтроки + 1, НомерКолонки).Текст = ТЗ[НомерСтроки - 1][НомерКолонки - 1];
    КонецЦикла;
```
---
Спасибо Земляк ! дай Бог тебе всего .что ты пожелаешь в жизни
---
в втором случае ошибка

ботка.ОбогащениеКонтактовПоAPIАктион.Форма.Форма.Форма(528)}: Индекс находится за границами массива
    ТабДокумент.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки).Текст = ТаблЗнач[НомерСтроки - 1][НомерКолонки - 1];
---
Обновил сообщение (34), донат можно оформить в виде $m к первому сообщению и выдать за определенное сообщение.
---
ок)
---
подскажешь уважаемый еще ?

вылетает обработка на этом

 Если ТипЗнч(КлючиЗапроса) = Тип("Массив") Тогда
  Если ПоискПоПИН Тогда

   МассивКлючейЗапроса = Новый Массив();

   МассивКлючейЗапроса.Добавить(КлючиЗапроса[0]);

   тут вылетает

  {ВнешняяОбработка.ОбогащениеКонтактовПоAPIАктион.МодульОбъекта(1599)}: Индекс находится за границами массива
   МассивКлючейЗапроса.Добавить(КлючиЗапроса[0]);

  Иначе
   МассивКлючейЗапроса = КлючиЗапроса;
  КонецЕсли;

 ИначеЕсли ТипЗнч(КлючиЗапроса) = Тип("Строка")
  ИЛИ ТипЗнч(КлючиЗапроса) = Тип("СправочникСсылка.БазаТМ") Тогда
  МассивКлючейЗапроса = Новый Массив;
  МассивКлючейЗапроса.Добавить(КлючиЗапроса);

 Иначе
  Возврат ДанныеКлиентовПоИНН;
 КонецЕсли;
---
Могу подсказать только то, что КлючиЗапроса - пустая коллекция, необходимо разбираться почему.