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