Здравствуйте! Подскажите пожалуйста как в БСП правильно выполнить проверку по условию перед печатью табличного документа. Например: В одном из справочников не заполнен какой-то реквизит, значит нужно оповестить пользователя и отменить печать, к сожалению смог найти только как передавать параметры в процедуру печати, но для меня это понятно, а вот ситуация описанная выше загнала меня в тупик, надеюсь на вашу помощь.
---
При описании команды печати в ДобавитьКомандыПечати заполните добавляемой команде свойство "Обработчик" — ваш переопределяемый клиентский обработчик для этой команды. В него пробросятся ПараметрыПечати.
В нем делаете любые действия, в вашем случае проверка на заполнение реквизита (через вызов сервера).
Если условие выполнено — вызываете УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(), если нет — исключение.
---
Есть в модуле объекта событие ОбработкаПроверкиЗаполнения, как в документах так и в справочниках. Используйте ее. Все равно перед печатью, вы проводите запись. Вызывать можно методом ПроверитьЗаполнение() В справочнике.
---
Это у вас внешняя печатная форма или типовая печать, с какого документа и какая конфа?
---
Самописная конфигурация на БСП, типовая печать (Подсистема печати, БСП)
---
При описании команды печати в ДобавитьКомандыПечати заполните добавляемой команде свойство "Обработчик" — ваш переопределяемый клиентский обработчик для этой команды. В него пробросятся ПараметрыПечати.
В нем делаете любые действия, в вашем случае проверка на заполнение реквизита (через вызов сервера).
Если условие выполнено — вызываете УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(), если нет — исключение.
---
Благодарю! Вопрос решен, все получилось, хоть и читал в документации БСП про этот обработчик, но не обратил на него внимание. Всем спасибо!
---
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати()
Добрый день.
Не подскажите, пытаюсь сделать этим методом вызов печати с условием. И все вроде хорошо до того момента пока не вызываю УправлениеПечатьюКлиент.ВыполнитьКомандуПечати(). Там есть параметр ВладелецФормы, я в него передаю форму из параметра печати (Тип Форма клиентского приложения) на что получаю ошибку: Ошибка отображения типов: Отсутствует отображение для типа 'ФормаКлиентскогоПриложения'. Такая ошибка обычно появляется, когда пытаешься что-то не то с клиента на сервер передать, но я в данном случае вроде ничего не передаю. Общий модуль клиенсткий. В отладчике форму спокойно читает, посмотрел в типовых модулях, там все тоже самое делается. Уже всю голову сломал, не подскажите куда стоит копать?
---
А зачем именно внутри процедуры печати? К примеру, есть у вас документ, в нем процедура "Печать" в модуле менеджера. В самом начале этой процедуры нельзя написать что-нибудь типа

```1c
    Отказ = ВыполнитьПроверкуЗаполненияРеквизитов();
    Если Не Отказ Тогда
    //Обычный вызов печати
    Иначе
    //Сообщить пользователю о бренности бытия
    КонецЕсли;
```

?
---
Я вроде бы так и делаю, но если условие не выполнено тогда возникает ошибка в модуле:

```1c
    УправлениеПечатью.СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати, ДопустимыеТипыОбъектовПечати)
```

Вот код модуля менеджера:

```1c
    Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт

    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Идентификатор = "ЗаявлениеВМВД";
    КомандаПечати.Представление = "Заявление в МВД";
    КомандаПечати.СписокФорм = "ФормаЭлемента, ФормаСписка";
    КомандаПечати.Порядок = 1;
    КомандаПечати.ЗаголовокФормы = "Заявление в МВД";

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

    Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

    ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;

    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ЗаявлениеВМВД") Тогда

    ГосударственныйОрган = ГосударственныеОрганыСервер.ПолучитьГосударственныйОрган("ПФ_MXL_ЗаявлениеВМВД");
    Если НЕ ГосударственныйОрган = Неопределено Тогда
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ЗаявлениеВМВД", "ЗаявлениеВМВД",
    ПечатьЗаявлениеВМВД(МассивОбъектов, ОбъектыПечати));
    Иначе
    Сообщить("Не заполнен государственный орган для данной печатной формы!");
    КонецЕсли;
    КонецЕсли;

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

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

```1c
    Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Идентификатор = "ВыдачаЗарплаты";
    КомандаПечати.Представление = НСтр("ru = 'Выдача зарплаты'");
    УправлениеПечатью.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "ХозяйственнаяОперация",
    Перечисления._ДемоХозяйственныеОперации.ВыдачаЗарплаты, ВидСравнения.Равно);
    КонецПроцедуры
```
---
Но мне нужно, чтобы команда печати была доступна не зависимо от чего либо, просто данные для заполнения печатной формы находятся в разных местах и может возникнуть ситуация, что пользователь просто не заполнит эти данные, вот я и хочу сделать обработку такого варианта развития событий.
---
Думаю наверное проводить проверку в подключаемых командах по имени команды сделать условие

```1c
    // СтандартныеПодсистемы.ПодключаемыеКоманды
    &НаКлиенте
    Процедура Подключаемый_ВыполнитьКоманду(Команда)
    ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
    КонецПроцедуры
```

Другого решения пока не нашел.