Почему исчезла кнопка «Заполнить» в 1С и как вернуть её на форму

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

После обновления типовых конфигураций (например, Бухгалтерия предприятия 3.0.52.35, ЗУП 3.1.8 и выше) многие разработчики и пользователи столкнулись с неприятной ситуацией: привычная кнопка «Заполнить», которая вызывала внешнюю обработку заполнения табличной части, внезапно исчезла с командной панели документа. При этом сама обработка остается зарегистрированной в системе, и её всё ещё можно найти, если глубоко закопаться в меню «Еще».

В этой статье мы разберем причины такого поведения системы, проанализируем изменения в Библиотеке стандартных подсистем (БСП) и выясним, как программно вернуть кнопку на место.

Выясняем причину изменений в интерфейсе

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

Согласно новой концепции интерфейса, если в документе зарегистрировано несколько команд заполнения или если команда относится к определенному типу, система автоматически группирует их. Часто они перемещаются в подменю «Заполнить» (которое само может спрятаться в «Еще») или вовсе отображаются только в выпадающем списке дополнительных обработок.

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

Способ 1. Обновление функции СведенияОВнешнейОбработке

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

Раньше мы могли использовать произвольную структуру, но теперь крайне рекомендуется инициализировать её через стандартные методы БСП. Посмотрим на пример кода, который решает проблему:


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

Проанализируем ключевые изменения в этом коде по сравнению со старым стилем:

  1. Мы используем ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.1.2.1"). Это гарантирует, что структура ПараметрыРегистрации будет содержать все необходимые поля, требуемые вашей версией БСП.
  2. Вместо ручного написания строк типа "ЗаполнениеФормы", мы обращаемся к предопределенным функциям ДополнительныеОтчетыИОбработкиКлиентСервер. Это исключает ошибки в именовании типов.
  3. Явное указание версии БСП в параметрах функции позволяет системе правильно интерпретировать метаданные обработки.

Способ 2. Управление видимостью через «Изменить форму»

Если программный код изменен, но кнопка так и не появилась на видном месте, проанализируем настройки самой формы документа. Иногда система «запоминает» пользовательские настройки интерфейса, где кнопка принудительно скрыта или перемещена в «Еще».

Для исправления выполним следующие действия:

  1. Откроем форму документа (например, Акт сверки).
  2. Нажмем кнопку «Еще» в правом верхнем углу и выберем пункт «Изменить форму».
  3. В дереве элементов найдем группу «Командная панель».
  4. Найдем нашу команду (она может быть внутри подгруппы «Заполнить» или в общем списке).
  5. Обратим внимание на свойство «Только в еще». Если там установлено значение «Да», кнопка никогда не появится на основной панели. Установим значение «Нет».

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

Способ 3. Очистка кэша зарегистрированных обработок

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

Разберем правильный алгоритм обновления:

  1. Зайдем в раздел Администрирование — Печатные формы, отчеты и обработки.
  2. Откроем список Дополнительные отчеты и обработки.
  3. Найдем нашу обработку и откроем её карточку.
  4. Нажмем кнопку «Обновить из файла» и выберем ваш исправленный файл.
  5. Критически важно: Нажмите «Записать и закрыть». Именно в момент записи элемента справочника БСП перечитывает функцию СведенияОВнешнейОбработке и обновляет свои внутренние таблицы регистрации команд.

Дополнительные нюансы: Свойство «ИзменяетДанные»

В современных версиях БСП для команд заполнения появилось свойство ИзменяетДанные. Если ваша обработка предназначена для модификации объекта, рекомендуется явно указывать это в таблице команд. Рассмотрим пример добавления этой колонки:


// В процедуре ДобавитьКоманду (если вы используете вспомогательную таблицу)
// или напрямую при заполнении таблицы команд:
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
// ... заполнение остальных полей ...
// Если версия БСП поддерживает это поле:
НоваяКоманда.Вставить("ИзменяетДанные", Истина);

Это свойство подсказывает системе, что перед выполнением команды нужно проверить права доступа пользователя на редактирование, а также корректно обработать модифицированность формы (звездочку у заголовка окна).

Резюме

Если у вас исчезла кнопка «Заполнить», не паникуйте. Скорее всего, ваша конфигурация перешла на новый стандарт отображения команд. Чтобы решить проблему, выполните три действия: обновите регистрационную функцию с использованием методов ДополнительныеОтчетыИОбработки, обязательно перезапишите элемент в справочнике дополнительных обработок и проверьте настройки видимости в меню «Изменить форму». Эти шаги в 99% случаев возвращают привычный интерфейс на место.

← На главную