Подскажите пожалуйста, кто нибудь использовал успешно ДобавитьУсловиеВидимостиКоманды в БСП 3.0.1, а точнее даже УсловияВидимости у внешней печатной формы. Добавлять он добавляет Условия к команде, но применять потом не применяет. Может кто нибудь сталкивался с подобным?
Нашел где можно прописать условия видимости что бы они работали для внешних печатных форм. В расширении нужно в общем модуле УправлениеПечатью команде "КомандыПечатиОбъекта" дописать добавление условий видимости для нужной внешней команды. И соответственно в "СведенияОВнешнейОбработке" команде добавить колонку "УсловияВидимости".
&Вместо("КомандыПечатиОбъекта")
Функция КомандыПечатиОбъекта(ОбъектМетаданных)
Результат = ПродолжитьВызов(ОбъектМетаданных);
для каждого Команда из Результат цикл
Если Команда.Идентификатор="ПечатьФормы_РасчетаСреднего" Тогда
МассивДляОтображения=Новый массив;
МассивДляОтображения.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду("ДБЛБР"));
МассивДляОтображения.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду("ДБЛ"));
МассивДляОтображения.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду("ДБЛУР"));
УправлениеПечатью.ДобавитьУсловиеВидимостиКоманды(Команда,"Начисление",МассивДляОтображения,ВидСравнения.ВСписке);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Показать
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
//Команды = УправлениеПечатью.СоздатьКоллекциюКомандПечати();
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("УсловияВидимости", Новый ОписаниеТипов("Массив"));
Возврат Команды;
КонецФункции
Показать
Вроде как то так. Единственное если команда одна то она становится недоступной вместо невидимой, если две и более и они в подменю "Печать" нормально становятся невидимыми. глюк...
(1) БСП 3.0.1. Тут они сделали, что в качестве реквизитов условий можно выбирать только непосредственно реквизиты шапки документа (или реквизиты справочника), т.к. в функцию передаётся ДанныеФормыКоллекция и выполняется она на клиенте. Если вдруг надо дописать реквизиты "через точку", это возможно в процедуре УсловияВыполняются. Надо дописать вызов собственной функции, которую целесообразно расположить в модуле ПодключаемыеКомандыВызовСервера.
ps: Это не совсем ответ. Скорее, подсказка для интересующихся.
#Область СведенияОВнешнейОбработкеДляРегистрации
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.РазовоеНачисление");
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
ПараметрыРегистрации.Вставить("ВерсияБСП",стандартныеподсистемысервер.ВерсияБиблиотеки());
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Расчет среднего");
ПараметрыРегистрации.Вставить("БезопасныйРежим", ложь);
ПараметрыРегистрации.Вставить("Версия", "1.0.0.5");
ПараметрыРегистрации.Вставить("Информация", "Печатная форма: Расчет среднего. Загружена: "+ТекущаяДата());
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд, "Расчет среднего для разового начисления", "ПечатьФормы_РасчетаСреднего","ВызовСерверногоМетода", ИСТИНА, "ПечатьMXL");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("УсловияВидимости", Новый ОписаниеТипов("Массив"));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = ЛОЖЬ, Модификатор)
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
УправлениеПечатью.ДобавитьУсловиеВидимостиКоманды(НоваяКоманда,"Начисление",ПланыВидовРасчета.Начисления.НайтиПоКоду("ДБЛБР"),ВидСравнения.Равно);
//ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(НоваяКоманда,"Начисление",ПланыВидовРасчета.Начисления.НайтиПоКоду("ДБЛБР"),ВидСравнения.Равно);
КонецПроцедуры
#КонецОбласти
Показать
У меня сделано вот так. И он даже заходит в процедуру, и даже добавляет к команде УсловияВидимости. Но увы не применяет при открытии документа. Такое ощущение что либо он записывает куда то в никуда, либо я неправильно применяю эту вещь.
Вот тут написано немного о ДобавитьУсловиеВидимостиКоманды у Печати вот так:
Печать
· Для упрощения разработки внешних команд печати добавлена возможность поставки команд печати в обработках и отчетах расширений конфигурации. Подробнее см. пункт «Разработка команд печати в отчетах и обработках конфигурации и расширений» документации по внедрению подсистемы.
· Для добавления условий видимости команд печати предусмотрена процедура ДобавитьУсловиеВидимостиКоманды общего модуля УправлениеПечатью, которую необходимо использовать в процедуре ДобавитьКомандыПечати. Процедура позволяет задавать условия видимости команды в зависимости от значений реквизитов объекта. Описание процедуры см. в комментарии к ней.
· Для переключения условной видимости команд печати в формах документов, списков и журналов необходимо:
o разместить процедуру Подключаемый_ОбновитьКоманды;
o вставить вызов процедуры ОбновитьКоманды общего модуля УправлениеПечатьюКлиентСервер в событии ПриЧтенииНаСервере формы объекта/документа;
o вставить вызовы процедуры НачатьОбновлениеКоманд общего модуля УправлениеПечатьюКлиент:
§ в событии ПриИзменении реквизитов, участвующих в условиях видимости
§ в событиях формы объекта/документа ПриОткрытии
§ в событии формы списка ПриАктивизацииСтроки.
o у динамического списка формы для реквизитов, участвующих в условиях видимости необходимо установить флажок Использовать всегда.
· Подробности см. в документации.
· Для установки действия при выборе макета печатной формы в форме персональных настроек добавлена функция ЗадатьДействиеПриВыбореМакетаПечатнойФормы общего модуля УправлениеПечатьюКлиент.
Показать
И вроде условия даже в конфигурации из корочки есть. Но что то не работает...
Кстати конфигурация ЗУП 3.1 (3.1.8.216)
(6) Поясните, пожалуйста, что подразумевается под некорректной работой? В форме списка при выделении разных документов внешняя печатная форма появляется/исчезает? Какие условия Вы описываете? В форме документа печатная форма всегда видна?
(7) Под некорректной работой я подразумеваю то, что УсловияВидимости я прописываю, но команда печать в документе видна всегда. Условия я прописываю как написал выше Начисление=ОпределенноеНачисление. Печатная форма просто видна всегда.
(8) Прежде, чем я попытаюсь воспроизвести проблему, прошу Вас, ответьте пожалуйста на вопрос про форму списка. Там тоже не меняется условие видимости? Документ типовой?
(10) Зря Вас вводил в заблуждение, извините. Дополнительные обработки не хранят условия видимости, следовательно и подключаемые команды, созданные на основе команд дополнительных обработок, не имеют условий. Условия видимости доступны только для печатных форм, встроенных в конфигурацию.
Рассмотрите альтернативу - расширения. На ИТС есть рекомендации по разработке команд печати в расширениях, и здесь уже доступны условия видимости.
Есть подозрение, что "ДобавитьУсловиеВидимостиКоманды" предназначено для серверного контекста формы, в которой сформированы команды, а не для использования в "СведенияОВнешнейОбработке".
Провел эксперимент и добавил расширением в процедуру ДобавитьКомандыПечати из модуля менеджера документа команду печати с ссылкой на внешнюю команду печати и с условием видимости и все отработало. Единственный недостаток такой схемы внешняя печатная форма все равно отображается всегда.
Нашел где можно прописать условия видимости что бы они работали для внешних печатных форм. В расширении нужно в общем модуле УправлениеПечатью команде "КомандыПечатиОбъекта" дописать добавление условий видимости для нужной внешней команды. И соответственно в "СведенияОВнешнейОбработке" команде добавить колонку "УсловияВидимости".
&Вместо("КомандыПечатиОбъекта")
Функция КомандыПечатиОбъекта(ОбъектМетаданных)
Результат = ПродолжитьВызов(ОбъектМетаданных);
для каждого Команда из Результат цикл
Если Команда.Идентификатор="ПечатьФормы_РасчетаСреднего" Тогда
МассивДляОтображения=Новый массив;
МассивДляОтображения.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду("ДБЛБР"));
МассивДляОтображения.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду("ДБЛ"));
МассивДляОтображения.Добавить(ПланыВидовРасчета.Начисления.НайтиПоКоду("ДБЛУР"));
УправлениеПечатью.ДобавитьУсловиеВидимостиКоманды(Команда,"Начисление",МассивДляОтображения,ВидСравнения.ВСписке);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Показать
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
//Команды = УправлениеПечатью.СоздатьКоллекциюКомандПечати();
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("УсловияВидимости", Новый ОписаниеТипов("Массив"));
Возврат Команды;
КонецФункции
Показать
Вроде как то так. Единственное если команда одна то она становится недоступной вместо невидимой, если две и более и они в подменю "Печать" нормально становятся невидимыми. глюк...
(18) Подскажите, пожалуйста, что делаю неправильно.
Нужно сделать, чтобы команды печати отображались только для документов определенного вида (реквизит документа "ВидДокумента").
Код ниже - корректно отрабатывает в форме документа - данная команда печати отображается когда должна отображаться. А вот в ФормеСписка - это условие не отрабатывает - в форме списка данная команда печати отображается всегда.
Подозреваю, что дело в самом условии, а точнее в реквизите "ВидДокумента"? больше же не в чем?
Этот код у меня в модуле менеджера документа в процедуре
Процедура ДобавитьКомандыПечати(КомандыПечати)
Может быть нужно добавить какое-то условие еще перед добавлением КомандыПечати?
В форме списка выводятся все виды документов и только для одного из них нужно добавить КомандыПечати. Т.е. нужно определять вид документа, на котором сейчас стоит курсор. Реально ли таким образом реализовать?
(21) Тоже была такая проблема. Выяснил, что реквизит динамического списка , по которому делается отбор, должен быть на форме списка, т.е. скорее всего реквизита ВидДокумента нет на форме.
Столкнулся с такой задачей на БСП 2.3. Решил пойти другим путем. Добавил в справочник ДополнительныеОтчетыИОбработки в ТЧ "Команды" новый реквизит "УсловияВидимости" с типом "ХранилищеЗначений". Доработал регистрацию ВПФ, чтобы при указанных условиях видимости массив сохранялся в новый реквизит.
В остальном все стало отрабатывать штатно. В более свежих БСП таким же образом думаю тоже можно доработать.