Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
6.6 kB
1
Indexable
Never
	// ДВИЖЕНИЯ ПО РЕГИСТРУ ЗАКАЗЫ ПОКУПАТЕЛЕЙ (НОВАЯ МЕТОДИКА ПРОВЕДЕНИЯ)
	
	Движения.ЗаказыПокупателей.Записывать = Истина;
	Движения.ЗаказыПокупателей.БлокироватьДляИзменения = Истина;
	
	// Получение данных для формирования движений
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
	|	СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
	|	ПриходнаяНакладнаяСписокНоменклатуры.ЗаказПокупателя КАК ЗаказПокупателя,
	|	СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма
	|ПОМЕСТИТЬ ВТ_СписокНоменклатуры
	|ИЗ
	|	Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры
	|ГДЕ
	|	ПриходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
	|
	|СГРУППИРОВАТЬ ПО
	|	ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура,
	|	ПриходнаяНакладнаяСписокНоменклатуры.ЗаказПокупателя
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Номенклатура,
	|	ЗаказПокупателя
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ВТ_СписокНоменклатуры.Номенклатура КАК Номенклатура,
	|	ВТ_СписокНоменклатуры.Количество КАК Количество,
	|	ВТ_СписокНоменклатуры.Сумма КАК Сумма,
	|	ВТ_СписокНоменклатуры.ЗаказПокупателя КАК ЗаказПокупателя
	|ИЗ
	|	ВТ_СписокНоменклатуры КАК ВТ_СписокНоменклатуры";
	
	Запрос.УстановитьПараметр("Ссылка", Ссылка);
	
	ВыборкаТЧ = Запрос.Выполнить().Выбрать(); 
	
	// Формирование движений и запись в регистр
	Пока ВыборкаТЧ.Следующий() Цикл
		Движение = Движения.ЗаказыПокупателей.ДобавитьРасход();
		Движение.Период = Дата;
		Движение.Номенклатура = ВыборкаТЧ.Номенклатура;
		Движение.ЗаказПокупателя = ВыборкаТЧ.ЗаказПокупателя;
		Движение.Количество = ВыборкаТЧ.Количество;
	КонецЦикла;
	
	Движения.Записать();
	
	// Контроль появления отрицательных остатков в регистре
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ЗаказыПокупателейОстатки.Номенклатура.Представление КАК НоменклатураПредставление,
	|	ЗаказыПокупателейОстатки.ЗаказПокупателя.Представление КАК ЗаказПокупателяПредставление,
	|	-ЗаказыПокупателейОстатки.КоличествоОстаток КАК Превышение
	|ИЗ
	|	РегистрНакопления.ЗаказыПокупателей.Остатки(
	|			&МоментВремени,
	|			(Номенклатура, ЗаказПокупателя) В
	|				(ВЫБРАТЬ
	|					ВТ_СписокНоменклатуры.Номенклатура КАК Номенклатура,
	|					ВТ_СписокНоменклатуры.ЗаказПокупателя КАК ЗаказПокупателя
	|				ИЗ
	|					ВТ_СписокНоменклатуры КАК ВТ_СписокНоменклатуры)) КАК ЗаказыПокупателейОстатки
	|ГДЕ
	|	ЗаказыПокупателейОстатки.КоличествоОстаток < 0";
	
	Запрос.УстановитьПараметр("МоментВремени", Новый Граница(МоментВремени()));
	Результат = Запрос.Выполнить();   	
	Если Не Результат.Пустой() Тогда  			
		Выборка = Результат.Выбрать();
		Пока Выборка.Следующий() Цикл 			
			Сообщение = Новый СообщениеПользователю;
			Сообщение.Текст = СтрШаблон ("Превышение остатка по номенклатуре %1 заказу %2 в количестве %3", 
				Выборка.НоменклатураПредставление, Выборка.ЗаказПокупателяПредставление, Выборка.Превышение);			
			Сообщение.Сообщить();     			
		КонецЦикла;
		
		Отказ = Истина;
		Возврат;
	КонецЕсли;	
	
	// ДВИЖЕНИЯ ПО РЕГИСТРУ ОСТАТКИ НОМЕНКЛАТУРЫ
	Движения.ОстаткиНоменклатуры.Записывать = Истина;
	
	ВыборкаТЧ.Сбросить(); // используем ту же выборку, что использовали для заполнения движений по регистру Заказы Номенклатуры
	Пока ВыборкаТЧ.Следующий() Цикл
		Движение = Движения.ОстаткиНоменклатуры.ДобавитьПриход();
		Движение.Период = Дата;
		Движение.ЗаказПокупателя = ВыборкаТЧ.ЗаказПокупателя;
		Движение.Номенклатура = ВыборкаТЧ.Номенклатура;
		Движение.Количество = ВыборкаТЧ.Количество;
		Движение.Сумма = ВыборкаТЧ.Сумма;
	КонецЦикла;