Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
7.3 kB
0
Indexable
Never
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	
	// Согласно условию закупка производится на основании Заказа покупателя, реализуем ввод на основании
	Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
		ЗаказПокупателя = ДанныеЗаполнения.Ссылка;
		Для Каждого ТекСтрокаСписокНоменклатуры Из ДанныеЗаполнения.СписокНоменклатуры Цикл
			НоваяСтрока = СписокНоменклатуры.Добавить();
			НоваяСтрока.Количество = ТекСтрокаСписокНоменклатуры.Количество;
			НоваяСтрока.Номенклатура = ТекСтрокаСписокНоменклатуры.Номенклатура;
		КонецЦикла;
	КонецЕсли;
	
КонецПроцедуры

Процедура ОбработкаПроведенияОУ(Отказ)
	
	// ДВИЖЕНИЯ ПО РЕГИСТРУ ОСТАТКИ НОМЕНКЛАТУРЫ (СТАРАЯ МЕТОДИКА ПРОВЕДЕНИЯ)
	
	Движения.ОстаткиНоменклатуры.Записывать = Истина;
	Движения.ОстаткиНоменклатуры.Записать();
	
	// Установка блокировки данных в регистре по Заказу покупателя документа и списку номенклатур табличной части
	Блокировка = Новый БлокировкаДанных;
	ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
	ЭлементБлокировки.УстановитьЗначение("ЗаказПокупателя", ЗаказПокупателя);
	ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
	ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
	ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
	Блокировка.Заблокировать();                                   
	
	// Получение данных для формирования движений
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
	|	СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество
	|ПОМЕСТИТЬ ВТ_СписокНоменклатуры                              
	|ИЗ
	|	Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
	|ГДЕ
	|	РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
	|
	|СГРУППИРОВАТЬ ПО
	|	РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Номенклатура
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ВТ_СписокНоменклатуры.Номенклатура КАК Номенклатура,
	|	ВТ_СписокНоменклатуры.Номенклатура.Представление КАК НоменклатураПредставление,
	|	ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
	|	ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) КАК СуммаОстаток,
	|	ВТ_СписокНоменклатуры.Количество КАК КоличествоВДокументе
	|ИЗ
	|	ВТ_СписокНоменклатуры КАК ВТ_СписокНоменклатуры
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
	|				&МоментВремени,
	|				ЗаказПокупателя = &ЗаказПокупателя
	|					И Номенклатура В
	|						(ВЫБРАТЬ
	|							ВТ_СписокНоменклатуры.Номенклатура КАК Номенклатура
	|						ИЗ
	|							ВТ_СписокНоменклатуры КАК ВТ_СписокНоменклатуры)) КАК ОстаткиНоменклатурыОстатки
	|		ПО ВТ_СписокНоменклатуры.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура";
	
	Запрос.УстановитьПараметр("Ссылка", Ссылка);
	Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
	Запрос.УстановитьПараметр("ЗаказПокупателя", ЗаказПокупателя);
	
	// Обход результатов запроса 
	Выборка = Запрос.Выполнить().Выбрать();
	
	Пока Выборка.Следующий() Цикл
		Превышение = Выборка.КоличествоВДокументе - Выборка.КоличествоОстаток;
		Если Превышение > 0 Тогда 		
			// Контроль наличия номенклатуры
			Сообщение = Новый СообщениеПользователю;
			Сообщение.Текст = СтрШаблон("Превышение остатка по номенклатуре %1 в количестве %2", 
				Выборка.НоменклатураПредставление, Превышение);						
			Сообщение.Сообщить();
			
			Отказ = Истина;			
		КонецЕсли;
		
		Если Отказ Тогда
			Продолжить;
		КонецЕсли;
		
		// Движение по регистру Остатки номенклатуры
		Движение = Движения.ОстаткиНоменклатуры.ДобавитьРасход();
		Движение.Период = Дата;
		Движение.ЗаказПокупателя = ЗаказПокупателя;
		Движение.Номенклатура = Выборка.Номенклатура;
		Движение.Количество = Выборка.КоличествоВДокументе;
		Движение.Сумма = Выборка.КоличествоВДокументе / Выборка.КоличествоОстаток * Выборка.СуммаОстаток;
	КонецЦикла;
	
КонецПроцедуры