Часто при разработке в конфигурациях на базе обычных форм, таких как УТ 10.3, мы сталкиваемся с неприятным явлением: попытка кастомизировать внешний вид табличного поля через процедуры ПриВыводеСтроки или ПриПолученииДанных приводит к блокировкам объектов. Пользователи жалуются, что при открытии документа вторым сотрудником система выдает ошибки блокировки столько раз, сколько строк содержится в документе. Давайте разберем, почему это происходит и как устранить данную проблему.
Первое, что необходимо понять — сама по себе процедура ПриВыводеСтроки не должна блокировать объект, если она пуста. Однако платформа 1С:Предприятие в режиме обычных форм при отрисовке строк табличного поля может инициировать обращения к данным документа. Если в настройках формы или в механизме блокировок базы данных установлены определенные параметры, система может воспринимать процесс чтения данных для отображения как попытку захвата объекта.
Рассмотрим основные факторы:
ПриВыводеСтроки обращения к самому объекту через ЭлементыФормы или через прямую работу с данными, которые вызывают срабатывание механизма модификации (появление символа «*» в заголовке формы).Давайте проанализируем, как можно исправить ситуацию, последовательно проверяя каждый элемент формы.
Если второй пользователь открывает документ исключительно для ознакомления, нет необходимости предоставлять ему возможность правки. Принудительно установите режим просмотра при открытии. Это снимет проблему конфликта блокировок, так как платформа поймет, что запись данных не требуется.
Процедура ПриОткрытии()
Если Не ПраваДоступа("Изменение", Метаданные.Документы.РеализацияТоваровУслуг) Тогда
ЭтаФорма.ТолькоПросмотр = Истина;
КонецЕсли;
КонецПроцедуры
Рассмотрим подробнее, как именно мы обращаемся к данным. Крайне важно использовать только параметр ОформлениеСтроки. Никогда не обращайтесь к объекту напрямую, если это не требуется для получения данных, которые невозможно извлечь через ДанныеСтроки.
Пример корректного использования:
Процедура ТаблицаПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
// Используем только переданные параметры
Если ДанныеСтроки.Сумма > 10000 Тогда
ОформлениеСтроки.Ячейки.Сумма.ЦветФона = WebЦвета.Красный;
КонецЕсли;
КонецПроцедуры
Зайдите в конфигуратор и откройте форму документа. Выберите табличное поле, с которым возникают проблемы, и проверьте следующие свойства:
ПриВыводеСтроки пустая, но проблема сохраняется, попробуйте временно отключить событие в свойствах таблицы. Если после этого ошибки исчезнут — значит, дело именно в способе обращения системы к данным в момент отрисовки.Чтобы окончательно локализовать проблему, выполните следующие действия:
Технологический журнал для отслеживания событий TLOCK. Это позволит увидеть, какой именно процесс и какой объект вызывает конфликт при попытке отрисовки строк.УТ 10.3 может конфликтовать с классической логикой работы обычных форм.Работа с событиями ПриВыводеСтроки требует осторожности. Помните, что эта процедура вызывается очень часто — при каждом скролле, обновлении или перерисовке таблицы. Любое, даже самое незначительное действие внутри нее, которое 1С интерпретирует как запись или попытку изменения, будет повторяться сотни раз, что неизбежно приведет к ошибкам в многопользовательской среде. Действуйте аккуратно и всегда отдавайте предпочтение изменению визуального представления через ОформлениеСтроки, а не изменению самих данных документа.