Как найти и отредактировать кнопку на форме документа, если её нет в конфигураторе 1С:Бухгалтерия 2.0

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

При работе с типовыми конфигурациями на платформе 1С:Предприятие 8.2 (например, «Бухгалтерия предприятия 2.0»), часто возникает ситуация, когда в режиме «Предприятие» в документе присутствуют дополнительные кнопки (например, в меню «Заполнить»), но при открытии этой же формы в конфигураторе их обнаружить не удается. Ситуация осложняется, если база находится на полной поддержке («на замке»), и типовые объекты изменять нельзя. Разберем подробно, почему так происходит, где искать скрытую логику и как её исправить.

Причина появления «невидимых» кнопок

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

Кнопки, которые вы видите, создаются программно в момент открытия формы. Система сканирует специальный справочник, находит там записи, привязанные к данному типу документа, и «дорисовывает» пункты меню в интерфейсе. Именно поэтому в конфигураторе на макете формы этих кнопок нет — они существуют только в оперативной памяти в процессе работы пользователя.

Поиск источника: справочник внешних обработок

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

  1. Запустим программу в режиме «Предприятие».
  2. Перейдем в меню Сервис.
  3. Найдем пункт Дополнительные внешние отчеты и обработки.
  4. В выпадающем списке выберем Обработки заполнения табличных частей.

Проанализируем открывшийся список. Нам нужно найти строку, которая относится к документу «Акт сверки взаиморасчетов». В этой строке будет указано наименование обработки, которое, как правило, совпадает с названием кнопки в меню «Заполнить».

Как извлечь и отредактировать код

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

  1. В справочнике внешних обработок откроем карточку нужной нам записи.
  2. В форме карточки нажмем кнопку Выгрузить файл на диск (или кнопку с изображением дискеты).
  3. Сохраним файл с расширением .epf в удобное место.
  4. Теперь откроем этот файл .epf в конфигураторе через меню Файл -> Открыть.

Теперь мы можем изучить содержимое. Основная логика в таких обработках обычно располагается в Модуле объекта. Ищите экспортную процедуру, которая отвечает за взаимодействие с документом. Чаще всего она называется Инициализировать.

Пример структуры кода внутри такой обработки:


Процедура Инициализировать(Объект, ИмяТабличнойЧасти, КнопочнаяПанель) Экспорт
    // Здесь описана логика, которая заполняет документ
    // Если документ заполняется некорректно, ошибку нужно искать именно здесь
    
    ТабличнаяЧасть = Объект[ИмяТабличнойЧасти];
    // Пример: Добавление строки
    НоваяСтрока = ТабличнаяЧасть.Добавить();
    НоваяСтрока.Сумма = 100; 
КонецПроцедуры

Программное добавление кнопок через код конфигурации

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

Рассмотрим процедуру ПриОткрытии в модуле формы документа или процедуру УстановитьКнопкиПодменюЗаполненияТЧ в общих модулях (например, в модуле УниверсальныеМеханизмы). Проанализируем типичный код, который может динамически изменять командную панель:


// В модуле формы может быть вызов:
УниверсальныеМеханизмы.УстановитьКнопкиПодменюЗаполненияТЧ(ЭтаФорма, ЭлементыФормы.ОсновныеДействияФормы);

Если вы видите подобные вызовы, значит, система автоматически собирает меню из зарегистрированных в системе объектов. В редких случаях разработчики вписывают создание кнопки «жестко» (hardcode) прямо в модуль формы. Чтобы найти это место, воспользуемся глобальным поиском по конфигурации (Ctrl+Shift+F), введя текст, который отображается на кнопке (например, "Заполнить по остаткам").

Использование отладчика для поиска ошибки

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

Выполним следующие действия для надежной отладки:

  1. Откроем внешнюю обработку в конфигураторе.
  2. В тексте процедуры Инициализировать поставим точку останова (клавиша F9).
  3. В режиме «Предприятие» откроем эту же обработку через Файл -> Открыть (если она поддерживает автономный запуск) ИЛИ запустим процесс заполнения из документа.
  4. Если точка не срабатывает, попробуйте в коде прописать команду Остановка; или Предупреждение("Тут");, чтобы убедиться, что выполняется именно этот участок кода.

Важное замечание о расширениях

В процессе обсуждения часто всплывает тема Расширений конфигурации. Важно понимать, что для 1С:Бухгалтерия 2.0, работающей на платформе 8.2 или в режиме совместимости с 8.2, механизм расширений недоступен. Расширения появились только в версии платформы 8.3.6. Если система выдает ошибку «Структура данных не поддерживает расширение», значит, вы пытаетесь применить технологию будущего к старой архитектуре. В случае с БП 2.0 единственным легитимным способом добавления кнопок без снятия с поддержки остаются именно Внешние обработки заполнения табличных частей.

Резюме

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

← На главную