Конфигурация на БСП 2.2.
Команды печати в документе добавляются через процедуру модуля менеджера "ДобавитьКомандыПечати".

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

Вопрос: Как реализовать отображение разных печатных форм в зависимости от реквизита документа. К примеру если реквизит "Вид документа" = Основной - то одни печатные формы, если "Вид документа" = Дополнительный , то другие печатные формы.

Правильного способа в документации по БСП не нашел. Кто сталкивался, подскажите как лучше это реализовать?
---
вариант 1 - реализовать логику печати различного макета в зависимости от реквизита в самой команде печати. Т.е. пользователь видит одну команду, а алгоритм в зависимости от реквизита объекта формирует тот или иной макет (думаю наиболее оптимально).
вариант 2 - добавляем команды печати для разных документов, затем на самой форме отлавливаем их в элементах формы, и в зависимости от реквизита объекта, скрываем недопустимые.
вариант 3 - в командах печати делаем проверки на реквизит, и если он не подходит, то просто выводим сообщение пользователю типа "Не для этого типа документа в поле ягодка росла"
---
Посмотрите, есть ли у добавляемой команды колонка УсловияВидимости - в 2.4 точно есть. Не уверен в 2.2 уже была или нет.
Если есть, то можно задать простые условия на равенство с помощью ДобавитьУсловиеВидимостиКоманды. И этот реквизит должен быть в списках с флагом Использовать всегда, чтобы даже при отключенной видимости был доступен.
---
Как раз то что нужно, но в 2.2. к сожалению такого параметра еще нет. https://its.1c.ru/db/bsp22doc#content:219:1
Но спасибо, будет где посмотреть.
---
В типовых в процедуре ДобавитьКомандыПечати как раз и ставят условия к примеру на всякие константы и функциональные опции. По идее также можно сделать проверку на реквизит документа, но ДобавитьКомандыПечати - функция общая для списков и для документов, а судя по заданию видимость там может отличаться. 2-й момент это - что показывать если документ новый и реквизит определяется в ходе заполнения? Ничего, а после записи обновлять команды печати? Т.е. состав кнопок не определить - остается только менять сами процедуры печати, т.е. кнопку видно, но 1 документ печатается нормально, а второму пустой бланк, в зависимости от реквизита.
---
Спасибо, оставлю две команды, так у меня реквизит всего два значения может иметь, а уже при нажатии обрабатывать и выводить сообщение в случае ошибки.
---
вариант 1 - реализовать логику печати различного макета в зависимости от реквизита в самой команде печати. Т.е. пользователь видит одну команду, а алгоритм в зависимости от реквизита объекта формирует тот или иной макет (думаю наиболее оптимально).
вариант 2 - добавляем команды печати для разных документов, затем на самой форме отлавливаем их в элементах формы, и в зависимости от реквизита объекта, скрываем недопустимые.
вариант 3 - в командах печати делаем проверки на реквизит, и если он не подходит, то просто выводим сообщение пользователю типа "Не для этого типа документа в поле ягодка росла"
---
3 вариант то что нужно, спасибо!
---
интересно, как реализовать путнкт 2? в какой процедуре и как скрыть печ формы?

вариант 2 - добавляем команды печати для разных документов, затем на самой форме отлавливаем их в элементах формы, и в зависимости от реквизита объекта, скрываем недопустимые.
---
В типовых как раз 3 вариант реализован, если форма не подходящая, то выходит сообщение. А сами команды не фильтруются.
---
УправлениеПечатью.ДобавитьУсловиеВидимостиКоманды
---
При добавлении команды печати в менеджере объекта так же можно указать список форм из которых эта команда будет доступна.
Будет полезно, если для разных вариантов документов у Вас используются разные формы.

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

    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.СписокФорм = "ИмяВашейФормы";
```