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

```1c
    ТабЧастьВся = Объект.СписокДоговоров.Выгрузить();
    ТабЧасть = ТабЧастьВся.Свернуть("Организация, ОсновнойДоговор, СвязующийДоговор, Подразделение, ВидОбъектаАренды, ОбъектПраваАренды");
```

Ошибка - Обращение к процедуре объекта как к функции.

Делаю не перед записью документа, а по нажатию кнопки, которая как раз создает новые элементы справочника по реквизитам строк в тч.
---
```1c
    ТабЧастьВся = Объект.СписокДоговоров.Выгрузить();
    ТабЧастьВся.Свернуть("Организация, ОсновнойДоговор, СвязующийДоговор, Подразделение, ВидОбъектаАренды, ОбъектПраваАренды");
    Объект.СписокДоговоров.Загрузить(ТабЧастьВся);
```
---
Спасибо!
---
Не подойдет в событии ПередНачаломДобавления прописать что-то вроде:

Если Копирование Тогда
Отказ = Истина;
КонецЕсли

Тогда они вообще не смогут копировать строки. А если они их создают не копированием, а просто добавляют новую строку с такими же данными, то Вам не повезло с пользователями:D

Если они всё же делают это не копированием, то можно ПриОкончанииРедактирования проверять ТЧ на совпадение
---
Да уж)) Как и всем разработчикам =D
---
Как вариант:

```1c
    &НаКлиенте
    Процедура ТЧОрганизацияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

    Отбор = Новый Структура("Организация", ВыбранноеЗначение);

    Если Объект.ТЧ.НайтиСтроки(Отбор).Количество() <> 0 Тогда
    СтандартнаяОбработка = Ложь;
    ПоказатьПредупреждение(, "Организация" + ВыбранноеЗначение + " уже присутствует в табличной части!");
    КонецЕсли;

    КонецПроцедуры
```

Правда нужно будет обработчик делать для каждого реквизита, который не должен дублироваться. Ну и запретить копирование, как писали выше.
---
Спасибо за совет!
---
Ну и запретить копированиеОчаровательно. Особенно если нужно ввести 100500 строк, отличающихся только одним параметром.
---
Когда-то разбирал код заполнения ТЧ из обработки Подбора, проверка была такая (дублей нет, при этом увеличивается кол-во в найденной строке):

```1c
    СтрокаТабличнойЧасти = Неопределено;
    ЗначениеВыбора.Свойство("ТекущиеДанные",СтрокаТабличнойЧасти);

    СтруктураОтбора = Новый Структура();

    СтруктураОтбора.Вставить("Номенклатура" , Номенклатура);

    СтрокаТабличнойЧасти = ОбработкаТабличныхЧастей.НайтиСтрокуТабЧасти(ТабличнаяЧасть, СтруктураОтбора);

    Если СтрокаТабличнойЧасти <> Неопределено Тогда

    // Нашли, увеличиваем количество в первой найденной строке.
    СтрокаТабличнойЧасти.Количество = СтрокаТабличнойЧасти.Количество + Количество;

    Иначе
    // Не нашли - добавляем новую строку.
    СтрокаТабличнойЧасти = ТабличнаяЧасть.Добавить();
    СтрокаТабличнойЧасти.Номенклатура = Номенклатура;

    СтрокаТабличнойЧасти.Количество = Количество;

    КонецЕсли;
```
---
Можно делать проверку в событиях ТЧ:

```1c
    Процедура КлиентыПослеУдаления(Элемент)
    ПересчитатьКоличествоФактическихГостей();
    КонецПроцедуры

    Процедура КлиентыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
    ПересчитатьКоличествоФактическихГостей();
    КонецПроцедуры

    Процедура КлиентыПриПолученииДанных(Элемент, ОформленияСтрок)
    ПересчитатьКоличествоФактическихГостей();
    КонецПроцедуры

    //------------------------------------Ниже для примера, обработка данных ТЧ-----------------------------------------------------

    Процедура ПересчитатьКоличествоФактическихГостей()
    ГостиФакт = Клиенты.Количество();
    КонецПроцедуры
```