Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
18 фев 2026, 06:21

Базовая АБП

Автор Rehala, Сегодня в 01:32

0 Пользователей и 1 гость просматривают эту тему.

Rehala

Док.
ВыполнениеЭтапаПроизводства
Отбор.Статус(Активная)



ЗаполнитьМатериалы:
&НаСервере
Процедура ЗаполнитьМатериалы()
Если Объект.Изделия.Количество() = 0 Или Не ЗначениеЗаполнено(Объект.Этап) Тогда
Возврат;
КонецЕсли;
Объект.ЗатраченныеМатериалы.Очистить();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МатериалыСпецификации.Материал КАК Материал,
| СУММА(Изделия.Количество * МатериалыСпецификации.Количество / ЕСТЬNULL(СпецификацияВладельца.Количество, 1)) КАК Количество
|ИЗ
| Документ.ВыполнениеЭтапаПроизводства.Изделия КАК Изделия
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Спецификация.Материалы КАК МатериалыСпецификации
| ПО (Изделия.Спецификация = МатериалыСпецификации.Ссылка)
| И (МатериалыСпецификации.Этап = &ТекущийЭтап)
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Спецификация КАК СпецификацияВладельца
| ПО (Изделия.Спецификация = СпецификацияВладельца.Ссылка)
|ГДЕ
| Изделия.Ссылка = &СсылкаНаДокумент
|
|СГРУППИРОВАТЬ ПО
| МатериалыСпецификации.Материал";
Запрос.УстановитьПараметр("СсылкаНаДокумент", Объект.Ссылка);
Запрос.УстановитьПараметр("ТекущийЭтап", Объект.Этап);
ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выгрузить(); 
Объект.ЗатраченныеМатериалы.Загрузить(ВыборкаДетальныеЗаписи);
КонецПроцедуры

ЗаполнитьВидыРабот:
&НаСервере
Процедура ЗаполнитьВидыРабот()
Если Объект.Изделия.Количество() = 0 Или Не ЗначениеЗаполнено(Объект.Этап) Тогда
Возврат;
КонецЕсли;
Объект.ВидыРабот.Очистить();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТрудозатратыСпецификации.ВидРаботы КАК ВидРаботы,
| СУММА(Изделия.Количество * ТрудозатратыСпецификации.ВремяВыполнения / ЕСТЬNULL(СпецификацияВладельца.Количество, 1)) КАК ВремяВыполнения
|ИЗ   
|Документ.ВыполнениеЭтапаПроизводства.Изделия КАК Изделия
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Спецификация.Трудозатраты КАК ТрудозатратыСпецификации
| ПО (Изделия.Спецификация = ТрудозатратыСпецификации.Ссылка)
| И (ТрудозатратыСпецификации.Этап = &ТекущийЭтап)
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Спецификация КАК СпецификацияВладельца
| ПО (Изделия.Спецификация = СпецификацияВладельца.Ссылка)
|
|ГДЕ
| Изделия.Ссылка = &СсылкаНаДокумент
|
|СГРУППИРОВАТЬ ПО
| ТрудозатратыСпецификации.ВидРаботы";
Запрос.УстановитьПараметр("СсылкаНаДокумент", Объект.Ссылка);
Запрос.УстановитьПараметр("ТекущийЭтап", Объект.Этап);
ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выгрузить(); 
Объект.ВидыРабот.Загрузить(ВыборкаДетальныеЗаписи);
КонецПроцедуры

Выводить результат:

#Область вызов процедур
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЗаполнитьМатериалы();
ЗаполнитьВидыРабот();
КонецПроцедуры

&НаКлиенте
Процедура ИзделияПриИзменении(Элемент)
ЗаполнитьМатериалы();
ЗаполнитьВидыРабот();
КонецПроцедуры

&НаКлиенте
Процедура ЭтапПриИзменении(Элемент)
ЗаполнитьМатериалы();   
ЗаполнитьВидыРабот();
КонецПроцедуры
#КонецОбласти



Док:
ЗакупкаМатериалов
ПеремещениеМатериалов
РасходнаяНакладная

             
Регистры накопления:
ЗапасыНаСкладахИзмерения: Номенклатура, Склад, Спецификация   
Ресурсы:Количество
   
ЦитироватьРегистраторы:Все 4 документа кроме ЗаказыНаПроизводство

Док ВыполнениеЭтапаПроизводства:

Движения:
Конструктор движений:
1) + Приход -> ТабЧасть ( Изделия )
1.ТекСтрокаТзделия.Изделие
2.СкладПоступления
3.ТекСтрокаИзделия.Спецификация
4.ТекСтрокаИзделия.Количество
2) - Расход -> ТабЧасть ( ЗатраченныеМатериалы )
1.ТекСтрокаЗатраченныеМатериалы.Материал
2.СкладСписания
3.
4.ТекСтрокаЗатраченныеМатериалы.Количество

                               
ЦитироватьИсправить код сформированный конструктором:
Процедура ОбработкаПроведения(Отказ, Режим)
     Если СтатусПроизводства = Перечисления.СтатусПроизводства.Завершен Тогда   
          << . . . >>               
     КонецЕсли;
     Движения.ЗапасыНаСкладах.Записывать = Истина;   
      << . . . >>



Cистема уведомляет пользователя и не позволяет завершить выпуск:
<< . . . >>
    Движения.Записать();
Запрос = Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
| ЗапасыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ЗапасыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ЗапасыНаСкладах.Остатки(
| ,
| Склад = &Склад
| И Номенклатура В (&МассивМатериалов)) КАК ЗапасыНаСкладахОстатки
|ГДЕ
| ЗапасыНаСкладахОстатки.КоличествоОстаток < 0";   
Запрос.УстановитьПараметр("Склад", СкладСписания);
Запрос.УстановитьПараметр("МассивМатериалов",ЗатраченныеМатериалы.ВыгрузитьКолонку("Материал"));
РезультатЗапроса=Запрос.Выполнить();

Если Не РезультатЗапроса.Пустой() Тогда
Отказ=Истина;
Выборка=РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить("На складе "+СкладСписания+" не хватает "+Выборка.КоличествоОстаток*(-1)+
                                               " шт, материала "+Выборка.Номенклатура);
КонецЦикла;
КонецЕсли;

Теги: abp 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск