Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
10 kB
0
Indexable
Процедура ОбработкаПроведенияБУ(Отказ)

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