Не присваивается значение перечисления полю формы документа

1. crazyveta 11.10.24 07:13 Сейчас в теме
В форме документа Производство прописала следующий код:
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	Если Объект.Статус = Перечисления.СтатусыПроизводства.Ожидает Тогда
		Структура = ПроверкаСтатуса(Объект.Ингредиенты);
		Объект.Статус = Структура.Статус;
		Элементы.Статус.ТолькоПросмотр = Структура.Просмотр;
	КонецЕсли;
КонецПроцедуры

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

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

Интересный моментик: код работает на помеченных на удаление объектах, а на остальных нет
По теме из базы знаний
Найденные решения
4. spacecraft 11.10.24 07:47 Сейчас в теме
(1) если нет далее логики изменения статуса, то долно отрабатывать в случае "двойной" записи из формы не закрывая форму документа.
Не тот обработчик использовали. В запись пойдет то, что указано в ТекущийОбъект. А правите только Объект формы.
Если этот код должен срабатывать не только из формы, то вносить его надо в обработчик ПередЗаписью в модуле объекта.
user2107184; +1 Ответить
8. crazyveta 11.10.24 09:15 Сейчас в теме
(1)
&НаСервере
Функция ПроверкаСтатуса(СтарСтатус, Ингредиенты)
Статус = СтарСтатус;
Просмотр = Ложь;

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

Стр = Новый Структура("Статус, Просмотр", Статус, Просмотр);
Возврат Стр;
КонецФункции

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Структура = ПроверкаСтатуса(Объект.Статус, Объект.Ингредиенты);
ТекущийОбъект.Статус = Структура.Статус;

Если Структура.Просмотр = "Да" Тогда
Элементы.Статус.ТолькоПросмотр = Истина;
Иначе
Элементы.Статус.ТолькоПросмотр = Ложь;
КонецЕсли;
КонецПроцедуры
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. spacecraft 11.10.24 07:47 Сейчас в теме
(1) если нет далее логики изменения статуса, то долно отрабатывать в случае "двойной" записи из формы не закрывая форму документа.
Не тот обработчик использовали. В запись пойдет то, что указано в ТекущийОбъект. А правите только Объект формы.
Если этот код должен срабатывать не только из формы, то вносить его надо в обработчик ПередЗаписью в модуле объекта.
user2107184; +1 Ответить
5. crazyveta 11.10.24 07:52 Сейчас в теме
(4) изменила Объект.Статус на ТекущийОбъект.Статус и все заработало
8. crazyveta 11.10.24 09:15 Сейчас в теме
(1)
&НаСервере
Функция ПроверкаСтатуса(СтарСтатус, Ингредиенты)
Статус = СтарСтатус;
Просмотр = Ложь;

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

Стр = Новый Структура("Статус, Просмотр", Статус, Просмотр);
Возврат Стр;
КонецФункции

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Структура = ПроверкаСтатуса(Объект.Статус, Объект.Ингредиенты);
ТекущийОбъект.Статус = Структура.Статус;

Если Структура.Просмотр = "Да" Тогда
Элементы.Статус.ТолькоПросмотр = Истина;
Иначе
Элементы.Статус.ТолькоПросмотр = Ложь;
КонецЕсли;
КонецПроцедуры
2. user2107184 11.10.24 07:24 Сейчас в теме
Вторая строчка второго метода ни о чем не говорит?
3. crazyveta 11.10.24 07:30 Сейчас в теме
(2) ну так если выполняется условие, то я меняю это значение в блоке ЕСЛИ. и итоговое значение уже передаю обратно в первый метод

Ради проверки даже удалила эту строку. Ничего не изменилось
6. user2107184 11.10.24 08:17 Сейчас в теме
(3) А вот нельзя исправлять исходный код. Теперь никому непонятно, что же там было. А было там примерно следующее:
А = 1;
Если Б=2 И А=1 Тогда
...
7. crazyveta 11.10.24 09:10 Сейчас в теме
(6) нет, я убрала условие из ЕСЛИ, но логика осталась абсолютно такой же. ваш комментарий не решает проблему
9. user2107184 11.10.24 09:31 Сейчас в теме
(7) А разве я собирался решать твою проблему? Я говорил о том, что в коде заранее избыточная фигня написана.
10. crazyveta 11.10.24 09:58 Сейчас в теме
(9) я с вами на "ты" не переходила, не грубите
11. пользователь 11.10.24 10:36
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

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