Подскажите пожалуйста, кто нибудь использовал успешно ДобавитьУсловиеВидимостиКоманды в БСП 3.0.1, а точнее даже УсловияВидимости у внешней печатной формы. Добавлять он добавляет Условия к команде, но применять потом не применяет. Может кто нибудь сталкивался с подобным?
---
Нашел где можно прописать условия видимости что бы они работали для внешних печатных форм. В расширении нужно в общем модуле УправлениеПечатью команде "КомандыПечатиОбъекта" дописать добавление условий видимости для нужной внешней команды. И соответственно в "СведенияОВнешнейОбработке" команде добавить колонку "УсловияВидимости".

```1c
    &Вместо("КомандыПечатиОбъекта")
    Функция КомандыПечатиОбъекта(ОбъектМетаданных)
    Результат = ПродолжитьВызов(ОбъектМетаданных);
    для каждого Команда из Результат цикл
    Если Команда.Идентификатор="ПечатьФормы_РасчетаСреднего" Тогда
    МассивДляОтображения=Новый массив;
    МассивДляОтображения.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду("ДБЛБР"));
    МассивДляОтображения.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду("ДБЛ"));
    МассивДляОтображения.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду("ДБЛУР"));
    УправлениеПечатью.ДобавитьУсловиеВидимостиКоманды(Команда,"Начисление",МассивДляОтображения,ВидСравнения.ВСписке);
    КонецЕсли;
    КонецЦикла;
    Возврат Результат;
    КонецФункции
```

```1c
    Функция ПолучитьТаблицуКоманд()

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

    КонецФункции
```

Вроде как то так. Единственное если команда одна то она становится недоступной вместо невидимой, если две и более и они в подменю "Печать" нормально становятся невидимыми. глюк...
---
покажите код. Что-то я не помню, чтоб можно было видимость у команд во внешках менять. Все, что можно назначить команде

http://prntscr.com/mmzl52

Я так понял написали что-то подобное

```1c
    Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("3.0.2.0");
    ПараметрыРегистрации.Назначение.Добавить("Документ.ЗаказКлиента");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
    ПараметрыРегистрации.Наименование = "Отчет";
    ПараметрыРегистрации.БезопасныйРежим = истина;
    ПараметрыРегистрации.Информация = "Задача № ";

    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = НСтр("ru = 'Отчет'");
    НоваяКоманда.Идентификатор = "Прст";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
    НоваяКоманда.ПоказыватьОповещение = Истина;
    ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(НоваяКоманда , "Объект.Проведен", Истина);
    Возврат ПараметрыРегистрации;

    КонецФункции
```

но так ругается
---
БСП 3.0.1. Тут они сделали, что в качестве реквизитов условий можно выбирать только непосредственно реквизиты шапки документа (или реквизиты справочника), т.к. в функцию передаётся ДанныеФормыКоллекция и выполняется она на клиенте. Если вдруг надо дописать реквизиты "через точку", это возможно в процедуре УсловияВыполняются. Надо дописать вызов собственной функции, которую целесообразно расположить в модуле ПодключаемыеКомандыВызовСервера.

