← Назад к вопросам
Обработчик ПередЗаписью с проверкой поля
1.0 Junior🔥 291 комментариев
#Объекты метаданных#Стандарты разработки
Условие
Реализуйте обработчик события "ПередЗаписью()" для документа с проверкой обязательного заполнения поля.
Требования:
- Проверить заполненность реквизита "Контрагент"
- Проверить, что сумма документа больше нуля
- Проверить, что табличная часть не пустая
- При ошибке — отменить запись и показать сообщение пользователю
Пример кода (структура)
Процедура ПередЗаписью(Отказ)
// Проверка контрагента
Если НЕ ЗначениеЗаполнено(Контрагент) Тогда
Сообщить("Не заполнен контрагент!");
Отказ = Истина;
КонецЕсли;
// Другие проверки...
КонецПроцедуры
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Решение: Обработчик ПередЗаписью с валидацией
Полная реализация
Процедура ПередЗаписью(Отказ)
// Проверка обязательных реквизитов документа
ПроверитьОбязательныеРеквизиты(Отказ);
// Если уже есть ошибка, прерываем дальнейшие проверки
Если Отказ Тогда
Возврат;
КонецЕсли;
// Проверка табличной части
ПроверитьТабличнуюЧасть(Отказ);
КонецПроцедуры
Процедура ПроверитьОбязательныеРеквизиты(Отказ)
// Проверка заполненности контрагента
Если НЕ ЗначениеЗаполнено(Контрагент) Тогда
ОбщегоНазначения.СообщитьОбОшибке("Не заполнен реквизит \"Контрагент\"!");
Отказ = Истина;
Возврат;
КонецЕсли;
// Проверка суммы документа (должна быть > 0)
РассчитатьСумму();
Если СуммаДокумента <= 0 Тогда
ОбщегоНазначения.СообщитьОбОшибке(
СтроковыеФункции.ПодставитьПараметрыСтроки(
"Сумма документа должна быть больше нуля (текущее значение: %1)",
СуммаДокумента
)
);
Отказ = Истина;
Возврат;
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьТабличнуюЧасть(Отказ)
// Проверка, что табличная часть не пустая
Если Товары.Количество() = 0 Тогда
ОбщегоНазначения.СообщитьОбОшибке("Документ должен содержать хотя бы одну строку!");
Отказ = Истина;
Возврат;
КонецЕсли;
// Дополнительная проверка каждой строки
Для каждого СтрокаТовара Из Товары Цикл
Если НЕ ЗначениеЗаполнено(СтрокаТовара.Номенклатура) Тогда
ОбщегоНазначения.СообщитьОбОшибке(
СтроковыеФункции.ПодставитьПараметрыСтроки(
"В строке %1 не указана номенклатура!",
СтрокаТовара.НомерСтроки
)
);
Отказ = Истина;
Возврат;
КонецЕсли;
Если СтрокаТовара.Количество <= 0 Тогда
ОбщегоНазначения.СообщитьОбОшибке(
СтроковыеФункции.ПодставитьПараметрыСтроки(
"В строке %1 количество должно быть больше нуля!",
СтрокаТовара.НомерСтроки
)
);
Отказ = Истина;
Возврат;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура РассчитатьСумму()
СуммаДокумента = 0;
Для каждого СтрокаТовара Из Товары Цикл
СуммаДокумента = СуммаДокумента + СтрокаТовара.Сумма;
КонецЦикла;
КонецПроцедуры
Ключевые моменты
Порядок проверок:
- Проверяем обязательные реквизиты (контрагент)
- Проверяем сумму документа
- Проверяем табличную часть
- На каждом шаге останавливаемся при ошибке
Правильное использование параметра Отказ:
- Устанавливаем
Отказ = Истинадля отмены записи - Используем
Возвратдля прерывания выполнения процедуры - Все проверки выполняются перед записью в БД
Информативные сообщения об ошибках:
- Используем
ОбщегоНазначения.СообщитьОбОшибке()вместоСообщить() - Указываем номер строки в ошибке табличной части
- Показываем конкретное значение суммы при ошибке