Записки программиста 1с

Движение по регистру

Движение по регистру

процедура в модуле формы

&НаСервере
Процедура ЭтапыПроизводстваПриИзмененииНаСервере()
ДокументОбъект=РеквизитФормыВЗначение(«Объект»);
ДокументОбъект.ОбработкаПроведенияПриход();
ДокументОбъект.ОбработкаПроведенияРасход();

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

&НаКлиенте
Процедура ЭтапыПроизводстваПриИзменении(Элемент)
Если Объект.ЭтапыПроизводства=ПредопределенноеЗначение(«Перечисление.ЭтапыПроизводтсва.Завершен») Тогда

ЭтапыПроизводстваПриИзмененииНаСервере();

КонецЕсли;
КонецПроцедуры

процедура в модуле объекта документа

Процедура ОбработкаПроведенияПриход()Экспорт
	//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
	// Данный фрагмент построен конструктором.
	// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

	// регистр ОстаткиНаСкладах Приход
	Движения.ОстаткиНаСкладах.Записывать = Истина;
	//Для Каждого ТекСтрокаЗатраченныеМатериалы Из ЗатраченныеМатериалы Цикл
		Движение = Движения.ОстаткиНаСкладах.Добавить();
		Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
		Движение.Период = Дата;
		Движение.Номенклатура = ГотоваяПродукция;
		Движение.Склад = Справочники.Склады.ГотовойПродукции;
		Движение.Количество = 1;
		Движение.Сумма = 100;
		Движения.Записать();
		//КонецЦикла;

	//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры


Процедура ОбработкаПроведенияРасход()Экспорт
	//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
	// Данный фрагмент построен конструктором.
	// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *