Автоматическое завершение этапов производства

1. user2069633 07.06.24 17:07 Сейчас в теме
Всем доброго времени года
Помогите начинающему

есть потребность завершать этапы производства в ERP программно, то есть автоматически.

Вот таким не сложным кодом устанавливаю статус документа ЭтапПроизводства2_2 в состояние "Завершен".

ЭтапОбъект = Этап.ПолучитьОбъект();
ЗавершениеЭтапаВозможно = ЭтапОбъект.УстановитьСтатус("Завершен", Неопределено);

Если ЗавершениеЭтапаВозможно Тогда

Попытка

ЭтапОбъект.Записать(РежимЗаписиДокумента.Проведение);

Исключение

КонецПопытки;

КонецЕсли;

По отладке видно, что нужный статус устанавливается. Объект перечитывал, статус установлен.

Но если потом войти в документ этапа, там будет прежний статус

Подскажите куда копать?
По теме из базы знаний
Найденные решения
3. user2069633 10.06.24 16:57 Сейчас в теме
Решил проблему.
Нужно немного доработать процедуру ОбработатьДокументОтложенно

Она находится в модуле менеджера документ ЭтпПроизводства2_2
В ней есть участок кода ограниченный НачатьТранзакцию() и ЗавершитьТранзакцию()
ближе к концу вставил вот такой код

Если ДокументОбъект.УстановитьСтатус("Завершен", Неопределено) Тогда
	ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;


И все, если этап производства можно закрывать, он закроется

ниже вес код процедуры:

Процедура TW_ДоработкиОбработатьДокументОтложенно(Задание, ПропуститьЗадание, ДополнительныеДанные)
	
	УстановитьПривилегированныйРежим(Истина);
	
	Ссылка = Задание.ЭтапПроизводства;
	ДанныеОпераций = Документы.ПроизводственнаяОперация2_2.ДанныеВыполненныхОпераций(Ссылка);
	
	ОшибкаУстановкиБлокировки = Ложь;
	ТребуетсяЗаполнитьПоОперациям = Ложь;
	НачатьТранзакцию();
	Попытка
		
		ДанныеЭтапа = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "Распоряжение,ПартияПроизводства");
		
		ОшибкаУстановкиБлокировки = Истина;
		Блокировка = Новый БлокировкаДанных;
		ЭлементБлокировки = Блокировка.Добавить("Документ.ЭтапПроизводства2_2");
		ЭлементБлокировки.УстановитьЗначение("Распоряжение", ДанныеЭтапа.Распоряжение);
		ЭлементБлокировки.УстановитьЗначение("ПартияПроизводства", ДанныеЭтапа.ПартияПроизводства);
		ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка);
		Блокировка.Заблокировать();
		ОшибкаУстановкиБлокировки = Ложь;
		
		Если Задание.ЗаполнитьПоОперациям И ТребуетсяОтразитьВыполнениеОпераций(Ссылка) Тогда
			
			ОшибкаУстановкиБлокировки = Истина;
			ЗаблокироватьДанныеДляРедактирования(Ссылка);
			ОшибкаУстановкиБлокировки = Ложь;
			
			ТребуетсяЗаполнитьПоОперациям = Истина;
			
			ДокументОбъект = Ссылка.ПолучитьОбъект();
			ДокументОбъект.ЗаполнитьПоОперациям(ДанныеОпераций);
			
			Если ДокументОбъект.ПроверитьЗаполнение() Тогда
				ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
			Иначе
				ДокументОбъект.Прочитать();
				ДокументОбъект.ТребуетсяЗаполнитьПоОперациям = Истина;
				ДокументОбъект.ОбменДанными.Загрузка = Истина;
				ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
			КонецЕсли; 
			
			Если ДокументОбъект.УстановитьСтатус("Завершен", Неопределено) Тогда
				ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
			КонецЕсли;
			
		КонецЕсли; 
		
		ЗафиксироватьТранзакцию();
		
	Исключение
		
		ОтменитьТранзакцию();
		
		Если ОшибкаУстановкиБлокировки Тогда
			ПропуститьЗадание = Истина;
		ИначеЕсли ТребуетсяЗаполнитьПоОперациям Тогда
			ДокументОбъект = Ссылка.ПолучитьОбъект();
			ДокументОбъект.ТребуетсяЗаполнитьПоОперациям = Истина;
			ДокументОбъект.ОбменДанными.Загрузка = Истина;
			ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
		КонецЕсли;
		
		ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		
	КонецПопытки;
	
	Если Задание.ОбновитьСостояние Тогда
		РегистрыСведений.СостоянияЭтаповПроизводства.ОбновитьСостояниеОпераций(Ссылка);
	КонецЕсли;
	
	ПродолжитьВызов(Задание, ПропуститьЗадание, ДополнительныеДанные);
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. romulanin 10.06.24 11:16 Сейчас в теме
(1)
Попытка

