Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
9.6 kB
1
Indexable
Never
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	// ДВИЖЕНИЯ ПО РЕГИСТРУ УПРАВЛЕНЧЕСКИЙ (СТАРАЯ МЕТОДИКА ПРОВЕДЕНИЯ)

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

		// Проводка отражения продажи товара
		Проводка = Движения.Управленческий.Добавить();
		Проводка.Период = Дата;
		Проводка.СчетДт = ПланыСчетов.Управленческий.Покупатели;		
		Проводка.СчетКт = ПланыСчетов.Управленческий.ПрибылиУбытки;		
		
		Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Выборка.Номенклатура;
		Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.СвойстваНоменклатуры] = Выборка.СвойствоНоменклатуры;
		
		Проводка.Сумма = Выборка.СуммаВДокументе;
		
	КонецЦикла;

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