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