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