ps: Это не совсем ответ. Скорее, подсказка для интересующихся.
---
ВидОбработкиДополнительнаяОбработка и ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(НоваяКоманда , "Объект.Проведен", -

несовместимые вещи
---
```1c
    #Область СведенияОВнешнейОбработкеДляРегистрации

    Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = Новый Структура;

    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Документ.РазовоеНачисление");
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
    ПараметрыРегистрации.Вставить("ВерсияБСП",стандартныеподсистемысервер.ВерсияБиблиотеки());
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", "Расчет среднего");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", ложь);
    ПараметрыРегистрации.Вставить("Версия", "1.0.0.5");
    ПараметрыРегистрации.Вставить("Информация", "Печатная форма: Расчет среднего. Загружена: "+ТекущаяДата());
    ТаблицаКоманд = ПолучитьТаблицуКоманд();

    ДобавитьКоманду(ТаблицаКоманд, "Расчет среднего для разового начисления", "ПечатьФормы_РасчетаСреднего","ВызовСерверногоМетода", ИСТИНА, "ПечатьMXL");

    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

    Возврат ПараметрыРегистрации;

    КонецФункции

    Функция ПолучитьТаблицуКоманд()

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

    КонецФункции

    Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = ЛОЖЬ, Модификатор)

    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;

    УправлениеПечатью.ДобавитьУсловиеВидимостиКоманды(НоваяКоманда,"Начисление",ПланыВидовРасчета.Начисления.НайтиПоКоду("ДБЛБР"),ВидСравнения.Равно);
    //ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(НоваяКоманда,"Начисление",ПланыВидовРасчета.Начисления.НайтиПоКоду("ДБЛБР"),ВидСравнения.Равно);

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

    #КонецОбласти
```

У меня сделано вот так. И он даже заходит в процедуру, и даже добавляет к команде УсловияВидимости. Но увы не применяет при открытии документа. Такое ощущение что либо он записывает куда то в никуда, либо я неправильно применяю эту вещь.
---
Вот тут написано немного о ДобавитьУсловиеВидимостиКоманды у Печати вот так:

И вроде условия даже в конфигурации из корочки есть. Но что то не работает...
Кстати конфигурация ЗУП 3.1 (3.1.8.216)
---
Неужели никто не пользовался этой полезной (но такое ощущение, что недоработанной) штукой? :(
---
Поясните, пожалуйста, что подразумевается под некорректной работой? В форме списка при выделении разных документов внешняя печатная форма появляется/исчезает? Какие условия Вы описываете? В форме документа печатная форма всегда видна?
---
Под некорректной работой я подразумеваю то, что УсловияВидимости я прописываю, но команда печать в документе видна всегда. Условия я прописываю как написал выше Начисление=ОпределенноеНачисление. Печатная форма просто видна всегда.
---
Прежде, чем я попытаюсь воспроизвести проблему, прошу Вас, ответьте пожалуйста на вопрос про форму списка. Там тоже не меняется условие видимости? Документ типовой?
---
Да, в форме списка вне зависимости от выделенных документов печатная форма никуда не уходит. Документ РазовоеНачисление (типовой)
---
Зря Вас вводил в заблуждение, извините. Дополнительные обработки не хранят условия видимости, следовательно и подключаемые команды, созданные на основе команд дополнительных обработок, не имеют условий. Условия видимости доступны только для печатных форм, встроенных в конфигурацию.

Рассмотрите альтернативу - расширения. На ИТС есть рекомендации по разработке команд печати в расширениях, и здесь уже доступны условия видимости.
---
Жаль, что только для форм встроенных в конфигурацию.
---
Есть подозрение, что "ДобавитьУсловиеВидимостиКоманды" предназначено для серверного контекста формы, в которой сформированы команды, а не для использования в "СведенияОВнешнейОбработке".
---
ДобавитьУсловиеВидимостиКоманды
В описании на ИТС для версии БСП 3.0 доступность только на Сервер, Толстый клиент, Внешнее соединение. В тонком клиенте работать не будет.
---
Да, жаль, но по всей видимости эта фишка не для внешних печатных форм.
---
Про тонкий речи и не было. Я написал "для серверного контекста формы". Имеется в виду форма объекта.
---
Провел эксперимент и добавил расширением в процедуру ДобавитьКомандыПечати из модуля менеджера документа команду печати с ссылкой на внешнюю команду печати и с условием видимости и все отработало. Единственный недостаток такой схемы внешняя печатная форма все равно отображается всегда.

```1c
    &После("ДобавитьКомандыПечати")
    Процедура ГС_ДобавитьКомандыПечати(КомандыПечати)
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.МенеджерПечати = "Документ.РазовоеНачисление";
    КомандаПечати.Идентификатор = "ВнешняяПечатнаяФорма.ПечатьФормы_РасчетаСреднего";
    КомандаПечати.Представление = НСтр("ru = 'ПечатьФормы_РасчетаСреднего'");
    КомандаПечати.ПроверкаПроведенияПередПечатью = Ложь;
    МассивДляОтображения=Новый массив;
    МассивДляОтображения.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду("ДБЛБР"));
    МассивДляОтображения.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду("ДБЛ"));
    МассивДляОтображения.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду("ДБЛУР"));
    УправлениеПечатью.ДобавитьУсловиеВидимостиКоманды(КомандаПечати,"Начисление",МассивДляОтображения,ВидСравнения.ВСписке);
    КонецПроцедуры
```

получается что эти условия видимости только для команд созданных в конфигураторе
---
Нашел где можно прописать условия видимости что бы они работали для внешних печатных форм. В расширении нужно в общем модуле УправлениеПечатью команде "КомандыПечатиОбъекта" дописать добавление условий видимости для нужной внешней команды. И соответственно в "СведенияОВнешнейОбработке" команде добавить колонку "УсловияВидимости".

```1c
    &Вместо("КомандыПечатиОбъекта")
    Функция КомандыПечатиОбъекта(ОбъектМетаданных)
    Результат = ПродолжитьВызов(ОбъектМетаданных);
    для каждого Команда из Результат цикл
    Если Команда.Идентификатор="ПечатьФормы_РасчетаСреднего" Тогда
    МассивДляОтображения=Новый массив;
    МассивДляОтображения.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду("ДБЛБР"));
    МассивДляОтображения.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду("ДБЛ"));
    МассивДляОтображения.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду("ДБЛУР"));
    УправлениеПечатью.ДобавитьУсловиеВидимостиКоманды(Команда,"Начисление",МассивДляОтображения,ВидСравнения.ВСписке);
    КонецЕсли;
    КонецЦикла;
    Возврат Результат;
    КонецФункции
```

```1c
    Функция ПолучитьТаблицуКоманд()

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

    КонецФункции
```

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

```1c
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.МенеджерПечати = "Справочник.ИсходящиеДокументы";
    КомандаПечати.Идентификатор = "ЗаявкаНаОтправление";
    КомандаПечати.Представление = НСтр("ru = '* Заявка на почту'");
    КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
    КомандаПечати.Обработчик = "УправлениеПечатьюКлиентДокументооборот.ПечатьЗаявкаНаОтправление";
    ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(КомандаПечати, "ВидДокумента", ВидИсхДокта, ВидСравнения.Равно);
```

Этот код у меня в модуле менеджера документа в процедуре
Процедура ДобавитьКомандыПечати(КомандыПечати)

Может быть нужно добавить какое-то условие еще перед добавлением КомандыПечати?
В форме списка выводятся все виды документов и только для одного из них нужно добавить КомандыПечати. Т.е. нужно определять вид документа, на котором сейчас стоит курсор. Реально ли таким образом реализовать?

Спасибо!
---
Тоже была такая проблема. Выяснил, что реквизит динамического списка , по которому делается отбор, должен быть на форме списка, т.е. скорее всего реквизита ВидДокумента нет на форме.
---
Столкнулся с такой задачей на БСП 2.3. Решил пойти другим путем. Добавил в справочник ДополнительныеОтчетыИОбработки в ТЧ "Команды" новый реквизит "УсловияВидимости" с типом "ХранилищеЗначений". Доработал регистрацию ВПФ, чтобы при указанных условиях видимости массив сохранялся в новый реквизит.

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

```1c
    Для каждого КомандаПечати из КомандыПечати Цикл

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

    КонецЦикла;
```