Часто в работе бухгалтера или программиста 1С возникает ситуация, когда документ проводится, несмотря на отсутствие критически важных данных, таких как количество или цена товара. Давайте разберемся, почему платформа 1С так себя ведет и как принудительно запретить проведение документа, если табличная часть заполнена некорректно.
Первым делом выясним причину. Платформа 1С выполняет автоматическую проверку заполнения только для тех реквизитов, у которых в конфигураторе установлено свойство Проверка заполнения в значение Выдавать ошибку. Если же разработчик конфигурации установил значение Не проверять, то система по умолчанию считает поле необязательным. Наличие суммы в документе при этом не является «сигналом» для платформы, что количество или цена должны быть заполнены.
Чтобы изменить это поведение без снятия конфигурации с поддержки, мы будем использовать механизм Расширения.
Для реализации контроля заполнения полей в табличной части Товары, воспользуемся обработчиком события ОбработкаПроверкиЗаполнения. Этот метод вызывается в модуле объекта перед записью или проведением документа. Мы можем программно «подсказать» системе, что поля Количество, Цена и Сумма должны быть проверены.
Рассмотрим шаг за шагом, как добавить проверку заполнения. Самый оптимальный способ — использовать аннотацию &Перед для перехвата стандартного процесса проверки.
Расширение конфигурации для вашего документа поступления.
&Перед("ОбработкаПроверкиЗаполнения")
Процедура Расширение_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
// Добавляем необходимые поля в список обязательных для проверки
ПроверяемыеРеквизиты.Добавить("Товары.Количество");
ПроверяемыеРеквизиты.Добавить("Товары.Цена");
ПроверяемыеРеквизиты.Добавить("Товары.Сумма");
КонецПроцедуры
Если в типовой конфигурации уже существуют сложные алгоритмы проверки, можно использовать аннотацию &После. В этом случае мы сначала даем отработать стандартному коду 1С, а затем принудительно добавляем свои поля в массив ПроверяемыеРеквизиты.
&После("ОбработкаПроверкиЗаполнения")
Процедура Расширение_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
// После выполнения типовых проверок дополняем список
ПроверяемыеРеквизиты.Добавить("Товары.Количество");
ПроверяемыеРеквизиты.Добавить("Товары.Цена");
КонецПроцедуры
Анализируя ситуацию, важно помнить о нескольких ключевых моментах:
ОбработкаПроверкиЗаполнения срабатывает только при действиях пользователя в интерфейсе (нажатие кнопки «Провести» или «Записать»). Если вы проводите документ программно, данный обработчик не сработает автоматически. В таком случае необходимо вызывать метод ПроверитьЗаполнение() принудительно.ПроверяемыеРеквизиты — это массив строк, содержащий имена реквизитов. Обращаясь к табличной части, мы используем конструкцию ИмяТабличнойЧасти.ИмяРеквизита.Использование этого метода позволяет поддерживать чистоту данных в учетной системе, оставаясь в рамках стандарта разработки на платформе 1С без вмешательства в исходный код конфигурации.