Пример использования механизма "Блокировки изменения объектов" (БП, ЗУП, УХ, ЕРП)

05.06.23

Разработка - Механизмы типовых конфигураций

Механизм позволяет добавлять обработчики блокировки формы от изменения пользователем с выводом предупреждения "Документ не редактируется по причине:" и указанием причин блокировки. Также по некоторому условию может быть выведена кнопка "Разблокировать форму".

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Расширение "Блокировка изменения объектов" ЗУП
.cfe 26,87Kb
6 2 500 руб. Купить
Расширение "Блокировка изменения объектов" БП
.cfe 61,94Kb
13 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Рассмотрим работу механизма на примере доработки с помощью расширения документа Отражение зарплаты в бухучете ЗУП.

1. Блокируемая форма

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

Добавляем в расширение обработчики событий формы с типом Вызывать после:

&НаСервере
Процедура БРО_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
	
	БлокировкаИзмененияОбъектов.ПриСозданииНаСервереФормыОбъекта(ЭтотОбъект, Отказ, СтандартнаяОбработка);
	
КонецПроцедуры

&НаСервере
Процедура БРО_ПриЧтенииНаСервереПосле(ТекущийОбъект)
	
	БлокировкаИзмененияОбъектов.ПриЧтенииНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект);

КонецПроцедуры

&НаСервере
Процедура БРО_ПослеЗаписиНаСервереПосле(ТекущийОбъект, ПараметрыЗаписи)
	
	БлокировкаИзмененияОбъектов.ПослеЗаписиНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);

КонецПроцедуры

Кнопка разблокировки по-умолчанию создается в Командной панели в дополнительном подменю Ещё, однако в нашем документе Отражение зарплаты в бухучете панель не отображается, вместо нее создана группа КоманднаяПанельФормы, поэтому перенесем созданную кнопку в данную группу:

	КнопкаРазблокировать = Элементы.РазблокироватьФормуДляИзмененияОбъекта;
	Элементы.Переместить(КнопкаРазблокировать, Элементы.КоманднаяПанельФормы);

Так же в модуле формы размещаем обработчик команды разблокировки:

&НаКлиенте
Процедура Подключаемый_РазблокироватьФормуОбъекта(Команда)

	БлокировкаИзмененияОбъектовКлиент.РазблокироватьФормуОбъекта(ЭтотОбъект, Объект.Ссылка);
	
КонецПроцедуры

 

2. Обработчик блокировки

Обработчик блокировки разместим в общем модуле БРО_Сервер:

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

Вызов обработчика разместим в  расширении модуля БлокировкаИзмененияОбъектовБазовый:

&Вместо("ПараметрыБлокировкиИзмененияОбъекта")
Функция БРО_ПараметрыБлокировкиИзмененияОбъекта(СсылкаНаОбъект, УправляемаяФорма)
	
	КоллекцияБлокировок = ПродолжитьВызов(СсылкаНаОбъект, УправляемаяФорма);	
	БРО_Сервер.ДобавитьБлокировкуИзмененияОбъекта(КоллекцияБлокировок, СсылкаНаОбъект);

	Возврат КоллекцияБлокировок;
	
КонецФункции

У расширения выключаем Безопасный режим.

 

3. Проверяем

При открытии формы проверяется условие блокировки и в форме устанавливается свойство ТолькоПросмотр, выводится предупреждающая надпись:

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

 

Во вложении расширение с данным примером для ЗУП и отдельно для БП, ЕРП, УХ (документ Реализация товаров услуг, общая форма).

Тестирование проводилось на ЗУП 3.1.23.558 и БП 3.0.135.16.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Программист 1С 8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

Данное расширение — это механизм, сделанный при помощи двух модулей из БСП (3.1.11.415), который позволяет динамически добавлять команды (кнопки и не только при желании) на формы управляемого приложения без изменения конфигурации. На примере данного механизма удобно рассмотреть некоторые возможности для расширения функционала объектов, которые подключены к механизму библиотеки стандартных подсистем.

1 стартмани

20.03.2026    1045    InFlach    0    

6

Механизмы типовых конфигураций Программист Стажер 1С 8.3 1С:Зарплата и Управление Персоналом 3.x Бесплатно (free)

Интервальные регистры в 1С:ЗУП 3.1 заменяют тяжелые срезы последних, ускоряя отчеты по кадровым данным через интервалы ДатаНачала–ДатаОкончания. Разбираем отличия, примеры кода, плюсы и способы синхронизации.

12.03.2026    2547    AlexeyPROSTO_1C    4    

20

Механизмы типовых конфигураций Программист Стажер 1С 8.3 1С:Зарплата и Управление Персоналом 3.x Бесплатно (free)

Как в ЗУП работает механизм расстановки времени в регистрах сведений с помощью подписки на события?Рассматривается логика сдвигов для разных типов документов (прием, увольнение, отпуск) и дается инструкция по подключению нового регистра к этому механизму.

