Есть ТБ. Нужно что бы при нажатия на кнопку сохранить или при нажатия чего либо, происходила проверка заполненности вкладок "Номенклатура", "Количество", "Подразделение получатель" и "Ставка НДС".
Я знаю что можно поставить галку выдавать ошибку в реквизите, но этот способ не подходит. Т.к есть еще одна форма и если оставить типовым то другая форма выдает , то что реквизиты не заполнены.
Подскажите как реализовать это.
---
```1c
    Для каждого Элемент из ТвояТЧ Цикл
    Если НЕ ЗначениеЗаполнено(Элемент.Номенклатура) Тогда
    Сообщить("Вы не заполнили Номенклатуру!");
    Отказ = Истина;
    КонецЕсли;
    КонецЦикла;
```

(1)
---
Обходи циклом табличную часть и проверяй заполненность.
Или, по каждой колонке ищи пустую ссылку, при условии что нет составных типов.
Если найдена пустая ссылка, то отказ.

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

(1)
---
Обходи циклом табличную часть и проверяй заполненность.
Или, по каждой колонке ищи пустую ссылку, при условии что нет составных типов.
Если найдена пустая ссылка, то отказ.

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

```1c
    Процедура ОбработкаПроведения(Отказ, Режим)
```

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