ЭтапОбъект.Записать(РежимЗаписиДокумента.Проведение);

Исключение

КонецПопытки;

КонецЕсли
Показать
;


видимо попытка в исключение падает
3. user2069633 10.06.24 16:57 Сейчас в теме
Решил проблему.
Нужно немного доработать процедуру ОбработатьДокументОтложенно

Она находится в модуле менеджера документ ЭтпПроизводства2_2
В ней есть участок кода ограниченный НачатьТранзакцию() и ЗавершитьТранзакцию()
ближе к концу вставил вот такой код

Если ДокументОбъект.УстановитьСтатус("Завершен", Неопределено) Тогда
	ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;


И все, если этап производства можно закрывать, он закроется

ниже вес код процедуры:

Процедура TW_ДоработкиОбработатьДокументОтложенно(Задание, ПропуститьЗадание, ДополнительныеДанные)
	
	УстановитьПривилегированныйРежим(Истина);
	
	Ссылка = Задание.ЭтапПроизводства;
	ДанныеОпераций = Документы.ПроизводственнаяОперация2_2.ДанныеВыполненныхОпераций(Ссылка);
	
	ОшибкаУстановкиБлокировки = Ложь;
	ТребуетсяЗаполнитьПоОперациям = Ложь;
	НачатьТранзакцию();
	Попытка
		
		ДанныеЭтапа = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "Распоряжение,ПартияПроизводства");
		
		ОшибкаУстановкиБлокировки = Истина;
		Блокировка = Новый БлокировкаДанных;
		ЭлементБлокировки = Блокировка.Добавить("Документ.ЭтапПроизводства2_2");
		ЭлементБлокировки.УстановитьЗначение("Распоряжение", ДанныеЭтапа.Распоряжение);
		ЭлементБлокировки.УстановитьЗначение("ПартияПроизводства", ДанныеЭтапа.ПартияПроизводства);
		ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка);
		Блокировка.Заблокировать();
		ОшибкаУстановкиБлокировки = Ложь;
		
		Если Задание.ЗаполнитьПоОперациям И ТребуетсяОтразитьВыполнениеОпераций(Ссылка) Тогда
			
			ОшибкаУстановкиБлокировки = Истина;
			ЗаблокироватьДанныеДляРедактирования(Ссылка);
			ОшибкаУстановкиБлокировки = Ложь;
			
			ТребуетсяЗаполнитьПоОперациям = Истина;
			
			ДокументОбъект = Ссылка.ПолучитьОбъект();
			ДокументОбъект.ЗаполнитьПоОперациям(ДанныеОпераций);
			
			Если ДокументОбъект.ПроверитьЗаполнение() Тогда
				ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
			Иначе
				ДокументОбъект.Прочитать();
				ДокументОбъект.ТребуетсяЗаполнитьПоОперациям = Истина;
				ДокументОбъект.ОбменДанными.Загрузка = Истина;
				ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
			КонецЕсли; 
			
			Если ДокументОбъект.УстановитьСтатус("Завершен", Неопределено) Тогда
				ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
			КонецЕсли;
			
		КонецЕсли; 
		
		ЗафиксироватьТранзакцию();
		
	Исключение
		
		ОтменитьТранзакцию();
		
		Если ОшибкаУстановкиБлокировки Тогда
			ПропуститьЗадание = Истина;
		ИначеЕсли ТребуетсяЗаполнитьПоОперациям Тогда
			ДокументОбъект = Ссылка.ПолучитьОбъект();
			ДокументОбъект.ТребуетсяЗаполнитьПоОперациям = Истина;
			ДокументОбъект.ОбменДанными.Загрузка = Истина;
			ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
		КонецЕсли;
		
		ВызватьИсключение ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		
	КонецПопытки;
	
	Если Задание.ОбновитьСостояние Тогда
		РегистрыСведений.СостоянияЭтаповПроизводства.ОбновитьСостояниеОпераций(Ссылка);
	КонецЕсли;
	
	ПродолжитьВызов(Задание, ПропуститьЗадание, ДополнительныеДанные);
КонецПроцедуры
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот