При работе в программе «1С:Документооборот 8 КОРП» редакции 2.1 пользователи и администраторы часто сталкиваются с неприятной проблемой: в карточке некоторых внутренних документов поле «Наименование» заблокировано для редактирования. Рядом с ним отображается синий знак вопроса, при нажатии на который система выдает предупреждение: «Наименование документа сформировано автоматически по шаблону, редактирование запрещено».
Ситуация становится особенно запутанной, когда администратор проверяет шаблон этого документа и видит, что поле наименования там абсолютно пустое, а все запрещающие флаги сняты. Более того, у части документов этого же вида наименование редактируется без проблем, а у других — поле закрыто намертво или изменения сбрасываются при сохранении. Проанализируем причины такого поведения системы и разберем по шагам, как исправить эту ошибку.
Для того чтобы понять логику программы, заглянем «под капот» конфигурации. Блокировка поля ввода на форме управляется кодом процедуры УстановитьДоступностьПолей(). Рассмотрим стандартный фрагмент этого алгоритма:
Процедура УстановитьДоступностьПолей()
УстановитьДоступностьПоСостоянию();
УстановитьДоступностьПоЭП();
УстановитьДоступностьПоПравам();
УстановитьДоступностьПоЗапрету();
Если НаименованиеСозданоПоШаблону Тогда
Элементы.Заголовок.ТолькоПросмотр = Истина;
Элементы.Заголовок.Подсказка = НСтр("ru = 'Наименование документа сформировано автоматически по шаблону, редактирование запрещено.'");
Элементы.Заголовок.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка;
КонецЕсли;
КонецПроцедуры
Как мы видим, ключевым условием блокировки является значение скрытого реквизита документа — НаименованиеСозданоПоШаблону. Это булев флаг, который хратится в базе данных для каждого конкретного экземпляра документа. Выясним, почему возникает путаница с этим флагом:
НаименованиеСозданоПоШаблону в значение Истина. Если позже вы очистите шаблон или измените настройки вида документа, у уже созданных ранее документов этот флаг так и останется включенным. Именно поэтому в списке документов наблюдается разнобой.Некоторые разработчики пытаются решить проблему «в лоб», изменяя доступность элемента на форме программно, например, так:
Если НаименованиеСозданоПоШаблону Тогда
Элементы.Заголовок.ТолькоПросмотр = Ложь; // Разрешаем редактирование вопреки шаблону
КонецЕсли;
Рассмотрим подробнее, почему этот вариант не работает. Даже если вы сделаете поле доступным на форме и пользователь сможет ввести новое наименование, при попытке записать документ изменения сбросятся. Это происходит потому, что в модуле объекта в обработчике события ПередЗаписью срабатывает жесткая проверка. Система видит, что флаг НаименованиеСозданоПоШаблону равен Истина, игнорирует ручной ввод пользователя и перезаписывает поле по алгоритму шаблона (в данном случае записывая туда пустоту или восстанавливая старое значение).
Поскольку конфигурация часто находится на поддержке («на замке»), лучшим решением будет исправление состояния данных и настроек в пользовательском режиме. Разберем по шагам три основных этапа решения.
Для документов, которые уже созданы и заблокированы, необходимо принудительно установить скрытый реквизит НаименованиеСозданоПоШаблону в значение Ложь. Для этого воспользуемся стандартной обработкой.
Внутренние документы.Наименование создано по шаблону (имя в конфигураторе — НаименованиеСозданоПоШаблону).Ложь).После выполнения этой операции у всех выбранных документов поле «Наименование» разблокируется и будет успешно сохраняться при ручном изменении.
Чтобы проблема не повторялась при создании новых документов по шаблону, проверим сам шаблон на наличие невидимого мусора:
Если предыдущие шаги не помогли для вновь создаваемых документов, проанализируем настройки их вида:
Применяя данные методы, мы сможем восстановить корректную работу системы без внесения изменений в типовую конфигурацию программы.