Почему кнопка «Провести и закрыть» становится недоступной на управляемой форме 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке новых документов на платформе «1С:Предприятие 8.3» с управляемыми формами разработчики нередко сталкиваются с ситуацией: пока у документа не указаны регистры движений, стандартная кнопка «Провести и закрыть» активна и работает штатно. Однако стоит только отметить в дереве метаданных регистры на вкладке «Движения», как кнопка в командной панели формы становится серой и некликабельной, хотя комбинация горячих клавиш Ctrl+Enter или программный вызов продолжают проводить документ. Разберем детально, почему это происходит и как вернуть доступность кнопки.

Как платформа рассчитывает доступность стандартных команд проведения

На управляемых формах платформа «1С:Предприятие» динамически вычисляет доступность стандартных кнопок командной панели («Провести», «Провести и закрыть»). Расчет выполняется не только на основании прав к самому документу, но и с учетом всего окружения метаданных, связанных с проведением объекта:

  1. Права на регистры из состава движений: как только документ связывается с регистрами накопления, бухгалтерии, сведений или расчетов, платформа автоматически проверяет права текущего пользователя на запись и чтение этих регистров. Если прав на запись хотя бы в один из отмеченных регистров недостаточно, интерактивная кнопка проведения блокируется.
  2. Ограничения на уровне записей (RLS): если для роли пользователя включены ограничения RLS на регистры движений, запрещающие создание записей в текущих условиях, интерфейсный элемент проведения отключается платформой.
  3. Состав функциональных опций: если регистр включен в состав функциональной опции, и эта опция в информационной базе выключена (имеет значение Ложь), платформа блокирует команды проведения формы.

Причина проблемы: функциональные опции и состав метаданных

Проанализируем ключевую причину, которая чаще всего приводит к неожиданной блокировке кнопки: влияние состава функциональных опций и подсистем.

Если один из регистров, отмеченных в составе движений нового документа, включен в функциональную опцию, отключенную в текущей конфигурации или для текущей организации/пользователя, платформа считает функционал работы с данным регистром недоступным. В результате интерфейс управляемой формы скрывает или делает неактивными действия, приводящие к записи в недоступный регистр.

Разберем по шагам, как локализовать и устранить данную проблему:

  1. Откроем дерево метаданных конфигуратора и перейдем к ветке ФункциональныеОпции.
  2. Проверим состав опций, найдем те из них, в которые входят отмеченные у документа регистры.
  3. Проверим текущее значение функциональных опций в пользовательском режиме (в константах или параметрах учета). Если опция не должна влиять на документ, удалим регистр или сам документ из состава этой опции.
  4. Проверим вкладку «Движения» у документа: снимем флаги с тех регистров, формирование записей по которым фактически не реализовано в процедуре ОбработкаПроведения модуля объекта.

Другие настройки метаданных, влияющие на доступность проведения

Если функциональные опции настроены корректно, но кнопка по-прежнему не активна, проверим следующие свойства объекта и формы:

  1. Свойство документа «Проведение»: убедимся, что установлено значение Разрешить. Если выбрано Запретить, документ можно только записывать без движений.
  2. Оперативное проведение: если свойство установлено в значение Запретить, а документ создается текущей датой в пределах границы оперативных итогов, интерактивная кнопка проведения может блокироваться при отсутствии у роли права Интерактивное неоперативное проведение.
  3. Свойство формы «ТолькоПросмотр»: проанализируем серверные обработчики формы ПриСозданииНаСервере или ПриЧтенииНаСервере. Если в коде устанавливается ТолькоПросмотр = Истина, все стандартные команды редактирования и проведения блокируются.
  4. Автозаполнение командной панели: если у командной панели формы отключено автозаполнение, а кнопки добавлены вручную, при изменении состава метаданных или контекста объекта привязка стандартной команды может сбиться. В таком случае рекомендуется перепроверить команду кнопки в свойствах элемента формы.

Альтернативное решение: создание собственной команды проведения

В нестандартных сценариях, когда логика интерфейса требует обойти автоматические платформенные ограничения управляемой формы, создадим собственную команду формы и назначим ее кнопке по умолчанию.

Посмотрим на пример реализации клиентского обработчика пользовательской команды проведения:


&НаКлиенте
Процедура КомандаПровестиИЗакрыть(Команда)
    
    ПараметрыЗаписи = Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение);
    
    Если Записать(ПараметрыЗаписи) Тогда
        Закрыть();
    КонецЕсли;
    
КонецПроцедуры

Такой подход гарантирует явный вызов проведения с последующим закрытием формы, перекладывая все проверки корректности проведения на логику модуля объекта.

← На главную