Как заблокировать реквизиты формы 1с

Обновлено: 06.07.2024

При программном изменении существующих объектов есть правило: сразу после получения объекта из ссылки, необходимо его заблокировать для редактирования. Это позволяет:

  • во-первых, проверить, что данный объект не заблокирован в настоящий момент другим пользователем;
  • во-вторых, гарантирует, что другой пользователь не сможет изменить объект, пока не будут записаны изменения в текущем сеансе;
Внимание! Данное правило неприменимо при пакетной загрузке данных, когда требуется принятие изменений пакетом, а также при разрешении коллизий, возникающих при загрузке данных из другого источника, обладающего большим приоритетом

Заблокировать произвольный объект можно двумя способами:

  • Используя метод Заблокировать() объекта метаданных ссылочного типа (Справочники, Документы и т.п.);
  • Используя метод ЗаблокироватьДанныеДляРедактирования() глобального контекста;

Давайте рассмотрим примеры работы с каждым из этих методов

Метод Заблокировать()

Если Ваш алгоритм не взаимодействует с пользователем, перед тем как заблокировать объект, следует проверить, не заблокирован ли этот объект другим пользователем или процессом. Если, все же, взаимодействует, следует исключить код для варианта 1. Тогда в случае заблокированного объекта будет вызвано исключение и пользователь увидит полное описание ошибки.

Недостатки: Метод доступен только в контексте сервера, толстого клиента или внешнего соединения

Метод ЗаблокироватьДанныеДляРедактирования()

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

  • он умеет блокировать записи регистра сведений;
  • он умеет блокировать данные в контексте управляемых форм;
  • он умеет блокировать данные, если совпадает версия данных;

С учетом этого, перепишем предыдущий пример следующим образом:

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

Блокировка будет снята неявно при закрытии привязанной формы, либо при завершении сеанса пользователя, либо явно при вызове метода РазблокироватьДанныеДляРедактирования()

Необходимо запретить редактирование строк табличного поля документа добавленных ранее.

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

Для реализации этого, необходимо в ранее добавленных ячейках установить ТолькоПросмотр=Истина

Пример табличного поля:


Разместил: all4cf  Версии: | 8.x |  Дата: 07.06.2015   Прочитано: 19358

Распечатать

Похожие FAQ

Еще в этой же категории

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

Как на управляемой форме разместить список регистра сведений с отбором?  18
Решение рассмотрено для элемента справочника (Контрагент и регистр КонтактнаяИнформация) 1. Создание реквизита: Добавляем новый реквизит формы (. не путать с реквизитом справочника . ) с типом " ДинамическийСписок" В поле " Основная табли Как установить параметр динамического списка?  14
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Форма

Программное создание таблицы значений с условным оформлением  12
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Поле выбора

Заполнение списка значений в элементе поле выбора на форме  10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип - Произвольный, Использование - Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Посмотреть все в категории Работа с Формой (Диалог) и её элементами

Sgr_A

Что-то Вы мутите воду. Какую цель преследуете? Реквизиты формы интересны только если вы хотите с формой работать. Например, перед её открытием что-то проинициализировать. А тут вы будто пытаетесь через форму изменить реквизиты элемента. Вопрос ставьте по другому, что именно Вам нужно, какую цель преследуете?

P.S. "Правильно поставленный вопрос - уже половина ответа". (c)

60ae0ba31276f579625583.jpg

Есть реквизит объекта ОсновноеИзделиеНоменклатура и есть реквизит формы ОсновноеИзделиеНоменклатура. Мне необходимо заполнить оба, потому что когда я открываю форму, то выводится именно реквизит формы и он пустой.

Sgr_A

Sgr_A

Xris, покажите картинку формы в конфигураторе, какие свойства у элемента, о котором Вы говорите?

60ae0e89843bd908585105.jpg

Aleksei Petrov, да

Sgr_A

Xris, захватите область, где свойства видны. Свойства элемента.

60ae0f5493f65999077864.jpg

Aleksei Petrov,

Sgr_A

Xris, судя по всему, задумана какая-то логика, по которой элемент формы не связан напрямую с реквизитом объекта. А если вы открываете форму не программно созданного элемента, то на форме элемент заполнен? Aleksei Petrov, подразумевается, что при создании новой спецификации пользователь сам должен всё заполнить

Sgr_A

Xris, вот, значит Вам надо проследить, что происходит, когда заполняется вручную и инициируется запись. Возможно, он пишет не только в сам реквизит объекта, но куда-то еще, откуда потом элемент заполняется. И вообще поковырять форму, по имени элемента и реквизиту. Посмотреть момент открытия, может там хитрая инициализация реализована.

Берите во внимание еще тот момент, что есть некоторые вещи, которые выполняются именно при интерактивном взаимодействии. Поэтому, возможно, при программной записи формы у Вас не получается получить желаемый результат.

Читайте также: