Почему в 1С проводятся документы поступления с пустыми количеством и ценой?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет Торговля и дистрибуция
← На главную

Часто в работе бухгалтера или программиста 1С возникает ситуация, когда документ проводится, несмотря на отсутствие критически важных данных, таких как количество или цена товара. Давайте разберемся, почему платформа 1С так себя ведет и как принудительно запретить проведение документа, если табличная часть заполнена некорректно.

Понимание механизма проверки заполнения

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

Чтобы изменить это поведение без снятия конфигурации с поддержки, мы будем использовать механизм Расширения.

Решение проблемы через расширение конфигурации

Для реализации контроля заполнения полей в табличной части Товары, воспользуемся обработчиком события ОбработкаПроверкиЗаполнения. Этот метод вызывается в модуле объекта перед записью или проведением документа. Мы можем программно «подсказать» системе, что поля Количество, Цена и Сумма должны быть проверены.

Реализация с помощью метода &Перед

Рассмотрим шаг за шагом, как добавить проверку заполнения. Самый оптимальный способ — использовать аннотацию &Перед для перехвата стандартного процесса проверки.

  1. Создайте новое Расширение конфигурации для вашего документа поступления.
  2. Добавьте в расширение модуль объекта нужного документа.
  3. Используйте следующий код для перехвата события:

&Перед("ОбработкаПроверкиЗаполнения")
Процедура Расширение_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    
    // Добавляем необходимые поля в список обязательных для проверки
    ПроверяемыеРеквизиты.Добавить("Товары.Количество");
    ПроверяемыеРеквизиты.Добавить("Товары.Цена");
    ПроверяемыеРеквизиты.Добавить("Товары.Сумма");
    
КонецПроцедуры

Альтернативный вариант с использованием метода &После

Если в типовой конфигурации уже существуют сложные алгоритмы проверки, можно использовать аннотацию &После. В этом случае мы сначала даем отработать стандартному коду 1С, а затем принудительно добавляем свои поля в массив ПроверяемыеРеквизиты.


&После("ОбработкаПроверкиЗаполнения")
Процедура Расширение_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    
    // После выполнения типовых проверок дополняем список
    ПроверяемыеРеквизиты.Добавить("Товары.Количество");
    ПроверяемыеРеквизиты.Добавить("Товары.Цена");
    
КонецПроцедуры

Важные замечания по работе механизма

Анализируя ситуацию, важно помнить о нескольких ключевых моментах:

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

← На главную