При работе с платформой 1С есть три типа ошибок: 1) ошибки пользователей, 2) ошибки платформы и 3) ошибки обстоятельств 🧐
Ошибки обстоятельств просто бесят - тут некого бить по рукам инструкциями и нельзя забагованные функции обложить красными флажками. Тут у нас функционал, который вроде у всех работает и даже почти всегда стабильно работает у тебя, но иногда почему-то не работает 🫣
===
Ко мне обратилась наш аналитик посмотреть проблему на форме договора с исчезновением одного старого поля, которое давно никто по задачам не трогал. При чем у записанных договоров поле показывается и отсутствует лишь для новых, что в купе с "обязательностью для заполнения" заблокировало создание элементов справочника.
Прохожу отладкой - все есть пока не сработает процедура "установки видимости и доступности", после которой поле пропадает с формы, при чем у самого элемента видимость сохраняется, но пропадает у его группы (для выравнивания).
Смотрю процедуру - группу там не трогают, но видимость самого элемента явно устанавливается в зависимости от типа договора (если тип Прочие Взаиморасчеты, то большинство реквизитов скрываются), но значение устанавливаемой видимости было Истина. Прохожу внимательно отладкой процедуру - элемент как был видим, так и остался видимым после установки видимости; группа тоже остается видимой вплоть до выхода из процедуры - т.е. на шаге КонецПроцедуры все еще Видимость=Истина, а на следующем шаге уже Видимость=Ложь.
Подобное поведение очень похоже на работу расширения, но расширений в базе не было. Хотя может кеш? На всякий случай для промежутка вызова проблемной процедуры запустил "Замер производительности", но в отчете были только шаги внутри процедуры с явной установкой видимости в Истина. Т.е. некая сверхъестественная сила решила менять видимость у элемента, но только при условии, что Объект.Ссылка указывает на пустую ссылку, а иначе не мешает 👻
Аналитик напомнила, что все работало до принятия на GitHub последних правок с добавлением одного специфического поля, которое практически всегда скрыто. К слову, как раз тот случай, когда для формы нужно работающее условное оформление, но оно управляет видимостью только для элементов таблиц. Для этого нового поля видимость включала/выключала все та же общая процедура видимости/доступности и значением для новых элементов всегда было Ложь.
Открываю XML формы, нахожу новый элемент, смотрю его айдишник, делаю поиск по форме и БИНГО - это тот же айдишник, что и у группы, которая внезапно начала терять видимость. Истинной причиной паранормального поведения формы было, что при тестировании фичевых пулл-реквестов образовалась небольшая очередь, в результате которой было паралельно создано два пулл, в первом из которых добавлена новая группа, а во втором с тем же айдишником добавлено новое поле. Каждая из двух веток сама по себе работала верно, но их мерж в основной проект испортил форму (не в первый раз). После исправления задублированного айдишника все заработало 👍
===
Интересно, что когда видимость нового элемента отключалась, то в отладке для проблемной группы видимость все еще оставалась включенной, пока не вышли из процедуры. Именно потому в отладке я не увидел это подозрительное поведение и продолжал искать в ошибочном направлении. При чем такое поведение отладчика с не обновляемыми значениями я временами замечаю при расследовании проблем в клиентских базах, где хоть вычисление выражений показывало Ложь, но выполнение все равно заходили в неправильное условие - для анализа настоящих значений приходилось добавлять расширение с логированием в журнал событий.
#1С #полтергейст #баги
Post #385
262

- 👻 4