В процессе активной разработки и частого обновления конфигурации 1С:УТ11 (несколько раз в неделю) мы часто сталкиваемся с «чудесами», когда корректный код внезапно перестает выполняться для части пользователей. Типичная ситуация: в коде формы подбора товаров добавлен запрос, который успешно работал, но после обновления перестал функционировать у конкретных сотрудников. При этом проблема не воспроизводится под другими учетными записями на том же ПК, что исключает ошибки только в клиентском кэше.
Разберем, как системно подойти к решению этой проблемы, когда отладчик «проскакивает» строки кода, словно их не существует.
Первым делом проанализируем состояние окружения. Даже если вы произвели очистку кэша на клиентских машинах, проблема может крыться глубже — на уровне сервера приложений.
RLS (ограничение доступа на уровне записей) обычно игнорируется. Однако убедитесь, что в последних обновлениях не были внесены изменения в роли, которые могли косвенно ограничить доступ к регистрам или справочникам, участвующим в вашем доработанном запросе.srvinfo (обычно C:\Program Files\1cv8\srvinfo\...) и очистите содержимое папок кэша, связанных с вашей базой. После перезапуска службы сервер будет вынужден заново прочитать структуру конфигурации из SQL-базы.Если простая очистка кэша не помогла, необходимо убедиться, что метаданные в SQL-базе не «рассыпались» из-за частых обновлений. Разверните текущую рабочую конфигурацию в виде файловой копии базы.
Зайдите под «проблемным» пользователем в эту копию. Если в файловой базе функционал работает корректно, значит, проблема стопроцентно связана с серверным кэшем или состоянием временных таблиц в клиент-серверном варианте. Если же и в файловой копии запрос не выполняется, значит, в процессе обновления произошел программный конфликт.
Один из самых эффективных методов исправления «фантомных» ошибок, когда код есть, но не выполняется — это принудительное пересохранение проблемных объектов. В процессе доработок идентификаторы метаданных могут сдвигаться, и сервер может терять связь с конкретной формой.
Выполните следующие действия:
Если отладчик игнорирует строки, проанализируйте, где именно выполняется код. Если вы используете методы с директивами &НаСервере или &НаСервереБезКонтекста, убедитесь, что параметры, передаваемые в запрос, корректны для всех пользователей.
Иногда полезно принудительно завершить все сеансы пользователя через консоль администрирования 1С. В клиент-серверных версиях старый сеанс может удерживать блокировки или неверные планы выполнения запросов (особенно если у пользователей различаются настройки или параметры отбора).
Посмотрим на пример структуры вызова, которую стоит проверить отладчиком:
// В модуле формы
&НаСервере
Функция ПолучитьМаксимальнуюЦену(ТоварСсылка)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ МАКСИМУМ(Цены.Цена) КАК Цена
|ИЗ РегистрСведений.ЦеныНоменклатуры КАК Цены
|ГДЕ Цены.Номенклатура = &Товар";
Запрос.УстановитьПараметр("Товар", ТоварСсылка);
Результат = Запрос.Выполнить();
// Проверяем, не пуст ли результат запроса
Если НЕ Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Цена;
КонецЕсли;
КонецЕсли;
Возврат 0;
КонецФункции
Если отладчик не заходит в функцию, проверьте, не была ли случайно установлена условная компиляция или не изменились ли права доступа к объекту РегистрСведений.ЦеныНоменклатуры для групп пользователей, к которым относится «проблемный» сотрудник.
Для предотвращения таких проблем в будущем придерживайтесь следующих правил:
Работая сообща и последовательно проверяя каждый уровень системы — от клиента до серверных кэшей и структуры SQL — вы обязательно найдете источник сбоя.