Не отключаемая уникальность кода транспортного средства. УНФ 3.0

Дорабатывал справочник транспортных средств для клиента в УНФ. Столкнулся с тем, что в качестве кода справочника используется регистрационный номер, а он не всегда заранее известен. Т.е. реквизит код длиной 16 символов — называется в форме «Регистрационный номер».

Не заполнять код нельзя — не дает сохранять. А прочерк поставить тоже не получится — контролируется уникальность кода.

Отключить заполненность кода можно программно:

&Вместо("ОбработкаПроверкиЗаполнения")
Процедура БС_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
	
	//Разрешаем записывать без наименования
	Иск = ПроверяемыеРеквизиты.Найти("Код");
	Если Иск <> Неопределено Тогда
		ПроверяемыеРеквизиты.Удалить(Иск);
	КонецЕсли;
	
	ПродолжитьВызов(Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры

Но это не решает проблему уникальности кода, его отключить нельзя ни программно, ни расширением.

Тогда я решил, что код будет кодом и заполняться автоматом:


&После("ПередЗаписью")
Процедура БС_ПередЗаписью(Отказ) 
	//Чтобы отключить контроль кодов
	Если СокрЛП(ЭтотОбъект.Код) = "" Тогда
		УстановитьНовыйКод("ТС");
	КонецЕсли;
КонецПроцедуры

Завел отдельное поле «Регистрационный номер» длиной 16 символов — именно туда пользователь может прописывать регистрационный номер.

А в качестве представления используется наименование:

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

&Вместо("ОбработкаПолученияПолейПредставления")
Процедура БС_ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
	СтандартнаяОбработка = ложь;
	Поля.Добавить("Наименование");
	//Поля.Добавить("Код");
КонецПроцедуры

Которое формируется так:

&НаКлиенте
&Вместо("СформироватьНаименование")
Процедура БС_СформироватьНаименование()
	//Осипов - отключаем автоматическое формирование наименования, наименование вводим вручную
	Если Объект.Наименование <> "" Тогда
		Возврат;
	КонецЕсли;              
	
	Объект.Наименование = Объект.РегистрационныйНомер;
	
	Возврат; //не формируем наименование вручную
	ПродолжитьВызов();
КонецПроцедуры

Среда: УНФ 3.0.5.164 Объем: 0.6 час

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *