Почему возникают ошибки блокировки при использовании событий ПриВыводеСтроки в 1С УТ 10.3?

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

Часто при разработке в конфигурациях на базе обычных форм, таких как УТ 10.3, мы сталкиваемся с неприятным явлением: попытка кастомизировать внешний вид табличного поля через процедуры ПриВыводеСтроки или ПриПолученииДанных приводит к блокировкам объектов. Пользователи жалуются, что при открытии документа вторым сотрудником система выдает ошибки блокировки столько раз, сколько строк содержится в документе. Давайте разберем, почему это происходит и как устранить данную проблему.

Анализ причин возникновения блокировок

Первое, что необходимо понять — сама по себе процедура ПриВыводеСтроки не должна блокировать объект, если она пуста. Однако платформа 1С:Предприятие в режиме обычных форм при отрисовке строк табличного поля может инициировать обращения к данным документа. Если в настройках формы или в механизме блокировок базы данных установлены определенные параметры, система может воспринимать процесс чтения данных для отображения как попытку захвата объекта.

Рассмотрим основные факторы:

  1. Режим открытия формы: Если второй пользователь открывает документ, который уже редактируется первым, система пытается установить разделяемую блокировку. Если форма настроена на автоматическое редактирование, это может привести к конфликту.
  2. Неявная модификация данных: Проверьте, нет ли в процедуре ПриВыводеСтроки обращения к самому объекту через ЭлементыФормы или через прямую работу с данными, которые вызывают срабатывание механизма модификации (появление символа «*» в заголовке формы).
  3. Настройки блокировок: В файловых базах данных управление блокировками происходит иначе, чем в клиент-серверных (SQL). В файловом режиме блокировки могут быть более чувствительными к любым событиям формы.

Шаги по устранению проблемы

Давайте проанализируем, как можно исправить ситуацию, последовательно проверяя каждый элемент формы.

1. Проверка режима «Только просмотр»

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


Процедура ПриОткрытии()
    Если Не ПраваДоступа("Изменение", Метаданные.Документы.РеализацияТоваровУслуг) Тогда
        ЭтаФорма.ТолькоПросмотр = Истина;
    КонецЕсли;
КонецПроцедуры

2. Правильная работа с объектом в процедурах отрисовки

Рассмотрим подробнее, как именно мы обращаемся к данным. Крайне важно использовать только параметр ОформлениеСтроки. Никогда не обращайтесь к объекту напрямую, если это не требуется для получения данных, которые невозможно извлечь через ДанныеСтроки.

Пример корректного использования:


Процедура ТаблицаПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    // Используем только переданные параметры
    Если ДанныеСтроки.Сумма > 10000 Тогда
        ОформлениеСтроки.Ячейки.Сумма.ЦветФона = WebЦвета.Красный;
    КонецЕсли;
КонецПроцедуры

3. Проверка настроек элемента управления

Зайдите в конфигуратор и откройте форму документа. Выберите табличное поле, с которым возникают проблемы, и проверьте следующие свойства:

Рекомендации по диагностике

Чтобы окончательно локализовать проблему, выполните следующие действия:

  1. Посмотрите на заголовок формы второго пользователя: появляется ли там «звездочка» (*), сигнализирующая о том, что документ был изменен? Если да, значит, где-то в коде происходит обращение к методам, меняющим состояние объекта.
  2. Используйте Технологический журнал для отслеживания событий TLOCK. Это позволит увидеть, какой именно процесс и какой объект вызывает конфликт при попытке отрисовки строк.
  3. Проверьте, не включен ли в конфигурации режим «Управляемые блокировки», который в старых конфигурациях УТ 10.3 может конфликтовать с классической логикой работы обычных форм.

Работа с событиями ПриВыводеСтроки требует осторожности. Помните, что эта процедура вызывается очень часто — при каждом скролле, обновлении или перерисовке таблицы. Любое, даже самое незначительное действие внутри нее, которое 1С интерпретирует как запись или попытку изменения, будет повторяться сотни раз, что неизбежно приведет к ошибкам в многопользовательской среде. Действуйте аккуратно и всегда отдавайте предпочтение изменению визуального представления через ОформлениеСтроки, а не изменению самих данных документа.

← На главную