Если требуется связь Организация-Склад один к одному. УНФ 3.0

У клиента на каждую организацию используется только один склад.

Он попросил проконтролировать ошибки пользователей, которые возникают, когда выбирается не тот склад.

Основной склад получаю функцией:

Функция ОсновнойСкладОрганизации(Организация) Экспорт
	З = Новый Запрос(
	"ВЫБРАТЬ
	|	СтруктурныеЕдиницы.Ссылка КАК Ссылка
	|ИЗ
	|	Справочник.СтруктурныеЕдиницы КАК СтруктурныеЕдиницы
	|ГДЕ
	|	СтруктурныеЕдиницы.ТипСтруктурнойЕдиницы = ЗНАЧЕНИЕ(Перечисление.ТипыСтруктурныхЕдиниц.Склад)
	|	И СтруктурныеЕдиницы.Организация = &Организация
	|	И НЕ СтруктурныеЕдиницы.ПометкаУдаления");
	З.УстановитьПараметр("Организация", Организация);
	Выборка = З.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		Возврат Выборка.Ссылка;
	КонецЕсли;
КонецФункции

Для некоторых документов нужно исключить контроль (заказы):

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

Подстановка склада при выборе организации

Сделал, чтобы при выборе организации автоматически подставлялся нужный склад.

Расширение для модуля ДокументыУНФ:

&Вместо("ОрганизацияПриИзменении")
Процедура дор_ОрганизацияПриИзменении(Форма, Объект)
	ПродолжитьВызов(Форма, Объект);
	
	//Осипов - подставляем склад по организации  2024-02-14
	Если дор_Сервер.ИспользоватьСоответствиеСкладаИОрганизации(Объект.Ссылка) И 
		ЗначениеЗаполнено(Объект.Организация) 
		Тогда
		Объект.СтруктурнаяЕдиница = дор_Сервер.ОсновнойСкладОрганизации(Объект.Организация);
	КонецЕсли;

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

Контроль соответствия склада организации

Сделал контроль, чтобы у документов склад соответствовал организации во всех документах, где есть склад. При проведении контролируется соответствие.

Расширение для модуля ДокументыУНФПереопределяемый:


&Вместо("ПередЗаписью")
Процедура дор_ПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения)
	ПродолжитьВызов(Источник, Отказ, РежимЗаписи, РежимПроведения);
	//Осипов - подставляем склад по организации  2024-02-14
	Если НЕ Отказ И
		РежимЗаписи = РежимЗаписиДокумента.Проведение И
		дор_Сервер.ИспользоватьСоответствиеСкладаИОрганизации(Источник.Ссылка)И 
		ЗначениеЗаполнено(Источник.Организация) И
		ЗначениеЗаполнено(Источник.СтруктурнаяЕдиница) И
		ЗначениеЗаполнено(Источник.СтруктурнаяЕдиница.Организация) И
		Источник.СтруктурнаяЕдиница.Организация <> Источник.Организация Тогда
		Сообщить("Организация: " + Источник.Организация + " не соответствует складу: " + Источник.СтруктурнаяЕдиница + " организация склада: " + Источник.СтруктурнаяЕдиница.Организация);
		Отказ = истина;
	КонецЕсли;
КонецПроцедуры

Тут важно, что по одной организации может быть несколько складов.

Среда: УНФ 3.0.4.88. Объем 1 час.

fixin

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

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

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

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