1с условия видимости команды
В конфигурациях на основе БСП есть возможность вывести различные команды в форме объекта через подсистему "Подключаемые команды". В статье показан пример, как, используя расширение, подключить обработку заполнения для документа "Заказ покупателя" в конфигурации "Управление нашей фирмой, ред 1.6.14".
Изменения и дополнения:
Обновлено 08.11.2018. Добавлено расширение для конфигурации "Бухгалтерия предприятия, ред. 3.0.65", пример заполнения документа "Реализация (акты, накладные)"
Обновлено 09.10.2018. Добавлено расширение для конфигурации "Зарплата и управление персоналом, ред. 3.1.7", пример заполнения документа "График отпусков"
Обновлено 08.10.2018. Добавлено расширение для конфигурации "Розница, ред. 2.2.9", пример заполнения документа "Заказ покупателя"
Обновлено 07.10.2018. Добавлено расширение для конфигурации "Управление торговлей, ред. 11.4.2", пример заполнения документа "Заказ клиента"
Добавлено 07.10.2018 Краткое содержание: описана альтернатива внешним обработкам заполнения объектов, в конфигурациях на основе БСП.
Почему не через подсистему "Дополнительные отчеты и обработки"? Мне показалось это более удобным способом именно при вызове клиентского метода, так как можно просто получить форму объекта и сам объект, удобнее отлаживать код. Плюс подключение команды имеет больше дополнительных настроек. В конечном итоге у разработчика есть выбор как решить задачу в том или ином случае.
Итак, что нужно для подключения команды заполнения объекта?
- Добавить новое расширение или использовать имеющееся.
- Добавить в расширение подсистему "ПодключаемыеОтчетыИОбработки"
- Добавить в расширение роль "БазовыеПрава"
- Добавить в расширение объект, который будем заполнять, в моем случае документ "ЗаказПокупателя"
- Создать в расширении обработку, в моем случае "ЗаполнениеЗаказПокупателя"
- В обработке "ЗаполнениеЗаказПокупателя" добавить основную форму
Это все объекты, которые понадобятся в расширении для включения через подсистему "Подключаемые команды" команды заполнения объекта.
Далее надо настроить объекты расширения и добавить программный код:
- В расширении в состав подсистемы"ПодключаемыеОтчетыИОбработки" включить обработку "ЗаполнениеЗаказПокупателя"
- В расширении для роли "БазовыеПрава" дать право "Использование" на обработку "ЗаполнениеЗаказПокупателя"
- В расширении в модуле менеджера документа "ЗаказПокупателя" надо добавить экспортную процедуру "ДобавитьКомандыЗаполнения". Процедуру надо добавить в том случае, если в основной конфигурации нет этой процедуры.
- В расширении в модуле менеджера обработки "ЗаполнениеЗаказПокупателя" надо добавить две экспортные процедуры "ПриОпределенииНастроек" и "ДобавитьКомандыЗаполнения". При добавлении команды указывается видимость команды в формах (можно указать видимость только в форме документа, как в примере), можно указать необходимость записывать ил проводить объект перед вызовом команды, определять условия видимости команды, указывать дополнительные параметры формы (более подробно в документации к БСП).
- В модуле основной формы обработки "ЗаполнениеЗаказПокупателя" добавить экспортную процедуру "Подключаемый_ЗаполнитьОбъект". Имя процедуры такое, как задано в параметре команды "Обработчик". В теле процедуры собственно код заполнения объекта. Получение формы объекта и самого объекта через параметр процедуры "ПараметрыВыполнения".
Собственно это весь необходимый минимум, согласно документации БСП. Если добавляемая команда одна, то она отображается в форме документа на командной панели формы в виде кнопки с представлением команды. Если команд несколько, то команды отображаются в подменю "Заполнить".
Для конфигурации "Управление нашей фирмой, ред 1.6.14" мне понадобилось дополнительно включить в расширение общий модуль "ЗаполнениеОбъектовПереопределяемый" и разрешить использование подключаемых команд для формы объекта "ЗаказПокупателя" добавив процедуру "ПередДобавлениемКомандЗаполнения" с аннотацией "&После".
В приложении к публикации расширение с описанным примером плюс дополнительно показано как получить объект формы на сервере и перенести изменения объекта, сделанные на сервере, в форму объекта на клиенте. Также в расширении показано как отобразить одну команду в подменю "Заполнить".
Подскажите пожалуйста, кто нибудь использовал успешно ДобавитьУсловиеВидимостиКоманды в БСП 3.0.1, а точнее даже УсловияВидимости у внешней печатной формы. Добавлять он добавляет Условия к команде, но применять потом не применяет. Может кто нибудь сталкивался с подобным?
Нашел где можно прописать условия видимости что бы они работали для внешних печатных форм. В расширении нужно в общем модуле УправлениеПечатью команде "КомандыПечатиОбъекта" дописать добавление условий видимости для нужной внешней команды. И соответственно в "СведенияОВнешнейОбработке" команде добавить колонку "УсловияВидимости".
Вроде как то так. Единственное если команда одна то она становится недоступной вместо невидимой, если две и более и они в подменю "Печать" нормально становятся невидимыми. глюк.
(1) покажите код. Что-то я не помню, чтоб можно было видимость у команд во внешках менять. Все, что можно назначить команде
Я так понял написали что-то подобное
но так ругается
(1) БСП 3.0.1. Тут они сделали, что в качестве реквизитов условий можно выбирать только непосредственно реквизиты шапки документа (или реквизиты справочника), т.к. в функцию передаётся ДанныеФормыКоллекция и выполняется она на клиенте. Если вдруг надо дописать реквизиты "через точку", это возможно в процедуре УсловияВыполняются. Надо дописать вызов собственной функции, которую целесообразно расположить в модуле ПодключаемыеКомандыВызовСервера.
ps: Это не совсем ответ. Скорее, подсказка для интересующихся.
ВидОбработкиДополнительнаяОбработка и ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды(НоваяКоманда , "Объект.Проведен", -
У меня сделано вот так. И он даже заходит в процедуру, и даже добавляет к команде УсловияВидимости. Но увы не применяет при открытии документа. Такое ощущение что либо он записывает куда то в никуда, либо я неправильно применяю эту вещь.
Печать
· Для упрощения разработки внешних команд печати добавлена возможность поставки команд печати в обработках и отчетах расширений конфигурации. Подробнее см. пункт «Разработка команд печати в отчетах и обработках конфигурации и расширений» документации по внедрению подсистемы.
· Для добавления условий видимости команд печати предусмотрена процедура ДобавитьУсловиеВидимостиКоманды общего модуля УправлениеПечатью, которую необходимо использовать в процедуре ДобавитьКомандыПечати. Процедура позволяет задавать условия видимости команды в зависимости от значений реквизитов объекта. Описание процедуры см. в комментарии к ней.
· Для переключения условной видимости команд печати в формах документов, списков и журналов необходимо:
o разместить процедуру Подключаемый_ОбновитьКоманды;
o вставить вызов процедуры ОбновитьКоманды общего модуля УправлениеПечатьюКлиентСервер в событии ПриЧтенииНаСервере формы объекта/документа;
o вставить вызовы процедуры НачатьОбновлениеКоманд общего модуля УправлениеПечатьюКлиент:
§ в событии ПриИзменении реквизитов, участвующих в условиях видимости
§ в событиях формы объекта/документа ПриОткрытии
§ в событии формы списка ПриАктивизацииСтроки.
o у динамического списка формы для реквизитов, участвующих в условиях видимости необходимо установить флажок Использовать всегда.
· Подробности см. в документации.
· Для установки действия при выборе макета печатной формы в форме персональных настроек добавлена функция ЗадатьДействиеПриВыбореМакетаПечатнойФормы общего модуля УправлениеПечатьюКлиент.
И вроде условия даже в конфигурации из корочки есть. Но что то не работает.
Кстати конфигурация ЗУП 3.1 (3.1.8.216)
Существует ли возможность ограничить видимость(доступ) к внешней обработке Печати В меню "Печать" на форме объекта или списка?
В настройках есть только наименование и размещение обработки в Справочник.ркЛицевыеСчета
ПечатнаяФорма
(3)Я не телепат, у меня telepat.dll в праздники и выходные с трудом грузится )))))
Конфа какая? Приложение какое?
у тебя под жестокими пытками допрашивать.
Есть цель: под разными учетками - разный набор Печатных форм.
Через доп обработки и отчеты не спрятать ни разрулить доступ.
Так, хорошо, продолжаем, а вот на кнопочку Все действия нажимал? ))))
Может у тебя поля не видны которые тебе надо??
Штатно для печатной формы (для управления видимостью / доступностью) нельзя задать никакие "точечные" условия, в том числе и в разрезе пользователей - если печатная форма назначена документу, то она всегда и всем будет видна.
(25) Это отчет, а не ПФ. И флажок не ограничивает пользователей, лишь управляет видимостью внешнего отчета в разделе "Отчеты" подсистемы (пользователь увидит и сформирует в любом случае через "Все отчеты. ").
(23) А ка же УсловияВидимости?
УсловияВидимости (необязательный) - Массив
Определяет видимость команды в зависимости от контекста.
Для регистрации условий следует использовать процедуру ПодключаемыеКоманды.ДобавитьУсловиеВидимостиКоманды().
Условия объединяются по "И".
(27) Это только для БСП 2.3.6+, и это не для внешних печатных форм (не вижу по крайней мере, чтобы оно там как-то в коде поддерживалось)
(29) Внешние ПФ тоже через добавить команду настраиваются.
Да и раз у него на базе БП 3.0 то скорее всего БСП 2.4.4
(31) У меня сейчас только Розница старенькая на буке, задолбался себе на комп копии делать, да и в отпуске сейчас, нет возможности под рукой, а ставить в лень)))
Да, см Таблица 3.72. Параметры команд печати.
Я, конечно, просто мимо проходил, а вы тут вон сколько умных слов написали. но, если это ВНЕШНЯЯ обработка, может в ней перед открытием проверять, можно текущему пользователю её открыть или нельзя?
(39) Ты почему-то сознательно умалчиваешь тот факт, что у тебя команды печати "встроенные" (через подситему "Печать"), а в сабже - подключаемые (через подсистему "Дополнительные отчеты и обработки")
(42) Не реализовали еще такое в БСП для внешних (подключаемых) команд.
Да и для встроенных команд печати условие только на равенство выглядит как плевок в лицо )
Реализовал механизм управления видимостью для внешних (подключаемых) печатных форм.
В ходе реализации выяснил, что в БСП версии (по крайней мере начиная с 2.3.4, которая была у меня) уже есть поддержка условий видимости не только на равенство (есть еще не равно, больше - меньше, в списке - не в списке).
В конфигурациях на основе БСП есть возможность вывести различные команды в форме объекта через подсистему "Подключаемые команды". В статье показан пример, как, используя расширение, подключить обработку заполнения для документа "Заказ покупателя" в конфигурации "Управление нашей фирмой, ред 1.6.14".
Изменения и дополнения:
Обновлено 08.11.2018. Добавлено расширение для конфигурации "Бухгалтерия предприятия, ред. 3.0.65", пример заполнения документа "Реализация (акты, накладные)"
Обновлено 09.10.2018. Добавлено расширение для конфигурации "Зарплата и управление персоналом, ред. 3.1.7", пример заполнения документа "График отпусков"
Обновлено 08.10.2018. Добавлено расширение для конфигурации "Розница, ред. 2.2.9", пример заполнения документа "Заказ покупателя"
Обновлено 07.10.2018. Добавлено расширение для конфигурации "Управление торговлей, ред. 11.4.2", пример заполнения документа "Заказ клиента"
Добавлено 07.10.2018 Краткое содержание: описана альтернатива внешним обработкам заполнения объектов, в конфигурациях на основе БСП.
Почему не через подсистему "Дополнительные отчеты и обработки"? Мне показалось это более удобным способом именно при вызове клиентского метода, так как можно просто получить форму объекта и сам объект, удобнее отлаживать код. Плюс подключение команды имеет больше дополнительных настроек. В конечном итоге у разработчика есть выбор как решить задачу в том или ином случае.
Итак, что нужно для подключения команды заполнения объекта?
- Добавить новое расширение или использовать имеющееся.
- Добавить в расширение подсистему "ПодключаемыеОтчетыИОбработки"
- Добавить в расширение роль "БазовыеПрава"
- Добавить в расширение объект, который будем заполнять, в моем случае документ "ЗаказПокупателя"
- Создать в расширении обработку, в моем случае "ЗаполнениеЗаказПокупателя"
- В обработке "ЗаполнениеЗаказПокупателя" добавить основную форму
Это все объекты, которые понадобятся в расширении для включения через подсистему "Подключаемые команды" команды заполнения объекта.
Далее надо настроить объекты расширения и добавить программный код:
- В расширении в состав подсистемы"ПодключаемыеОтчетыИОбработки" включить обработку "ЗаполнениеЗаказПокупателя"
- В расширении для роли "БазовыеПрава" дать право "Использование" на обработку "ЗаполнениеЗаказПокупателя"
- В расширении в модуле менеджера документа "ЗаказПокупателя" надо добавить экспортную процедуру "ДобавитьКомандыЗаполнения". Процедуру надо добавить в том случае, если в основной конфигурации нет этой процедуры.
- В расширении в модуле менеджера обработки "ЗаполнениеЗаказПокупателя" надо добавить две экспортные процедуры "ПриОпределенииНастроек" и "ДобавитьКомандыЗаполнения". При добавлении команды указывается видимость команды в формах (можно указать видимость только в форме документа, как в примере), можно указать необходимость записывать ил проводить объект перед вызовом команды, определять условия видимости команды, указывать дополнительные параметры формы (более подробно в документации к БСП).
- В модуле основной формы обработки "ЗаполнениеЗаказПокупателя" добавить экспортную процедуру "Подключаемый_ЗаполнитьОбъект". Имя процедуры такое, как задано в параметре команды "Обработчик". В теле процедуры собственно код заполнения объекта. Получение формы объекта и самого объекта через параметр процедуры "ПараметрыВыполнения".
Собственно это весь необходимый минимум, согласно документации БСП. Если добавляемая команда одна, то она отображается в форме документа на командной панели формы в виде кнопки с представлением команды. Если команд несколько, то команды отображаются в подменю "Заполнить".
Для конфигурации "Управление нашей фирмой, ред 1.6.14" мне понадобилось дополнительно включить в расширение общий модуль "ЗаполнениеОбъектовПереопределяемый" и разрешить использование подключаемых команд для формы объекта "ЗаказПокупателя" добавив процедуру "ПередДобавлениемКомандЗаполнения" с аннотацией "&После".
В приложении к публикации расширение с описанным примером плюс дополнительно показано как получить объект формы на сервере и перенести изменения объекта, сделанные на сервере, в форму объекта на клиенте. Также в расширении показано как отобразить одну команду в подменю "Заполнить".
Расширение конфигурации позволяет используя типовой функционал модификации конфигурации ERP-решений (УТ 11, КА 2 и ERP 2) "на лету" изменять доступность, видимость, толькопросмотр элементов форм, а так же выполнять произвольный код, который выполняется ПриСозданииНаСервере выбранной формы.
Код расширения открытый и достаточно "топороный", но, работает и не замедляет открытие форм (зависит, конечно, от того, что выполняется в произвольном коде).
Описаний как подключить расширение конфигураций много, после подключения - надо отключить у этого расширения безопасный режим.
Расширение подключает Регистр Сведений "ВДЭФ_Настройки", все остальные дописки в расширении Общего модуля "МодификацияКонфигурацииПереопределяемый".
В разделе "Администрирование" добавляется пункт "ВДЭФ настройки".
В список форм добавлены формы Справочников, Документов, Регистров сведений, Обработок и бизнеспроцессов с задачами.
В список ролей все возможные роли из основной конфигурации и расширений(если такие есть).
1. Выбираем форму, далее подгружаются все элементы формы.
2. Выбираем необходимый элемент.
3. Из списка ролей выбираем роль, по доступности которой правило не работает (допустим, ПолныеПрава, чтобы у всех кроме администраторов.
4. Устанавливаем флажок, Видимость, Доступность, ТолькоПросмотр.
Также есть вариант, чтобы форма вообще не открывалась (стандартная обработка = ложь; отказ = истина;) - для этого ставится только "Не открывать форму", так же выбирается нужная роль, чтобы правило не срабатывало, элемент формы можно не выбирать.
И еще вариант, когда выбрана форма, не выбран элемент, выбрана или нет роль для срабатывания и стоит галка "ТолькоПросмотр" - форма откроется целиком со свойством "ТолькоПросмотр" = Истина;
Также, если будет заполнено поле Произвольный код, то он выполнится после всех выбранных действий.
На каждый элемент формы создаётся отдельная строка регистра.
Есть небольшие баги(допустим, правило которое создаётся, применяется так же и на форму записи ВДЭФ_Настройки, т.к. форма на которую "вешаются" ограничения получается через "ПолучитьФорму()". Следовательно, может получиться так, что правило, которое вы создали не откроется на редактирование, его достаточно будет удалить и создать заново), которые, возможно, исправлю, но они мало влияют на суть.
Делал для себя, но, вдруг кому пригодится:) Месяц в боевом режиме - полёт нормальный.
Если будут вопросы или ошибки - пишите, постараюсь ответить.
UPD: Если какая-то форма не работает, значит в модуле этой формы, в обработчике ПриСозданииНаСервере не добавлено:
Соответственно, чтобы форма работала, можно добавить её в это же расширение через конфигуратор, и создать ПриСозданииНаСервере, выбрать "После" и дописывать код который написан выше.
Хоть механизм и типовой, но не на всех формах добавлен.
Проверено на конфигурации Комплексная Автоматизация 2 (2.4.9.70), Технологическая Платформа 8.3.14.1854 и 8.3.15.1565. Должно работать на любой конфигурации где применяется типовой функционал модификации конфигурации(УТ 11, КА 2 и ERP 2).
Читайте также: