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

Правильная обработка ошибки с возвратом в поле

Автор Yurec66, 24 авг 2022, 00:13

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

Yurec66

Никак не получается обработать ошибку. На форме есть поле "ЕдИзм" - типа Перечисление. Есть кнопка добавления данных в табличную часть. Нужно в событии нажатия на кнопку "Добавить" (перед началом добавления) Проверить, чтобы поле Единиц измерения не было пустым. Если пустое, то не разрешать добавлять запись и сделать активным это поле выбора единиц измерения.
&НаКлиенте
Процедура МестоХраненияПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)

Если Объект.ЕдиницаИзм.Пустая() Тогда
Сообщить("Укажите единицу измерения для товара.");
ЭтаФорма.ТекущийЭлемент = Элементы.ЕдиницаИзмерения;
КонецЕсли;
КонецПроцедуры

Чета как то кисло и не правильно выходит.

antoneus

В свойствах реквизита поле "Проверка заполнения" выставить в "Выдавать ошибку" и в процедуре МестоХраненияПередНачаломДобавления вызвать функцию ПроверитьЗаполнение().

Yurec66

А как прервать дальнейшее выполнение программы и активировать поле ввода единиц измерения? В приведенном выше коде сообщение появляется, но после все равно продолжается заполнение полей табличной части. Т.е. нужно этого не допустить.
   Есть метод "Сообщить пользователю" , но там не пойму как прописать реквизит в ".поле". Ведь ввод через перечисление не является реквизитом?

antoneus

Если не ПроверитьЗаполнение() Тогда
    Отказ = Истина;
    Возврат
КонецЕсли;

Yurec66

antoneus, Проверил, отчасти работает, Но. В зависимости от того, заполнено поле Единиц Измерения или нет, появляется видимость следующих элементов формы, для которых тоже установлена проверка на уровне системы. Они как бы и не видны еще, но ошибка по ним выводится. Тоже не айс...

Процедура МестоХраненияПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
    Если не ПроверитьЗаполнение() Тогда
       Отказ = Истина;
       Возврат
    КонецЕсли;   
   
    //Если Объект.ЕдиницаИзм.Пустая() Тогда
    //    Сообщить("Ошибка");
    //    ЭтаФорма.ТекущийЭлемент = Элементы.ЕдиницаИзмерения;
    //КонецЕсли;
КонецПроцедуры



antoneus

Ладно, пусть будет сообщение пользователю.

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

Yurec66

Прошу уточнить, этот код можно на это же событие повесить?
"МестоХраненияПередНачаломДобавления"

antoneus


Yurec66

Отлично, уже лучше. Но можно как то избавиться от дубля внизу ? Или это такой принцип работы системы 1С ?

LexaK

Yurec66, скорее всего у вас два сообщеия
СообщениеПользователю
и
Сообщить()  - вот это уберите
если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск