Что делать, если после обновления 1С на формах документов и списков исчезли кнопки печати?

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

Ситуация, когда после успешного, на первый взгляд, обновления конфигурации 1С с форм исчезают все кнопки печати, является довольно распространенной. Особенно часто это происходит при значительном «прыжке» между версиями, когда обновляемая конфигурация использует механизмы Библиотеки стандартных подсистем (БСП). В современных версиях 1С кнопки печати не являются статичными элементами формы, а формируются динамически при помощи подсистемы подключаемых команд.

В данной статье мы подробно разберем причины возникновения этой проблемы и рассмотрим пошаговые алгоритмы её решения: от простых манипуляций с кэшем до программного восстановления обработчиков в модулях форм.

Выясним причину проблемы

Проанализируем ситуацию: почему кнопки, которые годами были на своих местах, вдруг пропадают? Основная причина кроется в переходе подсистемы печати на новый механизм работы. Если в процессе обновления конфигурации (сравнения и объединения) были затерты стандартные области в модулях форм или не были выполнены процедуры отложенного обновления данных, программный интерфейс просто «забывает», какие команды нужно вывести пользователю.

Разберем три основных сценария решения проблемы.

Решение 1: Очистка кэша метаданных

Прежде чем приступать к правке программного кода, проанализируем самый простой вариант. Иногда платформа 1С отображает устаревшие версии форм из локального кэша, в которых новые механизмы формирования команд конфликтуют со старыми данными.

  1. Закроем все сеансы работы с базой данных.
  2. Удалим базу из списка в окне запуска 1С и добавим её заново (это самый надежный способ очистки кэша).
  3. Либо воспользуемся параметром запуска /ClearCache в настройках информационной базы.

Решение 2: Проверка функциональных опций и завершение обновления

Если очистка кэша не помогла, проверим состояние базы в пользовательском режиме. Выясним, завершила ли программа все необходимые регламентные операции после обновления.

  1. Перейдем в раздел Администрирование — Обслуживание — Обновление программы.
  2. Проверим пункт Результаты обновления и дополнительные процедуры. Если в списке есть незавершенные задачи, их необходимо выполнить. Часто именно там происходит регистрация печатных форм в системных справочниках.
  3. Проверим настройки функциональных опций. Перейдем в НСИ и администрирование — Печатные формы, отчеты и обработки и убедимся, что все необходимые флаги (например, использование дополнительных отчетов и обработок) установлены.

Решение 3: Программное восстановление подключаемых команд на формах

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

Для корректной работы печати нам необходимо внедрить код в три места: процедуру ПриСозданииНаСервере и специальные клиентские/серверные обработчики команд.

Пример кода для формы документа

Рассмотрим структуру модуля формы документа. Нам нужно убедиться, что в процедуре ПриСозданииНаСервере вызывается инициализация команд, а также присутствуют обработчики для выполнения этих команд.


#Область КомандыФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // СтандартныеПодсистемы.ПодключаемыеКоманды
    // Этот метод инициализирует список доступных команд (печать, заполнение и т.д.)
    ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
    // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры

// СтандартныеПодсистемы.ПодключаемыеКоманды
// Обработчик для выполнения команды на клиенте
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
    ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

// Обработчик для выполнения серверной части команды
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат)
    ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры

// Обновление состава команд при изменении данных объекта
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
    ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

#КонецОбласти

Важный момент: Обратите внимание на использование переменной Объект в вызовах процедур. Это указывает системе, что контекстом выполнения является текущий документ.

Пример кода для формы списка

Для формы списка логика похожа, но есть ключевое отличие: вместо конкретного объекта мы передаем элемент управления списком (обычно это Элементы.Список).


#Область КомандыФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Инициализация команд для динамического списка
    ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
    // Передаем Элементы.Список, чтобы система знала, для каких выделенных строк выполнять печать
    ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список);
КонецПроцедуры

&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат)
    ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
    ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список);
КонецПроцедуры

#КонецОбласти

Как быстро внедрить этот код во все формы?

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

Через расширение можно перехватить событие ПриСозданииНаСервере для множества форм сразу, используя механизм «После». Однако, стоит помнить, что подсистема подключаемых команд БСП ожидает наличия конкретных имен процедур-обработчиков (например, Подключаемый_ВыполнитьКоманду) непосредственно в модуле формы. Если вы используете расширение, убедитесь, что в свойствах элементов формы (кнопок), которые создаются динамически, прописаны пути к обработчикам именно вашего расширения.

Тем не менее, самым правильным подходом будет повторное проведение процедуры обновления (сравнения/объединения) в Конфигураторе. При объединении необходимо внимательно следить за тем, чтобы области (Region), помеченные как СтандартныеПодсистемы, не затирались вашими старыми доработками. Выбирайте режим «Объединить с приоритетом основной конфигурации» для типовых модулей форм, если вы не вносили в них уникальную бизнес-логику.

Резюме

Если кнопки печати исчезли:

  1. Очистите кэш (удалите и добавьте базу в список).
  2. Проверьте завершение процедур обновления в разделе «Обслуживание».
  3. Убедитесь в наличии кода ПодключаемыеКоманды.ПриСозданииНаСервере в модулях форм.
  4. Если конфигурация сильно кастомизирована, проверьте общий модуль УправлениеПечатьюПереопределяемый — в нем должны быть зарегистрированы все объекты, для которых требуется вывод кнопок печати.
← На главную