Краткий ответ:

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

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

Допустим имеется регламентное задание, которое раз в день меняет поле «Комментарий» в документе «Заказ покупателя». Регламентное задание должно пропускать открытые пользователями документы, чтобы не возникало ошибок.

Порядок действий:

  • Добавить в форму документа заказа покупателя, при создании на сервере, следующий код:
&НаСервере
Процедура ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
	Док = РеквизитФормыВЗначение("Объект", Тип("ДокументОбъект.ЗаказПокупателя"));
	Попытка
		ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка,,ЭтаФорма.УникальныйИдентификатор);
	Исключение
		Сообщить("Документ заблокирован другим пользователем или процессом");
	КонецПопытки;
КонецПроцедуры

Листинг 1 — модуль формы документа

  • При открытии документа пользователь должен блокировать документ автоматически. Процедура по изменению реквизитов должна пропускать заблокированные документы. Программный код процедуры:
Процедура ЗаказПокупателяОбновитьДанные() Экспорт
	Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	ЗаказПокупателя.Ссылка КАК Ссылка
	|ИЗ
	|	Документ.ЗаказПокупателя КАК ЗаказПокупателя
	|ГДЕ
	|	ЗаказПокупателя.Дата >= &Начало
	|	И ЗаказПокупателя.Дата <= &Окончание");
	Сутки = 60*60*24;
	Запрос.УстановитьПараметр("Начало", ТекущаяДата() - Сутки * 7);
	Запрос.УстановитьПараметр("Окончание", ТекущаяДата() + Сутки);
	Результат = Запрос.Выполнить();
	ВыборкаЗаказы = Результат.Выбрать();
	Пока ВыборкаЗаказы.Следующий() Цикл
		Попытка
			ЗаблокироватьДанныеДляРедактирования(ВыборкаЗаказы.Ссылка);
			ОбъектДок = ВыборкаЗаказы.Ссылка.ПолучитьОбъект();
			ОбъектДок.Комментарий = "Документ изменен " + Строка(ТекущаяДата());
			ОбъектДок.Записать();
		Исключение
			Продолжить;
		КонецПопытки;
	КонецЦикла
КонецПроцедуры

Листинг 2 — процедура запускаемая регламентным заданием