Почему в обычных формах 1С при нажатии кнопки «Добавить» в списке документов ничего не происходит?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

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

1. Проверка события «ПередНачаломДобавления» у табличного поля

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

Многие программисты пытаются найти код на кнопке командной панели, но если кнопка стандартная (автозаполненная), то код нужно искать в свойствах списка.

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

  1. Откроем форму списка документа в Конфигураторе.
  2. Выделим основной элемент формы — таблицу со списком документов (обычно она называется ДокументСписок).
  3. Откроем палитру свойств (F4) и перейдем к списку событий (иконка молнии).
  4. Найдем событие ПередНачаломДобавления (BeforeAddStart).

Это событие возникает перед тем, как начинается интерактивное добавление новой строки. Если в процедуре-обработчике этого события установлен параметр Отказ = Истина, то создание документа прерывается молча, если разработчик явно не написал Сообщить().

Пример кода, который может блокировать создание:


Процедура ДокументСписокПередНачаломДобавления(Элемент, Отказ, Копирование)
    // Проверка прав или констант
    Если Не РольДоступна("ПолныеПрава") И ТекущаяДата() > ДатаЗапрета Тогда
        Отказ = Истина; // Блокировка без сообщения пользователю
    КонецЕсли;
КонецПроцедуры

Если вы видите подобный код, поставьте в нем точку останова и проверьте, выполняется ли условие отказа.

2. Анализ процедуры «ПередОткрытием» формы документа

Если в форме списка блокировок нет, проблема может скрываться в модуле формы самого создаваемого документа. Когда мы нажимаем «Добавить», платформа создает новый объект в памяти и пытается открыть его основную форму.

В этот момент срабатывает событие формы ПередОткрытием. Если в нем установлен Отказ, окно просто не появится.

Нам необходимо:

  1. Найти в дереве метаданных сам документ.
  2. Открыть его основную форму (обычно это «ФормаДокумента»).
  3. Перейти в модуль формы и найти процедуру ПередОткрытием.

Посмотрим на типичный пример скрытой блокировки:


Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    Если ЭтоНовый() Тогда
        Если ПараметрыСеанса.ТекущийПользователь.ЗапрещеноСоздаватьРеализации Тогда
             Отказ = Истина;
             // Сообщение может быть закомментировано или отсутствовать
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

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

3. Проблема «Свернутого окна»

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

Что стоит проверить в пользовательском режиме:

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

4. Использование Замера производительности для поиска блокировки

Если вы не знаете, где именно перехватывается управление, воспользуйтесь инструментом «Замер производительности». Это самый надежный способ найти выполняемый код, даже если точки останова «не ловятся».

Алгоритм действий:

  1. Запустите 1С в режиме отладки.
  2. Откройте форму списка, где наблюдается проблема.
  3. В Конфигураторе выберите меню Отладка — Замер производительности (появится маленькая панель с кнопкой Play/Stop).
  4. Нажмите кнопку «Начать замер» (иконка Play на панели).
  5. В пользовательском режиме нажмите проблемную кнопку «Добавить».
  6. Сразу после нажатия вернитесь к замеру и нажмите «Закончить замер».

Откроется таблица со всеми строками кода, которые выполнились за этот момент. Отсортируйте их по количеству вызовов или просто просмотрите список. Если вы увидите строки кода, устанавливающие Отказ = Истина, вы нашли причину.

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

5. Свойства табличного поля и права доступа

Если программного кода нет, а документ не создается, необходимо проверить настройки элемента формы ДокументСписок в Конфигураторе:

6. Подписки на события

Не стоит забывать про общие механизмы платформы. Событие ОбработкаЗаполнения (Filling) возникает при создании нового документа еще до открытия формы. Часто логика заполнения выносится в Подписки на события.

Если в подписке на событие ОбработкаЗаполнения возникнет ошибка (исключение), которую разработчик обернул в пустой блок Попытка ... Исключение ... КонецПопытки, то создание документа прекратится, и форма не откроется.


// Пример опасного кода в подписке на событие
Попытка
    // Какой-то код, вызывающий ошибку, например деление на 0
    Данные = 1 / 0; 
Исключение
    // Пустой блок исключения "гасит" ошибку, но процесс создания может быть прерван некорректно
КонецПопытки;

Резюме по решению проблемы

Для восстановления работоспособности кнопки добавления в обычных формах действуйте в таком порядке:

  1. Используйте Замер производительности, чтобы поймать выполняемый код.
  2. Проверьте событие ПередНачаломДобавления у элемента формы ДокументСписок.
  3. Проверьте процедуру ПередОткрытием в форме самого документа.
  4. Убедитесь, что окно не открывается свернутым (глюк интерфейса).
  5. Проверьте свойства элемента формы: не стоит ли «Только просмотр» или запрет на изменение состава строк.
← На главную