Универсальный механизм обработки событий записи объектов

30.12.14

Разработка - Универсальные функции

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

Файлы

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

Наименование Скачано Купить файл
Конфигурация с элементами механизма
.cf 15,48Kb
4 1 850 руб. Купить

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

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

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

Комплект поставки: конфигурация, содержащая:

1. Общий модуль "Обработчики событий" - главный модуль

2. Глобальный общий модкль System (библиотека универсальных функций //infostart.ru/public/319157/)

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

Описание работы:

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

1. "ОбязательныеРеквизиты" - Строка реквизитов, разделенных запятой, которые должны быть заполнены. Если хотя бы один из таких реквизитов будет незаполнен, то объект не будет записан (помеченные на удаление объекты не проверяются)

2. "КлючиУникальности" - Строка реквизитов, разделенных запятой, которые должны уникально идентифицировать объект. Если в базе уже будет объект с такими же значениями реквизитов, то объект не будет записан (помеченные на удаление объекты не проверяются и при поиске игнорируются)

3. "ТолькоПредопределенные" - флаг, установка которого запрещает запись непредопределенных элементов (используется для справочников, планов видов характеристик и т.п.; помеченные на удаление объекты не проверяются)

4. "СообщенияПользователю" - массив сообщений, которые нужно показать пользователю

5. "НеВыводитьСообщения" - флаг, запрещающий вывод пользователю сообщений массива "СообщенияПользователю".

Текст модуля:

Процедура ПередЗаписьюСправочника(Источник, Отказ) Экспорт
	ТолькоПредопределенные = ПолучитьЗначениеПоКлючу(Источник.ДополнительныеСвойства,"ТолькоПредопределенные",Тип("Булево"));
	Если ТолькоПредопределенные и не (Источник.Предопределенный или Источник.ПометкаУдаления) Тогда
		Сообщить("Ошибка! В справочнике доступна запись только предопределенных элементов!");
		Отказ = Истина;
	Иначе
		ОбработатьЗаписьОбъекта(Источник,Отказ,"Справочник");
	КонецЕсли; 
КонецПроцедуры

Процедура ПередЗаписьюДокумента(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
	ОбработатьЗаписьОбъекта(Источник,Отказ,"Документ");
КонецПроцедуры

Процедура ПередЗаписьюЗадачи(Источник, Отказ) Экспорт
	ОбработатьЗаписьОбъекта(Источник,Отказ,"Задача");
КонецПроцедуры

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

 

 

 

 

 

 

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

Универсальный механизм События записиси объекта

См. также

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

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    2935    Abysswalker    7    

43

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

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    5789    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    47275    dimanich70    83    

167

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7063    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    58737    atdonya    31    

69

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8797    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Agapov_Stas 1 30.12.14 10:14 Сейчас в теме
И чем это отличается от стандартных механизмов проверки заполнения? В стандартные процедуры проверки передается структура реквизитов для проверки и все корректно проверяется
3. alex271 371 30.12.14 11:35 Сейчас в теме
(1) Agapov_Stas,
Объясняю.
Стандартные механизмы требуют гораздо больше кода, а в данном случае все минимизировано.
Обработка дополнительных свойств осуществляется всего тремя подписками на события и по существу одной процедурой.
2. lex27119 30.12.14 11:33 Сейчас в теме
Механизм интересный. Я понял, тут вся соль в том, что события обрабатываются для всех объектов. Интересная задумка
Для отправки сообщения требуется регистрация/авторизация