Untitled

mail@pastecode.io avatarunknown
plain_text
23 days ago
9.4 kB
0
Indexable
Never
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	Движения.Управленческий.Записывать = Истина;
	Движения.Управленческий.Записать();
	
	Блокировка = Новый БлокировкаДанных;
	ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.Управленческий");
	ЭлементБлокировки.УстановитьЗначение("Счет", ПланыСчетов.Управленческий.Товары);
	ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
	ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
	ЭлементБлокировки.ИспользоватьИзИсточникаДанных(ПланыВидовХарактеристик.ВидыСубконто.Номенклатура, "Номенклатура");
	ЭлементБлокировки.ИспользоватьИзИсточникаДанных(ПланыВидовХарактеристик.ВидыСубконто.ИнвентарныеНомера, "ИнвентарныйНомер");
	Блокировка.Заблокировать();
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
		|	РасходнаяНакладнаяСписокНоменклатуры.ИнвентарныйНомер КАК ИнвентарныйНомер,
		|	СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
		|	СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма
		|ПОМЕСТИТЬ вт_СписокНоменклатуры
		|ИЗ
		|	Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
		|ГДЕ
		|	РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
		|
		|СГРУППИРОВАТЬ ПО
		|	РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
		|	РасходнаяНакладнаяСписокНоменклатуры.ИнвентарныйНомер
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Номенклатура,
		|	ИнвентарныйНомер
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	вт_СписокНоменклатуры.Номенклатура КАК Номенклатура,
		|	вт_СписокНоменклатуры.Номенклатура.Представление КАК НоменклатураПредставление,
		|	вт_СписокНоменклатуры.ИнвентарныйНомер КАК ИнвентарныйНомер,
		|	вт_СписокНоменклатуры.ИнвентарныйНомер.Представление КАК ИнвентарныйНомерПредставление,
		|	вт_СписокНоменклатуры.Количество КАК Количество,
		|	вт_СписокНоменклатуры.Сумма КАК Сумма,
		|	ЕСТЬNULL(УправленческийОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
		|	ЕСТЬNULL(УправленческийОстатки.СуммаОстаток, 0) КАК СуммаОстаток
		|ИЗ
		|	вт_СписокНоменклатуры КАК вт_СписокНоменклатуры
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.Остатки(
		|				&МоментВремени,
		|				Счет = &СчетТовары,
		|				&Субконто,
		|				(Субконто1, Субконто2) В
		|					(ВЫБРАТЬ
		|						вт_СписокНоменклатуры.Номенклатура КАК Номенклатура,
		|						вт_СписокНоменклатуры.ИнвентарныйНомер КАК ИнвентарныйНомер
		|					ИЗ
		|						вт_СписокНоменклатуры КАК вт_СписокНоменклатуры)) КАК УправленческийОстатки
		|		ПО вт_СписокНоменклатуры.Номенклатура = УправленческийОстатки.Субконто1
		|			И вт_СписокНоменклатуры.ИнвентарныйНомер = УправленческийОстатки.Субконто2";
	
	Субконто = Новый Массив;
	Субконто.Добавить(ПланыВидовХарактеристик.ВидыСубконто.Номенклатура);
	Субконто.Добавить(ПланыВидовХарактеристик.ВидыСубконто.ИнвентарныеНомера);
	
	Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
	Запрос.УстановитьПараметр("Ссылка", Ссылка);
	Запрос.УстановитьПараметр("Субконто", Субконто);
	Запрос.УстановитьПараметр("СчетТовары", ПланыСчетов.Управленческий.Товары);
	
	РезультатЗапроса = Запрос.Выполнить();
	Выборка = РезультатЗапроса.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		
		Если Выборка.Количество > Выборка.КоличествоОстаток Тогда
			Отказ = Истина;
			Сообщение = Новый СообщениеПользователю;
			Сообщение.Текст = СтрШаблон("Недостаточно номенклатуры %1 по инв. номеру %2 в количестве %3",
			Выборка.НоменклатураПредставление, Выборка.ИнвентарныйНомерПредставление, Выборка.Количество - Выборка.КоличествоОстаток);
			Сообщение.Сообщить();
		КонецЕсли;
		
		Если Отказ Тогда
			Продолжить;
		КонецЕсли;
		
		Движение = Движения.Управленческий.Добавить();
		Движение.Период = Дата;
		Движение.СчетДт = ПланыСчетов.Управленческий.ПрибылиУбытки;
		Движение.СчетКт = ПланыСчетов.Управленческий.Товары;
		Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Выборка.Номенклатура;
		Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.ИнвентарныеНомера] = Выборка.ИнвентарныйНомер;
		Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Сотрудники] = Сотрудник; 
		
		Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Выборка.Номенклатура;
		Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.ИнвентарныеНомера] = Выборка.ИнвентарныйНомер;
		
		Движение.КоличествоКт = Выборка.Количество;
		Движение.Сумма = ?(Выборка.Количество = Выборка.КоличествоОстаток, Выборка.СуммаОстаток,
						Выборка.Количество / Выборка.КоличествоОстаток * Выборка.СуммаОстаток);   
						
		Движение = Движения.Управленческий.Добавить();
		Движение.Период = дата;
		Движение.СчетДт = ПланыСчетов.Управленческий.Покупатели;
		Движение.СчетКт = ПланыСчетов.Управленческий.ПрибылиУбытки;
		Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Выборка.Номенклатура;
		Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.ИнвентарныеНомера] = Выборка.ИнвентарныйНомер;
		Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Сотрудники] = Сотрудник; 
		Движение.Сумма = Выборка.Сумма;
		
	КонецЦикла;
	
	
	
КонецПроцедуры