Как проверить табличную часть документа 1С на наличие ошибок с помощью запроса?

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

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

Этап 1: Проектирование логики проверки

Прежде чем приступать к написанию кода, важно правильно сформулировать алгоритм. Мы должны найти такие группы записей, которые нарушают бизнес-логику. В нашем случае это:

  1. Наличие более одной строки с одинаковым сотрудником.
  2. Ситуация, когда значение в поле Смена отлично от «2».

Если запрос вернет такие строки, мы будем считать, что в документе содержится ошибка заполнения. Разберем, как реализовать это с помощью механизма временных таблиц в Консоли запросов.

Этап 2: Реализация решения через временные таблицы

Использование временных таблиц позволяет нам сначала структурировать данные, а затем легко отобрать только те записи, которые требуют нашего внимания. Рассмотрим подробно структуру запроса:


ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Номенклатура КАК Сотрудник,
    РеализацияТоваровУслугТовары.Количество КАК Смена,
    КОЛИЧЕСТВО(РеализацияТоваровУслугТовары.Номенклатура) КАК КоличествоОдинаковых
ПОМЕСТИТЬ ВТ_КоличествоОдинаковыхСтрок
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
    РеализацияТоваровУслугТовары.Ссылка = &Ссылка
СГРУППИРОВАТЬ ПО
    РеализацияТоваровУслугТовары.Номенклатура,
    РеализацияТоваровУслугТовары.Количество;

ВЫБРАТЬ
    ВТ_КоличествоОдинаковыхСтрок.Сотрудник КАК Сотрудник
ИЗ
    ВТ_КоличествоОдинаковыхСтрок КАК ВТ_КоличествоОдинаковыхСтрок
ГДЕ
    ВТ_КоличествоОдинаковыхСтрок.Смена <> 2
    И ВТ_КоличествоОдинаковыхСтрок.КоличествоОдинаковых > 1

Разберем, что происходит в данном коде:

Этап 3: Анализ результатов и дополнительные рекомендации

После выполнения данного запроса, если выборка возвращает записи, значит, документ заполнен неверно. Если результат пуст — проверка пройдена успешно.

Практические советы при разработке проверок:

  1. Обработка пустых значений: Всегда учитывайте возможность попадания NULL или пустых ссылок в выборку. Используйте функцию ЕСТЬNULL(), чтобы избежать ошибок логики при сравнении с числовыми константами.
  2. Производительность: Если табличная часть содержит большое количество строк (сотни или тысячи), использование временных таблиц является наиболее предпочтительным способом оптимизации, так как индексация временных таблиц в 1С v8.3 значительно ускоряет выполнение сложных группировок.
  3. Место для проверки: Несмотря на то, что консоль запросов отлично подходит для тестирования, боевую логику лучше размещать в модуле объекта в процедуре ОбработкаПроверкиЗаполнения. Это гарантирует, что пользователь получит уведомление об ошибке непосредственно в интерфейсе программы перед записью документа.

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

← На главную