Подробный гайд: Почему в веб-клиенте 1С кнопки становятся неактивными - Часть 4
15. Диагностика через код
Добавьте временную диагностику, чтобы понять, что реально происходит с кнопкой.
Вариант 1. Диагностика в ПриСозданииНаСервере
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Ваша основная логика
// Временная диагностика
ТекстДиагностики =
"Форма: " + ЭтаФорма.ИмяФормы + Символы.ПС +
"ТолькоПросмотр формы: " + ?(ЭтаФорма.ТолькоПросмотр, "Да", "Нет") + Символы.ПС +
"Кнопка доступна: " + ?(Элементы.МояКнопка.Доступность, "Да", "Нет");
ЗаписьЖурналаРегистрации(
"ДиагностикаКнопки",
УровеньЖурналаРегистрации.Информация,
ТекстДиагностики
);
КонецПроцедуры
Вместо МояКнопка подставьте реальное имя элемента.
Вариант 2. Диагностика в клиентском событии открытия
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ЗаписатьДиагностикуНаСервере("ПриОткрытии");
КонецПроцедуры
&НаСервере
Процедура ЗаписатьДиагностикуНаСервере(ТочкаПроверки)
ТекстДиагностики =
"Точка: " + ТочкаПроверки + Символы.ПС +
"Форма: " + ЭтаФорма.ИмяФормы + Символы.ПС +
"ТолькоПросмотр формы: " + ?(ЭтаФорма.ТолькоПросмотр, "Да", "Нет") + Символы.ПС +
"Кнопка доступна: " + ?(Элементы.МояКнопка.Доступность, "Да", "Нет");
ЗаписьЖурналаРегистрации(
"ДиагностикаКнопки",
УровеньЖурналаРегистрации.Информация,
ТекстДиагностики
);
КонецПроцедуры
Это удобно тем, что видно, в какой момент доступность меняется.
Вариант 3. Диагностика в нескольких точках
Вызовите диагностику в:
ПриСозданииНаСервере
ПриОткрытии
Обработчике кнопки
После записи
После проведения
При смене текущего элемента
Так вы увидите, где именно кнопка становится недоступной.
16. Как понять, что код не выполняется
Если вы уверены, что код должен включать кнопку, проверьте, что он вообще запускается.
Способ 1. Сообщение
Временно:
Сообщить("Выполнилось: ПриСозданииНаСервере");
Минус: пользователю видно сообщения, и это плохо для продакшена.
Способ 2. Журнал регистрации
Лучше:
ЗаписьЖурналаРегистрации(
"ДиагностикаКнопки",
УровеньЖурналаРегистрации.Информация,
"Выполнилось ПриСозданииНаСервере"
);
Потом смотрите журнал регистрации.
Способ 3. Точка останова
Если есть возможность отлаживать:
- запустите сеанс из конфигуратора в режиме отладки;
- поставьте точку останова;
- откройте форму;
- проверьте значения:
Элементы.МояКнопка.Доступность
ЭтаФорма.ТолькоПросмотр
Объект.Ссылка
Параметры
Если в отладчике видно, что Доступность = Истина, а в интерфейсе кнопка серая, проблема может быть в клиентской части, браузере, настройках или последующем переопределении.
17. Проверка браузера через консоль разработчика
В веб-клиенте полезно смотреть консоль браузера.
Нажмите:
F12
или:
Ctrl + Shift + I
Перейдите во вкладку:
Console
Ищите ошибки:
1C;script error;network;timeout;500;502;504;blocked;popup;mixed content.
Также посмотрите вкладку:
Network
Если запросы к базе возвращают ошибки или слишком долго выполняются, проблема может быть серверной.
18. Если проблема у одного пользователя
Если у одного пользователя кнопки неактивны, а у других активны, проверяйте:
- Права пользователя.
- Профиль группы доступа.
- Ограничения на уровне записей.
- Дату запрета изменения.
- Организацию, склад, подразделение пользователя.
- Пользовательские настройки формы.
- Браузер пользователя.
- Кэш браузера.
- Расширения браузера.
- Компьютер, сеть.
- Не открыт ли объект у этого же пользователя в другом сеансе.
- Не заблокирован ли объект этим же пользователем в фоновом задании.
19. Если проблема у всех пользователей
Если у всех пользователей и во всех браузерах кнопки неактивны, проверяйте:
- Код формы.
- Расширения.
- Конфигурацию после обновления.
- Права в целом.
- Функциональные опции.
- Настройки БСП.
- Статусы объектов.
- Дату запрета изменения.
- Логику открытия формы.
- Публикацию базы.
- Версию платформы.
- Веб-сервер.
- Журнал регистрации.
- Технологический журнал, если проблема серверная.
20. Если проблема плавающая
Иногда кнопки становятся неактивными периодически.
Тогда вероятные причины:
- серверный вызов выполняется слишком долго;
- база блокируется;
- есть взаимоблокировки;
- сеть нестабильна;
- веб-сервер обрывает соединение;
- сеанс пользователя завис;
- фоновые задания нагружают базу;
- браузер теряет связь с сервером;
- кэш браузера повреждён;
- кэш веб-сервера работает некорректно.
Что делать:
- Включить журнал регистрации.
- Проверить ошибки в момент воспроизведения.
- Проверить активные сеансы.
- Проверить длительные запросы.
- Проверить блокировки.
- Проверить нагрузку на сервер.
- Проверить веб-сервер и таймауты.
- Проверить сеть.
21. Частые ошибки разработчиков
Ошибка 1. Менять элементы формы из модуля объекта
В модуле объекта нельзя нормально управлять элементами формы так, как в модуле формы.
Плохо в модуле объекта:
Элементы.МояКнопка.Доступность = Ложь;
Для управляемой формы элементы должны обрабатываться в модуле формы.
Ошибка 2. Ставить доступность только в одном месте
Например, вы поставили:
Элементы.МояКнопка.Доступность = Истина;
в ПриСозданииНаСервере.
Но позже срабатывает:
ПриОткрытии
или обработчик списка, или расширение, или условное оформление. Нужно проверять всю цепочку событий.
Ошибка 3. Менять не тот элемент
Пользователь видит кнопку «Сохранить», а в коде есть:
Элементы.Сохранить.Доступность = Истина;
но реальный элемент называется:
КнопкаКоманднаяПанельСохранить
или:
ГруппаОсновныеКомандыСохранить
Ошибка 4. Не учитывать родительскую группу
Если группа недоступна, кнопка внутри тоже может быть недоступна.
Ошибка 5. Не учитывать права
Если у пользователя нет прав, платформа или конфигурация могут принудительно сделать форму только для просмотра. Не надо в этом случае просто принудительно включать кнопку. Это может привести к ошибкам или нарушению логики прав.
Ошибка 6. Не учитывать стандартные команды
Для стандартных команд платформа сама решает, активны они или нет. Если вы пытаетесь включить стандартную кнопку без понимания, почему она неактивна, это часто даёт временный или неправильный эффект.
Ошибка 7. Синхронные диалоги в веб-клиенте
Если код использует старые синхронные вызовы, в веб-клиенте поведение может отличаться от тонкого клиента.
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.