При разработке новых документов на платформе «1С:Предприятие 8.3» с управляемыми формами разработчики нередко сталкиваются с ситуацией: пока у документа не указаны регистры движений, стандартная кнопка «Провести и закрыть» активна и работает штатно. Однако стоит только отметить в дереве метаданных регистры на вкладке «Движения», как кнопка в командной панели формы становится серой и некликабельной, хотя комбинация горячих клавиш Ctrl+Enter или программный вызов продолжают проводить документ. Разберем детально, почему это происходит и как вернуть доступность кнопки.
На управляемых формах платформа «1С:Предприятие» динамически вычисляет доступность стандартных кнопок командной панели («Провести», «Провести и закрыть»). Расчет выполняется не только на основании прав к самому документу, но и с учетом всего окружения метаданных, связанных с проведением объекта:
Ложь), платформа блокирует команды проведения формы.Проанализируем ключевую причину, которая чаще всего приводит к неожиданной блокировке кнопки: влияние состава функциональных опций и подсистем.
Если один из регистров, отмеченных в составе движений нового документа, включен в функциональную опцию, отключенную в текущей конфигурации или для текущей организации/пользователя, платформа считает функционал работы с данным регистром недоступным. В результате интерфейс управляемой формы скрывает или делает неактивными действия, приводящие к записи в недоступный регистр.
Разберем по шагам, как локализовать и устранить данную проблему:
ФункциональныеОпции.ОбработкаПроведения модуля объекта.Если функциональные опции настроены корректно, но кнопка по-прежнему не активна, проверим следующие свойства объекта и формы:
Разрешить. Если выбрано Запретить, документ можно только записывать без движений.Запретить, а документ создается текущей датой в пределах границы оперативных итогов, интерактивная кнопка проведения может блокироваться при отсутствии у роли права Интерактивное неоперативное проведение.ПриСозданииНаСервере или ПриЧтенииНаСервере. Если в коде устанавливается ТолькоПросмотр = Истина, все стандартные команды редактирования и проведения блокируются.В нестандартных сценариях, когда логика интерфейса требует обойти автоматические платформенные ограничения управляемой формы, создадим собственную команду формы и назначим ее кнопке по умолчанию.
Посмотрим на пример реализации клиентского обработчика пользовательской команды проведения:
&НаКлиенте
Процедура КомандаПровестиИЗакрыть(Команда)
ПараметрыЗаписи = Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение);
Если Записать(ПараметрыЗаписи) Тогда
Закрыть();
КонецЕсли;
КонецПроцедуры
Такой подход гарантирует явный вызов проведения с последующим закрытием формы, перекладывая все проверки корректности проведения на логику модуля объекта.