Почему после обновления 1С не работает доработанный функционал у части пользователей?

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

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

Разберем, как системно подойти к решению этой проблемы, когда отладчик «проскакивает» строки кода, словно их не существует.

Этап 1: Исключение ошибок в кэше и правах

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

  1. Проверка прав и RLS: Если у всех пользователей полные права, RLS (ограничение доступа на уровне записей) обычно игнорируется. Однако убедитесь, что в последних обновлениях не были внесены изменения в роли, которые могли косвенно ограничить доступ к регистрам или справочникам, участвующим в вашем доработанном запросе.
  2. Глубокая очистка кэша сервера: Если проблема «плавающая» и зависит от сессии, возможно, сервер приложений 1С хранит старую версию метаданных. Остановите службу сервера 1С, перейдите в папку srvinfo (обычно C:\Program Files\1cv8\srvinfo\...) и очистите содержимое папок кэша, связанных с вашей базой. После перезапуска службы сервер будет вынужден заново прочитать структуру конфигурации из SQL-базы.

Этап 2: Проверка целостности метаданных через копию

Если простая очистка кэша не помогла, необходимо убедиться, что метаданные в SQL-базе не «рассыпались» из-за частых обновлений. Разверните текущую рабочую конфигурацию в виде файловой копии базы.

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

Этап 3: Решение через пересохранение объектов конфигурации

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

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

  1. Найдите проблемный модуль или форму в конфигураторе.
  2. Внесите в код незначительное изменение (например, добавьте комментарий или лишний пробел), чтобы конфигуратор «увидел» необходимость перекомпиляции объекта.
  3. Сохраните изменения в конфигурацию.
  4. Выполните полноценное обновление информационной базы (не динамическое!). Динамическое обновление при частых доработках — главный враг стабильности, так как оно часто оставляет в памяти сервера старые варианты модулей.

Этап 4: Анализ работы запроса и сессий

Если отладчик игнорирует строки, проанализируйте, где именно выполняется код. Если вы используете методы с директивами &НаСервере или &НаСервереБезКонтекста, убедитесь, что параметры, передаваемые в запрос, корректны для всех пользователей.

Иногда полезно принудительно завершить все сеансы пользователя через консоль администрирования 1С. В клиент-серверных версиях старый сеанс может удерживать блокировки или неверные планы выполнения запросов (особенно если у пользователей различаются настройки или параметры отбора).

Посмотрим на пример структуры вызова, которую стоит проверить отладчиком:


// В модуле формы
&НаСервере
Функция ПолучитьМаксимальнуюЦену(ТоварСсылка)
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ МАКСИМУМ(Цены.Цена) КАК Цена
                   |ИЗ РегистрСведений.ЦеныНоменклатуры КАК Цены
                   |ГДЕ Цены.Номенклатура = &Товар";
    Запрос.УстановитьПараметр("Товар", ТоварСсылка);
    Результат = Запрос.Выполнить();
    // Проверяем, не пуст ли результат запроса
    Если НЕ Результат.Пустой() Тогда
        Выборка = Результат.Выбрать();
        Если Выборка.Следующий() Тогда
            Возврат Выборка.Цена;
        КонецЕсли;
    КонецЕсли;
    Возврат 0;
КонецФункции

Если отладчик не заходит в функцию, проверьте, не была ли случайно установлена условная компиляция или не изменились ли права доступа к объекту РегистрСведений.ЦеныНоменклатуры для групп пользователей, к которым относится «проблемный» сотрудник.

Заключение

Для предотвращения таких проблем в будущем придерживайтесь следующих правил:

Работая сообща и последовательно проверяя каждый уровень системы — от клиента до серверных кэшей и структуры SQL — вы обязательно найдете источник сбоя.

← На главную