03.03.2026    1232    YA_1100893639    1    

7

Механизмы типовых конфигураций Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 Россия Бесплатно (free)

В статье рассматривается подход к программной модификации параметров команды внешней обработки заполнения объекта так, чтобы в момент вызова из формы объекта (табличной части документа) она использовалась для открытия вспомогательной формы диалога, а после закрытия вспомогательной формы диалога она использовалась для заполнения объекта (табличной части документа) уже на сервере с контекстом формы документа с использованием введенных данных во вспомогательной форме диалога.

11.08.2025    7634    user1988284    0    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Shatilovako 23.12.24 11:04 Сейчас в теме
Спасибо! ТЫ очень помог!
2. Slaughter93 16.05.25 17:39 Сейчас в теме
Не знаешь Гиперссылки есть возможность прикрутить при этом в причины блокировки? В ОписаниеБлокировкиИзмененияОбъекта похожих свойств не нашел
4. annak2906 8 30.11.25 23:20 Сейчас в теме
(2) В типовой КА в нескольких местах используется похожий код, вставляла его в доработки:

Вызываем процедуру А_ДобавитьБлокировкуДокумента
своего серверного общего модуля в процедуре ДополнитьПараметрыБлокировкиИзмененияОбъекта
типового общего модуля БлокировкаИзмененияОбъектовПереопределяемый
____________________________________________________________­________________

Процедура А_ДобавитьБлокировкуДокумента(КоллекцияБлокировок, СсылкаНаОбъект)
	
	ДокументыДляГиперссылок = МассивДокументовДляГиперссылок(СсылкаНаОбъект);
	
	Если ДокументыДляГиперссылок.Количество() > 0 Тогда
		
		ПредставлениеРегистраторов = Новый ФорматированнаяСтрока(
			Строка(ДокументыДляГиперссылок[0]), , , , ПолучитьНавигационнуюСсылку(ДокументыДляГиперссылок[0]));
			
		Если ДокументыДляГиперссылок.Количество() = 2 Тогда
			
			ПредставлениеРегистраторов = Новый ФорматированнаяСтрока(
				ПредставлениеРегистраторов,
				", ",
				Новый ФорматированнаяСтрока(
					Строка(ДокументыДляГиперссылок[1]), , , , ПолучитьНавигационнуюСсылку(ДокументыДляГиперссылок[1])));
			
		ИначеЕсли ДокументыДляГиперссылок.Количество() > 2 Тогда

			ПредставлениеРегистраторов = Новый ФорматированнаяСтрока(
				ПредставлениеРегистраторов,
				" ",
				СтрШаблон(НСтр("ru = 'и еще %1 док'"),
					ДокументыДляГиперссылок.Количество() - 1),
				".");
			
		КонецЕсли;
		
		Описание = Новый ФорматированнаяСтрока(
			НСтр("ru = 'Описываем свою причину блокировки ('"),
			ПредставлениеРегистраторов,
			НСтр("ru = ').
				|При изменении реквизитов документа возможно потребуется создать заново документы из списка гиперссылок.'"));
		
		БлокировкаИзмененияОбъекта = БлокировкаИзмененияОбъектов.ОписаниеБлокировкиИзмененияОбъекта("А_ДобавитьБлокировкуДокумента", Описание, Истина); 
		
		КоллекцияБлокировок.Добавить(БлокировкаИзмененияОбъекта);
		
	КонецЕсли;
	
КонецПроцедуры
Показать
3. annak2906 8 30.11.25 22:44 Сейчас в теме
Здравствуйте, спасибо за статью, очень помогла в работе.
Хотелось бы добавить пару замечаний по заключительной ее части:
1) ДобавитьБлокировкуИзмененияОбъекта (КоллекцияБлокировок, СсылкаНаОбъект) - по логике реализации - это процедура, не функция.
2) Вызов БРО_Сервер.ДобавитьБлокировкуИзмененияОбъекта(КоллекцияБлокировок, СсылкаНаОбъект);
правильнее было бы добавить не в расширение служебного модуля БлокировкаИзмененияОбъектовБазовый,
а в расширение переопределяемого модуля БлокировкаИзмененияОбъектовПереопределяемый в процедуре ДополнитьПараметрыБлокировкиИзмененияОбъекта

&После("ДополнитьПараметрыБлокировкиИзмененияОбъекта")
Процедура БРО_ДополнитьПараметрыБлокировкиИзмененияОбъекта(КоллекцияБлокировок, СсылкаНаОбъект, УправляемаяФорма)

БРО_Сервер.ДобавитьБлокировкуИзмененияОбъекта(КоллекцияБлокировок, СсылкаНаОбъект);

КонецПроцедуры
Для отправки сообщения требуется регистрация/авторизация