В программных продуктах линейки 1С:Управление автотранспортом (УАТ) пользователи часто сталкиваются с ситуацией, когда кнопка «Отменить проведение» становится недоступной (серой) непосредственно внутри формы документа Путевой лист, в то время как в списке документов эта же операция выполняется без ограничений. Такая дихотомия поведения интерфейса обусловлена сложной внутренней логикой отраслевого решения, направленной на защиту целостности данных.
Рассмотрим подробнее, почему система блокирует это действие в форме и как мы можем восстановить активность команды, проанализировав настройки и программный код конфигурации.
Первым делом проанализируем текущее состояние документа. В 1С:УАТ реализован механизм жизненного цикла путевого листа, который жестко завязан на его статусе. Если документ имеет статус «Рассчитан» или «Закрыт», система автоматически накладывает ограничение на редактирование любых реквизитов и выполнение действий по изменению проведения.
Разберем, почему это происходит: при расчете путевого листа фиксируются данные по выработке, расходу ГСМ и заработной плате водителей. Отмена проведения в этом состоянии может привести к рассогласованию данных в регистрах накопления. В форме документа за это отвечает специализированная процедура управления состоянием. Посмотрим на логику, которая обычно заложена в модуле формы:
&НаСервере
Процедура УправлениеСостояниемФормы(Форма)
СтатусДокумента = Объект.СтатусПутевогоЛиста;
Если СтатусДокумента = ПредопределенноеЗначение("Перечисление.СтатусыПутевыхЛистов.Рассчитан") Тогда
Форма.ТолькоПросмотр = Истина;
// Кнопка отмены проведения становится недоступной автоматически
КонецЕсли;
КонецПроцедуры
Чтобы вернуть кнопке активность, необходимо перевести документ в статус «Новый» или «Открыт». После изменения статуса и записи документа форма пересчитает доступность элементов, и команда «Отменить проведение» в меню «Ещё» станет активной.
Если изменение статуса не помогло, выясним причину в конфигураторе. Проанализируем модуль управляемой формы документа ПутевойЛист. Нас интересуют обработчики событий ПриЧтенииНаСервере и ПриСозданииНаСервере. Именно там разработчики часто прописывают принудительное отключение стандартных команд.
Найдем в коде строки, отвечающие за состав команд интерфейса. Часто используется обращение к коллекции Элементы. Нам нужно проверить доступность кнопки, которая в платформе 1С обычно называется ФормаОтменитьПроведение.
Пример кода, который может блокировать кнопку:
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
// Проверка условий для блокировки
Если ТекущийОбъект.Проведен И Не РольДоступна("ПолныеПрава") Тогда
Элементы.ФормаОтменитьПроведение.Доступность = Ложь;
КонецЕсли;
КонецПроцедуры
В данном случае мы видим, что блокировка срабатывает программно для всех, кроме администраторов. Если вы обнаружили подобный код, его можно скорректировать (в рамках расширения), чтобы добавить необходимые исключения или привязать доступность к дополнительным правам доступа.
Проанализируем ситуацию с топливными документами. Одной из ключевых особенностей 1С:УАТ является строгая последовательность операций с ГСМ. Если на основании путевого листа были созданы и проведены документы Заправка ГСМ или Слив ГСМ, система может блокировать отмену проведения родительского документа прямо в форме.
Это делается для предотвращения появления отрицательных остатков в баках транспортных средств. В форме документа Путевой лист часто срабатывает проверка на наличие записей в связанных регистрах. Чтобы решить проблему, попробуем сначала отменить проведение всех подчиненных документов, созданных на основании данного листа, после чего проверим активность кнопки в форме.
Прежде чем вносить изменения в код, проверим системные настройки. В некоторых версиях УАТ предусмотрена опция, ограничивающая редактирование закрытых периодов или рассчитанных листов. Разберем шаги для проверки:
Если эта опция выключена, кнопка отмены проведения будет заблокирована на уровне платформенных механизмов отображения данных, даже если у пользователя есть соответствующие права в профиле доступа. Включение этой опции (при наличии прав администратора) позволит временно разблокировать команды в форме для внесения корректировок.
Выясним, какие роли назначены пользователю. В отраслевых решениях недостаточно иметь право на Интерактивную отмену проведения для самого объекта метаданных. В 1С:УАТ часто используются дополнительные проверки прав через механизм RLS (Record Level Security) или через программные проверки ролей в коде формы.
Рассмотрим основные роли, влияющие на процесс:
Если в списке документов отмена проведения разрешена, а в форме — нет, это явный признак того, что в коде формы прописана проверка РольДоступна(), которая не совпадает с настройками прав доступа к самому объекту. Проанализируем состав ролей пользователя и при необходимости добавим роль, дающую право на изменение статусов документов.
В редких случаях проблема может быть связана с индивидуальными настройками пользователя. Проверим это простым способом:
Если флажок стоит, но кнопка все равно серая, значит, работает именно программная блокировка Доступность = Ложь, описанная выше, и решение следует искать в модуле формы или в настройках статусов 1С:УАТ.