Добрый день, уважаемые программисты 1с.
Есть вопросик: 1с 8.3 управляемая форма:
Как реализовать, чтобы в табличной части (Товары) документа, невозможно было бы ввести товар, который уже есть в этой таблице?
При попытке провести Документ, чтобы система отказала с выведением сообщения: "Попытка ввести повторяющйся товар или позицию"
Есть универсальное решение?
---
Нет, но вот такой варинат накидал по быстрому.
Первое что пришло в голову)

В принципе логика такая же как в (11), только без запросов.

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

В принципе логика такая же как в (11), только без запросов.

```1c
    Для каждого Стр из Таблица цикл
    ПараметрыПоиска = Новый Структура("столбик",Стр.Столбик);
    РезультатПоска = Таблица.НайтиСтроки(ПараметрыПоиска);
    Если РезультатПоска.Количество() > 1 тогда
    Сообщить("Есть повтор строк!");
    Отказ = ИСТИНА;
    КонецЕсли;
    КонецЦикла;
```
---
Сейчас попробую
---
Сделал так.
         Процедуры ПередЗаписью() - не было, создал самостоятельно.
         Разрешает вводить одинаковый товар и проводит документ...
---
Не правильная процедура...
У Формы документа есть стандартная процедура что-то типа:

```1c
    &НаСервере
    ПередЗаписьюНаСервере(Отказ, ..., ...)
    ТекстПроцедуры;
    КонецПроцедуры
```
---
Не получается...
---
Процедуру ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) нужно создавать в модуле объекта.
И туда вставить или (13) или (11)
---
Во как! А я пихаю в форму документа и и удивляюсь... ;)
---
Спасибо за подсказку, всё получилось!
---
Спасибо за Код Процедуры. Всё работает.
---
```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | Товары.Номенклатура КАК Номенклатура,
    | 1 КАК КоличествоВТаблице
    |ПОМЕСТИТЬ ВТ
    |ИЗ
    | &Товары КАК Товары
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | ВТ.Номенклатура КАК Номенклатура,
    | СУММА(ВТ.КоличествоВТаблице) КАК КоличествоВТаблице
    |ИЗ
    | ВТ КАК ВТ
    |
    |СГРУППИРОВАТЬ ПО
    | ВТ.Номенклатура";

    Запрос.УстановитьПараметр("Товары",ЭтотОбъект.Товары);
    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Если ВыборкаДетальныеЗаписи.КоличествоВТаблице>1
    Тогда Сообщить ("+ВыборкаДетальныеЗаписи.Номенклатура+" повторяется");
    Отказ=Истина;
    КонецЕсли;
    КонецЦикла;
```
---
Сейчас попробую
---
вам сюда https://forum.infostart.ru/forum9/topic130003/
---
Там между собой профи разговаривают, я- новичок.
Мне непонятно, что куда записывать...
---
в форме документа в обработчик события ПередЗаписью напишите код проверки дублей в таб.части Товары. Для этого можно использовать запрос с группировкой по номенклатуре и вычисляемое поле например КолвоСтрок равное 1. При обходе выборки ставишь условие Выборка.КолвоСтрок > 1. И если это условие выполняется тогда Отказ = Истина и выводите сообщение с причиной отказа.
Можно отдельную кнопку на форме разместить с описанным выше механизмом проверки.
---
, (5) Есть модель или примерчик процедуры?
---
самостоятельно совсем сложно? откройте форму документа, перейдите на вкладку модуль. Найдите процедуру ПередЗаписью() , напишите запрос к таб.части. Это сложно?
---
Спасибо, выручили.
---
Есть модель или примерчик процедуры?
---
вообще-то ПередЗаписью() это событие формы. И его надо добавить в форме документа, потом перейти в модуль и там уже написать код.
---
Тааак, уже лучше!
---
еще не сделали?
---
Нет... захлёбываюсь в непонятке... я ещё только учусь, многих фирменных и не очень элементов программирования ещё не знаю...
---
Если б я знал как это сделать, я б помог примерно так:

         1. На форме документа пишешь:
     Процедура ПередЗаписью(ляляля)
     тыры-пыры-растапыры;
     КонецПроцедуры
        2. В Модуле документа пишешь:
    &НаСервере
    Процедура ХХХХХХ(оооо, ррррр, ппппп)
     тыры-пыры-те-же-дыры;
     КонецПроцедуры

И был бы рад, что помог одной начинающей душе... ;))